]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/alice-macros/esd_kink.C
From Pawel Debski.
[u/mrichter/AliRoot.git] / EVE / alice-macros / esd_kink.C
1 // $Id$
2 // Main authors: Paraskevi Ganoti: 2009
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_kink_init_rectrackMother(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   
18   rt.fBeta = 1; // ep/TMath::Sqrt(ep*ep + mc*mc);
19 }
20
21 void esd_kink_init_rectrackDaughter(TEveRecTrack& rt, AliExternalTrackParam* tp, TEveVector* svt,TEveVector* spt)
22 {
23   rt.fSign = tp->GetSign();
24   rt.fV.Set(*svt);
25   rt.fP.Set(*spt);
26   
27   rt.fBeta = 1; // ep/TMath::Sqrt(ep*ep + mc*mc);
28 }
29
30 AliEveKink* esd_make_kink(TEveTrackPropagator* rnrStyleMoth,TEveTrackPropagator* rnrStyleDaugh, AliESDtrack* moth, AliESDtrack* daug, AliESDkink* kink, Int_t i)
31 {
32   TEveRecTrack  rcMoth;
33   TEveRecTrack  rcDaug;
34   TEveRecKink   rcKink;
35   
36   const TVector3 p1(kink->GetMotherP());
37   rcKink.fPMother.Set(p1);
38   const TVector3 p2(kink->GetDaughterP());
39   rcKink.fPDaughter.Set(p2);
40
41   const TVector3 r1(kink->GetPosition());
42   rcKink.fVKink.Set(r1);
43   
44   for (Int_t j=0; j<3; ++j) rckink.fKinkAngle[j]=kink->GetAngle(j);
45   
46   Double_t r[3], r2[3];
47
48   moth->GetTPCInnerParam()->GetXYZ(r2);  rcKink.fVMother.Set(r2);
49   daug->GetOuterParam()->GetXYZ(r);  rcKink.fVDaughter.Set(r);
50
51   esd_kink_init_rectrackMother(rcMoth, (moth->GetTPCInnerParam()));  
52   rcMoth.fIndex = moth->GetID();
53   
54   esd_kink_init_rectrackDaughter(rcDaug, daug->GetOuterParam(), &rcKink.fVKink, &rcKink.fPDaughter);
55   rcDaug.fIndex = daug->GetID();
56   
57   AliEveKink* myKink = new AliEveKink(&rcMoth, &rcDaug, &rcKink, rnrStyleMoth,rnrStyleDaugh);
58   
59   myKink->SetElementName(Form("ESDkink %d  \n", i));
60   myKink->SetESDKinkIndex(i);
61  
62   for (Int_t j=0; j<3; ++j) myKink->SetKinkAngle(j, kink->GetAngle(j));
63   Double_t daugProbability[10];
64   Double_t daugP = 0.0;
65   daug->GetESDpid(daugProbability);
66   daugP = daug->P();
67
68   // ****** Tentative particle type "concentrations"
69   Double_t c[5]={0.01, 0.01, 0.85, 0.10, 0.05};
70   AliPID::SetPriors(c);
71
72   AliPID daugPid(daugProbability);
73
74   Int_t   daugMostProbPdg =  0;
75
76   switch (daugPid.GetMostProbable()){
77   case 0:
78     daugMostProbPdg =   11; break;
79   case 1:
80     daugMostProbPdg =   13; break;
81   case 2:
82     daugMostProbPdg =  211; break;
83   default :
84     daugMostProbPdg =  13; break;
85   }
86
87   Float_t daugMaxProbPid  = daugPid.GetProbability(daugPid.GetMostProbable());
88
89   myKink->SetMaxProbPdgPid(daugMostProbPdg,daugMaxProbPid);//????????????
90
91   return myKink;
92
93
94
95 AliEveKinkList* esd_kink()
96 {
97   AliESDEvent* esd = AliEveEventManager::AssertESD();
98   AliEveKinkList* cont = new AliEveKinkList("ESD kink");
99   cont->SetMainColor(3); // green
100   TEveTrackPropagator* rnrStyleMoth = cont->GetPropagatorMoth();
101   rnrStyleMoth->SetMagField( 0.1*esd->GetMagneticField() );
102   TEveTrackPropagator* rnrStyleDaugh = cont->GetPropagatorDaugh();
103   rnrStyleDaugh->SetMagField( 0.1*esd->GetMagneticField() ); 
104   rnrStyleDaugh->SetMaxR(520);
105   gEve->AddElement(cont);
106
107   Int_t count = 0;
108 //   for (Int_t n=0; n<esd->GetNumberOfKinks(); ++n) 
109 //   {
110 //     AliESDkink *kink = esd->GetKink(n);  //???????????
111 //     printf("kink number = %d,  label of mother = %d , label of daug = %d --", n, kink->GetLabel(0), kink->GetLabel(1));
112 //   }   To be investigated...
113     for (Int_t n=0; n<esd->GetNumberOfTracks(); ++n)
114     { 
115          AliESDtrack* mtrack = esd->GetTrack(n);
116          if(mtrack->GetKinkIndex(0)<0){
117     
118          AliESDkink *kink = new AliESDkink;
119     
120          kink=esd->GetKink(TMath::Abs(mtrack->GetKinkIndex(0))-1);
121       
122          for (Int_t m=0; m<esd->GetNumberOfTracks(); ++m)
123          { 
124               AliESDtrack * dtrack = esd->GetTrack(m);
125
126               if((dtrack->GetKinkIndex(0)>0)&&(dtrack->GetKinkIndex(0)==TMath::Abs(mtrack->GetKinkIndex(0)))) {
127               AliESDtrack* mothTr = esd->GetTrack(n);
128               AliESDtrack* daugTr = esd->GetTrack(m);
129       
130               AliEveKink* myKink = esd_make_kink(rnrStyleMoth, rnrStyleDaugh, mothTr, daugTr, kink, (TMath::Abs(mtrack->GetKinkIndex(0))-1));
131               if (myKink)
132               {
133                  gEve->AddElement(myKink, cont);
134                  ++count;
135               }
136               }
137          }  // inner track loop
138     
139  
140          }  //mother kink index <0
141     } // Outer track loop
142
143   cont->SetTitle("test");
144
145   cont->MakeKinks();
146   gEve->Redraw3D();
147
148   return cont;
149 }