FEDRA emulsion software from the OPERA Collaboration
AcqOdyssey Class Reference

#include <AcqOdyssey.h>

Inheritance diagram for AcqOdyssey:
Collaboration diagram for AcqOdyssey:

Public Member Functions

 AcqOdyssey ()
 
 AcqOdyssey ()
 
long Clusterize (int N, TClonesArray *Clusters=NULL, int Side=0)
 
long Clusterize (int N, unsigned char *buf, int nc, int nr, TClonesArray *Clusters=NULL, int Side=0)
 
void CopyImageToBG (int N)
 
void CopyImageToBG (int N)
 
void CopyImageToGC (int N, long ConstBG=0)
 
void DrawCircles (float RadPitch=100.)
 
void DrawClear ()
 
void DrawClusters (TClonesArray *Clusters=NULL)
 
void DrawGrid (float MajorPitch=100., float MinorPitch=10.)
 
void DrawText (int Layer, int X, int Y, char *text)
 
void DrawTrack (int N, float X, float Y, float TX, float TY)
 
long FillView (int N, int Side=0, EdbView *View=NULL, bool FillImages=false)
 
void FindClusters (int N)
 
long FindClusters (int N, TClonesArray *Clusters=NULL, int Side=0)
 
void FreeResources ()
 
void FreeResources ()
 
void GetBGImage (short *buf)
 
EdbClustersBoxGetEdbClustersBox (int N1, int N2)
 
EdbFrameGetEdbFrame (int N)
 
EdbImageGetEdbImage (int N)
 
EdbImageGetEdbImage (int N)
 
void GetGCImage (short *buf)
 
void GetImage (int N, char *buf)
 
void GetImage (int N, char *buf)
 
void GetImageFast (int N, unsigned char **buf, long *Pitch, long *Lines)
 
long GrabAndFillView (int N, float *Zs=NULL, double Timeout=0, int Side=0, EdbView *View=NULL, bool FillImages=false)
 
void GrabImages (int N)
 
void GrabImagesONL (int N)
 
int GrabImagesONL (int N, float *Zs=NULL, double Timeout=0)
 
int GrabOneImage (float Z, double Timeout=0)
 
int GrabRawImagesONL (int N, float *Zs=NULL, double Timeout=0)
 
int HFindEdge (int N, int Thresh, int MinWidth, int MaxWidth)
 
bool Initialize (char *DCF, int N)
 
bool Initialize (char *DCF, int N)
 
bool IsGrabComplete ()
 
bool IsGrabComplete ()
 
void PlotBGImage ()
 
void PlotGCImage ()
 
void PlotImage1D (int N, TH1F *hist=NULL)
 
void PlotImage2D (int N)
 
void PutBGImage (short *buf)
 
void PutBGImage (short *buf)
 
void PutGCImage (short *buf)
 
void PutImage (int N, char *buf)
 
void PutImage (int N, char *buf)
 
void SetFIRFKernel (char *Kern, int W, int H)
 
void SetFIRFKernel (char *Kern, int W, int H)
 
void SetFIRFNorm (int Norm)
 
void SetFIRFNorm (int Norm)
 
void ShowBGImage ()
 
void ShowBGImage ()
 
void ShowGCImage ()
 
void ShowImage (int N)
 
void ShowImage (int N)
 
void ShowImages (int N1, int N2, int TimeInterval, int Times)
 
void ShowImages (int N1, int N2, int TimeInterval, int Times)
 
void StartLiveGrab ()
 
void StopLiveGrab ()
 
void TracksFromNImages (int N, float TX, float TY, int Dest)
 
void TracksFromNImages (int N, int DX, int DY, float TX, float TY, int Dest)
 
void UARTSendString (const char *s, int N)
 
int VFindEdge (int N, int Thresh, int MinWidth, int MaxWidth)
 
void XProjectImage (int N, long *buf)
 
void YProjectImage (int N, long *buf)
 
virtual ~AcqOdyssey ()
 
virtual ~AcqOdyssey ()
 

Public Attributes

bool ApplyFIRF
 
bool ApplyGainCorr
 
bool BGImageValid
 
TClonesArray * eEdbClusters
 
EdbVieweEdbView
 
bool GCImageValid
 
int MaxNbGrab
 
float OpticalShrinkage
 
float PixelToMicronX
 
float PixelToMicronY
 
int SizeX
 
int SizeY
 
bool SubtractBG
 
int Threshold
 
char Threshold
 
float ZBuffer [MAX_NB_GRAB]
 

Private Attributes

long BGImage
 
char bNorm
 
long Buffer [MAX_NB_GRAB]
 
long BufferN
 
long Camera
 
long Control
 
long ControlBuf
 
long ConvImage
 
long ConvImage2
 
long ConvImage32
 
long CopyOSB
 
long CopyOSB1
 
long Device
 
long Digitizer
 
long GCImage
 
long GrabOSB
 
long GrabThread
 
long HostBuffer [MAX_NB_GRAB]
 
long HostBufferLines
 
long HostBufferPitch
 
long Kernel
 
MIL_ID MilApplication
 
MIL_ID MilBGImage
 
MIL_ID MilConvImage
 
MIL_ID MilConvImage1
 
MIL_ID MilConvImage2
 
MIL_ID MilConvImage32
 
MIL_ID MilDigitizer
 
MIL_ID MilDisplay
 
MIL_ID MilGCImage
 
MIL_ID MilGCKernel
 
MIL_ID MilImage [MAX_NB_GRAB]
 
MIL_ID MilImageDisp
 
MIL_ID MilImageN
 
MIL_ID MilKernel
 
MIL_ID MilOverlayImage
 
MIL_ID MilProjResX
 
MIL_ID MilProjResY
 
MIL_ID MilSystem
 
long Overlay
 
voidpHostBuffer [MAX_NB_GRAB]
 
long SeqThread
 
long ShiftBuffer [MAX_NB_GRAB]
 
long ShiftList
 
long System
 
long Thread
 
long TransparentColor
 

Constructor & Destructor Documentation

◆ AcqOdyssey() [1/2]

AcqOdyssey::AcqOdyssey ( )
36{
37 BGImageValid=false;
38 SubtractBG=false;
39 ApplyFIRF=false;
41 Threshold=50;
42 PixelToMicronX=-0.292;
43 PixelToMicronY=0.292;
44 OpticalShrinkage=1.515;
45 eEdbView=0;
46
47
48}
float PixelToMicronY
Definition: AcqOdyssey.h:179
int Threshold
Definition: AcqOdyssey.h:174
bool ApplyFIRF
Definition: AcqOdyssey.h:172
TClonesArray * eEdbClusters
Definition: AcqOdyssey.h:176
bool SubtractBG
Definition: AcqOdyssey.h:171
EdbView * eEdbView
Definition: AcqOdyssey.h:177
float PixelToMicronX
Definition: AcqOdyssey.h:178
bool BGImageValid
Definition: AcqOdyssey.h:169
float OpticalShrinkage
Definition: AcqOdyssey.h:180

◆ ~AcqOdyssey() [1/2]

AcqOdyssey::~AcqOdyssey ( )
virtual
100{
101/*
102 MappFreeDefault(MilApplication, MilSystem, MilDisplay,
103 MilDigitizer, MilImage);
104*/
106
107}
void FreeResources()
Definition: AcqOdyssey.cxx:52

◆ AcqOdyssey() [2/2]

AcqOdyssey::AcqOdyssey ( )

◆ ~AcqOdyssey() [2/2]

virtual AcqOdyssey::~AcqOdyssey ( )
virtual

Member Function Documentation

◆ Clusterize() [1/2]

long AcqOdyssey::Clusterize ( int  N,
TClonesArray *  Clusters = NULL,
int  Side = 0 
)
934{
935 long nc ;
936 long nr ;
937 unsigned char *buf;
938 GetImageFast(N,&buf,&nc,&nr);
939 return Clusterize(N,buf,nc,nr,Clusters,Side);
940}
long Clusterize(int N, TClonesArray *Clusters=NULL, int Side=0)
Definition: AcqOdyssey.cxx:933
void GetImageFast(int N, unsigned char **buf, long *Pitch, long *Lines)
Definition: AcqOdyssey.cxx:356
Definition: Side.h:11

◆ Clusterize() [2/2]

long AcqOdyssey::Clusterize ( int  N,
unsigned char *  buf,
int  nc,
int  nr,
TClonesArray *  Clusters = NULL,
int  Side = 0 
)
943{
944// c++ remake of good old "Fire in steppe" by Valery Tiukov ;-)
945
946 int pix;
947 int wcl;
948 long ncl=0;
949 int Border=8;
950 float x,y,z,a,v;
951 int s,seg;
952// printf("Clusterize Image %d: %d %d....",N,nc,nr);
953 // fflush(stdout);
954
955 EdbCluster *cl=new EdbCluster();
956 if(!Clusters) Clusters=eEdbClusters;
957// Clusters->Clear();
958
959int ir,ic,l;
960for(int i=0;i<nc*nr;i++)
961{
962 if(buf[i]==0) continue;
963 ir=int(i/nc);
964 if(ir<Border || ir>nr-Border) continue;
965 ic=i-ir*nc;
966 if(ic<Border || ic>nc-Border) continue;
967 cl->Set0();
968 wcl = BurnPix( buf, ic,ir, nc,nr, cl);
969 cl->Normalize();
970 z=ZBuffer[N];
971 x=(cl->X()-SizeX/2.)*PixelToMicronX;
972 y=(cl->Y()-SizeY/2.)*PixelToMicronY;
973 a=cl->GetArea();
974 if(a<=1) continue;
975 v=cl->GetVolume();
976 l = Clusters->GetLast()+1;
977 new((*Clusters)[l]) EdbCluster( x,y,z, a,v,N,Side,-1 );
978 ncl++;
979
980}
981 delete cl;
982 // printf("found %d clusters.\n",ncl);
983 // fflush(stdout);
984
985 return ncl;
986}
int BurnPix(unsigned char *buf, int ic, int ir, int xSize, int ySize, EdbCluster *cl)
Definition: AcqOdyssey.cxx:901
void a()
Definition: check_aligned.C:59
int SizeX
Definition: AcqOdyssey.h:168
int SizeY
Definition: AcqOdyssey.h:168
float ZBuffer[MAX_NB_GRAB]
Definition: AcqOdyssey.h:175
Definition: EdbCluster.h:19
virtual Float_t Y() const
Definition: EdbCluster.h:79
virtual Float_t X() const
Definition: EdbCluster.h:78
void Normalize()
Definition: EdbCluster.h:69
Float_t GetVolume() const
Definition: EdbCluster.h:55
Float_t GetArea() const
Definition: EdbCluster.h:54
void Set0()
Definition: EdbCluster.cxx:50
s
Definition: check_shower.C:55

◆ CopyImageToBG() [1/2]

void AcqOdyssey::CopyImageToBG ( int  N)
371{
373 BGImageValid=true;
374
375}
MFTYPE32 void MFTYPE MbufCopy(MIL_ID SrcBufId, MIL_ID DestBufId)
MIL_ID MilImage[MAX_NB_GRAB]
Definition: AcqOdyssey.h:58
MIL_ID MilBGImage
Definition: AcqOdyssey.h:60

◆ CopyImageToBG() [2/2]

void AcqOdyssey::CopyImageToBG ( int  N)

◆ CopyImageToGC()

void AcqOdyssey::CopyImageToGC ( int  N,
long  ConstBG = 0 
)
378{
379char GCKernel[4][4]=
380{
381 {1,1,1,1},
382 {1,1,1,1},
383 {1,1,1,1},
384 {1,1,1,1}
385};
386long ConstBG32;
387long TargetConstant;
388MIL_ID MilResult;
391 MbufPut(MilGCKernel,GCKernel);
393 MimClip(MilImage[N],MilGCImage,M_OUT_RANGE,0,255,0,255);
400 // calculate maximum pixel PH
401// MimFindExtreme(MilGCImage,MilResult,M_MAX_VALUE);
402// MimGetResult(MilResult,M_VALUE,&MaximumPix);
403// MaximumPix=MaximumPix*256;
404 ConstBG32=((ConstBG*256) & 0xffff);
405 TargetConstant=0xf0ff - ConstBG32;
407 ConstBG32=ConstBG;
409// MimArith(MaximumPix,MilGCImage,MilGCImage,M_CONST_DIV); //normalize to MaxPix*256
410// MimConvolve(MilGCImage,MilGCImage,M_SMOOTH);
411// MimConvolve(MilGCImage,MilGCImage,M_SMOOTH);
412// MimConvolve(MilGCImage,MilGCImage,M_SMOOTH);
413// MbufCopy(MilImage[N],MilGCImage);
414 GCImageValid=true;
416 MimFree(MilResult);
417
418}
long MIL_ID
Definition: AcqOdyssey.h:45
#define M_EXTREME_LIST
Definition: Mil.h:3016
#define M_OUT_RANGE
Definition: Mil.h:2765
#define M_SIGNED
Definition: Mil.h:3107
#define M_KERNEL
Definition: Mil.h:3030
#define M_CONST_SUB
Definition: Mil.h:2715
#define M_NORMALIZATION_FACTOR
Definition: Mil.h:4021
#define M_ADD_CONST
Definition: Mil.h:2711
#define M_CONST_DIV
Definition: Mil.h:2743
MFTYPE32 void MFTYPE MbufFree(MIL_ID BufId)
MFTYPE32 void MFTYPE MimArith(double Src1ImageIdOrConstant, double Src2ImageIdOrConstant, MIL_ID DestImageId, long Operation)
MFTYPE32 void MFTYPE MimFree(MIL_ID ImResultId)
MFTYPE32 MIL_ID MFTYPE MimAllocResult(MIL_ID SystemId, long NumberOfResultElement, long ResultType, MIL_ID MPTYPE *IdVarPtr)
MFTYPE32 void MFTYPE MimClip(MIL_ID SrcImageId, MIL_ID DestImageId, long Condition, double CondLow, double CondHigh, double WriteLow, double WriteHigh)
MFTYPE32 void MFTYPE MbufControlNeighborhood(MIL_ID BufId, long OperationFlags, long OperationValue)
MFTYPE32 void MFTYPE MimConvolve(MIL_ID SrcImageId, MIL_ID DestImageId, MIL_ID KernelId)
MFTYPE32 MIL_ID MFTYPE MbufAlloc2d(MIL_ID SystemId, long SizeX, long SizeY, long Type, BUFATTRTYPE Attribute, MIL_ID MPTYPE *IdVarPtr)
MFTYPE32 void MFTYPE MbufPut(MIL_ID DestBufId, void MPTYPE *BufferPtr)
bool GCImageValid
Definition: AcqOdyssey.h:170
MIL_ID MilSystem
Definition: AcqOdyssey.h:53
MIL_ID MilGCImage
Definition: AcqOdyssey.h:61
MIL_ID MilGCKernel
Definition: AcqOdyssey.h:67

◆ DrawCircles()

void AcqOdyssey::DrawCircles ( float  RadPitch = 100.)
785{
786 //Draws measuring circles into overlay
787 // the radius pitches are given in microns
788 int rX,rY;
789 float PixPitchX=RadPitch/fabs(PixelToMicronX);
790 float PixPitchY=RadPitch/fabs(PixelToMicronY);
791 for( int d=1; d*PixPitchX*2<SizeX; d++)
792 {
793 rX=int(d*PixPitchX);
794 rY=int(d*PixPitchY);
795 MgraArc(M_DEFAULT, MilOverlayImage, SizeX/2,SizeY/2,rX,rY,0,360);
796 }
797
798}
#define M_DEFAULT
Definition: Mil.h:4733
MFTYPE32 void MFTYPE MgraArc(MIL_ID GraphContextId, MIL_ID ImageId, long XCenter, long YCenter, long XRad, long YRad, double StartAngle, double EndAngle)
void d()
Definition: RecDispEX.C:381
Expr< UnaryOp< Fabs< T >, Expr< A, T, D >, T >, T, D > fabs(const Expr< A, T, D > &rhs)
Definition: UnaryOperators.hh:96
MIL_ID MilOverlayImage
Definition: AcqOdyssey.h:56

◆ DrawClear()

void AcqOdyssey::DrawClear ( )
860{
861 // Clear the overlay buffer with the keying color.
863}
MFTYPE32 void MFTYPE MbufClear(MIL_ID BufId, double Value)
long TransparentColor
Definition: AcqOdyssey.h:57

◆ DrawClusters()

void AcqOdyssey::DrawClusters ( TClonesArray *  Clusters = NULL)
840{
841 //Draws circles around each cluster
842 // with a diameter equal to cluster diameter;
843 TClonesArray * arr;
844 EdbCluster * cl;
845 int r,x,y;
846 if(!Clusters) arr=eEdbClusters;
847 if(!arr) return;
848 for(int i=0;i<arr->GetEntries();i++)
849 {
850 cl=(EdbCluster*)(arr->At(i));
851 r=int(2.*sqrt(cl->GetArea())/3.14);
852 x=int(cl->GetX()/PixelToMicronX+SizeX/2.);
853 y=int(cl->GetY()/PixelToMicronY+SizeY/2.);
854 MgraArc(M_DEFAULT, MilOverlayImage, x,y,r,r,0,360);
855 }
856}
Float_t GetX() const
Definition: EdbCluster.h:51
Float_t GetY() const
Definition: EdbCluster.h:52
void r(int rid=2)
Definition: test.C:201

◆ DrawGrid()

void AcqOdyssey::DrawGrid ( float  MajorPitch = 100.,
float  MinorPitch = 10. 
)
801{
802 //Draws measuring grid into overlay
803 // the pitches are given in microns
804 int X,Y;
805 float PixPitchX=MajorPitch/fabs(PixelToMicronX);
806 float PixPitchY=MajorPitch/fabs(PixelToMicronY);
807 for( int dX=0; dX*PixPitchX*2<SizeX; dX++)
808 {
809 X=int(SizeX/2.+dX*PixPitchX);
811 X=int(SizeX/2.-dX*PixPitchX);
813 }
814 for( int dY=0; dY*PixPitchY*2<SizeY; dY++)
815 {
816 Y=int(SizeY/2.+dY*PixPitchY);
818 Y=int(SizeY/2.-dY*PixPitchY);
820 }
821 PixPitchX=MinorPitch/fabs(PixelToMicronX);
822 PixPitchY=MinorPitch/fabs(PixelToMicronY);
823 for( int dX=0; dX*PixPitchX*2<SizeX; dX++)
824 {
825 X=int(SizeX/2.+dX*PixPitchX);
827 X=int(SizeX/2.-dX*PixPitchX);
829 }
830 for( int dY=0; dY*PixPitchY*2<SizeY; dY++)
831 {
832 Y=int(SizeY/2.+dY*PixPitchY);
834 Y=int(SizeY/2.-dY*PixPitchY);
836 }
837}
MFTYPE32 void MFTYPE MgraLine(MIL_ID GraphContextId, MIL_ID ImageId, long XStart, long YStart, long XEnd, long YEnd)
Double_t X
Definition: tlg2couples.C:76
Double_t Y
Definition: tlg2couples.C:76

◆ DrawText()

void AcqOdyssey::DrawText ( int  Layer,
int  X,
int  Y,
char *  text 
)
779{
781
782}
TText * text
Definition: Canv_SYSTEMATICS_ALLCOMBINED__RMSEnergy__vs__Energy__ELECTRON.C:164
#define MIL_TEXT(quote)
Definition: Milos.h:85
MFTYPE32 void MFTYPE MgraText(MIL_ID GraphContextId, MIL_ID ImageId, long XStart, long YStart, MIL_TEXT_PTR String)

◆ DrawTrack()

void AcqOdyssey::DrawTrack ( int  N,
float  X,
float  Y,
float  TX,
float  TY 
)
766{
767 // Draw track on the display overlay according to number of layers N
768 // TX, TY are frame shifts in pixels (frame x w.r.t. frame x-1)
769 // DZ is calculated automatically from Image number (from 0 to N-1)
770 int Ix0,Ix,Iy0,Iy;
771 Ix0=int(X/PixelToMicronX+SizeX/2.);
772 Iy0=int(Y/PixelToMicronY+SizeY/2.);
773 // Ix=int((X+N*TX)/PixelToMicronX+SizeX/2.);
774 // Iy=int((Y+N*TY)/PixelToMicronY+SizeY/2.);
775
776 MgraLine(M_DEFAULT, MilOverlayImage, Ix0,Iy0, Ix0+N*TX, Iy0+N*TY);
777}
Double_t TY
Definition: tlg2couples.C:78
Double_t TX
Definition: tlg2couples.C:78

◆ FillView()

long AcqOdyssey::FillView ( int  N,
int  Side = 0,
EdbView View = NULL,
bool  FillImages = false 
)
867{
868 // Finds clusters in a given images sequence (from 0 to N) and fills the EdbView structure
869 // if pointer to View is not given, result is saved into eEdbView;
870 // Cluster coordinates are returned in microns with respect to image center!!!
871 // returns total number of clusters found.
872 printf("Filling View..."); fflush(stdout);
873 long TNumber=0;
874 long Number=0;
875 long PixNumber=0;
876 EdbView *V;
877 TClonesArray * Cl;
878 if(View) V=View; else V=eEdbView;
879 V->Clear();
880 Cl=V->GetClusters();
881 V->SetNframes(N*Side,N*(1-Side));
882 for(int n=0;n<N;n++)
883 {
884 Number=FindClusters(n,Cl,Side);
885 V->AddFrame(n,ZBuffer[n],Number,0);
886 if(FillImages)
887 {
888 ((EdbFrame*)(V->GetFrames()->At(n)))->SetImage(GetEdbImage(n));
889 }
890
891 TNumber+=Number;
892 }
893 printf("Done.\n"); fflush(stdout);
894 return TNumber;
895}
FILE * stdout
long FindClusters(int N, TClonesArray *Clusters=NULL, int Side=0)
Definition: AcqOdyssey.cxx:991
EdbImage * GetEdbImage(int N)
Definition: AcqOdyssey.cxx:337
Definition: EdbFrame.h:20
Base scanning data object: entry into Run tree.
Definition: EdbView.h:134
TClonesArray * GetClusters() const
Definition: EdbView.h:164
void AddFrame(int id, float z, int ncl=0, int npix=0)
Definition: EdbView.cxx:268
TClonesArray * GetFrames() const
Definition: EdbView.h:167
void Clear()
Definition: EdbView.cxx:79
void SetNframes(int top, int bot)
Definition: EdbView.h:184
Int_t View
Definition: tlg2couples.C:135
Definition: tlg2couples.C:89

◆ FindClusters() [1/2]

void AcqOdyssey::FindClusters ( int  N)
317{
318}

◆ FindClusters() [2/2]

long AcqOdyssey::FindClusters ( int  N,
TClonesArray *  Clusters = NULL,
int  Side = 0 
)
992{
993 // Finds clusters in a given image
994 // if pointer to Clusters is not given, result is saved into eEdbClusters;
995 // Cluster coordinates are returned in microns with respect to image center!!!
996 // returns number of clusters found.
997 long Result;
998 long FeatList;
999 long Number;
1000 EdbCluster * cl;
1001 IM_BLOB_GROUP5_ST *Group5=0; /* Results */
1002 IM_BLOB_GROUP1_ST *Group1=0; /* Results */
1004 int Border=8;
1005 int DX=SizeX-2*Border;
1006 int DY=SizeY-2*Border;
1007 int OFX,OFY;
1008 OFX=IM_PARENT+Border;
1009 OFY=IM_PARENT+Border+SizeY*N;
1010 imBufChildMove(Thread, ShiftBuffer[N], OFX, OFY, DX, DY);
1011 /* Allocate a blob feature list and result buffer */
1012 imBlobAllocFeatureList(Thread, &FeatList);
1013 imBlobAllocResult(Thread, &Result);
1017 // imBlobSelectFeature(Thread, FeatList, IM_BLOB_MAX_PIXEL, IM_DEFAULT);
1019
1020 /* Increase speed by not saving runs */
1022
1023 /* Calculate selected features */
1024 // imBlobCalculate(Thread, Buffer[N], Buffer[N], FeatList, Result, IM_CLEAR, 0);
1025 imBlobCalculate(Thread, ShiftBuffer[N], ShiftBuffer[N], FeatList, Result, IM_CLEAR, 0);
1026
1027 /* Get the number of blobs */
1028 imBlobGetNumber(Thread, Result, &Number);
1029 /* Allocate enough memory for the results */
1030 Group5 = (IM_BLOB_GROUP5_ST *) malloc(Number * sizeof(IM_BLOB_GROUP5_ST));
1031 Group1 = (IM_BLOB_GROUP1_ST *) malloc(Number * sizeof(IM_BLOB_GROUP1_ST));
1032 /* Get the results */
1035 if(!Clusters) Clusters=eEdbClusters;
1036 // Clusters->Clear();
1037 int i=0;
1038 float x,y,z,a,v;
1039 int s,seg;
1040 int NumberReturned=0;
1041 if(Clusters) for(int cn=0;cn<Number;cn++)
1042 {
1043/* cl=new EdbCluster();
1044 cl->SetArea(Group1[cn].area);
1045 cl->SetVolume(Group5[cn].sum_pixel);
1046 cl->SetFrame(N);
1047 cl->SetSide(0) ;
1048 cl->SetSegment(0);
1049 cl->SetX((Group1[cn].center_of_gravity_x-SizeX/2.)*PixelToMicronX);
1050 cl->SetY((Group1[cn].center_of_gravity_y-SizeY/2.)*PixelToMicronY);
1051 cl->SetZ(ZBuffer[N]);
1052 */
1053 a=Group1[cn].area;
1054 if(a<=1) continue;
1055 v=Group5[cn].sum_pixel;
1056 x=(Group1[cn].center_of_gravity_x+Border-SizeX/2.)*PixelToMicronX;
1057 y=(Group1[cn].center_of_gravity_y+Border-SizeY/2.)*PixelToMicronY;
1058 z=ZBuffer[N];
1059 i = Clusters->GetLast()+1;
1060 new((*Clusters)[i++]) EdbCluster( x,y,z, a,v,N,Side,-1 );
1061 NumberReturned++;
1062// Clusters->Add(cl);
1063 }
1064
1065 // imSyncControl(SeqThread, CopyOSB,IM_OSB_STATE,IM_WAITING);
1066 // imBlobFill(Thread,Result,Overlay,M_ALL_BLOBS,223,CopyOSB);
1067// imSyncHost(SeqThread, CopyOSB, IM_COMPLETED);
1068
1069 if(Group1) { delete Group1; Group1=NULL;}
1070 if(Group5) { delete Group5; Group5=NULL;}
1071 imBlobFree(Thread, FeatList);
1072 imBlobFree(Thread, Result);
1074 return NumberReturned;
1075
1076}
#define M_NATIVE_MODE_ENTER
Definition: Mil.h:413
#define M_NATIVE_MODE_LEAVE
Definition: Mil.h:414
#define M_NULL
Definition: Mil.h:79
MFTYPE32 void MFTYPE MsysControl(MIL_ID SystemId, long ControlType, MIL_ID TargetSysId)
long ShiftBuffer[MAX_NB_GRAB]
Definition: AcqOdyssey.h:92
long Thread
Definition: AcqOdyssey.h:94
#define IM_BLOB_NO_FEATURES
Definition: imapidef.h:714
#define IM_BLOB_CENTER_OF_GRAVITY
Definition: imapidef.h:713
#define IM_BLOB_SAVE_RUNS
Definition: imapidef.h:735
#define IM_BLOB_GROUP1
Definition: imapidef.h:717
#define IM_DEFAULT
Definition: imapidef.h:262
#define IM_DISABLE
Definition: imapidef.h:268
#define IM_CLEAR
Definition: imapidef.h:285
#define IM_BLOB_SUM_PIXEL
Definition: imapidef.h:687
#define IM_BLOB_GROUP5
Definition: imapidef.h:721
#define IM_BLOB_AREA
Definition: imapidef.h:647
#define IM_PARENT
Definition: imapidef.h:304
IM_EXTC void IM_FTYPE imBlobFree(long Thread, long Result) IM_LFTYPE
IM_EXTC void IM_FTYPE imBlobSelectFeature(long Thread, long FeatList, long Feature, long Mode) IM_LFTYPE
IM_EXTC void IM_FTYPE imBlobAllocFeatureList(long Thread, long *FeatListPtr) IM_LFTYPE
IM_EXTC void IM_FTYPE imBlobCalculate(long Thread, long IdentBuf, long GreyBuf, long FeatList, long Result, long Mode, long OSB) IM_LFTYPE
IM_EXTC void IM_FTYPE imBufChildMove(long Thread, long Child, long Xoff, long Yoff, long Xsize, long Ysize) IM_LFTYPE
IM_EXTC long IM_FTYPE imBlobGetNumber(long Thread, long Result, long *NumPtr) IM_LFTYPE
IM_EXTC void IM_FTYPE imBlobAllocResult(long Thread, long *ResultPtr) IM_LFTYPE
IM_EXTC void IM_FTYPE imBlobGetResult(long Thread, long Result, long Feature, long Mode, void *ArrayPtr) IM_LFTYPE
IM_EXTC void IM_FTYPE imBlobControl(long Thread, long Result, long Item, double Value) IM_LFTYPE
#define NULL
Definition: nidaqmx.h:84
Definition: imapitef.h:23
float center_of_gravity_y
Definition: imapitef.h:37
float center_of_gravity_x
Definition: imapitef.h:36
unsigned long area
Definition: imapitef.h:26
Definition: imapitef.h:83
unsigned long sum_pixel
Definition: imapitef.h:86

◆ FreeResources() [1/2]

void AcqOdyssey::FreeResources ( )
53{
54 /* Clean up */
55 /* Stop the continuous grab and free digitizer (if needed). */
56 if (MilDigitizer)
57 {
60 }
61
62 /* Deselect the image from the display. */
64
65 /* Free image. */
67 for (int n=0; n<MAX_NB_GRAB; n++)
68 {
69 if(MilImage[n]) MbufFree(MilImage[n]);
70 }
71 // MbufFree(MilOverlayImage) ;
78 // MbufFree(MilKernel) ;
83 for (int n=0; n<MAX_NB_GRAB; n++)
84 {
86 }
89
90
91 /* Free defaults allocations. */
95 // MappFreeDefault(MilApplication, MilSystem, M_NULL, M_NULL, M_NULL);
96
97
98}
#define MAX_NB_GRAB
Definition: AcqOdyssey.h:44
MFTYPE32 void MFTYPE MdispDeselect(MIL_ID DisplayId, MIL_ID ImageId)
MFTYPE32 void MFTYPE MsysFree(MIL_ID SystemId)
MFTYPE32 void MFTYPE MdispFree(MIL_ID DisplayId)
MFTYPE32 void MFTYPE MdigFree(MIL_ID DevId)
MFTYPE32 void MFTYPE MappFree(MIL_ID ApplicationId)
MFTYPE32 void MFTYPE MdigHalt(MIL_ID DevId)
MIL_ID MilProjResY
Definition: AcqOdyssey.h:69
MIL_ID MilDisplay
Definition: AcqOdyssey.h:55
MIL_ID MilProjResX
Definition: AcqOdyssey.h:68
MIL_ID MilImageN
Definition: AcqOdyssey.h:59
MIL_ID MilImageDisp
Definition: AcqOdyssey.h:65
MIL_ID MilConvImage
Definition: AcqOdyssey.h:62
MIL_ID MilConvImage2
Definition: AcqOdyssey.h:63
long Kernel
Definition: AcqOdyssey.h:82
MIL_ID MilDigitizer
Definition: AcqOdyssey.h:54
MIL_ID MilConvImage32
Definition: AcqOdyssey.h:64
MIL_ID MilApplication
Definition: AcqOdyssey.h:52
long HostBuffer[MAX_NB_GRAB]
Definition: AcqOdyssey.h:86
IM_EXTC void IM_FTYPE imBufFree(long Thread, long Buf) IM_LFTYPE

◆ FreeResources() [2/2]

void AcqOdyssey::FreeResources ( )

◆ GetBGImage()

void AcqOdyssey::GetBGImage ( short *  buf)
432{
433 MbufGet(MilBGImage,buf);
434}
MFTYPE32 void MFTYPE MbufGet(MIL_ID SourceBufId, void MPTYPE *BufferPtr)

◆ GetEdbClustersBox()

EdbClustersBox * AcqOdyssey::GetEdbClustersBox ( int  N1,
int  N2 
)
1079{
1080// EdbClustersBox* cb=new EdbClustersBox();
1081 return NULL;
1082}

◆ GetEdbFrame()

EdbFrame * AcqOdyssey::GetEdbFrame ( int  N)
331{
332 EdbFrame *fr=new EdbFrame(N,ZBuffer[N],0,0);
333 fr->SetImage(GetEdbImage(N));
334 return fr;
335}
void SetImage(EdbImage *image)
Definition: EdbFrame.h:39

◆ GetEdbImage() [1/2]

EdbImage * AcqOdyssey::GetEdbImage ( int  N)
338{
339 EdbImage* im=new EdbImage();
340 unsigned char *bf;
341 long Sx,Sy;
342// char *bf=(char*)malloc(SizeX*SizeY);
343// MbufGet(MilImage[N],bf);
344 GetImageFast(N,&bf,&Sx,&Sy);
345 im->AdoptImage(Sx,Sy,(char*)bf);
346 return im;
347}
Definition: EdbImage.h:23
void AdoptImage(int columns, int rows, char *image, int col=256)
Definition: EdbImage.cxx:113

◆ GetEdbImage() [2/2]

EdbImage * AcqOdyssey::GetEdbImage ( int  N)

◆ GetGCImage()

void AcqOdyssey::GetGCImage ( short *  buf)
443{
444 MbufGet(MilGCImage,buf);
445}

◆ GetImage() [1/2]

void AcqOdyssey::GetImage ( int  N,
char *  buf 
)
350{
351 MbufGet(MilImage[N],buf);
352}

◆ GetImage() [2/2]

void AcqOdyssey::GetImage ( int  N,
char *  buf 
)

◆ GetImageFast()

void AcqOdyssey::GetImageFast ( int  N,
unsigned char **  buf,
long Pitch,
long Lines 
)
357{
363 *buf=(unsigned char*)pHostBuffer[N];
364 *Pitch=HostBufferPitch;
365 *Lines=HostBufferLines;
366
367}
long CopyOSB1
Definition: AcqOdyssey.h:98
long HostBufferPitch
Definition: AcqOdyssey.h:90
long HostBufferLines
Definition: AcqOdyssey.h:91
void * pHostBuffer[MAX_NB_GRAB]
Definition: AcqOdyssey.h:88
long SeqThread
Definition: AcqOdyssey.h:94
long Buffer[MAX_NB_GRAB]
Definition: AcqOdyssey.h:85
#define IM_WAITING
Definition: imapidef.h:433
#define IM_COMPLETED
Definition: imapidef.h:437
#define IM_OSB_STATE
Definition: imapidef.h:1087
IM_EXTC void IM_FTYPE imSyncControl(long Thread, long OSB, long Item, double Value) IM_LFTYPE
IM_EXTC void IM_FTYPE imBufCopyPCI(long Thread, long SrcBuf, long DstBuf, long Control, long OSB) IM_LFTYPE
IM_EXTC long IM_FTYPE imSyncHost(long Thread, long OSB, long State) IM_LFTYPE

◆ GrabAndFillView()

long AcqOdyssey::GrabAndFillView ( int  N,
float *  Zs = NULL,
double  Timeout = 0,
int  Side = 0,
EdbView View = NULL,
bool  FillImages = false 
)
605 {
606// Grabs N images, process them, clusterise by Fire-In-Steep procedure, and fill the EdbView:
607//if ApplyFIRF and MilKernel are set, then FIR filtering is made
608// if SubtractBG flag is set - BG image is subtracted
609// USING ODYSSEY NATIVE MODE
610// if pointer to View is not given, result is saved into eEdbView;
611// Cluster coordinates are returned in microns with respect to image center!!!
612// returns total number of clusters found.
613// Timeout is given in seconds, if = 0 - waits forever! (caution)
614// This method is asyncronous combination of GrabImagesONL, Clusterise and FillView...
615
616 long TNumber=0;
617 long Number=0;
618 long PixNumber=0;
619 EdbView *V;
620 TClonesArray * Cl;
621 if(View) V=View; else V=eEdbView;
622 V->Clear();
623 Cl=V->GetClusters();
624 int NtakenFrames=0;
625// V->SetNframes(N*Side,N*(1-Side));
626 V->SetNframes(NtakenFrames*Side,NtakenFrames*(1-Side));
627
629 /* Get ready to grab the sequence */
630 //if(MilKernel) Kernel=MbufInquire(MilKernel,M_NATIVE_ID,M_NULL);
631 printf("Starting Digitizer grab sequence...\n");
633 printf("Waiting for IM_READY from Digitizer...\n");
634 if(Timeout>0) imSyncControl(Thread, GrabOSB,IM_OSB_TIMEOUT, Timeout);
635 if(Timeout>0) imSyncControl(Thread, CopyOSB,IM_OSB_TIMEOUT, Timeout*10);
637 printf("Timeout happened waiting for IM_READY :-(\n");
638 //TODO:
640 return 0;
641 }
642 int Frame=0;
643 /* Sync to each block of frames and display one of them */
644 for (int n = 0; n < N; n++)
645 {
646 // printf("Waiting for frame %d...\n",n);
647 // if(Timeout>0) printf("...with Timeout = %f ms...\n",Timeout*1000.);
649 if(Frame==IM_ERR_TIMEOUT) {
650 printf("Timeout happened waiting for frame %d :-(\n",n);
651 //TODO:
653 return 0;
654 }
655 // printf("Got %d frames :-) Processing frame %d...\n",Frame+1,n);
656 // Now we can process frame
657 if(ApplyGainCorr)
658 {
659 // Multiply image (0-256) by GC map (256-65535 range) into 32 bit buffer
661 // Shift down by 8 bits - must be back in range 0 to 256
663 // negate image (255-Image)
665 }
666 else imIntMonadic(Thread,Buffer[n],255,ConvImage,IM_SUB_NEG,0); //negate only
667
668// if(SubtractBG && BGImageValid) {
669// imIntDyadic(Thread,ConvImage,BGImage,ConvImage,IM_SUB_SAT,CopyOSB);
670// }
671 if(ApplyFIRF && Kernel) {
674 }
675 if(SubtractBG && BGImageValid) {
677 }
679 // imSyncControl(SeqThread, CopyOSB,IM_OSB_STATE,IM_WAITING);
681// AT this moment current image processing is charged to thread Thread and we can clusterize the previous image
682// and fill the EdbView....
683 if(n>0) {
684 Number=Clusterize(n-1,Cl,Side);
685 V->AddFrame(n-1,ZBuffer[n-1],Number,0);
686 if(FillImages) ((EdbFrame*)(V->GetFrames()->At(n-1)))->SetImage(GetEdbImage(n-1));
687 TNumber+=Number;
688 NtakenFrames++;
689 V->SetNframes(NtakenFrames*Side,NtakenFrames*(1-Side));
690
691 }
692// Wait till current image processing is complete and go on with next..
693 // imSyncHost(SeqThread, CopyOSB, IM_COMPLETED);
695 printf("Timeout happened waiting for IM_COMPLETED :-(\n");
696 //TODO:
698 return 0;
699 }
700
701 if(Zs) ZBuffer[n]=Zs[N-n-1];
702// printf("Done with frame %d. :-) \n",n);
703 }
704// AT this moment last image is processed and we can clusterize it
705// and fill the EdbView....
706 Number=Clusterize(N-1,Cl,Side);
707 V->AddFrame(N-1,ZBuffer[N-1],Number,0);
708 if(FillImages) ((EdbFrame*)(V->GetFrames()->At(N-1)))->SetImage(GetEdbImage(N-1));
709 TNumber+=Number;
710 NtakenFrames++;
711 V->SetNframes(NtakenFrames*Side,NtakenFrames*(1-Side));
712// Finished with the last..
713
714 /* Wait to make sure the grab OSB is reset for next time */
715 // imSyncHost(SeqThread, GrabOSB, IM_COMPLETED);
717
719 for(int n=0;n<N;n++) MbufControl(MilImage[n],M_MODIFIED,M_DEFAULT);
721 return TNumber;
722
723
724 }
#define M_MODIFIED
Definition: Mil.h:3989
MFTYPE32 void MFTYPE MbufControl(MIL_ID BufId, long OperationFlags, double OperationValue)
long ConvImage
Definition: AcqOdyssey.h:79
long ConvImage2
Definition: AcqOdyssey.h:80
long Digitizer
Definition: AcqOdyssey.h:75
long Camera
Definition: AcqOdyssey.h:74
long ConvImage32
Definition: AcqOdyssey.h:81
long GrabOSB
Definition: AcqOdyssey.h:96
long GCImage
Definition: AcqOdyssey.h:84
long CopyOSB
Definition: AcqOdyssey.h:97
long BufferN
Definition: AcqOdyssey.h:77
bool ApplyGainCorr
Definition: AcqOdyssey.h:173
long ControlBuf
Definition: AcqOdyssey.h:95
long BGImage
Definition: AcqOdyssey.h:83
char bNorm
Definition: AcqOdyssey.h:99
long Control
Definition: AcqOdyssey.h:76
long GrabThread
Definition: AcqOdyssey.h:94
#define IM_SHIFT
Definition: imapidef.h:105
#define IM_OSB_TIMEOUT
Definition: imapidef.h:1090
#define IM_SUB_SAT
Definition: imapidef.h:107
#define IM_SEQ_WAIT
Definition: imapidef.h:1290
#define IM_SEQ_ABORT
Definition: imapidef.h:1292
#define IM_SUB_NEG
Definition: imapidef.h:77
#define IM_ERR_TIMEOUT
Definition: imapidef.h:805
#define IM_READY
Definition: imapidef.h:435
#define IM_LESS
Definition: imapidef.h:60
#define IM_DIV
Definition: imapidef.h:92
#define IM_CLIP
Definition: imapidef.h:371
#define IM_THRESH_CONSTANT
Definition: imapidef.h:328
#define IM_PASS_PIXEL
Definition: imapidef.h:331
#define IM_MULT
Definition: imapidef.h:91
IM_EXTC void IM_FTYPE imIntDyadic(long Thread, long Src1, long Src2, long Dst, long Op, long OSB) IM_LFTYPE
IM_EXTC void IM_FTYPE imIntMonadic(long Thread, long Src, double Const, long Dst, long Op, long OSB) IM_LFTYPE
IM_EXTC long IM_FTYPE imSyncGrabSequence(long Thread, long OSB, long Frame, long Mode) IM_LFTYPE
IM_EXTC void IM_FTYPE imDigGrabSequence(long Thread, long Dig, long Cam, long Buf, long Count, long Control, long OSB) IM_LFTYPE
IM_EXTC void IM_FTYPE imIntConvolve(long Thread, long Src, long Dst, long Kernel, long Control, long OSB) IM_LFTYPE
IM_EXTC void IM_FTYPE imIntConvert(long Thread, long Src, long Dst, long Mode, long OSB) IM_LFTYPE
IM_EXTC void IM_FTYPE imIntClip(long Thread, long Src, long Dst, long Cond, long Thresh, long Thresh_h, long Val1, long Val2, long Mode, long OSB) IM_LFTYPE

◆ GrabImages()

void AcqOdyssey::GrabImages ( int  N)
212{
213// Grabs N images, process them and return:
214//if ApplyFIRF and MilKernel are set, then FIR filtering is made
215// if SubtractBG flag is set - BG image is subtracted
216
218 printf("Recording ...\n");
219long NFields;
220 /* Grab the sequence. */
221 for (int n=0; n<N; n++)
222 {
223 /* Grab one buffer at a time. */
225 if( n>0 )
226 {
227 if(SubtractBG && BGImageValid) {
230 }
232
235
236 }
237 }
238
239 /* Wait last grab end. */
242 {
245 }
247
250
251
252}
#define M_GRAB_END
Definition: Mil.h:2589
#define M_SUB
Definition: Mil.h:2712
#define M_ASYNCHRONOUS
Definition: Mil.h:3574
#define M_GRAB_MODE
Definition: Mil.h:1779
MFTYPE32 void MFTYPE MdigGrabWait(MIL_ID DevId, long Flag)
MFTYPE32 void MFTYPE MdigGrab(MIL_ID SrcDevId, MIL_ID DestImageId)
MFTYPE32 void MFTYPE MdigControl(MIL_ID DigitizerId, long ControlType, double Value)
MIL_ID MilKernel
Definition: AcqOdyssey_ONL.h:50

◆ GrabImagesONL() [1/2]

void AcqOdyssey::GrabImagesONL ( int  N)
255{
256// Grabs N images, process them and return:
257//if ApplyFIRF and MilKernel are set, then FIR filtering is made
258// if SubtractBG flag is set - BG image is subtracted
259 // USING ODYSSEY NATIVE MODE
261 /* Get ready to grab the sequence */
263 printf("Programming grab sequence\n");
265 printf("WAiting for IM_READY\n");
266
268 int Frame=0;
269 /* Sync to each block of frames and display one of them */
270 for (int n = 0; n < N; n++)
271 {
272 printf("Waiting for frame %d\n",n);
274 printf("Got frame %d. Processing\n",Frame);
275
276 // Now we can process frame
278 if(SubtractBG && BGImageValid) {
280 }
281
282 if(ApplyFIRF && MilKernel) {
285 }
289 }
290
291 /* Wait to make sure the grab OSB is reset for next time */
292 // imSyncGrabSequence(Thread, GrabOSB, N-1, IM_SEQ_HALT);
294
295
296
297
299 for(int n=0;n<N;n++) MbufControl(MilImage[n],M_MODIFIED,M_DEFAULT);
301
302}
#define M_NATIVE_ID
Definition: Mil.h:3712
MFTYPE32 long MFTYPE MbufInquire(MIL_ID BufId, long InquireType, void MPTYPE *ResultPtr)
#define IM_SUB
Definition: imapidef.h:76

◆ GrabImagesONL() [2/2]

int AcqOdyssey::GrabImagesONL ( int  N,
float *  Zs = NULL,
double  Timeout = 0 
)
473{
474// Grabs N images, process them and return:
475//if ApplyFIRF and MilKernel are set, then FIR filtering is made
476// if SubtractBG flag is set - BG image is subtracted
477// USING ODYSSEY NATIVE MODE
478// returns number of frames taken
479// Timeout is given in seconds, if = 0 - waits forever! (caution)
481 /* Get ready to grab the sequence */
482 //if(MilKernel) Kernel=MbufInquire(MilKernel,M_NATIVE_ID,M_NULL);
483 printf("Starting Digitizer grab sequence...\n");
485 printf("Waiting for IM_READY from Digitizer...\n");
486 if(Timeout>0) imSyncControl(Thread, GrabOSB,IM_OSB_TIMEOUT, Timeout);
488 printf("Timeout happened waiting for IM_READY :-(\n");
489 //TODO:
491 return 0;
492 }
493 int Frame=0;
494 /* Sync to each block of frames and display one of them */
495 for (int n = 0; n < N; n++)
496 {
497 // printf("Waiting for frame %d...\n",n);
498 // if(Timeout>0) printf("...with Timeout = %f ms...\n",Timeout*1000.);
500 if(Frame==IM_ERR_TIMEOUT) {
501 printf("Timeout happened waiting for frame %d :-(\n",n);
502 //TODO:
504 return n-1;
505 }
506 // printf("Got %d frames :-) Processing frame %d...\n",Frame+1,n);
507 // Now we can process frame
508 if(ApplyGainCorr)
509 {
510 // Multiply image (0-256) by GC map (256-65535 range) into 32 bit buffer
512 // Shift down by 8 bits - must be back in range 0 to 256
514 // negate image (255-Image)
516 }
517 else imIntMonadic(Thread,Buffer[n],255,ConvImage,IM_SUB_NEG,0); //negate only
518
519// if(SubtractBG && BGImageValid) {
520// imIntDyadic(Thread,ConvImage,BGImage,ConvImage,IM_SUB_SAT,CopyOSB);
521// }
522 if(ApplyFIRF && Kernel) {
525 }
526 if(SubtractBG && BGImageValid) {
528 }
530 // imSyncControl(SeqThread, CopyOSB,IM_OSB_STATE,IM_WAITING);
532 // imSyncHost(SeqThread, CopyOSB, IM_COMPLETED);
534 if(Zs) ZBuffer[n]=Zs[N-n-1];
535// printf("Done with frame %d. :-) \n",n);
536 }
537
538 /* Wait to make sure the grab OSB is reset for next time */
539 // imSyncHost(SeqThread, GrabOSB, IM_COMPLETED);
541
543 for(int n=0;n<N;n++) MbufControl(MilImage[n],M_MODIFIED,M_DEFAULT);
545 return N;
546
547}

◆ GrabOneImage()

int AcqOdyssey::GrabOneImage ( float  Z,
double  Timeout = 0 
)
1085{
1086 // Sets trigger input of Timer1 from output of Timer2, which runs continuously
1087 // with 50Hz rep. rate (see DCF file)
1090// here we grab one image
1091 if(GrabAndFillView(1, &Z, Timeout, 0, eEdbView, true)==0) return 0;
1095// StopLiveGrab();
1096
1097 return 1;
1098}
long GrabAndFillView(int N, float *Zs=NULL, double Timeout=0, int Side=0, EdbView *View=NULL, bool FillImages=false)
Definition: AcqOdyssey.cxx:604
#define IM_TIMER2
Definition: imapidef.h:1339
#define IM_DIG_EXP_SOURCE
Definition: imapidef.h:1148
IM_EXTC void IM_FTYPE imCamControl(long Thread, long Camera, long Item, double Value) IM_LFTYPE
Double_t Z
Definition: tlg2couples.C:104

◆ GrabRawImagesONL()

int AcqOdyssey::GrabRawImagesONL ( int  N,
float *  Zs = NULL,
double  Timeout = 0 
)
550{
551// test function
552// Grabs N images, and return: no processing is done
553// USING ODYSSEY NATIVE MODE
554// returns number of frames taken
555// Timeout is given in seconds, if = 0 - waits forever! (caution)
557 /* Get ready to grab the sequence */
558 //if(MilKernel) Kernel=MbufInquire(MilKernel,M_NATIVE_ID,M_NULL);
559 printf("Starting Digitizer grab sequence...\n");
561 printf("Waiting for IM_READY from Digitizer...\n");
562 if(Timeout>0) imSyncControl(Thread, GrabOSB,IM_OSB_TIMEOUT, Timeout);
564 printf("Timeout happened waiting for IM_READY :-(\n");
565 //TODO:
567 return 0;
568 }
569 int Frame=0;
570 /* Sync to each block of frames and display one of them */
571 for (int n = 0; n < N; n++)
572 {
573 // printf("Waiting for frame %d...\n",n);
574 // if(Timeout>0) printf("...with Timeout = %f ms...\n",Timeout*1000.);
576 if(Frame==IM_ERR_TIMEOUT) {
577 printf("Timeout happened waiting for frame %d :-(\n",n);
578 //TODO:
580 return n-1;
581 }
582 // printf("Got %d frames :-) Processing frame %d...\n",Frame+1,n);
583 // Now we can process frame
584 //imSyncControl(SeqThread, CopyOSB,IM_OSB_STATE,IM_WAITING);
586 //imSyncHost(SeqThread, CopyOSB, IM_COMPLETED);
588 if(Zs) ZBuffer[n]=Zs[N-n-1];
589// printf("Done with frame %d. :-) \n",n);
590 }
591
592 /* Wait to make sure the grab OSB is reset for next time */
593 // imSyncHost(SeqThread, GrabOSB, IM_COMPLETED);
595
597 for(int n=0;n<N;n++) MbufControl(MilImage[n],M_MODIFIED,M_DEFAULT);
599 return N;
600
601}

◆ HFindEdge()

int AcqOdyssey::HFindEdge ( int  N,
int  Thresh,
int  MinWidth,
int  MaxWidth 
)
1180 {
1181 // Fing horisontal emulsion edge in image sequence 0-N
1182 long *buf;
1183 buf=new long[SizeY];
1184 long MaxDeriv[MAX_NB_GRAB];
1185 long MinDeriv[MAX_NB_GRAB];
1186 long MaxDerivY[MAX_NB_GRAB];
1187 long MinDerivY[MAX_NB_GRAB];
1188 long MaxDer,MinDer,MaxDerY,MinDerY;
1189 int Delta=30;
1190 for(int n=0;n<N;n++)
1191 {
1192 for(int i=0;i<SizeY;i++) buf[i]=0;
1193 YProjectImage(n,buf);
1194 MaxDeriv[n]=0; MinDeriv[n]=0;
1195 MaxDerivY[n]=0; MinDerivY[n]=0;
1196 for(int i=Delta;i<SizeY-2*Delta;i++)
1197 {
1198 if(MaxDeriv[n]<buf[i]-buf[i+Delta]){ MaxDeriv[n]=buf[i]-buf[i+Delta]; MaxDerivY[n]=i+Delta/2;}
1199 if(MinDeriv[n]>buf[i]-buf[i+Delta]) {MinDeriv[n]=buf[i]-buf[i+Delta]; MinDerivY[n]=i+Delta/2;}
1200 }
1201 }
1202 MaxDer=0;MinDer=0;
1203 for(int n=0;n<N;n++)
1204 {
1205 if(MaxDer<MaxDeriv[n]) {MaxDer=MaxDeriv[n]; MaxDerY=MaxDerivY[n];}
1206 if(MinDer>MinDeriv[n]) {MinDer=MinDeriv[n]; MinDerY=MinDerivY[n];}
1207 }
1208 printf("Max derivative %d detected at Y= %d\n",MaxDer,MaxDerY);
1209 printf("Min derivative %d detected at Y= %d\n",MinDer,MinDerY);
1210 delete [] buf;
1211
1212 if(MinDer>-Thresh || MaxDer<Thresh || MaxDerY-MinDerY<MinWidth || MaxDerY-MinDerY>MaxWidth) {printf("No edge detected\n"); return -1;}
1213 else printf("Edge detected at %f\n",(MaxDerY+MinDerY)/2.);
1214
1215 return (MaxDerY+MinDerY)/2.;
1216 }
void YProjectImage(int N, long *buf)
Definition: AcqOdyssey.cxx:1133

◆ Initialize() [1/2]

bool AcqOdyssey::Initialize ( char *  DCF,
int  N 
)
110{
111//Initialises the ODYSSEY board with default OPERA parameters
112// N defines maximum number of layers to take in one grab
113 BGImageValid=false;
114 GCImageValid=false;
115 eEdbClusters=new TClonesArray("EdbCluster",5000);
116 eEdbView=new EdbView();
117 Kernel=0;
118
119 if(N>MAX_NB_GRAB) N=MAX_NB_GRAB;
120 MaxNbGrab=N;
121 float ImageScale=1;
122 // Allocations.
125
129 // MdispControl(MilDisplay,M_THREAD_PRIORITY,31);
130 // MdispControl(MilDisplay,M_WINDOW_OVR_DESTRUCTIVE,M_ENABLE);
132 // MdispControl(MilDisplay,M_WINDOW_OVR_FLICKER,M_ENABLE);
133
134
135 MdispZoom(MilDisplay,-2,-2);
138 printf("Image size aquired from Digitizer : %d X %d\n",SizeY,SizeX);
139
140 /* Allocate display buffer. */
142 MbufClear(MilImageDisp, 0x0);
144 /* Prepare overlay buffer. */
145 /***************************/
146
147 /* Disable overlay display while preparing the data. */
149
150 /* Enable writing Overlay graphics on top of display buffer. */
152
153 /* Inquire the Overlay buffer associated with the displayed buffer. */
155
156 /* Inquire the current transparent color. */
158
159 /* Clear the overlay buffer with the keying color. */
161
162 /* Enable the overlay display. */
164 /* Set graphic text to transparent background. */
166
167 /* Set drawing color to white. */
168 MgraColor(M_DEFAULT, 255);
169
170
176 // MbufAlloc2d(MilSystem,SizeX,SizeY, 16L+M_SIGNED,M_IMAGE+M_PROC, &MilConvImage1);
177
178
180 MbufClear(MilImageN, 0);
181 for (int n=0; n<N; n++)
182 {
184 }
185 printf("Initialized for grabbing %i frames", N);
186
187 // Getting ONL handlers for sequence async grab
200 for (int n=0; n<N; n++)
201 {
205 printf("Host buffer %d mapped with pitch %d, %d lines.\n",n,HostBufferPitch,HostBufferLines);
206 if(HostBufferPitch==0) {printf("Can't map buffer! Aborting.\n"); return false;}
207 }
210 // imThrAlloc(Digitizer, 0, &Thread);
211 /* OSB for synchronization */
215 for(int n=0;n<N;n++){
217 }
219
222
225
226 printf("Framegrabber initialized successfully with following parameters:\n");
227 Dump();
228 return true;
229
230}
#define M_NATIVE_CONTROL_ID
Definition: Mil.h:3713
#define M_GRAB
Definition: Mil.h:3003
#define M_TRANSPARENT_COLOR
Definition: Mil.h:1609
#define M_PROC
Definition: Mil.h:3004
#define M_NATIVE_THREAD_ID
Definition: Mil.h:412
#define M_OVERLAY_ID
Definition: Mil.h:1193
#define M_SIZE_Y
Definition: Mil.h:4027
#define M_ENABLE
Definition: Mil.h:3683
#define M_OVERLAY_SHOW
Definition: Mil.h:1201
#define M_PROJ_LIST
Definition: Mil.h:3014
#define M_WINDOW_OVR_WRITE
Definition: Mil.h:1437
#define M_UNSIGNED
Definition: Mil.h:149
#define M_DISP
Definition: Mil.h:3005
#define M_IMAGE
Definition: Mil.h:3002
#define M_NATIVE_CAMERA_ID
Definition: Mil.h:1816
#define M_SIZE_X
Definition: Mil.h:4026
#define M_DISABLE
Definition: Mil.h:3684
#define M_BACKGROUND_MODE
Definition: Mil.h:4103
#define M_ON_BOARD
Definition: Mil.h:3123
#define M_TRANSPARENT
Definition: Mil.h:4105
#define M_OVERLAY
Definition: Mil.h:1194
char * MIL_TEXT_PTR
Definition: Milos.h:90
MFTYPE32 long MFTYPE MdispInquire(MIL_ID DisplayId, long inquire_type, void MPTYPE *result_ptr)
MFTYPE32 void MFTYPE MdispControl(MIL_ID DisplayId, long ControlType, double Value)
MFTYPE32 MIL_ID MFTYPE MsysAlloc(MIL_TEXT_PTR SystemTypePtr, long SystemNum, long InitFlag, MIL_ID MPTYPE *SystemIdVarPtr)
MFTYPE32 MIL_ID MFTYPE MdispAlloc(MIL_ID SystemId, long DispNum, MIL_TEXT_PTR DispFormat, long InitFlag, MIL_ID MPTYPE *IdVarPtr)
MFTYPE32 void MFTYPE MgraColor(MIL_ID GraphContextId, double ForegroundColor)
MFTYPE32 void MFTYPE MdispZoom(MIL_ID DisplayId, double XFactor, double YFactor)
MFTYPE32 long MFTYPE MdigInquire(MIL_ID DevId, long InquireType, void MPTYPE *ResultPtr)
MFTYPE32 long MFTYPE MsysInquire(MIL_ID SystemId, long InquireType, void MPTYPE *ResultPtr)
MFTYPE32 MIL_ID MFTYPE MappAlloc(long InitFlag, MIL_ID MPTYPE *IdVarPtr)
MFTYPE32 MIL_ID MFTYPE MdigAlloc(MIL_ID SystemId, long DeviceNum, MIL_TEXT_PTR DataFormat, long InitFlag, MIL_ID MPTYPE *IdVarPtr)
MFTYPE32 void MFTYPE MgraControl(MIL_ID GraphContextId, long ControlType, double ControlValue)
MFTYPE32 MIL_ID MFTYPE MbufChild2d(MIL_ID ParentMilBufId, long OffX, long OffY, long SizeX, long SizeY, MIL_ID MPTYPE *IdVarPtr)
MFTYPE32 void MFTYPE MdispSelect(MIL_ID DisplayId, MIL_ID ImageId)
#define M_DEF_SYSTEM_TYPE
Definition: Milsetup.h:59
#define M_DEF_DISPLAY_FORMAT
Definition: Milsetup.h:79
#define M_DEF_SYSTEM_NUM
Definition: Milsetup.h:60
#define M_DEF_DISPLAY_NUM
Definition: Milsetup.h:78
#define M_SETUP
Definition: Milsetup.h:46
long ShiftList
Definition: AcqOdyssey.h:93
int MaxNbGrab
Definition: AcqOdyssey.h:181
long Overlay
Definition: AcqOdyssey.h:78
long System
Definition: AcqOdyssey.h:72
#define IM_HOST
Definition: imapidef.h:455
#define IM_LONG
Definition: imapidef.h:50
#define IM_PROC
Definition: imapidef.h:453
#define IM_UBYTE
Definition: imapidef.h:45
IM_EXTC void IM_FTYPE imThrAlloc(long Dev, long Control, long *ThreadPtr) IM_LFTYPE
IM_EXTC void IM_FTYPE imBufAlloc1d(long Thread, long Xsize, long Type, long Location, long *BufPtr) IM_LFTYPE
IM_EXTC void IM_FTYPE imBufAlloc2d(long Thread, long Xsize, long Ysize, long Type, long Location, long *BufPtr) IM_LFTYPE
IM_EXTC void IM_FTYPE imBufChild(long Thread, long Buf, long Xstart, long Ystart, long Xsize, long Ysize, long *ChildPtr) IM_LFTYPE
IM_EXTC void IM_FTYPE imSyncAlloc(long Thread, long *OSBPtr) IM_LFTYPE
IM_EXTC void IM_FTYPE imBufPut(long Thread, long Buf, void *Ptr) IM_LFTYPE
IM_EXTC long IM_FTYPE imBufMap(long Thread, long Buf, long Band, long Ystart, void **AddrPtr, long *PitchPtr, long *NlinesPtr) IM_LFTYPE

◆ Initialize() [2/2]

bool AcqOdyssey::Initialize ( char *  DCF,
int  N 
)

◆ IsGrabComplete() [1/2]

bool AcqOdyssey::IsGrabComplete ( )
233{
234 return true;
235}

◆ IsGrabComplete() [2/2]

bool AcqOdyssey::IsGrabComplete ( )

◆ PlotBGImage()

void AcqOdyssey::PlotBGImage ( )
315{
317}

◆ PlotGCImage()

void AcqOdyssey::PlotGCImage ( )
320{
321unsigned short *bf;
322bf=(unsigned short *)malloc(SizeX*SizeY*2);
323GetGCImage((short*)bf);
324TH1F *hist= new TH1F("GC","GC",65536,0,65536);
325for(int c=0;c<SizeX*SizeY;c++) { hist->Fill(bf[c]); }
326hist->Draw();
327
328}
void GetGCImage(short *buf)
Definition: AcqOdyssey.cxx:442
void hist()
Definition: init.C:23

◆ PlotImage1D()

void AcqOdyssey::PlotImage1D ( int  N,
TH1F *  hist = NULL 
)
285{
286 unsigned char *bf;
287 long Sx,Sy;
288 if(!hist)
289 {
290 TCanvas *c=new TCanvas();
291// c->Divide(2);
292// c->cd(1);
293// GetEdbImage(N)->GetHist2()->Draw("colz");
294 c->cd();
295 GetEdbImage(N)->GetHist1()->Draw();
296 }
297 else
298 {
299 GetImageFast(N,&bf,&Sx,&Sy);
300 for(int c=0;c<Sx*Sy;c++) { hist->Fill(bf[c]); }
301 }
302}
TH1F * GetHist1() const
Definition: EdbImage.cxx:140
new TCanvas()

◆ PlotImage2D()

void AcqOdyssey::PlotImage2D ( int  N)
305{
306 TCanvas *c=new TCanvas();
307 c->Divide(2);
308 c->cd(1);
309 GetEdbImage(N)->GetHist2()->Draw("colz");
310 c->cd(2);
311 GetEdbImage(N)->GetHist1()->Draw();
312}
TH2F * GetHist2(int flip=0) const
Definition: EdbImage.cxx:158

◆ PutBGImage() [1/2]

void AcqOdyssey::PutBGImage ( short *  buf)
426{
427 MbufPut(MilBGImage,buf);
428 BGImageValid=true;
429}

◆ PutBGImage() [2/2]

void AcqOdyssey::PutBGImage ( short *  buf)

◆ PutGCImage()

void AcqOdyssey::PutGCImage ( short *  buf)
437{
438 MbufPut(MilGCImage,buf);
439 GCImageValid=true;
440}

◆ PutImage() [1/2]

void AcqOdyssey::PutImage ( int  N,
char *  buf 
)
421{
422 MbufPut(MilImage[N],buf);
423}

◆ PutImage() [2/2]

void AcqOdyssey::PutImage ( int  N,
char *  buf 
)

◆ SetFIRFKernel() [1/2]

void AcqOdyssey::SetFIRFKernel ( char *  Kern,
int  W,
int  H 
)
244{
245// if(MilKernel) MbufFree(MilKernel);
246// MbufAlloc2d(MilSystem,H,W,8+M_SIGNED,M_KERNEL,&MilKernel);
247// MbufPut(MilKernel,Kern);
248
251 imBufPut(Thread,Kernel,Kern);
256
257
258 // MbufControlNeighborhood(MilKernel,M_SATURATION,M_ENABLE);
259 // MbufControlNeighborhood(MilKernel,M_ABSOLUTE_VALUE,M_ENABLE);
260 // MbufControlNeighborhood(MilKernel,M_ABSOLUTE_VALUE,M_ENABLE);
261}
#define IM_CTL_OVERSCAN_VAL
Definition: imapidef.h:990
#define IM_CTL_OVERSCAN
Definition: imapidef.h:989
#define IM_REPLACE
Definition: imapidef.h:427
#define IM_BYTE
Definition: imapidef.h:48
IM_EXTC void IM_FTYPE imBufAllocControl(long Thread, long *BufPtr) IM_LFTYPE
IM_EXTC void IM_FTYPE imBufPutField(long Thread, long Buf, long Tag, double Value) IM_LFTYPE
Int_t W
Definition: testBGReduction_By_ANN.C:15

◆ SetFIRFKernel() [2/2]

void AcqOdyssey::SetFIRFKernel ( char *  Kern,
int  W,
int  H 
)

◆ SetFIRFNorm() [1/2]

void AcqOdyssey::SetFIRFNorm ( int  Norm)
238{
239 // if(MilKernel) MbufControlNeighborhood(MilKernel,M_NORMALIZATION_FACTOR,Norm);
240 bNorm=(char)Norm;
241}
int Norm
int Norm=3;
Definition: hwinit.C:21

◆ SetFIRFNorm() [2/2]

void AcqOdyssey::SetFIRFNorm ( int  Norm)

◆ ShowBGImage() [1/2]

void AcqOdyssey::ShowBGImage ( )
273{
275}

◆ ShowBGImage() [2/2]

void AcqOdyssey::ShowBGImage ( )

◆ ShowGCImage()

void AcqOdyssey::ShowGCImage ( )
278{
279 //imIntMonadic(Thread,ConvImage32,-8,ConvImage,IM_SHIFT,CopyOSB);
281// MbufCopy(MilGCImage,MilImageDisp);
282}

◆ ShowImage() [1/2]

void AcqOdyssey::ShowImage ( int  N)
264{
265 char ztext[64];
266 sprintf(ztext,"Z=%f",ZBuffer[N]);
268 DrawClear();
269 DrawText(0,0,0,ztext);
270}
void DrawText(int Layer, int X, int Y, char *text)
Definition: AcqOdyssey.cxx:778
void DrawClear()
Definition: AcqOdyssey.cxx:859

◆ ShowImage() [2/2]

void AcqOdyssey::ShowImage ( int  N)

◆ ShowImages() [1/2]

void AcqOdyssey::ShowImages ( int  N1,
int  N2,
int  TimeInterval,
int  Times 
)
448{
449// Displays images from N1 to N2 and back with a given time gap
450// Times times.
451
452 char ztext[64];
453 sprintf(ztext,"Z from %f to %f",ZBuffer[N1],ZBuffer[N2]);
454// DrawClear();
455 DrawText(0,0,0,ztext);
456 for(int i=0;i<Times;i++)
457 {
458 for(int N=N1;N<N2;N++)
459 {
461 Sleep(TimeInterval);
462 }
463 for(int N=N2;N>N1;N--)
464 {
466 Sleep(TimeInterval);
467 }
468 }
469}

◆ ShowImages() [2/2]

void AcqOdyssey::ShowImages ( int  N1,
int  N2,
int  TimeInterval,
int  Times 
)

◆ StartLiveGrab()

void AcqOdyssey::StartLiveGrab ( )
1101{
1102 // Sets exposure from output of Timer2, which runs continuously
1103 // with 50Hz rep. rate (see DCF file)
1108
1109}
MFTYPE32 void MFTYPE MdigGrabContinuous(MIL_ID SrcDevId, MIL_ID DestImageId)

◆ StopLiveGrab()

void AcqOdyssey::StopLiveGrab ( )
1111{
1112 // Sets trigger input of Timer1 from HW input 0 on DB9 connector, which
1113 // is triggered by BreakPoint output from the stage controller
1114 // This configuration must be default one saved in DCF file
1115 // This function waits for last frame to be completed, so
1116 // if it must be called only when digitizer is in LiveGrab mode!!
1121
1122
1123}

◆ TracksFromNImages() [1/2]

void AcqOdyssey::TracksFromNImages ( int  N,
float  TX,
float  TY,
int  Dest 
)
306{
307 for(int n=0;n<N;n++)
308 {
310 }
312 imIntAverage(Thread,ShiftList,0,0,Buffer[Dest],N,N,0,CopyOSB);
314}
IM_EXTC void IM_FTYPE imIntAverage(long Thread, long In, long Acc, long Sum, long Ave, long NumFrame, long Normalize, long Control, long Osb) IM_LFTYPE

◆ TracksFromNImages() [2/2]

void AcqOdyssey::TracksFromNImages ( int  N,
int  DX,
int  DY,
float  TX,
float  TY,
int  Dest 
)
728{
729 // Calculate average of shifted by TX,TY stack of images a la UTS
730 // TX, TY are frame shifts in pixels (frame x w.r.t. frame x-1)
731 // in the centered ROI of the size DY x DX pixels
732 // Puts the result into Dest Mil buffer
733 // Sync
735 if(DX>SizeX-2*N*TX) DX=SizeX-2*N*TX;
736 if(DY>SizeY-2*N*TY) DY=SizeY-2*N*TY;
737 int OFX,OFY;
738 OFX=IM_PARENT+(SizeX-DX)/2;
739 OFY=IM_PARENT+(SizeY-DY)/2;
740 for(int n=0;n<N;n++)
741 {
742 imBufChildMove(Thread, ShiftBuffer[n], OFX+n*TX, OFY+SizeY*n+n*TY, DX, DY);
743 }
744 imBufChildMove(Thread, ShiftBuffer[Dest], OFX, OFY+SizeY*Dest, DX, DY);
745
746 imBufClear(Thread,Buffer[Dest],0,CopyOSB); //clear destination buffer
747// imSyncControl(SeqThread, CopyOSB,IM_OSB_STATE,IM_WAITING);
748 imIntAverage(Thread, ShiftList, 0, 0, ShiftBuffer[Dest], N, N, 0,CopyOSB);
749 if(ApplyFIRF && Kernel)
750 {
754
755 }
756// imIntClip(Thread,ShiftBuffer[Dest],ShiftBuffer[Dest],IM_OUT_RANGE,Threshold,255,0,255,IM_PASS_PIXEL,CopyOSB);
761
762}
#define IM_PASS_CONSTANT
Definition: imapidef.h:330
IM_EXTC void IM_FTYPE imBufClear(long Thread, long Buf, double Value, long OSB) IM_LFTYPE

◆ UARTSendString()

void AcqOdyssey::UARTSendString ( const char *  s,
int  N 
)
1218 {
1219 long adc=(long)s;
1223 for(int i=0;i<N;i++){
1225 }
1227
1228 }
#define IM_CHANNEL_0
Definition: imapidef.h:1306
#define IM_UART_WRITE_STRING
Definition: imapidef.h:1189
#define IM_UART_WRITE_LENGTH
Definition: imapidef.h:1188
#define IM_UART_BAUD_RATE
Definition: imapidef.h:1178
IM_EXTC void IM_FTYPE imDigControl(long Thread, long Dig, long Item, double Value) IM_LFTYPE
MFTYPE32 long(MFTYPE MPTYPE *MOCRHOOKFCTPTR)(long HookType
Definition: milocr.h:32

◆ VFindEdge()

int AcqOdyssey::VFindEdge ( int  N,
int  Thresh,
int  MinWidth,
int  MaxWidth 
)
1142 {
1143 // Fing horisontal emulsion edge in image sequence 0-N
1144 long *buf;
1145 buf=new long[SizeX];
1146 long MaxDeriv[MAX_NB_GRAB];
1147 long MinDeriv[MAX_NB_GRAB];
1148 long MaxDerivX[MAX_NB_GRAB];
1149 long MinDerivX[MAX_NB_GRAB];
1150 long MaxDer,MinDer,MaxDerX,MinDerX;
1151 int Delta=30;
1152 for(int n=0;n<N;n++)
1153 {
1154 for(int i=0;i<SizeX;i++) buf[i]=0;
1155 XProjectImage(n,buf);
1156 MaxDeriv[n]=0; MinDeriv[n]=0;
1157 MaxDerivX[n]=0; MinDerivX[n]=0;
1158 for(int i=Delta;i<SizeX-2*Delta;i++)
1159 {
1160 if(MaxDeriv[n]<buf[i]-buf[i+Delta]){ MaxDeriv[n]=buf[i]-buf[i+Delta]; MaxDerivX[n]=i+Delta/2;}
1161 if(MinDeriv[n]>buf[i]-buf[i+Delta]) {MinDeriv[n]=buf[i]-buf[i+Delta]; MinDerivX[n]=i+Delta/2;}
1162 }
1163 }
1164 MaxDer=0;MinDer=0;
1165 for(int n=0;n<N;n++)
1166 {
1167 if(MaxDer<MaxDeriv[n]) {MaxDer=MaxDeriv[n]; MaxDerX=MaxDerivX[n];}
1168 if(MinDer>MinDeriv[n]) {MinDer=MinDeriv[n]; MinDerX=MinDerivX[n];}
1169 }
1170 printf("Max derivative %d detected at X= %d\n",MaxDer,MaxDerX);
1171 printf("Min derivative %d detected at X= %d\n",MinDer,MinDerX);
1172 delete [] buf;
1173
1174 if(MinDer>-Thresh || MaxDer<Thresh || MaxDerX-MinDerX<MinWidth || MaxDerX-MinDerX>MaxWidth) {printf("No edge detected\n"); return -1;}
1175 else printf("Edge detected at %f\n",(MaxDerX+MinDerX)/2.);
1176
1177 return (MaxDerX+MinDerX)/2.;
1178 }
void XProjectImage(int N, long *buf)
Definition: AcqOdyssey.cxx:1126

◆ XProjectImage()

void AcqOdyssey::XProjectImage ( int  N,
long buf 
)
1127 {
1128 // Projects image to horisontal axis and fill the linear buffer buf
1131
1132 }
#define M_VALUE
Definition: Mil.h:2675
#define M_0_DEGREE
Definition: Mil.h:2872
MFTYPE32 void MFTYPE MimProject(MIL_ID SrcImageId, MIL_ID DestArrayId, double ProjectionAngle)
MFTYPE32 void MFTYPE MimGetResult1d(MIL_ID ImResultId, long Offresult, long Sizeresult, long ResultType, void MPTYPE *UserTargetArrayPtr)

◆ YProjectImage()

void AcqOdyssey::YProjectImage ( int  N,
long buf 
)
1134 {
1135 // Projects image to horisontal axis and fill the linear buffer buf
1138
1139 }
#define M_90_DEGREE
Definition: Mil.h:2873

Member Data Documentation

◆ ApplyFIRF

bool AcqOdyssey::ApplyFIRF

◆ ApplyGainCorr

bool AcqOdyssey::ApplyGainCorr

◆ BGImage

long AcqOdyssey::BGImage
private

◆ BGImageValid

bool AcqOdyssey::BGImageValid

◆ bNorm

char AcqOdyssey::bNorm
private

◆ Buffer

long AcqOdyssey::Buffer
private

◆ BufferN

long AcqOdyssey::BufferN
private

◆ Camera

long AcqOdyssey::Camera
private

◆ Control

long AcqOdyssey::Control
private

◆ ControlBuf

long AcqOdyssey::ControlBuf
private

◆ ConvImage

long AcqOdyssey::ConvImage
private

◆ ConvImage2

long AcqOdyssey::ConvImage2
private

◆ ConvImage32

long AcqOdyssey::ConvImage32
private

◆ CopyOSB

long AcqOdyssey::CopyOSB
private

◆ CopyOSB1

long AcqOdyssey::CopyOSB1
private

◆ Device

long AcqOdyssey::Device
private

◆ Digitizer

long AcqOdyssey::Digitizer
private

◆ eEdbClusters

TClonesArray* AcqOdyssey::eEdbClusters

◆ eEdbView

EdbView* AcqOdyssey::eEdbView

◆ GCImage

long AcqOdyssey::GCImage
private

◆ GCImageValid

bool AcqOdyssey::GCImageValid

◆ GrabOSB

long AcqOdyssey::GrabOSB
private

◆ GrabThread

long AcqOdyssey::GrabThread
private

◆ HostBuffer

long AcqOdyssey::HostBuffer[MAX_NB_GRAB]
private

◆ HostBufferLines

long AcqOdyssey::HostBufferLines
private

◆ HostBufferPitch

long AcqOdyssey::HostBufferPitch
private

◆ Kernel

long AcqOdyssey::Kernel
private

◆ MaxNbGrab

int AcqOdyssey::MaxNbGrab

◆ MilApplication

MIL_ID AcqOdyssey::MilApplication
private

◆ MilBGImage

MIL_ID AcqOdyssey::MilBGImage
private

◆ MilConvImage

MIL_ID AcqOdyssey::MilConvImage
private

◆ MilConvImage1

MIL_ID AcqOdyssey::MilConvImage1
private

◆ MilConvImage2

MIL_ID AcqOdyssey::MilConvImage2
private

◆ MilConvImage32

MIL_ID AcqOdyssey::MilConvImage32
private

◆ MilDigitizer

MIL_ID AcqOdyssey::MilDigitizer
private

◆ MilDisplay

MIL_ID AcqOdyssey::MilDisplay
private

◆ MilGCImage

MIL_ID AcqOdyssey::MilGCImage
private

◆ MilGCKernel

MIL_ID AcqOdyssey::MilGCKernel
private

◆ MilImage

MIL_ID AcqOdyssey::MilImage
private

◆ MilImageDisp

MIL_ID AcqOdyssey::MilImageDisp
private

◆ MilImageN

MIL_ID AcqOdyssey::MilImageN
private

◆ MilKernel

MIL_ID AcqOdyssey::MilKernel
private

◆ MilOverlayImage

MIL_ID AcqOdyssey::MilOverlayImage
private

◆ MilProjResX

MIL_ID AcqOdyssey::MilProjResX
private

◆ MilProjResY

MIL_ID AcqOdyssey::MilProjResY
private

◆ MilSystem

MIL_ID AcqOdyssey::MilSystem
private

◆ OpticalShrinkage

float AcqOdyssey::OpticalShrinkage

◆ Overlay

long AcqOdyssey::Overlay
private

◆ pHostBuffer

void* AcqOdyssey::pHostBuffer[MAX_NB_GRAB]
private

◆ PixelToMicronX

float AcqOdyssey::PixelToMicronX

◆ PixelToMicronY

float AcqOdyssey::PixelToMicronY

◆ SeqThread

long AcqOdyssey::SeqThread
private

◆ ShiftBuffer

long AcqOdyssey::ShiftBuffer
private

◆ ShiftList

long AcqOdyssey::ShiftList
private

◆ SizeX

int AcqOdyssey::SizeX

◆ SizeY

int AcqOdyssey::SizeY

◆ SubtractBG

bool AcqOdyssey::SubtractBG

◆ System

long AcqOdyssey::System
private

◆ Thread

long AcqOdyssey::Thread
private

◆ Threshold [1/2]

int AcqOdyssey::Threshold

◆ Threshold [2/2]

char AcqOdyssey::Threshold

◆ TransparentColor

long AcqOdyssey::TransparentColor
private

◆ ZBuffer

float AcqOdyssey::ZBuffer[MAX_NB_GRAB]

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