]>
Commit | Line | Data |
---|---|---|
d810d0de | 1 | // $Id$ |
2 | // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007 | |
3 | ||
4 | /************************************************************************** | |
5 | * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. * | |
6 | * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for * | |
51346b82 | 7 | * full copyright notice. * |
d810d0de | 8 | **************************************************************************/ |
ba978640 | 9 | #if !defined(__CINT__) || defined(__MAKECINT__) |
10 | #include <TMath.h> | |
11 | #include <TEveManager.h> | |
12 | #include <TEveVSDStructs.h> | |
13 | #include <TEveTrackPropagator.h> | |
cb4245bb | 14 | |
6c49a8e1 | 15 | #include <AliExternalTrackParam.h> |
16 | #include <AliESDEvent.h> | |
17 | #include <AliESDcascade.h> | |
18 | #include <AliESDVertex.h> | |
19 | #include <AliEveCascade.h> | |
20 | #include <AliEveEventManager.h> | |
ba978640 | 21 | #endif |
22 | ||
23 | void esd_cascade_init_rectrack(TEveRecTrack& rt, const AliExternalTrackParam* tp) | |
73ce6137 | 24 | { |
25 | Double_t pbuf[3], vbuf[3]; | |
26 | ||
27 | rt.fSign = tp->GetSign(); | |
28 | tp->GetXYZ(vbuf); rt.fV.Set(vbuf); | |
29 | tp->GetPxPyPz(pbuf); rt.fP.Set(pbuf); | |
30 | // Double_t ep = at->GetP(), mc = at->GetMass(); | |
31 | rt.fBeta = 1; // ep/TMath::Sqrt(ep*ep + mc*mc); | |
32 | } | |
75b17362 | 33 | |
73ce6137 | 34 | AliEveCascade* esd_make_cascade(TEveTrackPropagator* rnrStyle, AliESDVertex* primVtx, |
35 | AliESDtrack* bac, AliESDcascade* cascade, Int_t i) | |
75b17362 | 36 | { |
73ce6137 | 37 | TEveRecTrack rcPos; |
38 | TEveRecTrack rcNeg; | |
39 | TEveRecV0 rcV0; | |
40 | ||
41 | TEveRecTrack rcBac; | |
42 | TEveRecCascade rcCascade; | |
9851a663 | 43 | |
73ce6137 | 44 | Double_t v[3]; |
45 | cascade->GetXYZ(v[0], v[1], v[2]); | |
46 | rcV0.fVCa.Set(v); | |
47 | ||
48 | cascade->GetParamN()->GetXYZ(v); rcV0.fVNeg.Set(v); | |
49 | cascade->GetParamP()->GetXYZ(v); rcV0.fVPos.Set(v); | |
50 | ||
e690d4d0 | 51 | rcV0.fV0Birth.Set(primVtx->GetX(), primVtx->GetY(), primVtx->GetZ()); |
73ce6137 | 52 | |
9851a663 | 53 | Double_t pCascade[3]={0.}, pBac[3]={0.}, pNeg[3]={0.}, pPos[3]={0.}, cv[21]={0.}; |
54 | //cascade->GetPxPyPz(pCascade[0], pCascade[1], pCascade[2]); | |
73ce6137 | 55 | cascade->GetBPxPyPz(pBac[0], pBac[1], pBac[2]); |
9851a663 | 56 | cascade->GetNPxPyPz(pNeg[0], pNeg[1], pNeg[2]); |
57 | cascade->GetPPxPyPz(pPos[0], pPos[1], pPos[2]); | |
58 | ||
59 | rcCascade.fPBac.Set(pBac); | |
60 | rcV0.fPNeg.Set(pNeg); | |
61 | rcV0.fPPos.Set(pPos); | |
62 | /* | |
63 | // Debug | |
64 | printf("\n ESD info \n"); | |
65 | printf("Neg : px = %.5f, py = %.5f, pz = %.5f \n",pNeg[0], pNeg[1], pNeg[2]); | |
66 | printf("Pos : px = %.5f, py = %.5f, pz = %.5f \n",pPos[0], pPos[1], pPos[2]); | |
67 | printf("Bach : px = %.5f, py = %.5f, pz = %.5f \n",pBac[0], pBac[1], pBac[2]); | |
68 | ||
69 | printf("\n EVE info \n"); | |
70 | printf("Neg : px = %.5f, py = %.5f, pz = %.5f \n",rcV0.fPNeg.fX, rcV0.fPNeg.fY, rcV0.fPNeg.fZ); | |
71 | printf("Pos : px = %.5f, py = %.5f, pz = %.5f \n",rcV0.fPPos.fX, rcV0.fPPos.fY, rcV0.fPPos.fZ); | |
72 | printf("Bach : px = %.5f, py = %.5f, pz = %.5f \n",rcCascade.fPBac.fX,rcCascade.fPBac.fY,rcCascade.fPBac.fZ); | |
73 | */ | |
74 | Double_t pLambda = TMath::Sqrt((pNeg[0]+pPos[0])* (pNeg[0]+pPos[0]) + | |
75 | (pNeg[1]+pPos[1])* (pNeg[1]+pPos[1]) + | |
76 | (pNeg[2]+pPos[2])* (pNeg[2]+pPos[2]) ); | |
77 | Double_t pBach = TMath::Sqrt( pBac[0]*pBac[0] + pBac[1]*pBac[1] + pBac[2]*pBac[2]); | |
73ce6137 | 78 | |
79 | cascade->GetXYZcascade(v[0], v[1], v[2]); | |
80 | rcCascade.fCascadeVCa.Set(v); | |
81 | ||
e690d4d0 | 82 | rcCascade.fCascadeBirth.Set(primVtx->GetX(), primVtx->GetY(), primVtx->GetZ()); |
73ce6137 | 83 | |
84 | // Simulation data not directly available in AliESDcascade | |
85 | // rcCascade.fDLabel = cascade->GetBindex(); | |
86 | ||
87 | // Problem: two following lines are not possible: no GetParamB !! | |
dc07d021 | 88 | // cascade->GetParamB()->GetXYZ(v); rcCascade.fVBac.Set(v); |
73ce6137 | 89 | // esd_cascade_init_rectrack(rcBac, cascade->GetParamB()); |
90 | // Solution: create an AliExternalTrackParam with null cv... | |
91 | AliExternalTrackParam *bParam = new AliExternalTrackParam(v,pBac,cv,cascade->Charge()); | |
92 | esd_cascade_init_rectrack(rcBac,bParam); | |
9851a663 | 93 | rcBac.fIndex = cascade->GetBindex(); |
94 | ||
95 | esd_cascade_init_rectrack(rcNeg, cascade->GetParamN()); | |
96 | rcNeg.fIndex = cascade->GetNindex(); | |
97 | esd_cascade_init_rectrack(rcPos, cascade->GetParamP()); | |
98 | rcPos.fIndex = cascade->GetPindex(); | |
99 | ||
100 | ||
101 | /* | |
102 | // Debug | |
103 | TEveVector BacMom = rcBac.GetMomentum(); | |
104 | printf("Bac mom : px = %f, py = %f, pz =%f, Ptot = %f \n", BacMom.fX, | |
105 | rcBac.GetMomentum().fY, | |
106 | BacMom.fZ, | |
107 | BacMom.Mag()); | |
108 | */ | |
109 | AliEveCascade* myCascade = new AliEveCascade(&rcBac, &rcNeg, &rcPos, &rcV0, &rcCascade, rnrStyle); | |
73ce6137 | 110 | myCascade->SetElementName(Form("ESDcascade %d", i)); |
9851a663 | 111 | |
112 | /* | |
113 | // Debug | |
114 | TEveVector CascMom(rcCascade.fPBac + rcV0.fPNeg + rcV0.fPPos); | |
115 | printf("Casc mom : px = %f, py = %f, pz =%f, Ptot = %f \n", CascMom.fX, CascMom.fY, CascMom.fZ, CascMom.Mag()); | |
116 | */ | |
117 | myCascade->SetElementTitle(Form("Info coming directly from AliESDcascade : \n - Charge : %d \n - Cascade decay position : x = %.4f, y = %.4f, z = %.4f, Transv. radius = %.4f cm, Decay Length = %.4f cm\n\n - Pt(Cascade) : %f GeV/c, Ptot(Cascade): %f GeV/c\n - Lambda : px = %.4f, py = %.4f, pz = %.4f, Ptot : %f GeV/c\n - Bach : px = %.4f, py = %.4f, pz = %.4f, Ptot : %f GeV/c\n\n - Eta : %f\n - Phi : %f deg \n - Theta : %f deg\n - DCA : %f cm \n - Cos(Ptg Angle) : %f \n\n - Eff. mass (Xi hyp) : %f GeV/c2", | |
118 | cascade->Charge(), | |
119 | v[0], v[1], v[2], TMath::Sqrt(v[0]*v[0] +v[1]*v[1]), TMath::Sqrt(v[0]*v[0] +v[1]*v[1] + v[2]*v[2] ), | |
120 | cascade->Pt(), cascade->P(), | |
121 | pNeg[0]+pPos[0], pNeg[1]+pPos[1], pNeg[2]+pPos[2], pLambda, | |
122 | pBac[0], pBac[1], pBac[2], pBach, | |
123 | cascade->Eta(), | |
124 | cascade->Phi() * 180/TMath::Pi(), | |
125 | cascade->Theta() * 180/TMath::Pi(), | |
126 | cascade->GetDcaXiDaughters(), | |
e690d4d0 | 127 | cascade->GetCascadeCosineOfPointingAngle(primVtx->GetX(), |
128 | primVtx->GetY(), | |
129 | primVtx->GetZ()), | |
9851a663 | 130 | cascade->GetEffMassXi() |
131 | ) | |
132 | ); | |
133 | ||
134 | ||
73ce6137 | 135 | myCascade->SetESDIndex(i); |
136 | myCascade->SetDaughterDCA(cascade->GetDcaXiDaughters()); | |
9851a663 | 137 | myCascade->SetLambdaP( pNeg[0]+pPos[0], pNeg[1]+pPos[1], pNeg[2]+pPos[2] ); |
138 | myCascade->SetBachP( pBac[0], pBac[1], pBac[2]); | |
73ce6137 | 139 | return myCascade; |
31989443 | 140 | } |
141 | ||
142 | ||
73ce6137 | 143 | AliEveCascadeList* esd_cascade() |
31989443 | 144 | { |
d810d0de | 145 | AliESDEvent* esd = AliEveEventManager::AssertESD(); |
31989443 | 146 | |
73ce6137 | 147 | AliESDVertex* primVertex = (AliESDVertex*) esd->GetPrimaryVertex(); |
148 | ||
149 | AliEveCascadeList* cont = new AliEveCascadeList("ESD cascade"); | |
9851a663 | 150 | cont->SetMainColor(kBlue+2); |
84aff7a4 | 151 | TEveTrackPropagator* rnrStyle = cont->GetPropagator(); |
daaa6c4d | 152 | rnrStyle->SetMagField( 0.1*esd->GetMagneticField() ); |
31989443 | 153 | |
84aff7a4 | 154 | gEve->AddElement(cont); |
31989443 | 155 | |
156 | Int_t count = 0; | |
73ce6137 | 157 | for (Int_t n=0; n<esd->GetNumberOfCascades(); ++n) |
158 | { | |
159 | AliESDcascade *cascade = esd->GetCascade(n); | |
160 | ||
161 | Int_t bacInd = cascade->GetBindex(); | |
162 | AliESDtrack* bacTr = esd->GetTrack(bacInd); | |
163 | ||
164 | AliEveCascade* myCascade = esd_make_cascade(rnrStyle, primVertex, bacTr, cascade, n); | |
165 | if (myCascade) | |
166 | { | |
167 | gEve->AddElement(myCascade, cont); | |
168 | ++count; | |
31989443 | 169 | } |
170 | } | |
171 | ||
9851a663 | 172 | cont->SetTitle("Cascade candidates (reco)"); |
31989443 | 173 | |
174 | cont->MakeCascades(); | |
84aff7a4 | 175 | gEve->Redraw3D(); |
31989443 | 176 | |
177 | return cont; | |
178 | } |