]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/alice-macros/esd_cascade.C
* init-macros
[u/mrichter/AliRoot.git] / EVE / alice-macros / esd_cascade.C
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          *
7  * full copyright notice.                                                 *
8  **************************************************************************/
9
10 void esd_cascade_init_rectrack(TEveRecTrack& rt, AliExternalTrackParam* tp)
11 {
12   Double_t      pbuf[3], vbuf[3];
13
14   rt.fSign = tp->GetSign();
15   tp->GetXYZ(vbuf);     rt.fV.Set(vbuf);
16   tp->GetPxPyPz(pbuf);  rt.fP.Set(pbuf);
17   // Double_t ep = at->GetP(), mc = at->GetMass();
18   rt.fBeta = 1; // ep/TMath::Sqrt(ep*ep + mc*mc);
19 }
20
21 AliEveCascade* esd_make_cascade(TEveTrackPropagator* rnrStyle, AliESDVertex* primVtx,
22                                 AliESDtrack* bac, AliESDcascade* cascade, Int_t i)
23 {
24   TEveRecTrack   rcPos;
25   TEveRecTrack   rcNeg;
26   TEveRecV0      rcV0;
27
28   TEveRecTrack   rcBac;
29   TEveRecCascade rcCascade;
30
31   Double_t pNeg[3], pPos[3], pV0[3];
32   cascade->GetNPxPyPz(pNeg[0], pNeg[1], pNeg[2]);
33   rcV0.fPPos.Set(pPos);
34   cascade->GetPPxPyPz(pPos[0], pPos[1], pPos[2]);
35   rcV0.fPNeg.Set(pNeg);
36
37   Double_t v[3];
38   cascade->GetXYZ(v[0], v[1], v[2]);
39   rcV0.fVCa.Set(v);
40
41   cascade->GetParamN()->GetXYZ(v);  rcV0.fVNeg.Set(v);
42   cascade->GetParamP()->GetXYZ(v);  rcV0.fVPos.Set(v);
43
44   rcV0.fV0Birth.Set(primVtx->GetXv(), primVtx->GetYv(), primVtx->GetZv());
45
46   Double_t pBac[3], pCascade[3], cv[21]={0.};
47   cascade->GetBPxPyPz(pBac[0], pBac[1], pBac[2]);
48   rcCascade.fPBac.Set(pBac);
49   cascade->GetPxPyPz(pCascade[0], pCascade[1], pCascade[2]);
50
51   cascade->GetXYZcascade(v[0], v[1], v[2]);
52   rcCascade.fCascadeVCa.Set(v);
53
54   rcCascade.fCascadeBirth.Set(primVtx->GetXv(), primVtx->GetYv(), primVtx->GetZv());
55
56   // Simulation data not directly available in AliESDcascade
57   // rcCascade.fDLabel = cascade->GetBindex();
58
59   // Problem: two following lines are not possible: no GetParamB !!
60   // cascade->GetParamB()->GetXYZ(v);  rcCascade.fVBac.Set(v); 
61   // esd_cascade_init_rectrack(rcBac, cascade->GetParamB());
62   // Solution: create an AliExternalTrackParam with null cv...
63   AliExternalTrackParam *bParam = new AliExternalTrackParam(v,pBac,cv,cascade->Charge());
64   esd_cascade_init_rectrack(rcBac,bParam);
65   rcBac.fIndex = cascade->GetBindex();
66
67   AliEveCascade* myCascade = new AliEveCascade(&rcBac, &rcV0, &rcCascade, rnrStyle);
68   myCascade->SetElementName(Form("ESDcascade %d", i));
69   myCascade->SetElementTitle(Form("DCA %f",
70                              cascade->GetDcaXiDaughters()));
71   myCascade->SetESDIndex(i);
72   myCascade->SetDaughterDCA(cascade->GetDcaXiDaughters());
73
74   return myCascade;
75 }
76
77
78 AliEveCascadeList* esd_cascade()
79 {
80   AliESDEvent* esd = AliEveEventManager::AssertESD();
81
82   AliESDVertex* primVertex = (AliESDVertex*) esd->GetPrimaryVertex();
83
84   AliEveCascadeList* cont = new AliEveCascadeList("ESD cascade");
85   cont->SetMainColor(3); // green
86   TEveTrackPropagator* rnrStyle = cont->GetPropagator();
87   rnrStyle->SetMagField( 0.1*esd->GetMagneticField() );
88
89   gEve->AddElement(cont);
90
91   Int_t count = 0;
92   for (Int_t n=0; n<esd->GetNumberOfCascades(); ++n)
93   {
94     AliESDcascade *cascade = esd->GetCascade(n);
95
96     Int_t bacInd = cascade->GetBindex();
97     AliESDtrack* bacTr = esd->GetTrack(bacInd);
98
99     AliEveCascade* myCascade = esd_make_cascade(rnrStyle, primVertex, bacTr, cascade, n);
100     if (myCascade)
101     {
102       gEve->AddElement(myCascade, cont);
103       ++count;
104     }
105   }
106
107   cont->SetTitle("test");
108
109   cont->MakeCascades();
110   gEve->Redraw3D();
111
112   return cont;
113 }