reconstructed particle class created bt AliEMCALPID
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALRecParticle.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 EMCAL    
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 "AliHeader.h"
33 #include "AliEMCALRecParticle.h"
34 #include "AliEMCALGetter.h" 
35 #include "TParticle.h"
36
37 ClassImp(AliEMCALRecParticle)
38
39
40 //____________________________________________________________________________
41  AliEMCALRecParticle::AliEMCALRecParticle(const AliEMCALRecParticle & rp)
42 {
43   // copy ctor
44
45   fEMCALTrackSegment = rp.fEMCALTrackSegment ; 
46   fDebug            = kFALSE ; 
47   fType             = rp.fType ; 
48   fIndexInList      = rp.fIndexInList ;
49
50   fPdgCode     = rp.fPdgCode;
51   fStatusCode  = rp.fStatusCode;
52   fMother[0]   = rp.fMother[0];
53   fMother[1]   = rp.fMother[1];
54   fDaughter[0] = rp.fDaughter[0];
55   fDaughter[1] = rp.fDaughter[1];
56   fWeight      = rp.fWeight;
57   fCalcMass    = rp.fCalcMass;
58   fPx          = rp.fPx;
59   fPy          = rp.fPy;
60   fPz          = rp.fPz;
61   fE           = rp.fE;
62   fVx          = rp.fVx;
63   fVy          = rp.fVy;
64   fVz          = rp.fVz;
65   fVt          = rp.fVt;
66   fPolarTheta  = rp.fPolarTheta;
67   fPolarPhi    = rp.fPolarPhi;
68   fParticlePDG = rp.fParticlePDG; 
69   
70 }
71
72 //____________________________________________________________________________
73 const Int_t AliEMCALRecParticle::GetNPrimaries() const  
74 {   
75   AliHeader *h = gAlice->GetHeader();
76   return  h->GetNprimary(); 
77   // return  gAlice->GetNtrack(); 
78 }
79
80 //____________________________________________________________________________
81 const Int_t AliEMCALRecParticle::GetNPrimariesToRecParticles() const  
82
83
84   Int_t rv = 0 ;
85   AliEMCALGetter * gime = AliEMCALGetter::GetInstance() ; 
86   Int_t emcRPindex = ( dynamic_cast<AliEMCALTrackSegment*>(gime->TrackSegments()->At(GetEMCALTSIndex())) )->GetECIndex();
87   (dynamic_cast<AliEMCALTowerRecPoint*>(gime->ECALRecPoints()->At(emcRPindex)))->GetPrimaries(rv) ; 
88   return rv ;
89 }
90
91 //____________________________________________________________________________
92 const TParticle * AliEMCALRecParticle::GetPrimary(Int_t index) const  
93 {
94   if ( index > GetNPrimariesToRecParticles() ) { 
95     if (fDebug) 
96       Warning("GetPrimary", "%d is larger that the number of primaries %d", index, GetNPrimaries()) ;
97   } else { 
98     Int_t dummy ; 
99     AliEMCALGetter * gime = AliEMCALGetter::GetInstance() ;
100     Int_t emcRPindex = ( dynamic_cast<AliEMCALTrackSegment*>(gime->TrackSegments()->At(GetEMCALTSIndex())) )->GetECIndex();
101     Int_t *list = static_cast<AliEMCALTowerRecPoint*>(gime->ECALRecPoints()->At(emcRPindex))->GetPrimaries(dummy) ;
102     Int_t primaryindex ;
103     if(index<dummy)
104       primaryindex = list[index] ;
105     else{
106       if (fDebug)           
107         printf("No primary number %d in list \n",index) ;
108       return 0 ;
109     }
110     if(primaryindex>4999999){
111         if (fDebug)
112            printf("No method to extract primaries from background!\n") ;
113       return 0 ;
114     }
115     return gime->Primary(primaryindex) ; 
116   } 
117   return 0 ; 
118 }
119