FEDRA emulsion software from the OPERA Collaboration
AcqMarksScanner Class Reference

#include <AcqMarksScanner.h>

Inheritance diagram for AcqMarksScanner:
Collaboration diagram for AcqMarksScanner:

Public Member Functions

 AcqMarksScanner ()
 
bool GotoMark (int Id)
 
bool ScanMark (float *X=NULL, float *Y=NULL, float *Z=NULL)
 
bool ScanMarks ()
 
int ScanView (float Z0, float DZ)
 
bool SearchMark (float *X=NULL, float *Y=NULL, float *Z=NULL)
 
bool SearchMarkFast (float *X=NULL, float *Y=NULL, float *Z=NULL)
 
bool SetMapext (char *mapext)
 
bool SetPointers (AcqStage1 *stg, AcqOdyssey *ody)
 
virtual ~AcqMarksScanner ()
 

Public Attributes

EdbAffine2DeAffine2D
 
EdbAreaeArea
 
EdbMarksSeteFoundMarksSet
 
EdbMarksSeteMarksSet
 
AcqOdysseyFG
 
float FPS
 
bool IsValid
 
int Layers
 
float MarkDiameter
 
float MarkDiameterTolerance
 
int Side
 
AcqStage1ST
 
float StepX
 
float StepY
 
int Threshold
 
int ViewsToScan
 
float XYScanSpeed
 

Constructor & Destructor Documentation

◆ AcqMarksScanner()

AcqMarksScanner::AcqMarksScanner ( )
19{
20 ST=NULL; FG=NULL;
23 Side=-1;
24 IsValid=0;
25 FPS=200.;
26 Layers=5;
27 Threshold=190;
28 MarkDiameter=80.0;
30 ViewsToScan=100; //10x10 views -> 3x3mm search area
31 XYScanSpeed=10000; // [microns/s]
32
33}
float FPS
Definition: AcqMarksScanner.h:47
float XYScanSpeed
Definition: AcqMarksScanner.h:54
AcqStage1 * ST
Definition: AcqMarksScanner.h:43
AcqOdyssey * FG
Definition: AcqMarksScanner.h:44
EdbMarksSet * eMarksSet
Definition: AcqMarksScanner.h:40
float MarkDiameter
Definition: AcqMarksScanner.h:50
float MarkDiameterTolerance
Definition: AcqMarksScanner.h:51
int Layers
Definition: AcqMarksScanner.h:48
EdbMarksSet * eFoundMarksSet
Definition: AcqMarksScanner.h:41
int ViewsToScan
Definition: AcqMarksScanner.h:52
int Threshold
Definition: AcqMarksScanner.h:49
bool IsValid
Definition: AcqMarksScanner.h:46
Definition: EdbFiducial.h:88
Definition: Side.h:11
#define NULL
Definition: nidaqmx.h:84

◆ ~AcqMarksScanner()

AcqMarksScanner::~AcqMarksScanner ( )
virtual
37{
38 delete eMarksSet;
39 delete eFoundMarksSet;
40}

Member Function Documentation

◆ GotoMark()

bool AcqMarksScanner::GotoMark ( int  Id)
78{
79 //Moves stage to a given mark
80 // the coordinates are taken from the MarkSet
81
82 float X,Y,Z;
83 int res;
84 if(Id<0 || Id>=eMarksSet->GetStage()->N())
85 {
86 printf("Mark Id %d is out of range [0,%d]",Id,eMarksSet->GetStage()->N()-1);
87 return false;
88 }
89 if(!ST)
90 {
91 printf("No pointer to stage!\n");
92 return false;
93 }
94 X=eMarksSet->GetStage()->At(Id)->X();
95 Y=eMarksSet->GetStage()->At(Id)->Y();
96 Z=ST->Z->Reference;
98 printf("Going to Mark %d at (%f,%f,%f)..",Id,X,Y,Z);
99 fflush(stdout);
100 ST->X->PosMove(X,1e7,1e7);
101 ST->Y->PosMove(Y,1e7,1e7);
102 res=ST->X->WaitForMoveComplete(1e4);
103 res*=ST->Y->WaitForMoveComplete(1e4);
104 ST->Z->PosMove(Z,1e6,1e6);
105 res*=ST->Z->WaitForMoveComplete(3e3);
106 if(res) { printf("reached.\n"); return true; }
107 else {printf("didn't reach! Error.\n"); return false; }
108
109}
FILE * stdout
void PosMove(float Pos, float Speed, float Acc)
Definition: AcqStage1.cxx:524
float Reference
Definition: AcqStage1.h:72
int WaitForMoveComplete(u32 Timeout)
Definition: AcqStage1.cxx:514
float EmTopLayer
Definition: AcqStage1.h:140
float EmBase
Definition: AcqStage1.h:142
float EmBotLayer
Definition: AcqStage1.h:141
AcqAxis * Y
Definition: AcqStage1.h:146
AcqAxis * Z
Definition: AcqStage1.h:147
AcqAxis * X
Definition: AcqStage1.h:145
Int_t N() const
mandatory virtual functions:
Definition: EdbFiducial.h:75
EdbPoint * At(int i) const
Definition: EdbFiducial.h:76
EdbMarksBox * GetStage() const
Definition: EdbFiducial.h:110
virtual Float_t Y() const =0
virtual Float_t X() const =0
Double_t X
Definition: tlg2couples.C:76
Double_t Y
Definition: tlg2couples.C:76
Double_t Z
Definition: tlg2couples.C:104

◆ ScanMark()

bool AcqMarksScanner::ScanMark ( float *  X = NULL,
float *  Y = NULL,
float *  Z = NULL 
)
281{
282 // scans the spiral path around current point and looks for the mark.
283 // if found returns true and it's global positions in microns
284
285 int *ix = new int[ViewsToScan];
286 int *iy = new int[ViewsToScan];
287 int res=0;
288 bool Found=false;
289 float PixToMic=FG->PixelToMicronX;
290 float Posx,Posy,Posz;
291 float VPosx,VPosy,VPosz;
292 float GPosx,GPosy,GPosz;
293 float CenterX=ST->X->GetPos();
294 float CenterY=ST->Y->GetPos();
295 StepX=fabs((FG->SizeX)*PixToMic)-2*MarkDiameter;
296 StepY=fabs((FG->SizeY)*PixToMic)-2*MarkDiameter;
297 printf("Search path is generated with StepX=%f and StepY=%f\n",StepX,StepY);
298 EdbArea *ear=new EdbArea(); //only used to generate path
299 ear->MakeSpiralPath(ViewsToScan,ix,iy);
300 for(int v=0;v<ViewsToScan;v++)
301 {
302 if(kbhit()){getch();printf("Paused. Continue? (y/n)"); if(getchar()=='n') break;}
303 Posx=CenterX+StepX*ix[v];
304 Posy=CenterY+StepY*iy[v];
305 res=0;
306 while(!res)
307 {
308 if(kbhit()){getch();printf("Paused. Continue? (y/n)"); if(getchar()=='n') break;}
309 res=1;
310 ST->X->PosMove(Posx,XYScanSpeed,XYScanSpeed*100);
311 ST->Y->PosMove(Posy,XYScanSpeed,XYScanSpeed*100);
312 res*=ST->X->WaitForMoveComplete(2e3);
313 res*=ST->Y->WaitForMoveComplete(2e3);
314 }
315 if(!res){ printf("Move is not complete within timeout of 2sec! \n"); break;}
316 printf("Searching at (%f,%f).\n",Posx,Posy);
317
318 if(SearchMarkFast(&VPosx,&VPosy,&VPosz))
319 {
320 Found=true;
321
322 //if(ST->X->Invert) GPosx=Posx-VPosx; else GPosx=Posx+VPosx;
323 //if(ST->Y->Invert) GPosy=Posy-VPosy; else GPosy=Posy+VPosy;
324 GPosx=Posx+VPosx;
325 GPosy=Posy+VPosy;
326
327 res=0;
328 while(!res)
329 {
330 if(kbhit()){getch();printf("Paused. Continue? (y/n)"); if(getchar()=='n') break;}
331 res=1;
332 ST->X->PosMove(GPosx,XYScanSpeed,XYScanSpeed*100);
333 ST->Y->PosMove(GPosy,XYScanSpeed,XYScanSpeed*100);
334 res*=ST->X->WaitForMoveComplete(2e3);
335 res*=ST->Y->WaitForMoveComplete(2e3);
336 }
337 if(!res){ printf("Move is not complete within timeout of 2sec! \n"); break;}
338 GPosx=ST->X->GetPos();
339 GPosy=ST->Y->GetPos();
340 printf("Searching at (%f,%f).\n",GPosx,GPosy);
341 Found=SearchMarkFast(&VPosx,&VPosy,&VPosz); if(!Found) continue;
342// if(ST->X->Invert) GPosx=GPosx-VPosx; else GPosx=GPosx+VPosx;
343// if(ST->Y->Invert) GPosy=GPosy-VPosy; else GPosy=GPosy+VPosy;
344 GPosx=GPosx+VPosx;
345 GPosy=GPosy+VPosy;
346
347 res=0;
348 while(!res)
349 {
350 if(kbhit()){getch();printf("Paused. Continue? (y/n)"); if(getchar()=='n') break;}
351 res=1;
352 ST->X->PosMove(GPosx,XYScanSpeed,XYScanSpeed*100);
353 ST->Y->PosMove(GPosy,XYScanSpeed,XYScanSpeed*100);
354 res*=ST->X->WaitForMoveComplete(2e3);
355 res*=ST->Y->WaitForMoveComplete(2e3);
356 }
357 if(!res){ printf("Move is not complete within timeout of 2sec! \n"); break;}
358 GPosx=ST->X->GetPos();
359 GPosy=ST->Y->GetPos();
360 printf("Searching at (%f,%f).\n",GPosx,GPosy);
361 Found=SearchMarkFast(&VPosx,&VPosy,&VPosz); if(!Found) continue;
362// if(ST->X->Invert) GPosx=GPosx-VPosx; else GPosx=GPosx+VPosx;
363// if(ST->Y->Invert) GPosy=GPosy-VPosy; else GPosy=GPosy+VPosy;
364 GPosx=GPosx+VPosx;
365 GPosy=GPosy+VPosy;
366
367
368 GPosz=VPosz;
369 FG->ShowImage(0);
370 if(!X || !Y || !Z) break;
371 *X=GPosx;
372 *Y=GPosy;
373 *Z=GPosz;
374 break;
375 }
376 FG->ShowImage(0);
377 }
378 if(Found) printf("Mark found at global (%f,%f,%f)\n",GPosx,GPosy,GPosz);
379 delete ear;
380 delete [] ix;
381 delete [] iy;
382 return Found;
383}
Expr< UnaryOp< Fabs< T >, Expr< A, T, D >, T >, T, D > fabs(const Expr< A, T, D > &rhs)
Definition: UnaryOperators.hh:96
float GetPos()
Definition: AcqStage1.cxx:599
float StepY
Definition: AcqMarksScanner.h:53
bool SearchMarkFast(float *X=NULL, float *Y=NULL, float *Z=NULL)
Definition: AcqMarksScanner.cxx:210
float StepX
Definition: AcqMarksScanner.h:53
int SizeX
Definition: AcqOdyssey.h:168
void ShowImage(int N)
Definition: AcqOdyssey.cxx:263
int SizeY
Definition: AcqOdyssey.h:168
float PixelToMicronX
Definition: AcqOdyssey.h:178
Definition: EdbFiducial.h:134
int MakeSpiralPath(int n, int *x, int *y)
Definition: EdbFiducial.cxx:170

◆ ScanMarks()

bool AcqMarksScanner::ScanMarks ( )
387{
388 // scans for all marks in a given MarkSet
389/*
390 float X,Y,Z;
391 float Xe,Ye,Ze;
392 float Dx,Dy;
393 int Id=0;
394 Xe=eMarksSet->GetStage()->At(Id)->X();
395 Ye=eMarksSet->GetStage()->At(Id)->Y();
396 while(!GotoMark(Id)){
397 if(kbhit()){getch();printf("Paused. Continue? (y/n)"); if(getchar()=='n') return false;}
398 };
399 if(!ScanMark(&X,&Y,&Z)) { printf("First mark is not found! Exiting.\n"); return false; }
400 eMarksSet->GetStage()->At(Id)->SetX(X);
401 eMarksSet->GetStage()->At(Id)->SetY(Y);
402 eMarksSet->GetStage()->At(Id)->SetZ(Z);
403 Dx=X-Xe; Dy=Y-Ye; //displacement actual w.r.t. expected mark position
404 // calc 2nd mark expected
405 Id++;
406 Xe=eMarksSet->GetStage()->At(Id)->X();
407 Ye=eMarksSet->GetStage()->At(Id)->Y();
408 Xe+=Dx; Ye+=Dy;
409 eMarksSet->GetStage()->At(Id)->SetX(Xe);
410 eMarksSet->GetStage()->At(Id)->SetY(Ye);
411 while(!GotoMark(Id)){
412 if(kbhit()){getch();printf("Paused. Continue? (y/n)"); if(getchar()=='n') return false;}
413 };
414 if(!ScanMark(&X,&Y,&Z)) { printf("Second mark is not found! Exiting.\n"); return false; }
415 eMarksSet->GetStage()->At(Id)->SetX(X);
416 eMarksSet->GetStage()->At(Id)->SetY(Y);
417 eMarksSet->GetStage()->At(Id)->SetZ(Z);
418 // Dx=X-Xe; Dy=Y-Ye; //displacement actual w.r.t. expected mark position
419 // calc 3nd mark expected
420 Id++;
421 Xe=eMarksSet->GetStage()->At(Id)->X();
422 Ye=eMarksSet->GetStage()->At(Id)->Y();
423 Xe+=Dx; Ye+=Dy;
424 eMarksSet->GetStage()->At(Id)->SetX(Xe);
425 eMarksSet->GetStage()->At(Id)->SetY(Ye);
426 while(!GotoMark(Id)){
427 if(kbhit()){getch();printf("Paused. Continue? (y/n)"); if(getchar()=='n') return false;}
428 };
429 if(!ScanMark(&X,&Y,&Z)) { printf("Second mark is not found! Exiting.\n"); return false; }
430
431*/
432
433 return true;
434
435}

◆ ScanView()

int AcqMarksScanner::ScanView ( float  Z0,
float  DZ 
)
114{
115 // scans through the emulsion layer at Z0 with +DZ thickness
116 // provides [Layers] frames for further processing
117 // this is a basic function common for all scanning objects
118
119 float *Pos=new float[Layers];
120 float Speed=FPS*DZ/(Layers-1);
121 int res;
122 int Taken;
123 bool SaveFIRF,SaveBGSUB,SaveGCORR;
124 int SaveTHRES;
125 SaveFIRF=FG->ApplyFIRF;
126 FG->ApplyFIRF=false;
127 SaveBGSUB=FG->SubtractBG;
128 FG->SubtractBG=false;
129 SaveGCORR=FG->ApplyGainCorr;
130 FG->ApplyGainCorr=false;
131 SaveTHRES=FG->Threshold;
133 printf("Threshold is set to %d\n",FG->Threshold);
134 printf("Filling Z breakpoint position buffer\n");
135 Speed=1.*FPS*DZ/(Layers-1);
136 for(int i=0;i<Layers;i++) Pos[i]=1.*i*DZ/(Layers-1)+Z0;
137 for(int i=0;i<1;i++)
138 {
139 printf("Z Started to %f..\n",Z0+DZ+5);
140 ST->Z->PosMove(Z0+DZ+5,1e4,1e4);
141 res=ST->Z->WaitForMoveComplete(3e3);
142 printf("Z Reached initial at %f, res=%d\n",ST->Z->GetPos(),res);
145 printf("Armed BP sequence and Z started to %f and \n",Z0-5);
146 ST->Z->PosMove(Z0-5,Speed,50000);
147 Taken=FG->GrabImagesONL(Layers,Pos,(DZ+20.)/Speed);
148 res=ST->Z->WaitForMoveComplete(3e3);
149 printf("Z Reached final at %f, res=%d\n, taken %d frames.\n",ST->Z->GetPos(),res,Taken);
150 }
151 //restore FG settings
152 FG->ApplyFIRF=SaveFIRF;
153 FG->SubtractBG=SaveBGSUB;
154 FG->ApplyGainCorr=SaveGCORR;
155 FG->Threshold=SaveTHRES;
156
157 delete [] Pos;
158 return Taken;
159
160}
void ArmBreakpointSequence()
Definition: AcqStage1.cxx:765
void LoadBreakpointSequence(float *Pos, int N)
Definition: AcqStage1.cxx:722
int Threshold
Definition: AcqOdyssey.h:174
int GrabImagesONL(int N, float *Zs=NULL, double Timeout=0)
Definition: AcqOdyssey.cxx:472
bool ApplyFIRF
Definition: AcqOdyssey.h:172
bool SubtractBG
Definition: AcqOdyssey.h:171
bool ApplyGainCorr
Definition: AcqOdyssey.h:173
float Speed
Definition: hwinit.C:69
float Z0
Definition: hwinit.C:67
float DZ
Definition: hwinit.C:66

◆ SearchMark()

bool AcqMarksScanner::SearchMark ( float *  X = NULL,
float *  Y = NULL,
float *  Z = NULL 
)
164{
165 // Looks for the biggest cluster in the pile of images scanned by ScanView
166 // and checks it's dimensions. If they match the mark size
167 // returns true and its center coordinates in microns w.r.t view center
168 // otherwise returns false
169
172 else { printf("Side is not defined, probably mapext is not set.\n");return false;}
173// ScanView(Side*ST->NominalEmBase + ST->Z->Reference-2*ST->NominalEmLayer,4*ST->NominalEmLayer);
174// ScanView(Side*ST->NominalEmBase + ST->Z->Reference-2*ST->NominalEmLayer,4*ST->NominalEmLayer);
175 int MaxArea=0;
176 int Area;
177 int Nf=0;
178 float MaxX,MaxY,MaxZ;
179 float PixToMic=FG->PixelToMicronX;
180 float MarkDiam;
182 for(int n=0;n<Layers;n++){
183 FG->eEdbClusters->Clear();
185// printf("Found %d clusters in frame %d\n", Nf,n);
186// FG->ShowImage(n);
187 int NCL=FG->eEdbClusters->GetEntries();
188 for(int cl=0;cl<NCL;cl++)
189 {
190 Cluster=(EdbCluster*)( FG->eEdbClusters->At(cl));
191 Area=Cluster->GetArea();
192 MarkDiam=abs(sqrt(Area/3.1415)*2.*PixToMic); //in microns
195 if(Area>MaxArea) { MaxArea=Area; MaxX=Cluster->X();MaxY=Cluster->Y();MaxZ=Cluster->Z();}
196 }
197
198 }
199 MarkDiam=abs(sqrt(MaxArea/3.1415)*2.*PixToMic); //in microns
201 {
202 printf("Best Mark with diameter %f microns at %f,%f,%f\n",MarkDiam,MaxX,MaxY,MaxZ);
203 if(X && Y && Z) {*X=MaxX; *Y=MaxY; *Z=MaxZ;}
204
205 return true;
206 }
207 else return false;
208}
int ScanView(float Z0, float DZ)
Definition: AcqMarksScanner.cxx:113
long FindClusters(int N, TClonesArray *Clusters=NULL, int Side=0)
Definition: AcqOdyssey.cxx:991
TClonesArray * eEdbClusters
Definition: AcqOdyssey.h:176
Definition: EdbCluster.h:19
Double_t MaxX
Definition: tlg2couples.C:77
Double_t MaxY
Definition: tlg2couples.C:77
Definition: Struct.h:41
Definition: Cluster.h:8
float X
Definition: Cluster.h:9
float Y
Definition: Cluster.h:10

◆ SearchMarkFast()

bool AcqMarksScanner::SearchMarkFast ( float *  X = NULL,
float *  Y = NULL,
float *  Z = NULL 
)
211{
212 // Looks for the biggest cluster in the one image taken at right level (focusing must be done before!)
213 // and checks it's dimensions. If they match the mark size
214 // returns true and its center coordinates in microns w.r.t view center
215 // otherwise returns false
216 int res;
217 bool SaveFIRF,SaveBGSUB,SaveGCORR;
218 int SaveTHRES;
219
220 if(Side==0) ST->Z->PosMove(ST->Z->Reference,1e9,1e9);
221 else if(Side==1) ST->Z->PosMove(ST->Z->Reference+ST->EmBotLayer+ST->EmBase+ST->EmTopLayer,1e9,1e9);
222 else { printf("Side is not defined, probably mapext is not set.\n");return false;}
223 ST->Z->WaitForMoveComplete(2e3);
224 // save FG settings
225 SaveFIRF=FG->ApplyFIRF;
226 FG->ApplyFIRF=false;
227 SaveBGSUB=FG->SubtractBG;
228 FG->SubtractBG=false;
229 SaveGCORR=FG->ApplyGainCorr;
230 FG->ApplyGainCorr=false;
231 SaveTHRES=FG->Threshold;
233 printf("Threshold is set to %d\n",FG->Threshold);
234
235 res=FG->GrabOneImage(ST->Z->GetPos(),5);
236
237 //restore FG settings
238 FG->ApplyFIRF=SaveFIRF;
239 FG->SubtractBG=SaveBGSUB;
240 FG->ApplyGainCorr=SaveGCORR;
241 FG->Threshold=SaveTHRES;
242
243
244 if(!res) return false;
245 int BestDelta=1e3;
246 int DeltaDiam;
247 int BestDiam;
248 int Area;
249 int Nf=0;
250 float MaxX,MaxY,MaxZ;
251 float PixToMic=FG->PixelToMicronX;
252 float MarkDiam;
254 FG->eEdbClusters->Clear();
256 printf("Found %d clusters in frame %d\n", Nf,0);
257// FG->ShowImage(n);
258 int NCL=FG->eEdbClusters->GetEntries();
259 for(int cl=0;cl<NCL;cl++)
260 {
261 Cluster=(EdbCluster*)( FG->eEdbClusters->At(cl));
262 Area=Cluster->GetArea();
263 MarkDiam=abs(sqrt(Area/3.1415)*2.*PixToMic); //in microns
264 DeltaDiam=abs(MarkDiam-MarkDiameter);
265 if(DeltaDiam < MarkDiameterTolerance)
266 if(DeltaDiam < BestDelta) { BestDelta=DeltaDiam; BestDiam=MarkDiam; MaxX=Cluster->X();MaxY=Cluster->Y();MaxZ=Cluster->Z();}
267 }
268 MarkDiam=BestDiam; //in microns
270 {
271 printf("Best Mark with diameter %f microns at %f,%f,%f\n",MarkDiam,MaxX,MaxY,MaxZ);
272 if(X && Y && Z) {*X=MaxX; *Y=MaxY; *Z=MaxZ;}
273
274 return true;
275 }
276 else return false;
277}
int GrabOneImage(float Z, double Timeout=0)
Definition: AcqOdyssey.cxx:1084

◆ SetMapext()

bool AcqMarksScanner::SetMapext ( char *  mapext)
44{
45 // Reads the standart SySal mapext string, parse it and
46 // fills the eMarkSet object
47 const char separators[] = "\r\n;";
48 char *replica = new char[strlen(mapext) + 1];
49// IO_MarkMap *pMap = 0;
50 strcpy(replica, mapext);
51 char key[10];
52 char *line = strtok(replica, separators);
53 int marks = 0;
54 int mark=0;
55 int Id;
56 int d;
57 printf("%s\n",line);
58 if (sscanf(line, "%s %d %d %d %d", &key, &Id, &Id, &Id, &Id) != 5) return false;
59 line = strtok(0, separators);
60 printf("%s\n",line);
61 float tminx, tminy, tmaxx, tmaxy;
62 if (sscanf(line, "%d %f %f %f %f", &marks, &tminx, &tminy, &tmaxx, &tmaxy) != 5) return false;
63 float nomx,nomy,stx,sty;
64 while ((mark < marks) && (line = strtok(0, separators)))
65 {
66 printf("%s\n",line);
67 if (sscanf(line, "%d %f %f %f %f %d %d %d", &Id, &nomx, &nomy, &stx, &sty, &d, &d, &Side) != 8) return false;
68
69 eMarksSet->GetStage()->AddMark(Id,(ST->X->Reference)+stx,(ST->Y->Reference)+sty);
70 eMarksSet->GetAbsolute()->AddMark(Id,nomx,nomy);
71 mark++;
72 }
73 return true;
74}
void d()
Definition: RecDispEX.C:381
void AddMark(int id, float x, float y, int flag=0)
members access functions
Definition: EdbFiducial.cxx:716
EdbMarksBox * GetAbsolute() const
Definition: EdbFiducial.h:109
strcpy(cmd,"cp Shower.root Shower2.root")

◆ SetPointers()

bool AcqMarksScanner::SetPointers ( AcqStage1 stg,
AcqOdyssey ody 
)
inline
31{ST=stg ; FG=ody; return 1;};

Member Data Documentation

◆ eAffine2D

EdbAffine2D* AcqMarksScanner::eAffine2D

◆ eArea

EdbArea* AcqMarksScanner::eArea

◆ eFoundMarksSet

EdbMarksSet* AcqMarksScanner::eFoundMarksSet

◆ eMarksSet

EdbMarksSet* AcqMarksScanner::eMarksSet

◆ FG

AcqOdyssey* AcqMarksScanner::FG

◆ FPS

float AcqMarksScanner::FPS

◆ IsValid

bool AcqMarksScanner::IsValid

◆ Layers

int AcqMarksScanner::Layers

◆ MarkDiameter

float AcqMarksScanner::MarkDiameter

◆ MarkDiameterTolerance

float AcqMarksScanner::MarkDiameterTolerance

◆ Side

int AcqMarksScanner::Side

◆ ST

AcqStage1* AcqMarksScanner::ST

◆ StepX

float AcqMarksScanner::StepX

◆ StepY

float AcqMarksScanner::StepY

◆ Threshold

int AcqMarksScanner::Threshold

◆ ViewsToScan

int AcqMarksScanner::ViewsToScan

◆ XYScanSpeed

float AcqMarksScanner::XYScanSpeed

The documentation for this class was generated from the following files: