027a972bba0d949b4513b9b8ad094ecae336a0b2
[u/mrichter/AliRoot.git] / PHOS / AliPHOSRecParticle.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15 /* $Id$ */
16 //_________________________________________________________________________
17 //  A Reconstructed Particle in PHOS    
18 //  To become a general class of AliRoot ?       
19 //  Why should I put meaningless comments
20 //  just to satisfy
21 //  the code checker                 
22 //       
23 //*-- Author: Yves Schutz (SUBATECH)
24
25
26 // --- ROOT system ---
27
28 // --- Standard library ---
29
30
31 // --- AliRoot header files ---
32 #include "AliPHOSRecParticle.h"
33 #include "AliPHOSGetter.h" 
34
35 //____________________________________________________________________________
36   AliPHOSRecParticle::AliPHOSRecParticle(): fPHOSTrackSegment(0)  ,  fDebug( kFALSE )
37 {
38   // ctor
39   const Int_t nSPECIES = AliESDtrack::kSPECIESN;
40   for(Int_t i = 0; i<nSPECIES ; i++)
41     fPID[i]=0.;
42 }
43
44
45 //____________________________________________________________________________
46  AliPHOSRecParticle::AliPHOSRecParticle(const AliPHOSRecParticle & rp)
47    : AliPHOSFastRecParticle(rp)
48 {
49   // copy ctor
50
51   fPHOSTrackSegment = rp.fPHOSTrackSegment ; 
52   fDebug            = kFALSE ; 
53   fType             = rp.fType ; 
54   fIndexInList      = rp.fIndexInList ;
55
56   fPdgCode     = rp.fPdgCode;
57   fStatusCode  = rp.fStatusCode;
58   fMother[0]   = rp.fMother[0];
59   fMother[1]   = rp.fMother[1];
60   fDaughter[0] = rp.fDaughter[0];
61   fDaughter[1] = rp.fDaughter[1];
62   fWeight      = rp.fWeight;
63   fCalcMass    = rp.fCalcMass;
64   fPx          = rp.fPx;
65   fPy          = rp.fPy;
66   fPz          = rp.fPz;
67   fE           = rp.fE;
68   fVx          = rp.fVx;
69   fVy          = rp.fVy;
70   fVz          = rp.fVz;
71   fVt          = rp.fVt;
72   fPolarTheta  = rp.fPolarTheta;
73   fPolarPhi    = rp.fPolarPhi;
74   fParticlePDG = rp.fParticlePDG; 
75   const Int_t nSPECIES = AliESDtrack::kSPECIESN;
76   for(Int_t i = 0; i<nSPECIES ; i++)
77     fPID[i]=rp.fPID[i];
78 }
79
80 //____________________________________________________________________________
81 const Int_t AliPHOSRecParticle::GetNPrimaries() const  
82
83   return -1;
84 }
85
86 //____________________________________________________________________________
87 const Int_t AliPHOSRecParticle::GetNPrimariesToRecParticles() const  
88
89   // Get the number of primaries at the origine of the RecParticle
90   Int_t rv = 0 ;
91   AliPHOSGetter * gime = AliPHOSGetter::Instance() ; 
92   Int_t emcRPindex = dynamic_cast<AliPHOSTrackSegment*>(gime->TrackSegments()->At(GetPHOSTSIndex()))->GetEmcIndex();
93   dynamic_cast<AliPHOSEmcRecPoint*>(gime->EmcRecPoints()->At(emcRPindex))->GetPrimaries(rv) ; 
94   return rv ; 
95 }
96
97 //____________________________________________________________________________
98 const TParticle * AliPHOSRecParticle::GetPrimary(Int_t index) const  
99 {
100   // Get the list of primary particles at the origine of the RecParticle
101   if ( index > GetNPrimariesToRecParticles() ) { 
102     if (fDebug) 
103       Warning("GetPrimary", "AliPHOSRecParticle::GetPrimary -> %d is larger that the number of primaries %d", 
104               index, GetNPrimaries()) ;
105     return 0 ; 
106   } 
107   else { 
108     Int_t dummy ; 
109     AliPHOSGetter * gime = AliPHOSGetter::Instance() ; 
110
111     Int_t emcRPindex = dynamic_cast<AliPHOSTrackSegment*>(gime->TrackSegments()->At(GetPHOSTSIndex()))->GetEmcIndex();
112     Int_t primaryindex = dynamic_cast<AliPHOSEmcRecPoint*>(gime->EmcRecPoints()->At(emcRPindex))->GetPrimaries(dummy)[index] ; 
113     return gime->Primary(primaryindex) ;
114    } 
115   //  return 0 ; 
116 }
117
118 //____________________________________________________________________________
119 const Double_t * AliPHOSRecParticle::GetPID()
120 {
121   // Get the probability densities that this reconstructed particle
122   // has a type of i:
123   // i       particle types
124   // ----------------------
125   // 0       electron
126   // 1       muon
127   // 2       pi+-
128   // 3       K+-
129   // 4       p/pbar
130   // 5       photon
131   // 6       pi0 at high pt
132   // 7       neutron
133   // 8       K0L
134
135  
136   if (IsElectron()     ) fPID[0] = 1.0;
137   if (IsChargedHadron()) {
138     fPID[1] = 0.25;
139     fPID[2] = 0.25;
140     fPID[3] = 0.25;
141     fPID[4] = 0.25;
142   }
143   if (IsFastChargedHadron()) {
144     fPID[1] = 0.33;
145     fPID[2] = 0.33;
146     fPID[3] = 0.33;
147     fPID[4] = 0.00;
148   }
149   if (IsSlowChargedHadron()) {
150     fPID[1] = 0.00;
151     fPID[2] = 0.00;
152     fPID[3] = 0.00;
153     fPID[4] = 1.00;
154   }
155
156   if (IsPhoton() || IsHardPhoton()) fPID[5] = 1.0;
157   if (IsHardPi0())                  fPID[6] = 1.0;
158   if (IsFastNeutralHadron())        fPID[7] = 1.0;
159   if (IsSlowNeutralHadron())        fPID[8] = 1.0;
160
161   if (IsEleCon()) fPID[9] = 1.0;
162   return fPID;
163 }