]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/FEMTOSCOPY/AliFemto/AliFemtoV0.cxx
Lines getting the matched track moved to a method in AliCalorimeterUtils. Lines copie...
[u/mrichter/AliRoot.git] / PWG2 / FEMTOSCOPY / AliFemto / AliFemtoV0.cxx
1 ///////////////////////////////////////////////////////////////////////////
2 //                                                                       //
3 // AliFemtoV0: special type of particle desling with the specifics       //
4 // of the V0 type of particle                                            //
5 // It stores the information both about the V0 itself and about it's     //
6 // daughters, so that the caut betwen the daughter characteristics is    //
7 // possible.
8 //                                                                       //
9 ///////////////////////////////////////////////////////////////////////////
10 #include "AliFemtoV0.h"
11 #include "phys_constants.h"
12
13 // -----------------------------------------------------------------------
14 AliFemtoV0::AliFemtoV0():
15   fDecayLengthV0(0), fDecayVertexV0(0), fPrimaryVertex(0),
16   fDcaV0Daughters(0), fDcaV0ToPrimVertex(0),
17   fDcaPosToPrimVertex(0), fDcaNegToPrimVertex(0),
18   fMomPos(0), fMomNeg(0),
19   fTpcHitsPos(0), fTpcHitsNeg(0),
20   fChi2V0(0),  fClV0(0),  fChi2Pos(0),  fClPos(0),  fChi2Neg(0),  fClNeg(0),
21   fDedxPos(0),  fErrDedxPos(0),  fLenDedxPos(0),
22   fDedxNeg(0),  fErrDedxNeg(0),  fLenDedxNeg(0),
23   fNufDedxPos(0), fNufDedxNeg(0),
24   fHelixPos(), fHelixNeg(), 
25   fMomV0(0),
26   fAlphaV0(0),  fPtArmV0(0),
27   fELambda(0),  fEK0Short(0),  
28   fEPosProton(0),  fEPosPion(0),
29   fENegProton(0),  fENegPion(0),
30   fMassLambda(0),  fMassAntiLambda(0),
31   fMassK0Short(0),  fRapLambda(0),
32   fRapK0Short(0),  fCTauLambda(0),
33   fCTauK0Short(0),  fPtV0(0),  fPtotV0(0),
34   fPtPos(0),  fPtotPos(0),
35   fPtNeg(0),  fPtotNeg(0),
36   fKeyNeg(0),   fKeyPos(0),
37   fHiddenInfo(0)  /***/
38
39   // Default empty constructor
40   fTrackTopologyMapPos[0] = 0;
41   fTrackTopologyMapPos[1] = 0;
42   fTrackTopologyMapNeg[0] = 0;
43   fTrackTopologyMapNeg[1] = 0;
44
45 }
46 // -----------------------------------------------------------------------
47 AliFemtoV0::AliFemtoV0(const AliFemtoV0& v) :
48   fDecayLengthV0(0), fDecayVertexV0(0), fPrimaryVertex(0),
49   fDcaV0Daughters(0), fDcaV0ToPrimVertex(0),
50   fDcaPosToPrimVertex(0), fDcaNegToPrimVertex(0),
51   fMomPos(0), fMomNeg(0),
52   fTpcHitsPos(0), fTpcHitsNeg(0),
53   fChi2V0(0),  fClV0(0),  fChi2Pos(0),  fClPos(0),  fChi2Neg(0),  fClNeg(0),
54   fDedxPos(0),  fErrDedxPos(0),  fLenDedxPos(0),
55   fDedxNeg(0),  fErrDedxNeg(0),  fLenDedxNeg(0),
56   fNufDedxPos(0), fNufDedxNeg(0),
57   fHelixPos(), fHelixNeg(), 
58   fMomV0(0),
59   fAlphaV0(0),  fPtArmV0(0),
60   fELambda(0),  fEK0Short(0),  
61   fEPosProton(0),  fEPosPion(0),
62   fENegProton(0),  fENegPion(0),
63   fMassLambda(0),  fMassAntiLambda(0),
64   fMassK0Short(0),  fRapLambda(0),
65   fRapK0Short(0),  fCTauLambda(0),
66   fCTauK0Short(0),  fPtV0(0),  fPtotV0(0),
67   fPtPos(0),  fPtotPos(0),
68   fPtNeg(0),  fPtotNeg(0),
69   fKeyNeg(0),   fKeyPos(0),
70   fHiddenInfo(0)  /***/
71
72   // copy constructor
73   fDecayLengthV0 = v.fDecayLengthV0;
74   fDecayVertexV0 = v.fDecayVertexV0;
75   fDcaV0Daughters = v.fDcaV0Daughters;
76   fDcaV0ToPrimVertex = v.fDcaV0ToPrimVertex;
77   fDcaPosToPrimVertex = v.fDcaPosToPrimVertex;
78   fDcaNegToPrimVertex = v.fDcaNegToPrimVertex;
79   fMomPos = v.fMomPos;
80   fMomNeg = v.fMomNeg;
81
82   fTrackTopologyMapPos[0] = v.fTrackTopologyMapPos[0];
83   fTrackTopologyMapPos[1] = v.fTrackTopologyMapPos[1];
84   fTrackTopologyMapNeg[0] = v.fTrackTopologyMapNeg[0];
85   fTrackTopologyMapNeg[1] = v.fTrackTopologyMapNeg[1];
86    
87   fKeyPos = v.fKeyPos;
88   fKeyNeg = v.fKeyNeg;
89      
90   fTpcHitsPos = v.fTpcHitsPos;
91   fTpcHitsNeg = v.fTpcHitsNeg;
92
93   fChi2V0 = v.fChi2V0;
94   fClV0 = v.fClV0;
95   fChi2Pos = v.fChi2Pos;
96   fClPos = v.fClPos;
97   fChi2Neg = v.fChi2Neg;
98   fClNeg = v.fClNeg;
99   fDedxPos = v.fDedxPos;
100   fErrDedxPos = v.fErrDedxPos;//Gael 04Fev2002
101   fLenDedxPos = v.fLenDedxPos;//Gael 04Fev2002
102   fDedxNeg = v.fDedxNeg;
103   fErrDedxNeg = v.fErrDedxNeg;//Gael 04Fev2002
104   fLenDedxNeg = v.fLenDedxNeg;//Gael 04Fev2002
105
106   fNufDedxPos = v.fNufDedxPos;
107   fNufDedxNeg = v.fNufDedxNeg;
108
109   fHelixPos = v.fHelixPos;// Gael 12 Sept
110   fHelixNeg = v.fHelixNeg;// Gael 12 Sept
111   fHiddenInfo = v.fHiddenInfo? v.fHiddenInfo->Clone() : 0;// GR 11 DEC 02
112   UpdateV0();
113 }
114 AliFemtoV0& AliFemtoV0::operator=(const AliFemtoV0& aV0)
115 {
116   // assignment operator
117   if (this == &aV0)
118     return *this;
119   fDecayLengthV0 = aV0.fDecayLengthV0;
120   fDecayVertexV0 = aV0.fDecayVertexV0;
121   fDcaV0Daughters = aV0.fDcaV0Daughters;
122   fDcaV0ToPrimVertex = aV0.fDcaV0ToPrimVertex;
123   fDcaPosToPrimVertex = aV0.fDcaPosToPrimVertex;
124   fDcaNegToPrimVertex = aV0.fDcaNegToPrimVertex;
125   fMomPos = aV0.fMomPos;
126   fMomNeg = aV0.fMomNeg;
127
128   fTrackTopologyMapPos[0] = aV0.fTrackTopologyMapPos[0];
129   fTrackTopologyMapPos[1] = aV0.fTrackTopologyMapPos[1];
130   fTrackTopologyMapNeg[0] = aV0.fTrackTopologyMapNeg[0];
131   fTrackTopologyMapNeg[1] = aV0.fTrackTopologyMapNeg[1];
132    
133   fKeyPos = aV0.fKeyPos;
134   fKeyNeg = aV0.fKeyNeg;
135      
136   fTpcHitsPos = aV0.fTpcHitsPos;
137   fTpcHitsNeg = aV0.fTpcHitsNeg;
138
139   fChi2V0 = aV0.fChi2V0;
140   fClV0 = aV0.fClV0;
141   fChi2Pos = aV0.fChi2Pos;
142   fClPos = aV0.fClPos;
143   fChi2Neg = aV0.fChi2Neg;
144   fClNeg = aV0.fClNeg;
145   fDedxPos = aV0.fDedxPos;
146   fErrDedxPos = aV0.fErrDedxPos;//Gael 04Fev2002
147   fLenDedxPos = aV0.fLenDedxPos;//Gael 04Fev2002
148   fDedxNeg = aV0.fDedxNeg;
149   fErrDedxNeg = aV0.fErrDedxNeg;//Gael 04Fev2002
150   fLenDedxNeg = aV0.fLenDedxNeg;//Gael 04Fev2002
151
152   fNufDedxPos = aV0.fNufDedxPos;
153   fNufDedxNeg = aV0.fNufDedxNeg;
154
155   fHelixPos = aV0.fHelixPos;// Gael 12 Sept
156   fHelixNeg = aV0.fHelixNeg;// Gael 12 Sept
157   if (fHiddenInfo) delete fHiddenInfo;
158   fHiddenInfo = aV0.fHiddenInfo? aV0.fHiddenInfo->Clone() : 0;// GR 11 DEC 02
159   UpdateV0();
160   
161   return *this;
162 }
163
164 // -----------------------------------------------------------------------
165 void AliFemtoV0::UpdateV0(){
166   //Calc. derived memebers of the v0 class
167   float tMomNegAlongV0, tMomPosAlongV0;
168
169    fMomV0  = fMomPos + fMomNeg;
170    fPtV0   = fMomV0.Perp();
171    fPtotV0 = fMomV0.Mag();
172    fPtPos  = fMomPos.Perp();
173    fPtotPos= fMomPos.Mag();
174    fPtNeg  = fMomNeg.Perp();
175    fPtotNeg= fMomNeg.Mag();
176    fELambda= ::sqrt(fPtotV0*fPtotV0+kMLAMBDA*kMLAMBDA);
177    fEK0Short= ::sqrt(fPtotV0*fPtotV0+kMKAON0SHORT*kMKAON0SHORT);
178    fEPosProton = ::sqrt(fPtotPos*fPtotPos+kMPROTON*kMPROTON);
179    fENegProton = ::sqrt(fPtotNeg*fPtotNeg+kMPROTON*kMPROTON);
180    fEPosPion = ::sqrt(fPtotPos*fPtotPos+kMPIONPLUS*kMPIONPLUS);
181    fENegPion = ::sqrt(fPtotNeg*fPtotNeg+kMPIONMINUS*kMPIONMINUS);
182   
183    tMomNegAlongV0 =  fMomNeg*fMomV0 / ::sqrt(::pow(fPtotV0,2));
184    tMomPosAlongV0 =  fMomPos*fMomV0 / ::sqrt(::pow(fPtotV0,2));
185
186    fAlphaV0 = (tMomPosAlongV0-tMomNegAlongV0)/(tMomPosAlongV0+tMomNegAlongV0);
187    fPtArmV0 =  ::sqrt(fPtotPos*fPtotPos - tMomPosAlongV0*tMomPosAlongV0);
188    fMassLambda = ::sqrt(::pow(fEPosProton+fENegPion,2)-::pow(fPtotV0,2));
189    fMassAntiLambda = ::sqrt(::pow(fENegProton+fEPosPion,2)-::pow(fPtotV0,2));
190    fMassK0Short = ::sqrt(::pow(fENegPion+fEPosPion,2)-::pow(fPtotV0,2));
191
192    fRapLambda = 0.5*::log( (fELambda+fMomV0.z()) / (fELambda-fMomV0.z()) );
193    fCTauLambda = kMLAMBDA*(fDecayLengthV0) / ::sqrt( ::pow((double)fMomV0.Mag(),2.) );
194    
195    fRapK0Short = 0.5*::log( (fEK0Short+fMomV0.z()) / (fEK0Short-fMomV0.z()) );
196    fCTauK0Short = kMKAON0SHORT*(fDecayLengthV0) / ::sqrt( ::pow((double)fMomV0.Mag(),2.) );
197
198 }
199 // -----------------------------------------------------------------------
200 #ifndef __NO_STAR_DEPENDENCE_ALLOWED__
201 #ifdef __ROOT__
202 #include "StStrangeMuDstMaker/StV0MuDst.h"
203 AliFemtoV0::AliFemtoV0( StV0MuDst& v){ // from strangess micro dst structure
204   fDecayLengthV0 = v.decayLengthV0();
205   fDecayVertexV0 = AliFemtoThreeVector( v.decayVertexV0X(), v.decayVertexV0Y(), v.decayVertexV0Z() );
206   fDcaV0Daughters = v.dcaV0Daughters();
207   fDcaV0ToPrimVertex = v.dcaV0ToPrimVertex();
208   fDcaPosToPrimVertex = v.dcaPosToPrimVertex();
209   fDcaNegToPrimVertex = v.dcaNegToPrimVertex();
210   fMomPos = AliFemtoThreeVector( v.momPosX(), v.momPosY(), v.momPosZ() );
211   fMomNeg = AliFemtoThreeVector( v.momNegX(), v.momNegY(), v.momNegZ() ); 
212 #ifdef STHBTDEBUG
213   cout << " hist pos ";
214   cout << v.topologyMapPos().numberOfHits(kTpcId); 
215   cout << " hist neg ";
216   cout << v.topologyMapNeg().numberOfHits(kTpcId) << endl;
217 #endif
218   fTpcHitsPos = ( v.topologyMapPos().numberOfHits(kTpcId) );
219   fTpcHitsNeg = ( v.topologyMapNeg().numberOfHits(kTpcId) );
220   fTrackTopologyMapPos[0] = ( v.topologyMapPos().data(0) );
221   fTrackTopologyMapPos[1] = ( v.topologyMapPos().data(1) );
222   fTrackTopologyMapNeg[0] = ( v.topologyMapNeg().data(0) );
223   fTrackTopologyMapNeg[1] = ( v.topologyMapNeg().data(1) );
224   fKeyPos = v.keyPos();
225   fKeyNeg = v.keyNeg();
226   fChi2V0 = v.chi2V0();
227   fClV0 = v.clV0();
228   fChi2Pos = v.chi2Pos();
229   fClPos = v.clPos();
230   fChi2Neg = v.chi2Neg();
231   fClNeg = v.clNeg();
232   fDedxPos = v.dedxPos();
233   fErrDedxPos = v.errDedxPos();//Gael 04Fev2002
234   fLenDedxPos = v.lenDedxPos();//Gael 04Fev2002
235   fDedxNeg = v.dedxNeg();
236   fErrDedxNeg = v.errDedxNeg();//Gael 04Fev2002
237   fLenDedxNeg = v.lenDedxNeg();//Gael 04Fev2002
238   fNufDedxPos = v.nufDedxPos();
239   fNufDedxNeg = v.nufDedxNeg();
240   fHiddenInfo =  0;//GR 11 DEC 02
241
242 #ifdef STHBTDEBUG
243   cout << " keyPos " << v.keyPos() << endl;
244   cout << " keyNeg " << v.keyNeg() << endl;
245 #endif
246   fMomV0 = AliFemtoThreeVector( v.momV0X(), v.momV0Y(), v.momV0Z() );
247 #ifdef STHBTDEBUG
248   cout << " alpha  ";
249   cout << v.alphaV0();
250   cout << " ptArm  ";
251   cout << v.ptArmV0() << endl;
252 #endif
253   fAlphaV0 = v.alphaV0();
254   fPtArmV0 = v.ptArmV0();
255   fELambda = v.eLambda();
256   fEK0Short = v.eK0Short();
257   fEPosProton = v.ePosProton();
258   fEPosPion = v.ePosPion();
259   fENegPion = v.eNegPion();
260   fENegProton = v.eNegProton();
261   fMassLambda = v.massLambda();
262   fMassAntiLambda = v.massAntiLambda();
263   fMassK0Short = v.massK0Short();
264   fRapLambda = v.rapLambda();
265   fRapK0Short = v.rapK0Short();
266   fCTauLambda = v.cTauLambda();
267   fCTauK0Short = v.cTauK0Short();
268   fPtV0 = v.ptV0();
269   fPtotV0 = v.ptotV0();
270   fPtPos = v.ptPos();
271   fPtotPos = v.ptotPos();
272   fDedxPos = v.dedxPos();
273   fPtNeg = v.ptNeg();
274   fPtotNeg = v.ptotNeg();
275   fDedxNeg = v.dedxNeg();
276 }
277 #endif // __ROOT__
278 #endif  //  __NO_STAR_DEPENDENCE_ALLOWED__
279
280
281
282 void AliFemtoV0::SetHelixPos(const AliFmPhysicalHelixD& h){fHelixPos = h;}// Gael 12 Sept 02
283 const AliFmPhysicalHelixD& AliFemtoV0::HelixPos() const {return fHelixPos;}// Gael 12 Sept 02
284 void AliFemtoV0::SetHelixNeg(const AliFmPhysicalHelixD& h){fHelixNeg = h;}// Gael 12 Sept 02
285 const AliFmPhysicalHelixD& AliFemtoV0::HelixNeg() const {return fHelixNeg;}// Gael 12 Sept 02
286
287 void AliFemtoV0::SetHiddenInfo(AliFemtoHiddenInfo* aHiddenInfo) {fHiddenInfo=aHiddenInfo;}
288 bool AliFemtoV0::ValidHiddenInfo() const { if (fHiddenInfo) return true; else return false; }
289 AliFemtoHiddenInfo* AliFemtoV0::GetHiddenInfo() const {return fHiddenInfo;}
290