tesseract  3.04.00
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
intproto.h File Reference
#include "genericvector.h"
#include "matchdefs.h"
#include "mfoutline.h"
#include "protos.h"
#include "scrollview.h"
#include "unicharset.h"

Go to the source code of this file.

Classes

struct  CLASS_PRUNER_STRUCT
 
struct  INT_PROTO_STRUCT
 
struct  PROTO_SET_STRUCT
 
struct  INT_CLASS_STRUCT
 
struct  INT_TEMPLATES_STRUCT
 
struct  INT_FEATURE_STRUCT
 

Namespaces

 tesseract
 

Macros

#define PRUNER_X   0
 
#define PRUNER_Y   1
 
#define PRUNER_ANGLE   2
 
#define ANGLE_SHIFT   (0.0)
 
#define X_SHIFT   (0.5)
 
#define Y_SHIFT   (0.5)
 
#define MAX_PROTO_INDEX   24
 
#define BITS_PER_WERD   static_cast<int>(8 * sizeof(uinT32))
 
#define MAX_NUM_CONFIGS   64
 
#define MAX_NUM_PROTOS   512
 
#define PROTOS_PER_PROTO_SET   64
 
#define MAX_NUM_PROTO_SETS   (MAX_NUM_PROTOS / PROTOS_PER_PROTO_SET)
 
#define NUM_PP_PARAMS   3
 
#define NUM_PP_BUCKETS   64
 
#define NUM_CP_BUCKETS   24
 
#define CLASSES_PER_CP   32
 
#define NUM_BITS_PER_CLASS   2
 
#define CLASS_PRUNER_CLASS_MASK   (~(~0 << NUM_BITS_PER_CLASS))
 
#define CLASSES_PER_CP_WERD   (CLASSES_PER_CP / NUM_BITS_PER_CLASS)
 
#define PROTOS_PER_PP_WERD   BITS_PER_WERD
 
#define BITS_PER_CP_VECTOR   (CLASSES_PER_CP * NUM_BITS_PER_CLASS)
 
#define MAX_NUM_CLASS_PRUNERS
 
#define WERDS_PER_CP_VECTOR   (BITS_PER_CP_VECTOR / BITS_PER_WERD)
 
#define WERDS_PER_PP_VECTOR
 
#define WERDS_PER_PP
 
#define WERDS_PER_CP
 
#define WERDS_PER_CONFIG_VEC
 
#define MAX_NUM_INT_FEATURES   512
 
#define INT_CHAR_NORM_RANGE   256
 
#define MaxNumIntProtosIn(C)   (C->NumProtoSets * PROTOS_PER_PROTO_SET)
 
#define SetForProto(P)   (P / PROTOS_PER_PROTO_SET)
 
#define IndexForProto(P)   (P % PROTOS_PER_PROTO_SET)
 
#define ProtoForProtoId(C, P)
 
#define PPrunerWordIndexFor(I)
 
#define PPrunerBitIndexFor(I)   ((I) % PROTOS_PER_PP_WERD)
 
#define PPrunerMaskFor(I)   (1 << PPrunerBitIndexFor (I))
 
#define MaxNumClassesIn(T)   (T->NumClassPruners * CLASSES_PER_CP)
 
#define LegalClassId(c)   ((c) >= 0 && (c) <= MAX_CLASS_ID)
 
#define UnusedClassIdIn(T, c)   ((T)->Class[c] == NULL)
 
#define ClassForClassId(T, c)   ((T)->Class[c])
 
#define ClassPrunersFor(T)   ((T)->ClassPruner)
 
#define CPrunerIdFor(c)   ((c) / CLASSES_PER_CP)
 
#define CPrunerFor(T, c)   ((T)->ClassPruners[CPrunerIdFor(c)])
 
#define CPrunerWordIndexFor(c)   (((c) % CLASSES_PER_CP) / CLASSES_PER_CP_WERD)
 
#define CPrunerBitIndexFor(c)   (((c) % CLASSES_PER_CP) % CLASSES_PER_CP_WERD)
 
#define CPrunerMaskFor(L, c)   (((L)+1) << CPrunerBitIndexFor (c) * NUM_BITS_PER_CLASS)
 
#define PRINT_MATCH_SUMMARY   0x001
 
#define DISPLAY_FEATURE_MATCHES   0x002
 
#define DISPLAY_PROTO_MATCHES   0x004
 
#define PRINT_FEATURE_MATCHES   0x008
 
#define PRINT_PROTO_MATCHES   0x010
 
#define CLIP_MATCH_EVIDENCE   0x020
 
#define MatchDebuggingOn(D)   (D)
 
#define PrintMatchSummaryOn(D)   ((D) & PRINT_MATCH_SUMMARY)
 
#define DisplayFeatureMatchesOn(D)   ((D) & DISPLAY_FEATURE_MATCHES)
 
#define DisplayProtoMatchesOn(D)   ((D) & DISPLAY_PROTO_MATCHES)
 
#define PrintFeatureMatchesOn(D)   ((D) & PRINT_FEATURE_MATCHES)
 
#define PrintProtoMatchesOn(D)   ((D) & PRINT_PROTO_MATCHES)
 
#define ClipMatchEvidenceOn(D)   ((D) & CLIP_MATCH_EVIDENCE)
 

Typedefs

typedef struct INT_PROTO_STRUCTINT_PROTO
 
typedef uinT32 PROTO_PRUNER [NUM_PP_PARAMS][NUM_PP_BUCKETS][WERDS_PER_PP_VECTOR]
 
typedef struct PROTO_SET_STRUCTPROTO_SET
 
typedef uinT32 CONFIG_PRUNER [NUM_PP_PARAMS][NUM_PP_BUCKETS][4]
 
typedef struct INT_CLASS_STRUCTINT_CLASS
 
typedef struct
INT_TEMPLATES_STRUCT
INT_TEMPLATES
 
typedef INT_FEATURE_STRUCTINT_FEATURE
 
typedef INT_FEATURE_STRUCT INT_FEATURE_ARRAY [MAX_NUM_INT_FEATURES]
 

Enumerations

enum  IntmatcherDebugAction { IDA_ADAPTIVE, IDA_STATIC, IDA_SHAPE_INDEX, IDA_BOTH }
 

Functions

void AddIntClass (INT_TEMPLATES Templates, CLASS_ID ClassId, INT_CLASS Class)
 
int AddIntConfig (INT_CLASS Class)
 
int AddIntProto (INT_CLASS Class)
 
void AddProtoToClassPruner (PROTO Proto, CLASS_ID ClassId, INT_TEMPLATES Templates)
 
void AddProtoToProtoPruner (PROTO Proto, int ProtoId, INT_CLASS Class, bool debug)
 
uinT8 Bucket8For (FLOAT32 param, FLOAT32 offset, int num_buckets)
 
uinT16 Bucket16For (FLOAT32 param, FLOAT32 offset, int num_buckets)
 
uinT8 CircBucketFor (FLOAT32 param, FLOAT32 offset, int num_buckets)
 
void UpdateMatchDisplay ()
 
void ConvertConfig (BIT_VECTOR Config, int ConfigId, INT_CLASS Class)
 
void DisplayIntFeature (const INT_FEATURE_STRUCT *Feature, FLOAT32 Evidence)
 
void DisplayIntProto (INT_CLASS Class, PROTO_ID ProtoId, FLOAT32 Evidence)
 
INT_CLASS NewIntClass (int MaxNumProtos, int MaxNumConfigs)
 
INT_TEMPLATES NewIntTemplates ()
 
void free_int_templates (INT_TEMPLATES templates)
 
void ShowMatchDisplay ()
 
void tesseract::ClearFeatureSpaceWindow (NORM_METHOD norm_method, ScrollView *window)
 
void RenderIntFeature (ScrollView *window, const INT_FEATURE_STRUCT *Feature, ScrollView::Color color)
 
void InitIntMatchWindowIfReqd ()
 
void InitProtoDisplayWindowIfReqd ()
 
void InitFeatureDisplayWindowIfReqd ()
 
ScrollViewCreateFeatureSpaceWindow (const char *name, int xpos, int ypos)
 

Macro Definition Documentation

#define ANGLE_SHIFT   (0.0)

Definition at line 39 of file intproto.h.

#define BITS_PER_CP_VECTOR   (CLASSES_PER_CP * NUM_BITS_PER_CLASS)

Definition at line 58 of file intproto.h.

#define BITS_PER_WERD   static_cast<int>(8 * sizeof(uinT32))

Definition at line 44 of file intproto.h.

#define CLASS_PRUNER_CLASS_MASK   (~(~0 << NUM_BITS_PER_CLASS))

Definition at line 55 of file intproto.h.

#define CLASSES_PER_CP   32

Definition at line 53 of file intproto.h.

#define CLASSES_PER_CP_WERD   (CLASSES_PER_CP / NUM_BITS_PER_CLASS)

Definition at line 56 of file intproto.h.

#define ClassForClassId (   T,
 
)    ((T)->Class[c])

Definition at line 181 of file intproto.h.

#define ClassPrunersFor (   T)    ((T)->ClassPruner)

Definition at line 182 of file intproto.h.

#define CLIP_MATCH_EVIDENCE   0x020

Definition at line 195 of file intproto.h.

#define ClipMatchEvidenceOn (   D)    ((D) & CLIP_MATCH_EVIDENCE)

Definition at line 203 of file intproto.h.

#define CPrunerBitIndexFor (   c)    (((c) % CLASSES_PER_CP) % CLASSES_PER_CP_WERD)

Definition at line 186 of file intproto.h.

#define CPrunerFor (   T,
 
)    ((T)->ClassPruners[CPrunerIdFor(c)])

Definition at line 184 of file intproto.h.

#define CPrunerIdFor (   c)    ((c) / CLASSES_PER_CP)

Definition at line 183 of file intproto.h.

#define CPrunerMaskFor (   L,
 
)    (((L)+1) << CPrunerBitIndexFor (c) * NUM_BITS_PER_CLASS)

Definition at line 187 of file intproto.h.

#define CPrunerWordIndexFor (   c)    (((c) % CLASSES_PER_CP) / CLASSES_PER_CP_WERD)

Definition at line 185 of file intproto.h.

#define DISPLAY_FEATURE_MATCHES   0x002

Definition at line 191 of file intproto.h.

#define DISPLAY_PROTO_MATCHES   0x004

Definition at line 192 of file intproto.h.

#define DisplayFeatureMatchesOn (   D)    ((D) & DISPLAY_FEATURE_MATCHES)

Definition at line 199 of file intproto.h.

#define DisplayProtoMatchesOn (   D)    ((D) & DISPLAY_PROTO_MATCHES)

Definition at line 200 of file intproto.h.

#define IndexForProto (   P)    (P % PROTOS_PER_PROTO_SET)

Definition at line 170 of file intproto.h.

#define INT_CHAR_NORM_RANGE   256

Definition at line 133 of file intproto.h.

#define LegalClassId (   c)    ((c) >= 0 && (c) <= MAX_CLASS_ID)

Definition at line 179 of file intproto.h.

#define MatchDebuggingOn (   D)    (D)

Definition at line 197 of file intproto.h.

#define MAX_NUM_CLASS_PRUNERS
Value:
#define MAX_NUM_CLASSES
Definition: matchdefs.h:31
#define CLASSES_PER_CP
Definition: intproto.h:53

Definition at line 59 of file intproto.h.

#define MAX_NUM_CONFIGS   64

Definition at line 46 of file intproto.h.

#define MAX_NUM_INT_FEATURES   512

Definition at line 132 of file intproto.h.

#define MAX_NUM_PROTO_SETS   (MAX_NUM_PROTOS / PROTOS_PER_PROTO_SET)

Definition at line 49 of file intproto.h.

#define MAX_NUM_PROTOS   512

Definition at line 47 of file intproto.h.

#define MAX_PROTO_INDEX   24

Definition at line 43 of file intproto.h.

#define MaxNumClassesIn (   T)    (T->NumClassPruners * CLASSES_PER_CP)

Definition at line 178 of file intproto.h.

#define MaxNumIntProtosIn (   C)    (C->NumProtoSets * PROTOS_PER_PROTO_SET)

Macros

Definition at line 168 of file intproto.h.

#define NUM_BITS_PER_CLASS   2

Definition at line 54 of file intproto.h.

#define NUM_CP_BUCKETS   24

Definition at line 52 of file intproto.h.

#define NUM_PP_BUCKETS   64

Definition at line 51 of file intproto.h.

#define NUM_PP_PARAMS   3

Definition at line 50 of file intproto.h.

#define PPrunerBitIndexFor (   I)    ((I) % PROTOS_PER_PP_WERD)

Definition at line 175 of file intproto.h.

#define PPrunerMaskFor (   I)    (1 << PPrunerBitIndexFor (I))

Definition at line 176 of file intproto.h.

#define PPrunerWordIndexFor (   I)
Value:
#define PROTOS_PER_PROTO_SET
Definition: intproto.h:48
#define PROTOS_PER_PP_WERD
Definition: intproto.h:57

Definition at line 173 of file intproto.h.

#define PRINT_FEATURE_MATCHES   0x008

Definition at line 193 of file intproto.h.

#define PRINT_MATCH_SUMMARY   0x001

Definition at line 190 of file intproto.h.

#define PRINT_PROTO_MATCHES   0x010

Definition at line 194 of file intproto.h.

#define PrintFeatureMatchesOn (   D)    ((D) & PRINT_FEATURE_MATCHES)

Definition at line 201 of file intproto.h.

#define PrintMatchSummaryOn (   D)    ((D) & PRINT_MATCH_SUMMARY)

Definition at line 198 of file intproto.h.

#define PrintProtoMatchesOn (   D)    ((D) & PRINT_PROTO_MATCHES)

Definition at line 202 of file intproto.h.

#define ProtoForProtoId (   C,
 
)
Value:
(&((C->ProtoSets[SetForProto (P)])-> \
Protos [IndexForProto (P)]))
#define IndexForProto(P)
Definition: intproto.h:170
#define SetForProto(P)
Definition: intproto.h:169

Definition at line 171 of file intproto.h.

#define PROTOS_PER_PP_WERD   BITS_PER_WERD

Definition at line 57 of file intproto.h.

#define PROTOS_PER_PROTO_SET   64

Definition at line 48 of file intproto.h.

#define PRUNER_ANGLE   2

Definition at line 36 of file intproto.h.

#define PRUNER_X   0

Definition at line 34 of file intproto.h.

#define PRUNER_Y   1

Definition at line 35 of file intproto.h.

#define SetForProto (   P)    (P / PROTOS_PER_PROTO_SET)

Definition at line 169 of file intproto.h.

#define UnusedClassIdIn (   T,
 
)    ((T)->Class[c] == NULL)

Definition at line 180 of file intproto.h.

#define WERDS_PER_CONFIG_VEC
Value:
#define MAX_NUM_CONFIGS
Definition: intproto.h:46
#define BITS_PER_WERD
Definition: intproto.h:44

Definition at line 68 of file intproto.h.

#define WERDS_PER_CP
Value:
#define NUM_CP_BUCKETS
Definition: intproto.h:52
#define WERDS_PER_CP_VECTOR
Definition: intproto.h:61

Definition at line 66 of file intproto.h.

#define WERDS_PER_CP_VECTOR   (BITS_PER_CP_VECTOR / BITS_PER_WERD)

Definition at line 61 of file intproto.h.

#define WERDS_PER_PP
Value:
#define WERDS_PER_PP_VECTOR
Definition: intproto.h:62
#define NUM_PP_PARAMS
Definition: intproto.h:50
#define NUM_PP_BUCKETS
Definition: intproto.h:51

Definition at line 64 of file intproto.h.

#define WERDS_PER_PP_VECTOR
Value:
#define BITS_PER_WERD
Definition: intproto.h:44
#define PROTOS_PER_PROTO_SET
Definition: intproto.h:48

Definition at line 62 of file intproto.h.

#define X_SHIFT   (0.5)

Definition at line 40 of file intproto.h.

#define Y_SHIFT   (0.5)

Definition at line 41 of file intproto.h.

Typedef Documentation

typedef uinT32 CONFIG_PRUNER[NUM_PP_PARAMS][NUM_PP_BUCKETS][4]

Definition at line 103 of file intproto.h.

typedef struct INT_CLASS_STRUCT * INT_CLASS

Definition at line 153 of file intproto.h.

typedef INT_FEATURE_STRUCT INT_FEATURE_ARRAY[MAX_NUM_INT_FEATURES]

Definition at line 155 of file intproto.h.

typedef struct INT_PROTO_STRUCT * INT_PROTO

Definition at line 92 of file intproto.h.

typedef struct PROTO_SET_STRUCT * PROTO_SET

Enumeration Type Documentation

Enumerator
IDA_ADAPTIVE 
IDA_STATIC 
IDA_SHAPE_INDEX 
IDA_BOTH 

Definition at line 157 of file intproto.h.

157  {
158  IDA_ADAPTIVE,
159  IDA_STATIC,
161  IDA_BOTH
162 };

Function Documentation

void AddIntClass ( INT_TEMPLATES  Templates,
CLASS_ID  ClassId,
INT_CLASS  Class 
)

Public Function Prototypes

This routine adds a new class structure to a set of templates. Classes have to be added to Templates in the order of increasing ClassIds.

Parameters
Templatestemplates to add new class to
ClassIdclass id to associate new class with
Classclass data structure to add to templates

Globals: none

Note
Exceptions: none
History: Mon Feb 11 11:52:08 1991, DSJ, Created.

Definition at line 241 of file intproto.cpp.

241  {
242  int Pruner;
243 
244  assert (LegalClassId (ClassId));
245  if (ClassId != Templates->NumClasses) {
246  fprintf(stderr, "Please make sure that classes are added to templates");
247  fprintf(stderr, " in increasing order of ClassIds\n");
248  exit(1);
249  }
250  ClassForClassId (Templates, ClassId) = Class;
251  Templates->NumClasses++;
252 
253  if (Templates->NumClasses > MaxNumClassesIn (Templates)) {
254  Pruner = Templates->NumClassPruners++;
255  Templates->ClassPruners[Pruner] = new CLASS_PRUNER_STRUCT;
256  memset(Templates->ClassPruners[Pruner], 0, sizeof(CLASS_PRUNER_STRUCT));
257  }
258 } /* AddIntClass */
CLASS_PRUNER_STRUCT * ClassPruners[MAX_NUM_CLASS_PRUNERS]
Definition: intproto.h:125
#define LegalClassId(c)
Definition: intproto.h:179
#define MaxNumClassesIn(T)
Definition: intproto.h:178
#define ClassForClassId(T, c)
Definition: intproto.h:181
int AddIntConfig ( INT_CLASS  Class)

This routine returns the index of the next free config in Class.

Parameters
Classclass to add new configuration to

Globals: none

Returns
Index of next free config.
Note
Exceptions: none
History: Mon Feb 11 14:44:40 1991, DSJ, Created.

Definition at line 274 of file intproto.cpp.

274  {
275  int Index;
276 
277  assert(Class->NumConfigs < MAX_NUM_CONFIGS);
278 
279  Index = Class->NumConfigs++;
280  Class->ConfigLengths[Index] = 0;
281  return Index;
282 } /* AddIntConfig */
#define MAX_NUM_CONFIGS
Definition: intproto.h:46
uinT16 ConfigLengths[MAX_NUM_CONFIGS]
Definition: intproto.h:113
uinT8 NumConfigs
Definition: intproto.h:110
int AddIntProto ( INT_CLASS  Class)

This routine allocates the next free proto in Class and returns its index.

Parameters
Classclass to add new proto to

Globals: none

Returns
Proto index of new proto.
Note
Exceptions: none
History: Mon Feb 11 13:26:41 1991, DSJ, Created.

Definition at line 298 of file intproto.cpp.

298  {
299  int Index;
300  int ProtoSetId;
301  PROTO_SET ProtoSet;
302  INT_PROTO Proto;
303  register uinT32 *Word;
304 
305  if (Class->NumProtos >= MAX_NUM_PROTOS)
306  return (NO_PROTO);
307 
308  Index = Class->NumProtos++;
309 
310  if (Class->NumProtos > MaxNumIntProtosIn(Class)) {
311  ProtoSetId = Class->NumProtoSets++;
312 
313  ProtoSet = (PROTO_SET) Emalloc(sizeof(PROTO_SET_STRUCT));
314  Class->ProtoSets[ProtoSetId] = ProtoSet;
315  memset(ProtoSet, 0, sizeof(*ProtoSet));
316 
317  /* reallocate space for the proto lengths and install in class */
318  Class->ProtoLengths =
319  (uinT8 *)Erealloc(Class->ProtoLengths,
320  MaxNumIntProtosIn(Class) * sizeof(uinT8));
321  memset(&Class->ProtoLengths[Index], 0,
322  sizeof(*Class->ProtoLengths) * (MaxNumIntProtosIn(Class) - Index));
323  }
324 
325  /* initialize proto so its length is zero and it isn't in any configs */
326  Class->ProtoLengths[Index] = 0;
327  Proto = ProtoForProtoId (Class, Index);
328  for (Word = Proto->Configs;
329  Word < Proto->Configs + WERDS_PER_CONFIG_VEC; *Word++ = 0);
330 
331  return (Index);
332 
333 } /* AddIntProto */
#define MaxNumIntProtosIn(C)
Definition: intproto.h:168
PROTO_SET ProtoSets[MAX_NUM_PROTO_SETS]
Definition: intproto.h:111
#define ProtoForProtoId(C, P)
Definition: intproto.h:171
unsigned int uinT32
Definition: host.h:103
void * Erealloc(void *ptr, int size)
Definition: emalloc.cpp:70
#define NO_PROTO
Definition: matchdefs.h:42
void * Emalloc(int Size)
Definition: emalloc.cpp:35
uinT8 NumProtoSets
Definition: intproto.h:109
#define MAX_NUM_PROTOS
Definition: intproto.h:47
uinT8 * ProtoLengths
Definition: intproto.h:112
#define WERDS_PER_CONFIG_VEC
Definition: intproto.h:68
uinT16 NumProtos
Definition: intproto.h:108
struct PROTO_SET_STRUCT * PROTO_SET
uinT32 Configs[WERDS_PER_CONFIG_VEC]
Definition: intproto.h:86
unsigned char uinT8
Definition: host.h:99
void AddProtoToClassPruner ( PROTO  Proto,
CLASS_ID  ClassId,
INT_TEMPLATES  Templates 
)

Definition at line 337 of file intproto.cpp.

353 {
354  CLASS_PRUNER_STRUCT* Pruner;
355  uinT32 ClassMask;
356  uinT32 ClassCount;
357  uinT32 WordIndex;
358  int Level;
359  FLOAT32 EndPad, SidePad, AnglePad;
360  TABLE_FILLER TableFiller;
361  FILL_SPEC FillSpec;
362 
363  Pruner = CPrunerFor (Templates, ClassId);
364  WordIndex = CPrunerWordIndexFor (ClassId);
365  ClassMask = CPrunerMaskFor (MAX_LEVEL, ClassId);
366 
367  for (Level = classify_num_cp_levels - 1; Level >= 0; Level--) {
368  GetCPPadsForLevel(Level, &EndPad, &SidePad, &AnglePad);
369  ClassCount = CPrunerMaskFor (Level, ClassId);
370  InitTableFiller(EndPad, SidePad, AnglePad, Proto, &TableFiller);
371 
372  while (!FillerDone (&TableFiller)) {
373  GetNextFill(&TableFiller, &FillSpec);
374  DoFill(&FillSpec, Pruner, ClassMask, ClassCount, WordIndex);
375  }
376  }
377 } /* AddProtoToClassPruner */
#define MAX_LEVEL
float FLOAT32
Definition: host.h:111
int classify_num_cp_levels
Definition: intproto.cpp:190
#define CPrunerWordIndexFor(c)
Definition: intproto.h:185
void DoFill(FILL_SPEC *FillSpec, CLASS_PRUNER_STRUCT *Pruner, register uinT32 ClassMask, register uinT32 ClassCount, register uinT32 WordIndex)
Definition: intproto.cpp:1264
unsigned int uinT32
Definition: host.h:103
#define CPrunerFor(T, c)
Definition: intproto.h:184
void GetCPPadsForLevel(int Level, FLOAT32 *EndPad, FLOAT32 *SidePad, FLOAT32 *AnglePad)
Definition: intproto.cpp:1498
void InitTableFiller(FLOAT32 EndPad, FLOAT32 SidePad, FLOAT32 AnglePad, PROTO Proto, TABLE_FILLER *Filler)
Definition: intproto.cpp:1644
void GetNextFill(TABLE_FILLER *Filler, FILL_SPEC *Fill)
Definition: intproto.cpp:1576
#define CPrunerMaskFor(L, c)
Definition: intproto.h:187
BOOL8 FillerDone(TABLE_FILLER *Filler)
Definition: intproto.cpp:1314
void AddProtoToProtoPruner ( PROTO  Proto,
int  ProtoId,
INT_CLASS  Class,
bool  debug 
)

Definition at line 381 of file intproto.cpp.

382  {
383 /*
384  ** Parameters:
385  ** Proto floating-pt proto to be added to proto pruner
386  ** ProtoId id of proto
387  ** Class integer class that contains desired proto pruner
388  ** Globals: none
389  ** Operation: This routine updates the proto pruner lookup tables
390  ** for Class to include a new proto identified by ProtoId
391  ** and described by Proto.
392  ** Return: none
393  ** Exceptions: none
394  ** History: Fri Feb 8 13:07:19 1991, DSJ, Created.
395  */
396  FLOAT32 Angle, X, Y, Length;
397  FLOAT32 Pad;
398  int Index;
399  PROTO_SET ProtoSet;
400 
401  if (ProtoId >= Class->NumProtos)
402  cprintf("AddProtoToProtoPruner:assert failed: %d < %d",
403  ProtoId, Class->NumProtos);
404  assert(ProtoId < Class->NumProtos);
405 
406  Index = IndexForProto (ProtoId);
407  ProtoSet = Class->ProtoSets[SetForProto (ProtoId)];
408 
409  Angle = Proto->Angle;
410 #ifndef _WIN32
411  assert(!isnan(Angle));
412 #endif
413 
414  FillPPCircularBits (ProtoSet->ProtoPruner[PRUNER_ANGLE], Index,
415  Angle + ANGLE_SHIFT, classify_pp_angle_pad / 360.0,
416  debug);
417 
418  Angle *= 2.0 * PI;
419  Length = Proto->Length;
420 
421  X = Proto->X + X_SHIFT;
422  Pad = MAX (fabs (cos (Angle)) * (Length / 2.0 +
425  fabs (sin (Angle)) * (classify_pp_side_pad *
427 
428  FillPPLinearBits(ProtoSet->ProtoPruner[PRUNER_X], Index, X, Pad, debug);
429 
430  Y = Proto->Y + Y_SHIFT;
431  Pad = MAX (fabs (sin (Angle)) * (Length / 2.0 +
434  fabs (cos (Angle)) * (classify_pp_side_pad *
436 
437  FillPPLinearBits(ProtoSet->ProtoPruner[PRUNER_Y], Index, Y, Pad, debug);
438 } /* AddProtoToProtoPruner */
#define PI
Definition: const.h:19
#define X_SHIFT
Definition: intproto.h:40
#define ANGLE_SHIFT
Definition: intproto.h:39
float FLOAT32
Definition: host.h:111
#define MAX(x, y)
Definition: ndminx.h:24
#define PRUNER_ANGLE
Definition: intproto.h:36
#define IndexForProto(P)
Definition: intproto.h:170
#define Y_SHIFT
Definition: intproto.h:41
double classify_pp_end_pad
Definition: intproto.cpp:204
#define PRUNER_Y
Definition: intproto.h:35
PROTO_SET ProtoSets[MAX_NUM_PROTO_SETS]
Definition: intproto.h:111
double classify_pp_side_pad
Definition: intproto.cpp:205
FLOAT32 X
Definition: protos.h:47
FLOAT32 Angle
Definition: protos.h:49
double classify_pp_angle_pad
Definition: intproto.cpp:203
#define SetForProto(P)
Definition: intproto.h:169
void FillPPCircularBits(uinT32 ParamTable[NUM_PP_BUCKETS][WERDS_PER_PP_VECTOR], int Bit, FLOAT32 Center, FLOAT32 Spread, bool debug)
Definition: intproto.cpp:1338
#define GetPicoFeatureLength()
Definition: picofeat.h:59
#define PRUNER_X
Definition: intproto.h:34
#define isnan(x)
Definition: mathfix.h:31
FLOAT32 Length
Definition: protos.h:50
PROTO_PRUNER ProtoPruner
Definition: intproto.h:96
void FillPPLinearBits(uinT32 ParamTable[NUM_PP_BUCKETS][WERDS_PER_PP_VECTOR], int Bit, FLOAT32 Center, FLOAT32 Spread, bool debug)
Definition: intproto.cpp:1382
void cprintf(const char *format,...)
Definition: callcpp.cpp:40
uinT16 NumProtos
Definition: intproto.h:108
FLOAT32 Y
Definition: protos.h:48
uinT16 Bucket16For ( FLOAT32  param,
FLOAT32  offset,
int  num_buckets 
)

Definition at line 449 of file intproto.cpp.

449  {
450  int bucket = IntCastRounded(MapParam(param, offset, num_buckets));
451  return static_cast<uinT16>(ClipToRange(bucket, 0, num_buckets - 1));
452 }
T ClipToRange(const T &x, const T &lower_bound, const T &upper_bound)
Definition: helpers.h:115
#define MapParam(P, O, N)
Definition: intproto.cpp:125
int IntCastRounded(double x)
Definition: helpers.h:172
unsigned short uinT16
Definition: host.h:101
uinT8 Bucket8For ( FLOAT32  param,
FLOAT32  offset,
int  num_buckets 
)

Definition at line 445 of file intproto.cpp.

445  {
446  int bucket = IntCastRounded(MapParam(param, offset, num_buckets));
447  return static_cast<uinT8>(ClipToRange(bucket, 0, num_buckets - 1));
448 }
T ClipToRange(const T &x, const T &lower_bound, const T &upper_bound)
Definition: helpers.h:115
#define MapParam(P, O, N)
Definition: intproto.cpp:125
int IntCastRounded(double x)
Definition: helpers.h:172
unsigned char uinT8
Definition: host.h:99
uinT8 CircBucketFor ( FLOAT32  param,
FLOAT32  offset,
int  num_buckets 
)

Definition at line 458 of file intproto.cpp.

458  {
459  int bucket = IntCastRounded(MapParam(param, offset, num_buckets));
460  return static_cast<uinT8>(Modulo(bucket, num_buckets));
461 } /* CircBucketFor */
int Modulo(int a, int b)
Definition: helpers.h:157
#define MapParam(P, O, N)
Definition: intproto.cpp:125
int IntCastRounded(double x)
Definition: helpers.h:172
unsigned char uinT8
Definition: host.h:99
void ConvertConfig ( BIT_VECTOR  Config,
int  ConfigId,
INT_CLASS  Class 
)

Definition at line 484 of file intproto.cpp.

484  {
485 /*
486  ** Parameters:
487  ** Config config to be added to class
488  ** ConfigId id to be used for new config
489  ** Class class to add new config to
490  ** Globals: none
491  ** Operation: This operation updates the config vectors of all protos
492  ** in Class to indicate that the protos with 1's in Config
493  ** belong to a new configuration identified by ConfigId.
494  ** It is assumed that the length of the Config bit vector is
495  ** equal to the number of protos in Class.
496  ** Return: none
497  ** Exceptions: none
498  ** History: Mon Feb 11 14:57:31 1991, DSJ, Created.
499  */
500  int ProtoId;
501  INT_PROTO Proto;
502  int TotalLength;
503 
504  for (ProtoId = 0, TotalLength = 0;
505  ProtoId < Class->NumProtos; ProtoId++) {
506  if (test_bit(Config, ProtoId)) {
507  Proto = ProtoForProtoId(Class, ProtoId);
508  SET_BIT(Proto->Configs, ConfigId);
509  TotalLength += Class->ProtoLengths[ProtoId];
510  }
511  }
512  Class->ConfigLengths[ConfigId] = TotalLength;
513 } /* ConvertConfig */
CLUSTERCONFIG Config
uinT16 ConfigLengths[MAX_NUM_CONFIGS]
Definition: intproto.h:113
#define ProtoForProtoId(C, P)
Definition: intproto.h:171
#define test_bit(array, bit)
Definition: bitvec.h:61
#define SET_BIT(array, bit)
Definition: bitvec.h:57
uinT8 * ProtoLengths
Definition: intproto.h:112
uinT16 NumProtos
Definition: intproto.h:108
uinT32 Configs[WERDS_PER_CONFIG_VEC]
Definition: intproto.h:86
ScrollView* CreateFeatureSpaceWindow ( const char *  name,
int  xpos,
int  ypos 
)

Definition at line 1976 of file intproto.cpp.

1976  {
1977  return new ScrollView(name, xpos, ypos, 520, 520, 260, 260, true);
1978 }
name_table name
void DisplayIntFeature ( const INT_FEATURE_STRUCT Feature,
FLOAT32  Evidence 
)

Definition at line 628 of file intproto.cpp.

628  {
629 /*
630  ** Parameters:
631  ** Feature pico-feature to be displayed
632  ** Evidence best evidence for this feature (0-1)
633  ** Globals:
634  ** FeatureShapes global display list for features
635  ** Operation: This routine renders the specified feature into a
636  ** global display list.
637  ** Return: none
638  ** Exceptions: none
639  ** History: Thu Mar 21 14:45:04 1991, DSJ, Created.
640  */
641  ScrollView::Color color = GetMatchColorFor(Evidence);
642  RenderIntFeature(IntMatchWindow, Feature, color);
643  if (FeatureDisplayWindow) {
644  RenderIntFeature(FeatureDisplayWindow, Feature, color);
645  }
646 } /* DisplayIntFeature */
ScrollView * IntMatchWindow
Definition: intproto.cpp:181
void RenderIntFeature(ScrollView *window, const INT_FEATURE_STRUCT *Feature, ScrollView::Color color)
Definition: intproto.cpp:1808
ScrollView::Color GetMatchColorFor(FLOAT32 Evidence)
Definition: intproto.cpp:1550
ScrollView * FeatureDisplayWindow
Definition: intproto.cpp:182
void DisplayIntProto ( INT_CLASS  Class,
PROTO_ID  ProtoId,
FLOAT32  Evidence 
)

Definition at line 650 of file intproto.cpp.

650  {
651 /*
652  ** Parameters:
653  ** Class class to take proto from
654  ** ProtoId id of proto in Class to be displayed
655  ** Evidence total evidence for proto (0-1)
656  ** Globals:
657  ** ProtoShapes global display list for protos
658  ** Operation: This routine renders the specified proto into a
659  ** global display list.
660  ** Return: none
661  ** Exceptions: none
662  ** History: Thu Mar 21 14:45:04 1991, DSJ, Created.
663  */
664  ScrollView::Color color = GetMatchColorFor(Evidence);
665  RenderIntProto(IntMatchWindow, Class, ProtoId, color);
666  if (ProtoDisplayWindow) {
667  RenderIntProto(ProtoDisplayWindow, Class, ProtoId, color);
668  }
669 } /* DisplayIntProto */
ScrollView * ProtoDisplayWindow
Definition: intproto.cpp:183
ScrollView * IntMatchWindow
Definition: intproto.cpp:181
void RenderIntProto(ScrollView *window, INT_CLASS Class, PROTO_ID ProtoId, ScrollView::Color color)
Definition: intproto.cpp:1845
ScrollView::Color GetMatchColorFor(FLOAT32 Evidence)
Definition: intproto.cpp:1550
void free_int_templates ( INT_TEMPLATES  templates)

Definition at line 764 of file intproto.cpp.

764  {
765  int i;
766 
767  for (i = 0; i < templates->NumClasses; i++)
768  free_int_class(templates->Class[i]);
769  for (i = 0; i < templates->NumClassPruners; i++)
770  delete templates->ClassPruners[i];
771  Efree(templates);
772 }
CLASS_PRUNER_STRUCT * ClassPruners[MAX_NUM_CLASS_PRUNERS]
Definition: intproto.h:125
INT_CLASS Class[MAX_NUM_CLASSES]
Definition: intproto.h:124
void free_int_class(INT_CLASS int_class)
Definition: intproto.cpp:725
void Efree(void *ptr)
Definition: emalloc.cpp:85
void InitFeatureDisplayWindowIfReqd ( )

Initializes the feature display window if it is not already initialized.

Definition at line 1967 of file intproto.cpp.

1967  {
1968  if (FeatureDisplayWindow == NULL) {
1969  FeatureDisplayWindow = CreateFeatureSpaceWindow("FeatureDisplayWindow",
1970  50, 700);
1971  }
1972 }
#define NULL
Definition: host.h:144
ScrollView * CreateFeatureSpaceWindow(const char *name, int xpos, int ypos)
Definition: intproto.cpp:1976
ScrollView * FeatureDisplayWindow
Definition: intproto.cpp:182
void InitIntMatchWindowIfReqd ( )

Initializes the int matcher window if it is not already initialized.

Definition at line 1935 of file intproto.cpp.

1935  {
1936  if (IntMatchWindow == NULL) {
1937  IntMatchWindow = CreateFeatureSpaceWindow("IntMatchWindow", 50, 200);
1938  SVMenuNode* popup_menu = new SVMenuNode();
1939 
1940  popup_menu->AddChild("Debug Adapted classes", IDA_ADAPTIVE,
1941  "x", "Class to debug");
1942  popup_menu->AddChild("Debug Static classes", IDA_STATIC,
1943  "x", "Class to debug");
1944  popup_menu->AddChild("Debug Both", IDA_BOTH,
1945  "x", "Class to debug");
1946  popup_menu->AddChild("Debug Shape Index", IDA_SHAPE_INDEX,
1947  "0", "Index to debug");
1948  popup_menu->BuildMenu(IntMatchWindow, false);
1949  }
1950 }
void BuildMenu(ScrollView *sv, bool menu_bar=true)
Definition: svmnode.cpp:121
ScrollView * IntMatchWindow
Definition: intproto.cpp:181
#define NULL
Definition: host.h:144
ScrollView * CreateFeatureSpaceWindow(const char *name, int xpos, int ypos)
Definition: intproto.cpp:1976
SVMenuNode * AddChild(const char *txt)
Definition: svmnode.cpp:59
void InitProtoDisplayWindowIfReqd ( )

Initializes the proto display window if it is not already initialized.

Definition at line 1956 of file intproto.cpp.

1956  {
1957  if (ProtoDisplayWindow == NULL) {
1958  ProtoDisplayWindow = CreateFeatureSpaceWindow("ProtoDisplayWindow",
1959  550, 200);
1960  }
1961 }
ScrollView * ProtoDisplayWindow
Definition: intproto.cpp:183
#define NULL
Definition: host.h:144
ScrollView * CreateFeatureSpaceWindow(const char *name, int xpos, int ypos)
Definition: intproto.cpp:1976
INT_CLASS NewIntClass ( int  MaxNumProtos,
int  MaxNumConfigs 
)

Definition at line 673 of file intproto.cpp.

673  {
674 /*
675  ** Parameters:
676  ** MaxNumProtos number of protos to allocate space for
677  ** MaxNumConfigs number of configs to allocate space for
678  ** Globals: none
679  ** Operation: This routine creates a new integer class data structure
680  ** and returns it. Sufficient space is allocated
681  ** to handle the specified number of protos and configs.
682  ** Return: New class created.
683  ** Exceptions: none
684  ** History: Fri Feb 8 10:51:23 1991, DSJ, Created.
685  */
686  INT_CLASS Class;
687  PROTO_SET ProtoSet;
688  int i;
689 
690  assert(MaxNumConfigs <= MAX_NUM_CONFIGS);
691 
692  Class = (INT_CLASS) Emalloc(sizeof(INT_CLASS_STRUCT));
693  Class->NumProtoSets = ((MaxNumProtos + PROTOS_PER_PROTO_SET - 1) /
695 
696  assert(Class->NumProtoSets <= MAX_NUM_PROTO_SETS);
697 
698  Class->NumProtos = 0;
699  Class->NumConfigs = 0;
700 
701  for (i = 0; i < Class->NumProtoSets; i++) {
702  /* allocate space for a proto set, install in class, and initialize */
703  ProtoSet = (PROTO_SET) Emalloc(sizeof(PROTO_SET_STRUCT));
704  memset(ProtoSet, 0, sizeof(*ProtoSet));
705  Class->ProtoSets[i] = ProtoSet;
706 
707  /* allocate space for the proto lengths and install in class */
708  }
709  if (MaxNumIntProtosIn (Class) > 0) {
710  Class->ProtoLengths =
711  (uinT8 *)Emalloc(MaxNumIntProtosIn (Class) * sizeof (uinT8));
712  memset(Class->ProtoLengths, 0,
713  MaxNumIntProtosIn(Class) * sizeof(*Class->ProtoLengths));
714  } else {
715  Class->ProtoLengths = NULL;
716  }
717  memset(Class->ConfigLengths, 0, sizeof(Class->ConfigLengths));
718 
719  return (Class);
720 
721 } /* NewIntClass */
#define MaxNumIntProtosIn(C)
Definition: intproto.h:168
#define MAX_NUM_CONFIGS
Definition: intproto.h:46
struct INT_CLASS_STRUCT * INT_CLASS
uinT16 ConfigLengths[MAX_NUM_CONFIGS]
Definition: intproto.h:113
PROTO_SET ProtoSets[MAX_NUM_PROTO_SETS]
Definition: intproto.h:111
#define MAX_NUM_PROTO_SETS
Definition: intproto.h:49
void * Emalloc(int Size)
Definition: emalloc.cpp:35
uinT8 NumProtoSets
Definition: intproto.h:109
#define PROTOS_PER_PROTO_SET
Definition: intproto.h:48
uinT8 NumConfigs
Definition: intproto.h:110
#define NULL
Definition: host.h:144
uinT8 * ProtoLengths
Definition: intproto.h:112
uinT16 NumProtos
Definition: intproto.h:108
struct PROTO_SET_STRUCT * PROTO_SET
unsigned char uinT8
Definition: host.h:99
INT_TEMPLATES NewIntTemplates ( )

Definition at line 739 of file intproto.cpp.

739  {
740 /*
741  ** Parameters: none
742  ** Globals: none
743  ** Operation: This routine allocates a new set of integer templates
744  ** initialized to hold 0 classes.
745  ** Return: The integer templates created.
746  ** Exceptions: none
747  ** History: Fri Feb 8 08:38:51 1991, DSJ, Created.
748  */
749  INT_TEMPLATES T;
750  int i;
751 
752  T = (INT_TEMPLATES) Emalloc (sizeof (INT_TEMPLATES_STRUCT));
753  T->NumClasses = 0;
754  T->NumClassPruners = 0;
755 
756  for (i = 0; i < MAX_NUM_CLASSES; i++)
757  ClassForClassId (T, i) = NULL;
758 
759  return (T);
760 } /* NewIntTemplates */
#define MAX_NUM_CLASSES
Definition: matchdefs.h:31
struct INT_TEMPLATES_STRUCT * INT_TEMPLATES
#define ClassForClassId(T, c)
Definition: intproto.h:181
void * Emalloc(int Size)
Definition: emalloc.cpp:35
#define NULL
Definition: host.h:144
void RenderIntFeature ( ScrollView window,
const INT_FEATURE_STRUCT Feature,
ScrollView::Color  color 
)

Definition at line 1808 of file intproto.cpp.

1809  {
1810  FLOAT32 X, Y, Dx, Dy, Length;
1811 
1812  window->Pen(color);
1813  assert(Feature != NULL);
1814  assert(color != 0);
1815 
1816  X = Feature->X;
1817  Y = Feature->Y;
1818  Length = GetPicoFeatureLength() * 0.7 * INT_CHAR_NORM_RANGE;
1819  // The -PI has no significant effect here, but the value of Theta is computed
1820  // using BinaryAnglePlusPi in intfx.cpp.
1821  Dx = (Length / 2.0) * cos((Feature->Theta / 256.0) * 2.0 * PI - PI);
1822  Dy = (Length / 2.0) * sin((Feature->Theta / 256.0) * 2.0 * PI - PI);
1823 
1824  window->SetCursor(X, Y);
1825  window->DrawTo(X + Dx, Y + Dy);
1826 } /* RenderIntFeature */
#define PI
Definition: const.h:19
void Pen(Color color)
Definition: scrollview.cpp:726
#define INT_CHAR_NORM_RANGE
Definition: intproto.h:133
float FLOAT32
Definition: host.h:111
void DrawTo(int x, int y)
Definition: scrollview.cpp:531
void SetCursor(int x, int y)
Definition: scrollview.cpp:525
#define GetPicoFeatureLength()
Definition: picofeat.h:59
#define NULL
Definition: host.h:144
void ShowMatchDisplay ( )
void UpdateMatchDisplay ( )

Definition at line 466 of file intproto.cpp.

466  {
467 /*
468  ** Parameters: none
469  ** Globals:
470  ** FeatureShapes display list for features
471  ** ProtoShapes display list for protos
472  ** Operation: This routine clears the global feature and proto
473  ** display lists.
474  ** Return: none
475  ** Exceptions: none
476  ** History: Thu Mar 21 15:40:19 1991, DSJ, Created.
477  */
478  if (IntMatchWindow != NULL)
480 } /* ClearMatchDisplay */
static void Update()
Definition: scrollview.cpp:715
ScrollView * IntMatchWindow
Definition: intproto.cpp:181
#define NULL
Definition: host.h:144