FEDRA emulsion software from the OPERA Collaboration
AcqOdyssey.h
Go to the documentation of this file.
1 #ifndef ROOT_AcqOdyssey
2 #define ROOT_AcqOdyssey
4 // //
5 // AcqOdyssey //
6 // //
7 // Interface to MATROX ODYSSEY framegrabber //
8 //
9 // Cable connecting DB25 "Digital IO" connector of MICOS amplifyer block
10 // with DB9 auxiliary digital connector of Odyssey Xpro must be present
11 // to provide syncronous stage-framegrabber operation.
12 // The pinout is as follows:
13 //
14 // DB9 Male DB25 Female
15 // Pin Signal Pin Signal
16 // 1 "Trig0" 5 "Breakpoint3"
17 // 6 "GND" 16 "GND"
18 // //
20 //#endif
21 
22 #include <cstdio>
23 #include <cstdlib>
24 #include <string>
25 #include <ctime>
26 
27 #include "TH1.h"
28 #include "TObject.h"
29 #ifndef __CINT__
30 # include "Mil.h"
31 # include "imapi.h"
32 //# include "mconvol.h"
33 #endif
34 
35 #include "EdbView.h"
36 #include "EdbImage.h"
37 #include "EdbFrame.h"
38 #include "EdbCluster.h"
39 #include "TClonesArray.h"
40 #include "EdbIP.h"
41 
42 
43 /* Max Number of buffers in the sequence. */
44 #define MAX_NB_GRAB 50
45 typedef long MIL_ID;
46 
47 
48 //______________________________________________________________________________
49 class AcqOdyssey : public TObject {
50 
51 private:
66 // MIL_ID MilKernel ;
70 
71  // ONL variables
72  long System;
73  long Device;
74  long Camera;
75  long Digitizer;
76  long Control;
77  long BufferN;
78  long Overlay;
79  long ConvImage;
80  long ConvImage2;
82  long Kernel;
83  long BGImage;
84  long GCImage;
87 #ifndef __CINT__
89 #endif
93  long ShiftList;
95  long ControlBuf;
96  long GrabOSB;
97  long CopyOSB;
98  long CopyOSB1;
99  char bNorm;
100 
101 
102 
103  public:
104 
105 // Genetive functions
106  AcqOdyssey();
107  virtual ~AcqOdyssey();
108  bool Initialize(char * DCF, int N);
109  void FreeResources();
110 
111 // Image in-out functions
112  void GetImage(int N, char* buf);
113  void GetImageFast(int N, unsigned char** buf, long *Pitch, long* Lines);
114  EdbImage* GetEdbImage(int N);
115  EdbFrame* GetEdbFrame(int N);
116  EdbClustersBox* GetEdbClustersBox(int N1, int N2);
117  void PutImage(int N, char* buf);
118  void CopyImageToBG(int N);
119  void CopyImageToGC(int N, long ConstBG=0);
120  void PutBGImage(short* buf);
121  void GetBGImage(short* buf);
122  void PutGCImage(short* buf);
123  void GetGCImage(short* buf);
124 
125 // Image and overlay display finctions
126  void ShowImage(int N);
127  void ShowBGImage();
128  void ShowGCImage();
129  void PlotImage1D(int N, TH1F* hist=NULL);
130  void PlotImage2D(int N);
131  void PlotBGImage();
132  void PlotGCImage();
133  void ShowImages(int N1, int N2, int TimeInterval, int Times);
134  void DrawTrack(int N, float X, float Y, float TX, float TY);
135  void DrawClusters(TClonesArray * Clusters=NULL);
136  void DrawText(int Layer, int X, int Y, char *text);
137  void DrawGrid(float MajorPitch=100., float MinorPitch=10.); //pitches are in microns!
138  void DrawCircles(float RadPitch=100.); //pitches are in microns!
139  void DrawClear();
140 
141 
142  // Grab control functions
143  void SetFIRFKernel(char *Kern, int W, int H);
144  void SetFIRFNorm(int Norm);
145  int GrabImagesONL(int N, float *Zs=NULL, double Timeout=0);
146  int GrabRawImagesONL(int N, float *Zs=NULL, double Timeout=0);
147  long GrabAndFillView(int N, float *Zs=NULL, double Timeout=0, int Side=0, EdbView * View=NULL, bool FillImages=false);
148  bool IsGrabComplete();
149  int GrabOneImage(float Z, double Timeout=0);
150  void StartLiveGrab();
151  void StopLiveGrab();
152 
153 // Image analisys functions
154  void XProjectImage(int N, long *buf);
155  void YProjectImage(int N, long *buf);
156  int VFindEdge(int N, int Thresh, int MinWidth, int MaxWidth);
157  int HFindEdge(int N, int Thresh, int MinWidth, int MaxWidth);
158  void TracksFromNImages(int N, int DX, int DY, float TX, float TY, int Dest);
159  long FindClusters(int N, TClonesArray * Clusters=NULL, int Side=0); //clusterisation is made onboard of Odyssey
160  long Clusterize(int N, TClonesArray * Clusters=NULL, int Side=0); //clusterisation is made by host processor
161  long Clusterize(int N, unsigned char *buf, int nc,int nr, TClonesArray * Clusters=NULL, int Side=0); //clusterisation is made by host processor
162  long FillView(int N, int Side=0, EdbView * View=NULL, bool FillImages=false);
163 
164 // Auxiliary functions
165  void UARTSendString(const char *s, int N);
166  // int BurnPix( unsigned char *buf, int ic, int ir, int xSize, int ySize, EdbClustP *cl );
167 
168  int SizeX, SizeY; //Image size, aquired from digitizer settings
169  bool BGImageValid; // Flag set when BG is taken
170  bool GCImageValid; // Flag set when Gain Correction image is taken
171  bool SubtractBG; // Flag to be set by user, controls BG subtraction
172  bool ApplyFIRF; // Flag to be set by user, controls FIR filtering
173  bool ApplyGainCorr; // Flag to be set by user, controls gain correction
174  int Threshold; // Parameter to be set by user, controls threshold cut on the image
175  float ZBuffer[MAX_NB_GRAB]; //Contains Z coordinates of images after scan
176  TClonesArray * eEdbClusters; //Contains clusters when FindClusters() or Clusterise() executed
177  EdbView * eEdbView; // contains EdbView when FillView() is executed
181  int MaxNbGrab; // set to MAX_NB_GRAB, don't modify!!!!
182 
183  ClassDef(AcqOdyssey,1)
184 };
185 
186 
187 
188 #endif /* ROOT_AcqOdyssey */
long MIL_ID
Definition: AcqOdyssey.h:45
#define MAX_NB_GRAB
Definition: AcqOdyssey.h:44
TText * text
Definition: Canv_SYSTEMATICS_ALLCOMBINED__RMSEnergy__vs__Energy__ELECTRON.C:164
Definition: AcqOdyssey.h:49
long ConvImage
Definition: AcqOdyssey.h:79
void CopyImageToBG(int N)
Definition: AcqOdyssey.cxx:370
void StartLiveGrab()
Definition: AcqOdyssey.cxx:1100
long FillView(int N, int Side=0, EdbView *View=NULL, bool FillImages=false)
Definition: AcqOdyssey.cxx:866
long ConvImage2
Definition: AcqOdyssey.h:80
void GetGCImage(short *buf)
Definition: AcqOdyssey.cxx:442
long Clusterize(int N, TClonesArray *Clusters=NULL, int Side=0)
Definition: AcqOdyssey.cxx:933
int GrabOneImage(float Z, double Timeout=0)
Definition: AcqOdyssey.cxx:1084
long Digitizer
Definition: AcqOdyssey.h:75
void PlotImage2D(int N)
Definition: AcqOdyssey.cxx:304
int SizeX
Definition: AcqOdyssey.h:168
long Camera
Definition: AcqOdyssey.h:74
void UARTSendString(const char *s, int N)
Definition: AcqOdyssey.cxx:1217
long ShiftList
Definition: AcqOdyssey.h:93
long ConvImage32
Definition: AcqOdyssey.h:81
void SetFIRFNorm(int Norm)
Definition: AcqOdyssey.cxx:237
bool GCImageValid
Definition: AcqOdyssey.h:170
float PixelToMicronY
Definition: AcqOdyssey.h:179
MIL_ID MilProjResY
Definition: AcqOdyssey.h:69
long GrabAndFillView(int N, float *Zs=NULL, double Timeout=0, int Side=0, EdbView *View=NULL, bool FillImages=false)
Definition: AcqOdyssey.cxx:604
MIL_ID MilOverlayImage
Definition: AcqOdyssey.h:56
long GrabOSB
Definition: AcqOdyssey.h:96
void GetImage(int N, char *buf)
Definition: AcqOdyssey.cxx:349
void PutBGImage(short *buf)
Definition: AcqOdyssey.cxx:425
long CopyOSB1
Definition: AcqOdyssey.h:98
long ShiftBuffer[MAX_NB_GRAB]
Definition: AcqOdyssey.h:92
long GCImage
Definition: AcqOdyssey.h:84
void DrawText(int Layer, int X, int Y, char *text)
Definition: AcqOdyssey.cxx:778
long FindClusters(int N, TClonesArray *Clusters=NULL, int Side=0)
Definition: AcqOdyssey.cxx:991
void FreeResources()
Definition: AcqOdyssey.cxx:52
void ShowBGImage()
Definition: AcqOdyssey.cxx:272
long HostBufferPitch
Definition: AcqOdyssey.h:90
MIL_ID MilDisplay
Definition: AcqOdyssey.h:55
void TracksFromNImages(int N, int DX, int DY, float TX, float TY, int Dest)
Definition: AcqOdyssey.cxx:727
MIL_ID MilSystem
Definition: AcqOdyssey.h:53
EdbFrame * GetEdbFrame(int N)
Definition: AcqOdyssey.cxx:330
int MaxNbGrab
Definition: AcqOdyssey.h:181
MIL_ID MilProjResX
Definition: AcqOdyssey.h:68
EdbClustersBox * GetEdbClustersBox(int N1, int N2)
Definition: AcqOdyssey.cxx:1078
MIL_ID MilImageN
Definition: AcqOdyssey.h:59
void DrawGrid(float MajorPitch=100., float MinorPitch=10.)
Definition: AcqOdyssey.cxx:800
void DrawClusters(TClonesArray *Clusters=NULL)
Definition: AcqOdyssey.cxx:839
EdbImage * GetEdbImage(int N)
Definition: AcqOdyssey.cxx:337
void YProjectImage(int N, long *buf)
Definition: AcqOdyssey.cxx:1133
long HostBufferLines
Definition: AcqOdyssey.h:91
void * pHostBuffer[MAX_NB_GRAB]
Definition: AcqOdyssey.h:88
long CopyOSB
Definition: AcqOdyssey.h:97
void SetFIRFKernel(char *Kern, int W, int H)
Definition: AcqOdyssey.cxx:243
MIL_ID MilImageDisp
Definition: AcqOdyssey.h:65
MIL_ID MilConvImage
Definition: AcqOdyssey.h:62
int Threshold
Definition: AcqOdyssey.h:174
void PlotBGImage()
Definition: AcqOdyssey.cxx:314
void GetImageFast(int N, unsigned char **buf, long *Pitch, long *Lines)
Definition: AcqOdyssey.cxx:356
int GrabImagesONL(int N, float *Zs=NULL, double Timeout=0)
Definition: AcqOdyssey.cxx:472
bool ApplyFIRF
Definition: AcqOdyssey.h:172
TClonesArray * eEdbClusters
Definition: AcqOdyssey.h:176
bool SubtractBG
Definition: AcqOdyssey.h:171
long BufferN
Definition: AcqOdyssey.h:77
void ShowImages(int N1, int N2, int TimeInterval, int Times)
Definition: AcqOdyssey.cxx:447
long Overlay
Definition: AcqOdyssey.h:78
int HFindEdge(int N, int Thresh, int MinWidth, int MaxWidth)
Definition: AcqOdyssey.cxx:1179
void PutGCImage(short *buf)
Definition: AcqOdyssey.cxx:436
long SeqThread
Definition: AcqOdyssey.h:94
long Buffer[MAX_NB_GRAB]
Definition: AcqOdyssey.h:85
long Device
Definition: AcqOdyssey.h:73
EdbView * eEdbView
Definition: AcqOdyssey.h:177
bool ApplyGainCorr
Definition: AcqOdyssey.h:173
void ShowImage(int N)
Definition: AcqOdyssey.cxx:263
long ControlBuf
Definition: AcqOdyssey.h:95
long BGImage
Definition: AcqOdyssey.h:83
void PlotImage1D(int N, TH1F *hist=NULL)
Definition: AcqOdyssey.cxx:284
long TransparentColor
Definition: AcqOdyssey.h:57
long Thread
Definition: AcqOdyssey.h:94
MIL_ID MilConvImage2
Definition: AcqOdyssey.h:63
virtual ~AcqOdyssey()
Definition: AcqOdyssey.cxx:99
void CopyImageToGC(int N, long ConstBG=0)
Definition: AcqOdyssey.cxx:377
MIL_ID MilImage[MAX_NB_GRAB]
Definition: AcqOdyssey.h:58
long Kernel
Definition: AcqOdyssey.h:82
MIL_ID MilGCImage
Definition: AcqOdyssey.h:61
MIL_ID MilDigitizer
Definition: AcqOdyssey.h:54
MIL_ID MilConvImage32
Definition: AcqOdyssey.h:64
int SizeY
Definition: AcqOdyssey.h:168
MIL_ID MilApplication
Definition: AcqOdyssey.h:52
float PixelToMicronX
Definition: AcqOdyssey.h:178
void PutImage(int N, char *buf)
Definition: AcqOdyssey.cxx:420
char bNorm
Definition: AcqOdyssey.h:99
void PlotGCImage()
Definition: AcqOdyssey.cxx:319
bool BGImageValid
Definition: AcqOdyssey.h:169
MIL_ID MilBGImage
Definition: AcqOdyssey.h:60
MIL_ID MilGCKernel
Definition: AcqOdyssey.h:67
long Control
Definition: AcqOdyssey.h:76
long System
Definition: AcqOdyssey.h:72
void GetBGImage(short *buf)
Definition: AcqOdyssey.cxx:431
void StopLiveGrab()
Definition: AcqOdyssey.cxx:1110
int VFindEdge(int N, int Thresh, int MinWidth, int MaxWidth)
Definition: AcqOdyssey.cxx:1141
long HostBuffer[MAX_NB_GRAB]
Definition: AcqOdyssey.h:86
bool Initialize(char *DCF, int N)
Definition: AcqOdyssey.cxx:109
void DrawClear()
Definition: AcqOdyssey.cxx:859
bool IsGrabComplete()
Definition: AcqOdyssey.cxx:232
float ZBuffer[MAX_NB_GRAB]
Definition: AcqOdyssey.h:175
int GrabRawImagesONL(int N, float *Zs=NULL, double Timeout=0)
Definition: AcqOdyssey.cxx:549
void DrawTrack(int N, float X, float Y, float TX, float TY)
Definition: AcqOdyssey.cxx:765
long GrabThread
Definition: AcqOdyssey.h:94
void ShowGCImage()
Definition: AcqOdyssey.cxx:277
AcqOdyssey()
Definition: AcqOdyssey.cxx:35
void XProjectImage(int N, long *buf)
Definition: AcqOdyssey.cxx:1126
void DrawCircles(float RadPitch=100.)
Definition: AcqOdyssey.cxx:784
float OpticalShrinkage
Definition: AcqOdyssey.h:180
Definition: EdbCluster.h:118
Definition: EdbFrame.h:20
Definition: EdbImage.h:23
Definition: EdbView.h:134
Definition: Side.h:11
struct @8 Z
struct @9 H
int Norm
int Norm=3;
Definition: hwinit.C:21
void hist()
Definition: init.C:23
Double_t X
Definition: tlg2pattern.C:77
Double_t Y
Definition: tlg2pattern.C:77
Double_t TY
Definition: tlg2pattern.C:79
Double_t TX
Definition: tlg2pattern.C:79
Definition: tlg2pattern.C:90
#define NULL
Definition: nidaqmx.h:84
Definition: Struct.h:27
Int_t W
Definition: testBGReduction_By_ANN.C:15
EdbSegP * s
Definition: tlg2pattern.C:32