FEDRA emulsion software from the OPERA Collaboration
EdbSegP.h
Go to the documentation of this file.
1 #ifndef ROOT_EdbSegP
2 #define ROOT_EdbSegP
3 
5 // //
6 // EdbSegP //
7 // //
8 // segment with the attributes useful for processing //
9 // //
11 #include "TMath.h"
12 #include "TRefArray.h"
13 #include "TMatrixD.h"
14 #include "EdbVirtual.h"
15 #include "EdbID.h"
16 
17 //______________________________________________________________________________
18 class EdbSegP : public TObject, public EdbTrack2D {
19 
20  private:
21  Int_t ePID; // mother pattern ID
22  Int_t eID; // segment id (unique in plate)
23  Int_t eVid[2]; // [0]-view entry in the input tree, [1]-segment entry in the view
24  Int_t eAid[2]; // [0]-AreaID, [1]-ViewID
25  Int_t eFlag;
26  Int_t eTrack; // id of the track (-1) if no track, for a track object it represents the index of trk.root file (tracks tree)
27  public:
28  Float_t eX , eY, eZ; // coordinates
29  Float_t eTX, eTY; // direction tangents
30  private:
31  Float_t eSZ; // square of the Z-error
32  Float_t eChi2; // chi-square
33  Float_t eProb; // probability
34  Float_t eW; // weight
35  Float_t eVolume; // segment volume
36  Float_t eDZ; // the length of segment along z-axis
37  Float_t eDZem; // the length of segment along z-axis in the emulsion
38  Float_t eP; // momentum of the particle
39  Int_t eMCTrack; // MC track number
40  Int_t eMCEvt; // MC event number
41  TRefArray *eEMULDigitArray;
42  EdbID eScanID; // brick:plate:major:minor
43  // Int_t ePlate; // plate id
44  protected:
45 
46  TMatrixD *eCOV; // covariance matrix of the parameters (x,y,tx,ty,p)
47 
48  public:
49 
50  EdbSegP() {
51  eEMULDigitArray =0;
52  Set0();
53  }
54  EdbSegP(int id, float x, float y, float tx, float ty, float w=0, int flag=0);
55  EdbSegP(const EdbSegP &s) {
56  eEMULDigitArray = 0;
57  Set0(); Copy(s);
58  }
59 
60  virtual ~EdbSegP() {
61  SafeDelete(eCOV);
62  SafeDelete(eEMULDigitArray);
63  }
64 
65  //void Transform(EdbAffine2D &aff) { ((EdbTrack2D*)this)->Transform(&aff); }
66  static void LinkMT(const EdbSegP* s1,const EdbSegP* s2, EdbSegP* s);
67  void PropagateToDZ( float dz );
68  void PropagateTo( float z );
69  void PropagateToCOV( float z );
70  void MergeTo( EdbSegP &s );
71  Float_t ProbLink( EdbSegP &s1, EdbSegP &s2 );
72  bool IsCompatible(EdbSegP &s, float nsigx, float nsigt) const;
73  bool IsInside(float xmin, float xmax, float ymin, float ymax) const;
74  bool IsInside(float xmin, float xmax, float ymin, float ymax, float zmin, float zmax) const;
75 
76  void addEMULDigit(TObject* a) {
77  if(!eEMULDigitArray) eEMULDigitArray = new TRefArray();
78  eEMULDigitArray->Add(a);
79  }
80 
81  TRefArray* EMULDigitArray() const { return eEMULDigitArray;}
82 
83  void Set0();
84  void Copy(const EdbSegP &s);
85  void Clear() { eCOV->Clear(); }
86  void Set(int id, float x, float y, float tx, float ty, float w, int flag)
87  { eID=id; eX=x; eY=y; eTX=tx; eTY=ty; eW=w; eFlag=flag; }
88  void SetErrors0();
89  void SetErrors() {SetErrors( 1.,1.,0.,.0001,.0001,1.);}
90  void SetErrors( float sx2, float sy2, float sz2, float stx2, float sty2, float sp2=1. );
91  void SetErrorsCOV( float sx2, float sy2, float sz2, float stx2, float sty2, float sp2=1. );
92 
93  void SetErrorP( float sp2 ) {
94  if(!eCOV) eCOV = new TMatrixD(5,5);
95  (*eCOV)(4,4) = (double)sp2;
96  }
97 
98  void SetCOV( TMatrixD &cov) {
99  if(eCOV) eCOV->Copy(cov);
100  else eCOV = new TMatrixD(cov);
101  }
102 
103  bool CheckCOV() const{ //Check Covariance Matrix, is there?
104  if (eCOV) return true;
105  else return false;
106  }
107 
108  void ForceCOV( TMatrixD &cov) { //to correctly copy COV matrices in MakeTracksTree
109  if(eCOV) *eCOV = cov;
110  else eCOV = new TMatrixD(cov);
111  }
112 
113  void SetCOV( double *array, int dim=5) {
114  if(!array) return;
115  if(!eCOV) eCOV = new TMatrixD(5,5);
116  for(int k=0; k<dim; k++)
117  for(int l=0; l<dim; l++) (*eCOV)(k,l) = array[k*dim + l];
118  }
119 
120  TMatrixD &COV() const {return *eCOV;}
121  void SetSZ( float sz ) { eSZ=sz; }
122  void SetZ( float z ) { eZ=z; }
123  void SetDZ( float dz ) { eDZ=dz; }
124  void SetDZem( float dz ) { eDZem=dz; }
125  void SetID( int id ) { eID=id; }
126  void SetPID( int pid ) { ePID=pid; }
127  void SetFlag( int flag ) { eFlag=flag; }
128  void SetTrack( int trid ) { eTrack=trid; }
129  void SetW( float w ) { eW=w; }
130  void SetP( float p ) { eP=p; }
131  void SetProb( float prob ) { eProb=prob; }
132  void SetChi2( float chi2 ) { eChi2=chi2; }
133  void SetVolume( float w ) { eVolume=w; }
134  void SetVid(int vid, int sid) { eVid[0]=vid; eVid[1]=sid; }
135  void SetAid(int a, int v, int side=0) { eAid[0]=a; eAid[1]=100000*side+v; }
136  void SetSide(int side=0) { int v=eAid[1]%100000; eAid[1]=100000*side+v; }
137  void SetProbability( float p ) { eProb=p; }
138  void SetMC( int mEvt, int mTrack ) { eMCEvt=mEvt; eMCTrack=mTrack; }
139  void SetPlate( int plateid ) { eScanID.ePlate = plateid; }
140  void SetScanID( EdbID id ) { eScanID = id; }
141 
142  Int_t MCEvt() const {return eMCEvt;}
143  Int_t MCTrack() const {return eMCTrack;}
144  Int_t ID() const {return eID;}
145  Int_t PID() const {return ePID;}
146  Int_t Flag() const {return eFlag;}
147  Int_t Track() const {return eTrack;}
148  Float_t W() const {return eW;}
149  Float_t P() const {return eP;}
150  Float_t Z() const {return eZ;}
151  Float_t DZ() const {return eDZ;}
152  Float_t DZem() const {return eDZem;}
153  Float_t Prob() const {return eProb;}
154  Float_t Chi2() const {return eChi2;}
155  Float_t Volume() const {return eVolume;}
156  Int_t Plate() const {return eScanID.ePlate;}
157  EdbID ScanID() const {return eScanID;}
158 
159  Float_t SX() const { if(!eCOV) return 0; return (Float_t)(*eCOV)(0,0); }
160  Float_t SY() const { if(!eCOV) return 0; return (Float_t)(*eCOV)(1,1); }
161  Float_t STX() const { if(!eCOV) return 0; return (Float_t)(*eCOV)(2,2); }
162  Float_t STY() const { if(!eCOV) return 0; return (Float_t)(*eCOV)(3,3); }
163  Float_t SP() const { if(!eCOV) return 0; return (Float_t)(*eCOV)(4,4); }
164  Float_t SZ() const { return eSZ; }
165  Int_t Vid(int i) const {return (i < 0 || i > 1) ? -1 : eVid[i];}
166  Int_t Aid(int i) const {if(i==0) return eAid[i]; else if(i==1) return eAid[i]%100000; else return -1;}
167  Int_t Side() const {return eAid[1]/100000;}
168 
169  // mandatory virtual functions:
170  Float_t X() const {return eX;}
171  Float_t Y() const {return eY;}
172  Float_t TX() const {return eTX;}
173  Float_t TY() const {return eTY;}
174  void SetX( Float_t x ) { eX=x; }
175  void SetY( Float_t y ) { eY=y; }
176  void SetTX( Float_t tx ) { eTX=tx; }
177  void SetTY( Float_t ty ) { eTY=ty; }
178 
179  //other functions
180  Float_t Phi() const {return TMath::ATan2(eTY,eTX);}
181  Float_t Theta() const {return TMath::Sqrt(eTY*eTY+eTX*eTX);}
182  static Float_t Distance(const EdbSegP &s1,const EdbSegP &s2);
183  static Float_t Angle(const EdbSegP &s1,const EdbSegP &s2);
184 
185  Float_t DeltaTheta(EdbSegP* seg1) const {
186  return TMath::Sqrt( TMath::Power(TX()-seg1->TX(),2)+TMath::Power(TY()-seg1->TY(),2) );
187  }
188  Float_t DeltaR(EdbSegP* seg1) const {
189  return TMath::Sqrt( TMath::Power(X()-seg1->X(),2)+TMath::Power(Y()-seg1->Y(),2) );
190  }
191  void Print( Option_t *opt="") const;
192  void PrintNice() const;
193 
194  Bool_t IsEqual(const TObject *obj) const;
195  Bool_t IsSortable() const { return kTRUE; }
196  Int_t Compare(const TObject *obj) const;
197 
198  ClassDef(EdbSegP,18) // segment
199 };
200 
201 #endif /* ROOT_EdbSegP */
brick dz
Definition: RecDispMC.C:107
void a()
Definition: check_aligned.C:59
Definition: EdbID.h:7
Int_t ePlate
Definition: EdbID.h:11
Definition: EdbSegP.h:18
void SetVolume(float w)
Definition: EdbSegP.h:133
Float_t eX
Definition: EdbSegP.h:28
void SetPID(int pid)
Definition: EdbSegP.h:126
Int_t Track() const
Definition: EdbSegP.h:147
void SetY(Float_t y)
Definition: EdbSegP.h:175
void SetErrors()
Definition: EdbSegP.h:89
Float_t Prob() const
Definition: EdbSegP.h:153
void SetProbability(float p)
Definition: EdbSegP.h:137
Float_t eP
Definition: EdbSegP.h:38
EdbSegP()
Definition: EdbSegP.h:50
void addEMULDigit(TObject *a)
Definition: EdbSegP.h:76
void SetProb(float prob)
Definition: EdbSegP.h:131
void SetSide(int side=0)
Definition: EdbSegP.h:136
Float_t STX() const
Definition: EdbSegP.h:161
Float_t eTX
Definition: EdbSegP.h:29
TMatrixD & COV() const
Definition: EdbSegP.h:120
void SetScanID(EdbID id)
Definition: EdbSegP.h:140
Int_t eAid[2]
Definition: EdbSegP.h:24
void SetDZem(float dz)
Definition: EdbSegP.h:124
Bool_t IsEqual(const TObject *obj) const
Definition: EdbSegP.cxx:425
void Print(Option_t *opt="") const
Definition: EdbSegP.cxx:405
TRefArray * eEMULDigitArray
Definition: EdbSegP.h:41
Float_t eZ
Definition: EdbSegP.h:28
Float_t eW
Definition: EdbSegP.h:34
Float_t DZ() const
Definition: EdbSegP.h:151
Float_t TX() const
Definition: EdbSegP.h:172
Float_t Volume() const
Definition: EdbSegP.h:155
void PropagateTo(float z)
Definition: EdbSegP.cxx:292
void SetTX(Float_t tx)
Definition: EdbSegP.h:176
void SetErrorsCOV(float sx2, float sy2, float sz2, float stx2, float sty2, float sp2=1.)
Definition: EdbSegP.cxx:71
void SetTrack(int trid)
Definition: EdbSegP.h:128
Int_t ID() const
Definition: EdbSegP.h:144
void SetID(int id)
Definition: EdbSegP.h:125
void SetX(Float_t x)
Definition: EdbSegP.h:174
Float_t SZ() const
Definition: EdbSegP.h:164
Float_t SY() const
Definition: EdbSegP.h:160
static void LinkMT(const EdbSegP *s1, const EdbSegP *s2, EdbSegP *s)
Definition: EdbSegP.cxx:129
Float_t eSZ
Definition: EdbSegP.h:31
Float_t X() const
Definition: EdbSegP.h:170
void ForceCOV(TMatrixD &cov)
Definition: EdbSegP.h:108
TMatrixD * eCOV
Definition: EdbSegP.h:46
Float_t Chi2() const
Definition: EdbSegP.h:154
bool CheckCOV() const
Definition: EdbSegP.h:103
Int_t Plate() const
Definition: EdbSegP.h:156
bool IsInside(float xmin, float xmax, float ymin, float ymax) const
Definition: EdbSegP.cxx:299
void PropagateToDZ(float dz)
Definition: EdbSegP.cxx:280
Float_t eDZ
Definition: EdbSegP.h:36
void SetErrors0()
Definition: EdbSegP.cxx:50
Float_t DZem() const
Definition: EdbSegP.h:152
Bool_t IsSortable() const
Definition: EdbSegP.h:195
void MergeTo(EdbSegP &s)
Definition: EdbSegP.cxx:365
void SetCOV(double *array, int dim=5)
Definition: EdbSegP.h:113
Float_t Z() const
Definition: EdbSegP.h:150
void SetZ(float z)
Definition: EdbSegP.h:122
Float_t eDZem
Definition: EdbSegP.h:37
void SetTY(Float_t ty)
Definition: EdbSegP.h:177
Float_t P() const
Definition: EdbSegP.h:149
Float_t SP() const
Definition: EdbSegP.h:163
Int_t Compare(const TObject *obj) const
Definition: EdbSegP.cxx:446
void SetW(float w)
Definition: EdbSegP.h:129
Float_t eTY
Definition: EdbSegP.h:29
Int_t Side() const
Definition: EdbSegP.h:167
Float_t Y() const
Definition: EdbSegP.h:171
void SetCOV(TMatrixD &cov)
Definition: EdbSegP.h:98
Float_t eChi2
Definition: EdbSegP.h:32
Float_t eY
Definition: EdbSegP.h:28
bool IsCompatible(EdbSegP &s, float nsigx, float nsigt) const
Definition: EdbSegP.cxx:326
Float_t eProb
Definition: EdbSegP.h:33
void SetChi2(float chi2)
Definition: EdbSegP.h:132
void SetSZ(float sz)
Definition: EdbSegP.h:121
void SetP(float p)
Definition: EdbSegP.h:130
Float_t DeltaTheta(EdbSegP *seg1) const
Definition: EdbSegP.h:185
TRefArray * EMULDigitArray() const
Definition: EdbSegP.h:81
Float_t ProbLink(EdbSegP &s1, EdbSegP &s2)
Definition: EdbSegP.cxx:343
void SetMC(int mEvt, int mTrack)
Definition: EdbSegP.h:138
void PrintNice() const
Definition: EdbSegP.cxx:418
static Float_t Distance(const EdbSegP &s1, const EdbSegP &s2)
Definition: EdbSegP.cxx:463
Int_t eMCTrack
Definition: EdbSegP.h:39
Int_t eID
Definition: EdbSegP.h:22
void PropagateToCOV(float z)
Definition: EdbSegP.cxx:252
Int_t eMCEvt
Definition: EdbSegP.h:40
Int_t eTrack
Definition: EdbSegP.h:26
void SetDZ(float dz)
Definition: EdbSegP.h:123
Float_t W() const
Definition: EdbSegP.h:148
Int_t PID() const
Definition: EdbSegP.h:145
static Float_t Angle(const EdbSegP &s1, const EdbSegP &s2)
Definition: EdbSegP.cxx:470
void SetPlate(int plateid)
Definition: EdbSegP.h:139
Int_t eVid[2]
Definition: EdbSegP.h:23
void SetVid(int vid, int sid)
Definition: EdbSegP.h:134
EdbID ScanID() const
Definition: EdbSegP.h:157
Int_t ePID
Definition: EdbSegP.h:21
Float_t TY() const
Definition: EdbSegP.h:173
Float_t DeltaR(EdbSegP *seg1) const
Definition: EdbSegP.h:188
EdbSegP(const EdbSegP &s)
Definition: EdbSegP.h:55
Int_t MCTrack() const
Definition: EdbSegP.h:143
Int_t Aid(int i) const
Definition: EdbSegP.h:166
void Copy(const EdbSegP &s)
Definition: EdbSegP.cxx:104
Float_t STY() const
Definition: EdbSegP.h:162
Float_t Theta() const
Definition: EdbSegP.h:181
void Clear()
Definition: EdbSegP.h:85
void SetErrorP(float sp2)
Definition: EdbSegP.h:93
virtual ~EdbSegP()
Definition: EdbSegP.h:60
void SetFlag(int flag)
Definition: EdbSegP.h:127
void Set0()
Definition: EdbSegP.cxx:29
Int_t MCEvt() const
Definition: EdbSegP.h:142
Float_t SX() const
Definition: EdbSegP.h:159
Float_t eVolume
Definition: EdbSegP.h:35
Int_t Vid(int i) const
Definition: EdbSegP.h:165
Int_t Flag() const
Definition: EdbSegP.h:146
void SetAid(int a, int v, int side=0)
Definition: EdbSegP.h:135
EdbID eScanID
AM+AC 27/07/07.
Definition: EdbSegP.h:42
Float_t Phi() const
Definition: EdbSegP.h:180
Int_t eFlag
Definition: EdbSegP.h:25
void Set(int id, float x, float y, float tx, float ty, float w, int flag)
Definition: EdbSegP.h:86
Definition: EdbVirtual.h:123
float xmin
Definition: emthickness.cpp:61
float ymin
Definition: emthickness.cpp:63
float xmax
Definition: emthickness.cpp:61
float ymax
Definition: emthickness.cpp:63
int pid[1000]
Definition: m2track.cpp:13
const char * opt
Definition: mc2raw.cxx:42
UInt_t id
Definition: tlg2pattern.C:118
p
Definition: testBGReduction_AllMethods.C:8
Float_t chi2
Definition: testBGReduction_By_ANN.C:14
void w(int rid=2, int nviews=2)
Definition: test.C:27
EdbSegP * s1
Definition: tlg2pattern.C:30
EdbSegP * s2
Definition: tlg2pattern.C:31
EdbSegP * s
Definition: tlg2pattern.C:32