FEDRA emulsion software from the OPERA Collaboration
EdbDataSet.h
Go to the documentation of this file.
1 #ifndef ROOT_EdbDataSet
2 #define ROOT_EdbDataSet
3 
5 // //
6 // EdbDataSet //
7 // //
8 // OPERA data set definition&reconstruction //
9 // //
11 #include "TObjArray.h"
12 #include "TFile.h"
13 #include "TCut.h"
14 #include "EdbMask.h"
15 #include "EdbAffine.h"
16 #include "EdbRun.h"
17 #include "EdbPVRec.h"
18 #include "EdbLayer.h"
19 #include "EdbSegmentCut.h"
20 #include "EdbVertex.h"
21 #include "TMatrix.h"
22 #include "TArrayC.h"
23 
24 //______________________________________________________________________________
25 class EdbDataPiece : public TNamed {
26 
27  public:
28  Int_t eAFID; // 1-use fiducial marks transformations, 0 - do not
29  Int_t eCLUST; // 1-use clusters, 0 - do not
30 
31  private:
32  Int_t ePlate; // plate id
33  Int_t ePiece; // piece id in this plate
34  Int_t eFlag; // 0-do nothing, 1-do something
35  TObjArray eRunFiles; //
36  // TString eFileNameRaw; // name of the raw data file (run)
37 
38  EdbLayer *eLayers[3]; // base(0),up(1),down(2) layers
40  TIndexCell *eAreas[3]; // base/up/down surface areas list
41  TObjArray *eCuts[3]; // array of cuts
42  Float_t eCutCP[6]; //
43  Float_t eCutGR; // grain cut (chi)
44  Int_t eOUTPUT; //
45 
46  TCut *eRCuts[3];
47 
48  public:
49  TString eFileNameCP; // name of the couples data file
50  TString eFileNamePar; // name of the parameters file
52 
54  TTree *eCouplesTree;
55 
56  EdbMask *eEraseMask; // id's (entries) of segments to be erased when read couples tree
57 
58  public:
60  EdbDataPiece(int plate, int piece, char* file, int flag);
61  virtual ~EdbDataPiece();
62 
63  void Set0();
64 
65  int Plate() const {return ePlate;}
66  int InitCouplesInd();
67  int GetLinkedSegEntr(int side, int aid, int vid, int sid, TArrayI &entr) const;
68  void SetVolume0( float x0, float y0, float z0, float tx=0, float ty=0 );
69  void SetVolumeA( float dx, float dy ) { GetLayer(0)->SetDXDY( dx, dy); }
70  void AddRunFile( const char *name );
71  void CloseRun();
72  const char *GetRunFile(int i) const;
73  const char *MakeName();
74  const char *MakeNameCP(const char *dir);
75  const char *GetNameCP() const {return eFileNameCP.Data();}
76  void Print();
77  void WriteCuts();
78  int CheckCCD(int maxentr=2000);
79  int RemoveCCDPeak(TMatrix &matr);
81 
82  void SetCouplesTree(TTree *tree) {eCouplesTree=tree;}
83  int Nruns() const { return eRunFiles.GetEntriesFast(); }
84  int Flag() const {return eFlag;}
85  EdbLayer *GetMakeLayer(int id);
86  EdbLayer *GetLayer(int id)
87  { if(eLayers[id]) return (EdbLayer *)eLayers[id]; else return 0; }
88  EdbScanCond *GetMakeCond(int id);
90  { if(eCond[id]) return (EdbScanCond *)eCond[id]; else return 0; }
91 
92 
93  void SetOUTPUT(int out=1) {eOUTPUT=out;}
94  void SetCutGR(float chi) {eCutGR=chi;}
95  void AddCutCP(float var[6]);
96  void AddSegmentCut(int layer, int xi, float var[10]);
97  void AddSegmentCut(int layer, int xi, float min[5], float max[5]);
98  int NCuts(int layer);
99  EdbSegmentCut *GetCut(int layer, int i)
100  { return (EdbSegmentCut *)(eCuts[layer]->UncheckedAt(i)); }
101 
102  void AddRCut(int layer, TCut &cut);
103  TCut *GetRCut(int layer) { return eRCuts[layer]; }
104 
105  float GetCutGR() const {return eCutGR;}
106  int GetOUTPUT() const {return eOUTPUT;}
107 
108  int AcceptViewHeader(const EdbViewHeader *head);
109  void MakeNamePar(const char *dir);
110  int CorrectAngles();
111  int CorrectAngles(TTree *tree);
112  void CorrectShrinkage( int layer, float shr );
113  int UpdateShrPar( int layer );
114  int UpdateAffPar( int layer, EdbAffine2D &aff);
115  int UpdateAffTPar( int layer, EdbAffine2D &aff);
116  int UpdateZPar( int layer, float z );
117  int TakePiecePar();
118  int ReadPiecePar(const char *file);
119  int MakeLinkListArea(int irun);
120  int MakeLinkListCoord(int irun);
121  int GetAreaData(EdbPVRec *ali, int const area, int const side);
122  int TakeRawSegment(EdbView *view, int id, EdbSegP &segP, int side);
123  int PassCuts(int id, float var[5]);
124  int PassCutCP(float var[6]);
125 
126  float GetRawSegmentPix( EdbSegment *seg );
127  float CalculateSegmentChi2( EdbSegment *seg, float sx, float sy, float sz );
128 
129  int GetRawData(EdbPVRec *ali);
130  int GetCPData( EdbPattern *pat, EdbPattern *p1=0, EdbPattern *p2=0 );
131  int GetCPData_new( EdbPattern *pat, EdbPattern *p1=0, EdbPattern *p2=0, TIndex2 *trseg=0 );
132  int TakeCPSegment(EdbSegCouple &cp, EdbSegP &segP);
133 
134  int InitCouplesTree( const char *mode="READ" );
135  static TTree *InitCouplesTree( const char *file, const char *mode );
136  void CloseCPData();
137 
138  ClassDef(EdbDataPiece,2) // Edb raw data unit (scanned plate) associated with run file
139 };
140 
141 
142 //______________________________________________________________________________
143 class EdbDataSet : public TNamed {
144 
145  private:
146 
147  TString eInputList; // list of input data (runs)
148  TString eAnaDir; // path for analysis data directory
149  TString eParDir; // path for parameters directory
150  TString eDBFileName; // root file to keep pieces parameters
151  TFile *eDBFile; // the file (database) to save all parameters
152 
153  TObjArray ePieces; // array of runs
154 
155  public:
156  EdbDataSet();
157  EdbDataSet(const char *file);
158  virtual ~EdbDataSet();
159 
160  void Set0();
161  int N() const { return ePieces.GetEntriesFast(); }
163  { if(id<ePieces.GetEntriesFast()) return (EdbDataPiece *)ePieces.At(id); else return 0;}
164 
165  const char *GetAnaDir() const {return eAnaDir.Data();}
166  const char *GetParDir() const {return eParDir.Data();}
167  int ReadDataSetDef(const char *file);
168  int GetRunList(const char *file);
169  void PrintRunList();
170  void WriteRunList();
171 
172  EdbDataPiece *FindPiece(const char *name);
173 
174  void Print();
175 
176  ClassDef(EdbDataSet,1) // OPERA emulsion data set
177 };
178 
179 //______________________________________________________________________________
180 class EdbDataProc : public TObject {
181 
182  private:
183 
185 
187 
189 
190  public:
191  EdbDataProc();
192  EdbDataProc(int npl, TArrayI &ids, TArrayF &zs);
193  EdbDataProc(const char *file);
194  virtual ~EdbDataProc();
195 
197  EdbPVRec *PVR() const {return ePVR;}
198  EdbPVRec* GetPVR() const {return ePVR;}
199  void SetPVR(EdbPVRec *pvr) {ePVR=pvr;}
200 
201  EdbPVRec *ExtractDataVolume( EdbSegP &v, int plmin, int plmax,
202  float accept[4],
203  int datatype=0 );
204  EdbPVRec *ExtractDataVolume( EdbTrackP &tr, float binx=20, float bint=10,
205  int datatype=0 );
206  EdbPVRec *ExtractDataVolumeF( EdbTrackP &tr, float binx=20, float bint=10,
207  int datatype=0 );
208 
209  int InitVolume(int datatype=0, const char *rcut="1");
210  int InitVolume(EdbPVRec *ali, int datatype=0, TIndex2 *trseg=0 );
211  int InitVolumeTracks(EdbPVRec *ali, const char *rcut);
212  int InitVolumeRaw(EdbPVRec *ali);
213  int Process(){ return Link(); } // to be removed
214  int CheckCCD();
215  int Link();
216  int Link(EdbDataPiece &piece);
217  void Align(int alignFlag);
218 
219  static int LinkTracksWithFlag( EdbPVRec *ali, float p, float probmin, int nsegmin, int maxgap, int flag, float mass=0.1396 );
220  void LinkTracks(int alg=0, float p=-1.);
221  void LinkTracksC(int alg=0, float p=-1.);
222  void LinkRawTracks(int alg=0);
223  void AlignLinkTracks(int alg=0, int alignFlag=0);
224 
225  void SetNoUpdate(int nu) { eNoUpdate=nu; }
226  int NoUpdate() const { return eNoUpdate; }
227 
228  int ShrinkCorr() {return 1;}
229  int CheckShrinkage( EdbPVRec *ali, int couple, float &shr1, float &shr2 );
230  void CorrectAngles();
231 
232  void AjustZ(int doZ);
233  void FineAlignment(int doFine);
234  void FineAlignmentTracks();
235 
236  void FillCouplesTree( TTree *tree, EdbPVRec *al, int fillraw=0 );
237  void CloseCouplesTree( TTree *tree );
238 
239  static int MakeTracksTree(EdbPVRec *ali=0, const char *file="linked_tracks.root");
240  static int MakeVertexTree(TObjArray &vtxarr, const char *file);
241  static int MakeTracksTree(TObjArray &tracks, float xv=0, float yv=0, const char *file="linked_tracks.root");
242  static int ReadVertexTree( EdbVertexRec &vertexrec, const char *fname, const char *rcut, std::map<int,EdbTrackP*> &trackID_map);
243  static int ReadVertexTree( EdbVertexRec &vertexrec, const char *fname, const char *rcut, TObjArray *builttracks = 0);
244  EdbVertex* GetVertexFromTree( EdbVertexRec &vertexrec, const char *fname, const int vertexID );
245  static int ReadTracksTree(EdbPVRec &ali,
246  const char *fname="linked_tracks.root",
247  // int nsegMin=3,
248  // float probMin=0.01,
249  const char *rcut="t.eFlag>-1&&nseg>2&&t.eProb>.01" );
250 
252 
253  ClassDef(EdbDataProc,1) // emulsion data processing
254 };
255 
256 #endif /* ROOT_EdbDataSet */
brick z0
Definition: RecDispMC.C:106
TTree * tr
Definition: Shower_E_FromShowerRoot.C:5
EdbPVRec * ali
Definition: align.C:1
float min(TClonesArray *t)
Definition: bitview.cxx:275
TCut cut
Definition: check_shower.C:6
int max
Definition: check_shower.C:41
void trseg(int event=40, const char *def)
Definition: check_vertex.C:44
Definition: EdbAffine.h:17
Definition: EdbDataSet.h:25
const char * GetRunFile(int i) const
Definition: EdbDataSet.cxx:188
int GetLinkedSegEntr(int side, int aid, int vid, int sid, TArrayI &entr) const
Definition: EdbDataSet.cxx:147
float CalculateSegmentChi2(EdbSegment *seg, float sx, float sy, float sz)
Definition: EdbDataSet.cxx:658
int GetOUTPUT() const
Definition: EdbDataSet.h:106
void MakeNamePar(const char *dir)
Definition: EdbDataSet.cxx:273
void SetCutGR(float chi)
Definition: EdbDataSet.h:94
void AddRunFile(const char *name)
Definition: EdbDataSet.cxx:181
const char * MakeNameCP(const char *dir)
Definition: EdbDataSet.cxx:204
Int_t ePiece
Definition: EdbDataSet.h:33
void AddRCut(int layer, TCut &cut)
Definition: EdbDataSet.cxx:240
void SetOUTPUT(int out=1)
Definition: EdbDataSet.h:93
Int_t eFlag
Definition: EdbDataSet.h:34
int UpdateAffTPar(int layer, EdbAffine2D &aff)
Definition: EdbDataSet.cxx:534
void AddSegmentCut(int layer, int xi, float var[10])
Definition: EdbDataSet.cxx:222
Float_t eCutCP[6]
Definition: EdbDataSet.h:42
Int_t ePlate
Definition: EdbDataSet.h:32
int InitCouplesTree(const char *mode="READ")
Definition: EdbDataSet.cxx:1244
TString eFileNameCP
root-style text cuts
Definition: EdbDataSet.h:49
TCut * GetRCut(int layer)
Definition: EdbDataSet.h:103
int RemoveCCDPeak(TMatrix &matr)
Definition: EdbDataSet.cxx:993
void Set0()
Definition: EdbDataSet.cxx:66
EdbSegmentCut * GetCut(int layer, int i)
Definition: EdbDataSet.h:99
int GetAreaData(EdbPVRec *ali, int const area, int const side)
Definition: EdbDataSet.cxx:1142
int MakeLinkListArea(int irun)
Definition: EdbDataSet.cxx:1187
EdbScanCond * eCond[3]
Definition: EdbDataSet.h:39
int TakePiecePar()
Definition: EdbDataSet.cxx:281
int Flag() const
Definition: EdbDataSet.h:84
int GetRawData(EdbPVRec *ali)
Definition: EdbDataSet.cxx:1088
int GetCPData_new(EdbPattern *pat, EdbPattern *p1=0, EdbPattern *p2=0, TIndex2 *trseg=0)
Definition: EdbDataSet.cxx:797
EdbScanCond * GetMakeCond(int id)
Definition: EdbDataSet.cxx:263
const char * GetNameCP() const
Definition: EdbDataSet.h:75
void SetVolume0(float x0, float y0, float z0, float tx=0, float ty=0)
Definition: EdbDataSet.cxx:460
void CloseCPData()
Definition: EdbDataSet.cxx:91
TIndexCell * eCouplesInd
Definition: EdbDataSet.h:51
void SetVolumeA(float dx, float dy)
Definition: EdbDataSet.h:69
int TakeRawSegment(EdbView *view, int id, EdbSegP &segP, int side)
Definition: EdbDataSet.cxx:602
int UpdateShrPar(int layer)
Definition: EdbDataSet.cxx:474
int Nruns() const
Definition: EdbDataSet.h:83
TString eFileNamePar
Definition: EdbDataSet.h:50
EdbLayer * GetMakeLayer(int id)
Definition: EdbDataSet.cxx:213
TTree * eCouplesTree
Definition: EdbDataSet.h:54
int PassCuts(int id, float var[5])
Definition: EdbDataSet.cxx:593
EdbMask * eEraseMask
Definition: EdbDataSet.h:56
Int_t eCLUST
Definition: EdbDataSet.h:29
int UpdateZPar(int layer, float z)
Definition: EdbDataSet.cxx:513
int UpdateSegmentCut(EdbSegmentCut cut)
Definition: EdbDataSet.cxx:1034
int CorrectAngles()
Definition: EdbDataSet.cxx:880
TObjArray eRunFiles
Definition: EdbDataSet.h:35
int PassCutCP(float var[6])
Definition: EdbDataSet.cxx:585
virtual ~EdbDataPiece()
Definition: EdbDataSet.cxx:50
int ReadPiecePar(const char *file)
Definition: EdbDataSet.cxx:287
EdbLayer * eLayers[3]
Definition: EdbDataSet.h:38
float GetRawSegmentPix(EdbSegment *seg)
Definition: EdbDataSet.cxx:695
Int_t eAFID
Definition: EdbDataSet.h:28
EdbScanCond * GetCond(int id)
Definition: EdbDataSet.h:89
void WriteCuts()
Definition: EdbDataSet.cxx:559
int AcceptViewHeader(const EdbViewHeader *head)
Definition: EdbDataSet.cxx:1222
void Print()
Definition: EdbDataSet.cxx:166
int CheckCCD(int maxentr=2000)
Definition: EdbDataSet.cxx:947
int MakeLinkListCoord(int irun)
Definition: EdbDataSet.cxx:1309
EdbLayer * GetLayer(int id)
Definition: EdbDataSet.h:86
int UpdateAffPar(int layer, EdbAffine2D &aff)
Definition: EdbDataSet.cxx:493
TCut * eRCuts[3]
Definition: EdbDataSet.h:46
Int_t eOUTPUT
Definition: EdbDataSet.h:44
TObjArray * eCuts[3]
Definition: EdbDataSet.h:41
int GetCPData(EdbPattern *pat, EdbPattern *p1=0, EdbPattern *p2=0)
Definition: EdbDataSet.cxx:736
TIndexCell * eAreas[3]
Definition: EdbDataSet.h:40
void CloseRun()
Definition: EdbDataSet.cxx:105
Float_t eCutGR
Definition: EdbDataSet.h:43
float GetCutGR() const
Definition: EdbDataSet.h:105
void CorrectShrinkage(int layer, float shr)
Definition: EdbDataSet.cxx:468
int InitCouplesInd()
Definition: EdbDataSet.cxx:112
EdbRun * eRun
Definition: EdbDataSet.h:53
int Plate() const
Definition: EdbDataSet.h:65
void SetCouplesTree(TTree *tree)
Definition: EdbDataSet.h:82
int TakeCPSegment(EdbSegCouple &cp, EdbSegP &segP)
Definition: EdbDataSet.cxx:711
int NCuts(int layer)
Definition: EdbDataSet.cxx:256
void AddCutCP(float var[6])
Definition: EdbDataSet.cxx:250
const char * MakeName()
Definition: EdbDataSet.cxx:195
Definition: EdbDataSet.h:180
int CheckShrinkage(EdbPVRec *ali, int couple, float &shr1, float &shr2)
Definition: EdbDataSet.cxx:1824
static int MakeVertexTree(TObjArray &vtxarr, const char *file)
Definition: EdbDataSet.cxx:2522
void SetNoUpdate(int nu)
Definition: EdbDataSet.h:225
int InitVolumeTracks(EdbPVRec *ali, const char *rcut)
Definition: EdbDataSet.cxx:2096
EdbDataSet * GetDataSet()
Definition: EdbDataSet.h:196
EdbDataSet * eDataSet
Definition: EdbDataSet.h:184
void AjustZ(int doZ)
Definition: EdbDataSet.cxx:2247
int NoUpdate() const
Definition: EdbDataSet.h:226
EdbVertex * GetVertexFromTree(EdbVertexRec &vertexrec, const char *fname, const int vertexID)
Definition: EdbDataSet.cxx:2854
EdbPVRec * PVR() const
Definition: EdbDataSet.h:197
void AlignLinkTracks(int alg=0, int alignFlag=0)
Definition: EdbDataSet.cxx:2479
void Align(int alignFlag)
Definition: EdbDataSet.cxx:2231
void CorrectAngles()
Definition: EdbDataSet.cxx:1867
virtual ~EdbDataProc()
Definition: EdbDataSet.cxx:1629
int InitVolumeRaw(EdbPVRec *ali)
Definition: EdbDataSet.cxx:1881
static int ReadTracksTree(EdbPVRec &ali, const char *fname="linked_tracks.root", const char *rcut="t.eFlag>-1&&nseg>2&&t.eProb>.01")
Definition: EdbDataSet.cxx:2937
EdbPVRec * GetPVR() const
Definition: EdbDataSet.h:198
int InitVolume(int datatype=0, const char *rcut="1")
Definition: EdbDataSet.cxx:2071
int Link()
Definition: EdbDataSet.cxx:1654
int Process()
Definition: EdbDataSet.h:213
void LinkRawTracks(int alg=0)
Definition: EdbDataSet.cxx:2377
void FillCouplesTree(TTree *tree, EdbPVRec *al, int fillraw=0)
Definition: EdbDataSet.cxx:1745
static int ReadVertexTree(EdbVertexRec &vertexrec, const char *fname, const char *rcut, std::map< int, EdbTrackP * > &trackID_map)
TIndex2 * MakeTracksSegmentsList(EdbPVRec &ali)
Definition: EdbDataSet.cxx:3018
void CloseCouplesTree(TTree *tree)
Definition: EdbDataSet.cxx:1814
EdbDataProc()
==============================================================================
Definition: EdbDataSet.cxx:1588
void LinkTracks(int alg=0, float p=-1.)
Definition: EdbDataSet.cxx:2314
static int MakeTracksTree(EdbPVRec *ali=0, const char *file="linked_tracks.root")
Definition: EdbDataSet.cxx:2511
static int LinkTracksWithFlag(EdbPVRec *ali, float p, float probmin, int nsegmin, int maxgap, int flag, float mass=0.1396)
Definition: EdbDataSet.cxx:2261
void FineAlignment(int doFine)
Definition: EdbDataSet.cxx:2400
void FineAlignmentTracks()
Definition: EdbDataSet.cxx:2138
int CheckCCD()
Definition: EdbDataSet.cxx:1636
int eNoUpdate
Definition: EdbDataSet.h:188
EdbPVRec * ExtractDataVolumeF(EdbTrackP &tr, float binx=20, float bint=10, int datatype=0)
Definition: EdbDataSet.cxx:1962
int ShrinkCorr()
Definition: EdbDataSet.h:228
void SetPVR(EdbPVRec *pvr)
Definition: EdbDataSet.h:199
void LinkTracksC(int alg=0, float p=-1.)
Definition: EdbDataSet.cxx:2349
EdbPVRec * ePVR
Definition: EdbDataSet.h:186
EdbPVRec * ExtractDataVolume(EdbSegP &v, int plmin, int plmax, float accept[4], int datatype=0)
Definition: EdbDataSet.cxx:1919
Definition: EdbDataSet.h:143
void Set0()
Definition: EdbDataSet.cxx:1437
int GetRunList(const char *file)
Definition: EdbDataSet.cxx:1542
const char * GetParDir() const
Definition: EdbDataSet.h:166
void PrintRunList()
Definition: EdbDataSet.cxx:1496
virtual ~EdbDataSet()
Definition: EdbDataSet.cxx:1431
void Print()
Definition: EdbDataSet.cxx:1504
EdbDataPiece * GetPiece(int id)
Definition: EdbDataSet.h:162
TString eAnaDir
Definition: EdbDataSet.h:148
EdbDataSet()
==============================================================================
Definition: EdbDataSet.cxx:1417
TString eDBFileName
Definition: EdbDataSet.h:150
TObjArray ePieces
Definition: EdbDataSet.h:153
TString eParDir
Definition: EdbDataSet.h:149
void WriteRunList()
Definition: EdbDataSet.cxx:1516
int N() const
Definition: EdbDataSet.h:161
int ReadDataSetDef(const char *file)
Definition: EdbDataSet.cxx:1448
const char * GetAnaDir() const
Definition: EdbDataSet.h:165
EdbDataPiece * FindPiece(const char *name)
Definition: EdbDataSet.cxx:1529
TString eInputList
Definition: EdbDataSet.h:147
TFile * eDBFile
Definition: EdbDataSet.h:151
Definition: EdbLayer.h:40
void SetDXDY(float dx, float dy)
Definition: EdbLayer.h:98
Definition: EdbMask.h:8
Definition: EdbPVRec.h:148
Definition: EdbPattern.h:280
Definition: EdbRun.h:74
Definition: EdbScanCond.h:10
Definition: EdbSegCouple.h:14
Definition: EdbSegP.h:18
Definition: EdbSegmentCut.h:6
Definition: EdbSegment.h:61
Definition: EdbPattern.h:118
Definition: EdbVertex.h:194
Definition: EdbVertex.h:68
Definition: EdbView.h:26
Definition: EdbView.h:134
Definition: EdbMath.h:49
Definition: TIndexCell.h:19
TTree * tracks
Definition: check_tr.C:19
const char * fname
Definition: mc2raw.cxx:41
Int_t plate
Definition: merge_Energy_SytematicSources_Electron.C:1
const char * name
Definition: merge_Energy_SytematicSources_Electron.C:24
UInt_t id
Definition: tlg2pattern.C:118
int nsegmin
Definition: check_vertex.C:23
float mass
Definition: check_vertex.C:21
p
Definition: testBGReduction_AllMethods.C:8
EdbSegCouple * cp
Definition: tlg2pattern.C:29
TFile * file
Definition: write_pvr.C:3