FEDRA emulsion software from the OPERA Collaboration
EdbView.h
Go to the documentation of this file.
1 #ifndef ROOT_EdbView
2 #define ROOT_EdbView
3 
5 // //
6 // EdbView //
7 // //
8 // Base scanning data object: entry into Run tree //
9 // //
11 
12 #include "TClonesArray.h"
13 #include "TObjArray.h"
14 #include "TList.h"
15 #include "TPolyMarker3D.h"
16 #include "TArrayF.h"
17 
18 #include "EdbAffine.h"
19 #include "EdbCluster.h"
20 #include "EdbSegment.h"
21 
22 class EdbTrack;
23 class EdbFrame;
24 
25 //______________________________________________________________________________
26 class EdbViewHeader : public TObject {
27 
28 private:
29 
30  Int_t eViewID; // View ID in the Area
31  Int_t eAreaID; // Area ID in Run (fragment id)
32 
33  Float_t eXview; // stage coord, top left corner
34  Float_t eYview; //
35 
36  Float_t eZ1; //
37  Float_t eZ2; // emulsion surfaces in absolute stage coordinates
38  Float_t eZ3; // measured once per view
39  Float_t eZ4; //
40 
41  Int_t eNframesTop; // top | number of frames in the view (0,1,2...16...)
42  Int_t eNframesBot; // bottom |
43 
44  Int_t eTime; // System time since last view saving in msec
45 
46  Int_t eNclusters; // number of clusters saved in the view
47  Int_t eNsegments; // number of segments saved in the view
48 
49  EdbAffine2D eAff; // affine transformation for the view
50 
51  TArrayF *eZlevels;
52 
53  Int_t eCol; // the position of the view in the scanned area, measured in views,
54  Int_t eRow; // starting from the reference angle (typically up-left)
55 
56  Int_t eStatus; // View scanning status
57  Int_t eEvent; // optional: the part of the tree may be associated with event. Setted via run->header->Flag(8)
58  Int_t eTrack; // optional: some view group may be associated with track. Setted via run->header->Flag(9)
59 
60 public:
61  EdbViewHeader();
62  virtual ~EdbViewHeader();
63 
64  void Set0();
65  void Copy(EdbViewHeader *h) { memcpy( (void*)this, (void*)h, sizeof(EdbViewHeader) ); }
66 
67  void SetAffine( float a11, float a12,
68  float a21, float a22,
69  float b1, float b2 )
70  { eAff.Set(a11,a12,a21,a22,b1,b2); }
71 
72  EdbAffine2D const *GetAffine() const { return &eAff; }
73 
74  void SetZlevels(Int_t n, const Float_t *array) {
75  //dummy
76  //if(!eZlevels) eZlevels=new TArrayF(n);
77  //eZlevels->Set(n,array);
78  }
79 
80  TArrayF *GetZlevels() const {return 0;} //eZlevels;}
81 
82  Int_t GetTime() { return eTime; }
83  void SetTime( Int_t time ) { eTime = time; }
84 
85  void SetNclusters(int nclu) { eNclusters=nclu; }
86  void SetNsegments(int nseg) { eNsegments=nseg; }
87  Int_t GetNclusters() const { return eNclusters; }
88  Int_t GetNsegments() const { return eNsegments; }
89 
90  Int_t GetViewID() const { return eViewID; }
91  Int_t GetAreaID() const { return eAreaID; }
92 
93  Float_t GetXview() const { return eXview; }
94  Float_t GetYview() const { return eYview; }
95 
96  Float_t GetXviewAff() const { return eAff.B1(); }
97  Float_t GetYviewAff() const { return eAff.B2(); }
98 
99  void SetViewID( int id ) { eViewID = id; }
100  void SetAreaID( int id ) { eAreaID = id; }
101  void SetCoordXY(float x, float y) { eXview = x; eYview=y; }
102  void SetCoordZ(float z1, float z2, float z3, float z4)
103  { eZ1=z1; eZ2=z2; eZ3=z3; eZ4=z4; }
104  void SetNframes( int top, int bot ) { eNframesTop=top; eNframesBot=bot; }
105  void SetColRow( int col, int row) { eCol=col; eRow=row; }
106  void SetStatus( int st) { eStatus=st; }
107  void SetTrack( int track) { eTrack=track; }
108  void SetEvent( int event) { eEvent=event; }
109 
110  Float_t GetZ1() const { return eZ1; }
111  Float_t GetZ2() const { return eZ2; }
112  Float_t GetZ3() const { return eZ3; }
113  Float_t GetZ4() const { return eZ4; }
114 
115  Float_t GetZ0top() const { return eZ1; }
116  Float_t GetZ0bot() const { return eZ3; }
117  Float_t GetDZtop() const { return eZ2-eZ1; }
118  Float_t GetDZbot() const { return eZ4-eZ3; }
119 
120  Int_t GetNframesTop() const { return eNframesTop; }
121  Int_t GetNframesBot() const { return eNframesBot; }
122 
123  Int_t GetCol() const { return eCol; }
124  Int_t GetRow() const { return eRow; }
125  Int_t GetStatus() const { return eStatus; }
126  Int_t GetTrack() const { return eTrack; }
127  Int_t GetEvent() const { return eEvent; }
128  void Print() const;
129 
130  ClassDef(EdbViewHeader,5) // view identification
131 };
132 
133 //______________________________________________________________________________
134 class EdbView : public TObject {
135 
136 private:
137 
138  EdbViewHeader *eHeader; // View header
139 
140  TClonesArray *eClusters; // array of Clusters
141  TClonesArray *eSegments; // array of Segments
142  TClonesArray *eTracks; // array of Tracks
143  TClonesArray *eFrames; // array of Frames (images)
144 
145  Long_t eLastSystemTime; // system time when view was saved
146 
147 public:
149  virtual ~EdbView();
150 
151  void Clear();
152 
153  void Scale(float zscale);
154  void Shift(float zshift);
155  void Transform( const EdbAffine2D *aff );
156 
157  void GenerateClustersFog( float density );
158  void GenerateClustersSegment( EdbSegment *segment, int n0=25, float sigma=.1 );
159  void GenerateClustersTrack( EdbTrack *track, int n0=25, float sigma=.1 );
160  void Print( Option_t *opt=0 ) const;
161  void PrintClusters( Option_t *opt=0 ) const;
162 
163  EdbViewHeader *GetHeader() const { return eHeader; }
164  TClonesArray *GetClusters() const { return eClusters; }
165  TClonesArray *GetSegments() const { return eSegments; }
166  TClonesArray *GetTracks() const { return eTracks; }
167  TClonesArray *GetFrames() const { return eFrames; }
168 
169  void *GetHeaderAddr() { return &eHeader; }
170  void *GetClustersAddr() { return &eClusters; }
171  void *GetSegmentsAddr() { return &eSegments; }
172  void *GetTracksAddr() { return &eTracks; }
173  void *GetFramesAddr() { return &eFrames; }
174 
176 
180 
181  TObjArray *GetSegmentsClusters() const;
182 
183  void SetAreaID( int id ) { GetHeader()->SetAreaID(id); }
184  void SetNframes( int top, int bot) { GetHeader()->SetNframes(top,bot); }
185  void SetCoordXY(float x, float y) { GetHeader()->SetCoordXY(x,y); }
186  void SetCoordZ(float z1, float z2, float z3, float z4)
187  { GetHeader()->SetCoordZ(z1,z2,z3,z4); }
188 
189 
190  Int_t GetViewID() const { if(eHeader) return GetHeader()->GetViewID(); else return 0;}
191  Int_t GetAreaID() const { if(eHeader) return GetHeader()->GetAreaID(); else return 0;}
192 
193  Float_t GetXview() const { if(eHeader) return GetHeader()->GetXview(); else return 0; }
194  Float_t GetYview() const { if(eHeader) return GetHeader()->GetYview(); else return 0; }
195 
196  Float_t GetZ1() const { if(eHeader) return GetHeader()->GetZ1(); else return 0; }
197  Float_t GetZ2() const { if(eHeader) return GetHeader()->GetZ2(); else return 0; }
198  Float_t GetZ3() const { if(eHeader) return GetHeader()->GetZ3(); else return 0; }
199  Float_t GetZ4() const { if(eHeader) return GetHeader()->GetZ4(); else return 0; }
200 
201  Float_t GetZ0top() const { if(eHeader) return GetHeader()->GetZ0top(); else return 0; }
202  Float_t GetZ0bot() const { if(eHeader) return GetHeader()->GetZ0bot(); else return 0; }
203  Float_t GetDZtop() const { if(eHeader) return GetHeader()->GetDZtop(); else return 0; }
204  Float_t GetDZbot() const { if(eHeader) return GetHeader()->GetDZbot(); else return 0; }
205 
206  Int_t GetNframes() const { return GetNframesTop()+GetNframesBot(); }
207  Int_t GetNframesTop() const { if(eHeader) return GetHeader()->GetNframesTop(); else return 0; }
208  Int_t GetNframesBot() const { if(eHeader) return GetHeader()->GetNframesBot(); else return 0; }
209 
210  Int_t GetTime() const { if(eHeader) return GetHeader()->GetTime(); else return 0; }
211  Long_t GetLastSystemTime() const { return eLastSystemTime; }
212  void SetLastSystemTime(Long_t time) { eLastSystemTime=time; }
213 
214  TList *GetClustersFrame( int frame ) const;
215  Int_t Nclusters() const { return eClusters->GetLast()+1; }
216  Int_t Nsegments() const { return eSegments->GetLast()+1; }
217  Int_t Ntracks() const { return eTracks->GetLast()+1; }
218  EdbCluster *GetCluster(int i) const { return (EdbCluster*)eClusters->At(i); }
219  EdbSegment *GetSegment(int i) const { return (EdbSegment*)eSegments->At(i); }
220  EdbTrack *GetTrack(int i) const { return (EdbTrack*)eTracks->At(i); }
221  EdbFrame *GetFrame(int i) const { return (EdbFrame*)eFrames->At(i); }
222  float ZFrameMin() const;
223  float ZFrameMax() const;
224 
226  {return (EdbCluster*)(new((*eClusters)[eClusters->GetLast()+1]) EdbCluster( *c )); }
227  EdbCluster *AddCluster( float x, float y, float z,
228  float a, float v, int f, int s, int seg=-1)
229  {return (EdbCluster*)(new((*eClusters)[eClusters->GetLast()+1]) EdbCluster(x,y,z, a,v,f,s,seg)); }
230 
231  EdbSegment *AddSegment( float x, float y, float z, float tx, float ty,
232  float dz=0, int side=0, int puls=0, int id=-1)
233  {return (EdbSegment*)(new((*eSegments)[eSegments->GetLast()+1]) EdbSegment(x,y,z, tx,ty, dz, side, puls, id)); }
234 
236  void AddSegment( EdbSegment *s );
237  void AddTrack( EdbTrack *t );
238  void AddFrame( int id, float z, int ncl=0, int npix=0 );
239  void AddFrame( EdbFrame *frame );
240 
241  void GenerateFrames( int n=32 );
242  //TH2S *GetHist2() const;
243 
244  void DeleteClustersFog();
245 
246  TPolyMarker3D *DrawClustersFog(Option_t *opt=0) const;
247  TPolyMarker3D *DrawClustersSegments(Option_t *opt=0) const;
248 
249  void Draw(Option_t *option="");
250 
251  Int_t ReadView( char *fname );
252 
253  float Xmin() const { return 0; } // View coordinates are in pixels
254  float Ymin() const { return 0; } // starting from 0
255  float Zmin() const {return TMath::Min( GetZ1(), GetZ4() );}
256  float Zmax() const {return TMath::Max( GetZ1(), GetZ4() );}
257 
258  ClassDef(EdbView,3) // Base scanning data object: entry into Run tree
259 };
260 
261 #endif /* ROOT_EdbView */
262 
263 
264 
brick dz
Definition: RecDispMC.C:107
FILE * f
Definition: RecDispMC.C:150
void a()
Definition: check_aligned.C:59
TTree * t
Definition: check_shower.C:4
Definition: EdbAffine.h:17
Float_t B2() const
Definition: EdbAffine.h:48
Float_t B1() const
Definition: EdbAffine.h:47
void Set(EdbAffine2D &a)
Definition: EdbAffine.h:36
Definition: EdbCluster.h:19
Definition: EdbFrame.h:20
Definition: EdbSegment.h:61
Definition: EdbSegment.h:125
Definition: EdbView.h:26
TArrayF * GetZlevels() const
Definition: EdbView.h:80
Float_t GetDZbot() const
Definition: EdbView.h:118
Int_t GetEvent() const
Definition: EdbView.h:127
void SetTrack(int track)
Definition: EdbView.h:107
void SetColRow(int col, int row)
Definition: EdbView.h:105
Int_t eNclusters
Definition: EdbView.h:46
void SetZlevels(Int_t n, const Float_t *array)
Definition: EdbView.h:74
Int_t GetCol() const
Definition: EdbView.h:123
Int_t eAreaID
Definition: EdbView.h:31
Float_t GetXview() const
Definition: EdbView.h:93
void SetCoordZ(float z1, float z2, float z3, float z4)
Definition: EdbView.h:102
Int_t GetNclusters() const
Definition: EdbView.h:87
Int_t eTime
Definition: EdbView.h:44
Int_t eNsegments
Definition: EdbView.h:47
Float_t GetYview() const
Definition: EdbView.h:94
Int_t eTrack
Definition: EdbView.h:58
Int_t GetNframesTop() const
Definition: EdbView.h:120
Float_t eZ1
Definition: EdbView.h:36
void SetNsegments(int nseg)
Definition: EdbView.h:86
Int_t eNframesTop
Definition: EdbView.h:41
EdbAffine2D eAff
Definition: EdbView.h:49
void SetEvent(int event)
Definition: EdbView.h:108
Float_t eYview
Definition: EdbView.h:34
EdbAffine2D const * GetAffine() const
Definition: EdbView.h:72
void SetAreaID(int id)
Definition: EdbView.h:100
Int_t GetNsegments() const
Definition: EdbView.h:88
Float_t GetZ4() const
Definition: EdbView.h:113
Float_t GetZ0bot() const
Definition: EdbView.h:116
void SetViewID(int id)
Definition: EdbView.h:99
void Copy(EdbViewHeader *h)
Definition: EdbView.h:65
Int_t GetTime()
Definition: EdbView.h:82
void Print() const
Definition: EdbView.cxx:749
Float_t eZ2
Definition: EdbView.h:37
Int_t GetTrack() const
Definition: EdbView.h:126
void SetTime(Int_t time)
Definition: EdbView.h:83
Float_t GetXviewAff() const
Definition: EdbView.h:96
Float_t GetDZtop() const
Definition: EdbView.h:117
virtual ~EdbViewHeader()
Definition: EdbView.cxx:677
Int_t GetAreaID() const
Definition: EdbView.h:91
void SetNclusters(int nclu)
Definition: EdbView.h:85
Int_t GetNframesBot() const
Definition: EdbView.h:121
Int_t GetRow() const
Definition: EdbView.h:124
TArrayF * eZlevels
Definition: EdbView.h:51
void SetNframes(int top, int bot)
Definition: EdbView.h:104
Float_t GetZ2() const
Definition: EdbView.h:111
Float_t GetZ3() const
Definition: EdbView.h:112
void SetAffine(float a11, float a12, float a21, float a22, float b1, float b2)
Definition: EdbView.h:67
Float_t eZ4
Definition: EdbView.h:39
Int_t eEvent
Definition: EdbView.h:57
Int_t GetStatus() const
Definition: EdbView.h:125
Int_t eRow
Definition: EdbView.h:54
Int_t GetViewID() const
Definition: EdbView.h:90
Float_t eXview
Definition: EdbView.h:33
Int_t eViewID
Definition: EdbView.h:30
Float_t GetZ0top() const
Definition: EdbView.h:115
void SetCoordXY(float x, float y)
Definition: EdbView.h:101
Float_t eZ3
Definition: EdbView.h:38
Float_t GetZ1() const
Definition: EdbView.h:110
Float_t GetYviewAff() const
Definition: EdbView.h:97
void SetStatus(int st)
Definition: EdbView.h:106
Int_t eNframesBot
Definition: EdbView.h:42
void Set0()
Definition: EdbView.cxx:723
EdbViewHeader()
Definition: EdbView.cxx:671
Int_t eCol
z of each taken view (frame) (obsolete!)
Definition: EdbView.h:53
Int_t eStatus
Definition: EdbView.h:56
Definition: EdbView.h:134
TClonesArray * eClusters
Definition: EdbView.h:140
EdbViewHeader * GetHeader() const
Definition: EdbView.h:163
TPolyMarker3D * DrawClustersSegments(Option_t *opt=0) const
Definition: EdbView.cxx:316
void AddTrack(EdbTrack *t)
Definition: EdbView.cxx:261
Float_t GetXview() const
Definition: EdbView.h:193
Int_t Ntracks() const
Definition: EdbView.h:217
TClonesArray * eSegments
Definition: EdbView.h:141
void * GetClustersAddr()
Definition: EdbView.h:170
EdbSegment * AddSegment(float x, float y, float z, float tx, float ty, float dz=0, int side=0, int puls=0, int id=-1)
Definition: EdbView.h:231
EdbCluster * AddCluster(float x, float y, float z, float a, float v, int f, int s, int seg=-1)
Definition: EdbView.h:227
Long_t GetLastSystemTime() const
Definition: EdbView.h:211
Long_t eLastSystemTime
Definition: EdbView.h:145
Int_t GetNframesTop() const
Definition: EdbView.h:207
void GenerateFrames(int n=32)
Definition: EdbView.cxx:658
void * GetSegmentsAddr()
Definition: EdbView.h:171
void SetCoordZ(float z1, float z2, float z3, float z4)
Definition: EdbView.h:186
Float_t GetZ3() const
Definition: EdbView.h:198
TPolyMarker3D * DrawClustersFog(Option_t *opt=0) const
Definition: EdbView.cxx:300
Int_t GetViewID() const
Definition: EdbView.h:190
Float_t GetZ0bot() const
Definition: EdbView.h:202
void PrintClusters(Option_t *opt=0) const
Definition: EdbView.cxx:196
float ZFrameMin() const
Definition: EdbView.cxx:222
void GenerateClustersTrack(EdbTrack *track, int n0=25, float sigma=.1)
Definition: EdbView.cxx:539
int AttachClustersToSegments()
Definition: EdbView.cxx:360
void * GetTracksAddr()
Definition: EdbView.h:172
Int_t GetNframesBot() const
Definition: EdbView.h:208
EdbFrame * GetFrame(int i) const
Definition: EdbView.h:221
TClonesArray * GetClusters() const
Definition: EdbView.h:164
Int_t Nsegments() const
Definition: EdbView.h:216
float Zmin() const
Definition: EdbView.h:255
Int_t GetNframes() const
Definition: EdbView.h:206
TClonesArray * GetFrames() const
Definition: EdbView.h:167
float ZFrameMax() const
Definition: EdbView.cxx:234
TList * GetClustersFrame(int frame) const
Definition: EdbView.cxx:285
void SetAreaID(int id)
Definition: EdbView.h:183
Float_t GetDZtop() const
Definition: EdbView.h:203
float Zmax() const
Definition: EdbView.h:256
EdbViewHeader * eHeader
Definition: EdbView.h:138
void Draw(Option_t *option="")
Definition: EdbView.cxx:466
void SetCoordXY(float x, float y)
Definition: EdbView.h:185
Float_t GetDZbot() const
Definition: EdbView.h:204
Int_t GetAreaID() const
Definition: EdbView.h:191
void Print(Option_t *opt=0) const
Definition: EdbView.cxx:185
void Transform(const EdbAffine2D *aff)
Definition: EdbView.cxx:96
Float_t GetZ1() const
Definition: EdbView.h:196
void Scale(float zscale)
Definition: EdbView.cxx:113
int AttachSegmentsToTracks()
Definition: EdbView.cxx:332
int AttachClustersToSegmentsFast()
Definition: EdbView.cxx:372
float Ymin() const
Definition: EdbView.h:254
EdbCluster * GetCluster(int i) const
Definition: EdbView.h:218
Int_t Nclusters() const
Definition: EdbView.h:215
void AddFrame(int id, float z, int ncl=0, int npix=0)
Definition: EdbView.cxx:268
EdbSegment * GetSegment(int i) const
Definition: EdbView.h:219
virtual ~EdbView()
Definition: EdbView.cxx:40
void GenerateClustersFog(float density)
Definition: EdbView.cxx:616
TClonesArray * GetSegments() const
Definition: EdbView.h:165
Float_t GetZ0top() const
Definition: EdbView.h:201
EdbCluster * AddCluster(EdbCluster *c)
Definition: EdbView.h:225
Int_t GetTime() const
Definition: EdbView.h:210
void * GetFramesAddr()
Definition: EdbView.h:173
TObjArray * GetSegmentsClusters() const
Definition: EdbView.cxx:434
void Shift(float zshift)
Definition: EdbView.cxx:147
void Clear()
Definition: EdbView.cxx:79
void GenerateClustersSegment(EdbSegment *segment, int n0=25, float sigma=.1)
Definition: EdbView.cxx:567
Float_t GetZ4() const
Definition: EdbView.h:199
float Xmin() const
Definition: EdbView.h:253
Int_t ReadView(char *fname)
Definition: EdbView.cxx:177
TClonesArray * eFrames
Definition: EdbView.h:143
void SetLastSystemTime(Long_t time)
Definition: EdbView.h:212
TClonesArray * eTracks
Definition: EdbView.h:142
void * GetHeaderAddr()
Definition: EdbView.h:169
void SetNframes(int top, int bot)
Definition: EdbView.h:184
int AttachClustersToSegmentsSlow()
Definition: EdbView.cxx:409
void DeleteClustersFog()
Definition: EdbView.cxx:208
Float_t GetZ2() const
Definition: EdbView.h:197
Float_t GetYview() const
Definition: EdbView.h:194
EdbTrack * GetTrack(int i) const
Definition: EdbView.h:220
TClonesArray * GetTracks() const
Definition: EdbView.h:166
Definition: bitview.h:14
const char * opt
Definition: mc2raw.cxx:42
const char * fname
Definition: mc2raw.cxx:41
UInt_t id
Definition: tlg2pattern.C:118
int event
Definition: shower_tr.C:25
EdbSegP * s
Definition: tlg2pattern.C:32