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