1 ///////////////////////////////////////////////////////////////////////////
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 //
9 ///////////////////////////////////////////////////////////////////////////
10 #include "AliFemtoV0.h"
11 #include "phys_constants.h"
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(),
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),
39 // Default empty constructor
40 fTrackTopologyMapPos[0] = 0;
41 fTrackTopologyMapPos[1] = 0;
42 fTrackTopologyMapNeg[0] = 0;
43 fTrackTopologyMapNeg[1] = 0;
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(),
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),
73 fDecayLengthV0 = v.fDecayLengthV0;
74 fDecayVertexV0 = v.fDecayVertexV0;
75 fDcaV0Daughters = v.fDcaV0Daughters;
76 fDcaV0ToPrimVertex = v.fDcaV0ToPrimVertex;
77 fDcaPosToPrimVertex = v.fDcaPosToPrimVertex;
78 fDcaNegToPrimVertex = v.fDcaNegToPrimVertex;
82 fTrackTopologyMapPos[0] = v.fTrackTopologyMapPos[0];
83 fTrackTopologyMapPos[1] = v.fTrackTopologyMapPos[1];
84 fTrackTopologyMapNeg[0] = v.fTrackTopologyMapNeg[0];
85 fTrackTopologyMapNeg[1] = v.fTrackTopologyMapNeg[1];
90 fTpcHitsPos = v.fTpcHitsPos;
91 fTpcHitsNeg = v.fTpcHitsNeg;
95 fChi2Pos = v.fChi2Pos;
97 fChi2Neg = v.fChi2Neg;
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
106 fNufDedxPos = v.fNufDedxPos;
107 fNufDedxNeg = v.fNufDedxNeg;
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
114 AliFemtoV0& AliFemtoV0::operator=(const AliFemtoV0& aV0)
116 // assignment operator
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;
128 fTrackTopologyMapPos[0] = aV0.fTrackTopologyMapPos[0];
129 fTrackTopologyMapPos[1] = aV0.fTrackTopologyMapPos[1];
130 fTrackTopologyMapNeg[0] = aV0.fTrackTopologyMapNeg[0];
131 fTrackTopologyMapNeg[1] = aV0.fTrackTopologyMapNeg[1];
133 fKeyPos = aV0.fKeyPos;
134 fKeyNeg = aV0.fKeyNeg;
136 fTpcHitsPos = aV0.fTpcHitsPos;
137 fTpcHitsNeg = aV0.fTpcHitsNeg;
139 fChi2V0 = aV0.fChi2V0;
141 fChi2Pos = aV0.fChi2Pos;
143 fChi2Neg = aV0.fChi2Neg;
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
152 fNufDedxPos = aV0.fNufDedxPos;
153 fNufDedxNeg = aV0.fNufDedxNeg;
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
164 // -----------------------------------------------------------------------
165 void AliFemtoV0::UpdateV0(){
166 //Calc. derived memebers of the v0 class
167 float tMomNegAlongV0, tMomPosAlongV0;
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);
183 tMomNegAlongV0 = fMomNeg*fMomV0 / ::sqrt(::pow(fPtotV0,2));
184 tMomPosAlongV0 = fMomPos*fMomV0 / ::sqrt(::pow(fPtotV0,2));
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));
192 fRapLambda = 0.5*::log( (fELambda+fMomV0.z()) / (fELambda-fMomV0.z()) );
193 fCTauLambda = kMLAMBDA*(fDecayLengthV0) / ::sqrt( ::pow((double)fMomV0.Mag(),2.) );
195 fRapK0Short = 0.5*::log( (fEK0Short+fMomV0.z()) / (fEK0Short-fMomV0.z()) );
196 fCTauK0Short = kMKAON0SHORT*(fDecayLengthV0) / ::sqrt( ::pow((double)fMomV0.Mag(),2.) );
199 // -----------------------------------------------------------------------
200 #ifndef __NO_STAR_DEPENDENCE_ALLOWED__
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() );
213 cout << " hist pos ";
214 cout << v.topologyMapPos().numberOfHits(kTpcId);
215 cout << " hist neg ";
216 cout << v.topologyMapNeg().numberOfHits(kTpcId) << endl;
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();
228 fChi2Pos = v.chi2Pos();
230 fChi2Neg = v.chi2Neg();
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
243 cout << " keyPos " << v.keyPos() << endl;
244 cout << " keyNeg " << v.keyNeg() << endl;
246 fMomV0 = AliFemtoThreeVector( v.momV0X(), v.momV0Y(), v.momV0Z() );
251 cout << v.ptArmV0() << endl;
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();
269 fPtotV0 = v.ptotV0();
271 fPtotPos = v.ptotPos();
272 fDedxPos = v.dedxPos();
274 fPtotNeg = v.ptotNeg();
275 fDedxNeg = v.dedxNeg();
278 #endif // __NO_STAR_DEPENDENCE_ALLOWED__
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
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;}