69c4d623b8a3db039341107f8af8754e8ef715d1
[u/mrichter/AliRoot.git] / PHOS / AliPHOSReconstructor.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
16 /* $Id$ */
17
18 //_________________________________________________________________________
19 //*--
20 //*-- Yves Schutz (SUBATECH) 
21 // Reconstruction class. Redesigned from the old AliReconstructionner class and 
22 // derived from STEER/AliReconstructor. 
23 // 
24 // --- ROOT system ---
25
26 // --- Standard library ---
27
28 // --- AliRoot header files ---
29 #include "AliESD.h"
30 #include "AliPHOSReconstructor.h"
31 #include "AliPHOSClusterizerv1.h"
32 #include "AliPHOSTrackSegmentMakerv1.h"
33 #include "AliPHOSPIDv1.h"
34 #include "AliPHOSGetter.h"
35 #include "AliRawReaderFile.h"
36
37  
38 ClassImp(AliPHOSReconstructor)
39
40 Bool_t AliPHOSReconstructor::fgDebug = kFALSE ; 
41
42 //____________________________________________________________________________
43   AliPHOSReconstructor::AliPHOSReconstructor() 
44 {
45   // ctor
46
47
48
49 //____________________________________________________________________________
50   AliPHOSReconstructor::~AliPHOSReconstructor()
51 {
52   // dtor
53
54
55
56 //____________________________________________________________________________
57 void AliPHOSReconstructor::Reconstruct(AliRunLoader* runLoader) const 
58 {
59   // method called by AliReconstruction; 
60   // Only the clusterization is performed,; the rest of the reconstruction is done in FillESD because the track
61   // segment maker needs access to the AliESD object to retrieve the tracks reconstructed by 
62   // the global tracking.
63  
64   TString headerFile(runLoader->GetFileName()) ; 
65   TString branchName(runLoader->GetEventFolder()->GetName()) ;  
66   
67   AliPHOSClusterizerv1 clu(headerFile, branchName);
68   clu.SetEventRange(0, -1) ; // do all the events
69   if ( Debug() ) 
70     clu.ExecuteTask("deb all") ; 
71   else 
72     clu.ExecuteTask("") ;  
73
74 }
75
76 //____________________________________________________________________________
77 void AliPHOSReconstructor::Reconstruct(AliRunLoader* runLoader, AliRawReaderFile* rawreader) const 
78 {
79   // method called by AliReconstruction; 
80   // Only the clusterization is performed,; the rest of the reconstruction is done in FillESD because the track
81   // segment maker needs access to the AliESD object to retrieve the tracks reconstructed by 
82   // the global tracking.
83   // Here we reconstruct from Raw Data
84   
85   rawreader->Reset() ; 
86   TString headerFile(runLoader->GetFileName()) ; 
87   TString branchName(runLoader->GetEventFolder()->GetName()) ;  
88   
89   AliPHOSClusterizerv1 clu(headerFile, branchName);
90   clu.SetEventRange(0, -1) ; // do all the events
91   if ( Debug() ) 
92     clu.ExecuteTask("deb all") ; 
93   else 
94     clu.ExecuteTask("") ;  
95
96 }
97
98 //____________________________________________________________________________
99 void AliPHOSReconstructor::FillESD(AliRunLoader* runLoader, AliESD* esd) const
100 {
101   // Called by AliReconstruct after Reconstruct() and global tracking and vertxing 
102   //Creates the tracksegments and Recparticles
103   
104   Int_t eventNumber = runLoader->GetEventNumber() ;
105
106   TString headerFile(runLoader->GetFileName()) ; 
107   TString branchName(runLoader->GetEventFolder()->GetName()) ;  
108
109   AliPHOSTrackSegmentMakerv1 tsm(headerFile, branchName);
110   tsm.SetESD(esd) ; 
111   AliPHOSPIDv1 pid(headerFile, branchName);
112
113   // do current event; the loop over events is done by AliReconstruction::Run()
114   tsm.SetEventRange(eventNumber, eventNumber) ; 
115   pid.SetEventRange(eventNumber, eventNumber) ; 
116   if ( Debug() ) {
117    tsm.ExecuteTask("deb all") ;
118    pid.ExecuteTask("deb all") ;
119   }
120   else {
121     tsm.ExecuteTask("") ;
122     pid.ExecuteTask("") ;
123   }
124   
125   // Creates AliESDtrack from AliPHOSRecParticles 
126   AliPHOSGetter::Instance()->Event(eventNumber, "P") ; 
127   TClonesArray *recParticles = AliPHOSGetter::Instance()->RecParticles();
128   Int_t nOfRecParticles = recParticles->GetEntries();
129   esd->SetNumberOfPHOSParticles(nOfRecParticles) ; 
130   esd->SetFirstPHOSParticle(esd->GetNumberOfTracks()) ; 
131
132   for (Int_t recpart = 0 ; recpart < nOfRecParticles ; recpart++) {
133     AliPHOSRecParticle * rp = dynamic_cast<AliPHOSRecParticle*>(recParticles->At(recpart));
134     if (Debug()) 
135       rp->Print();
136     AliESDtrack * et = new AliESDtrack() ; 
137     // fills the ESDtrack
138     Double_t xyz[3];
139     for (Int_t ixyz=0; ixyz<3; ixyz++) 
140       xyz[ixyz] = rp->GetPos()[ixyz];
141     et->SetPHOSposition(xyz) ; 
142     et->SetPHOSsignal  (rp->Energy()) ; 
143     et->SetPHOSpid     (rp->GetPID()) ;
144     // add the track to the esd object
145     esd->AddTrack(et);
146     delete et;
147   }
148 }