Removing AliITSgeom dependencies from the old ITS clusterer V2 and the corresponding...
[u/mrichter/AliRoot.git] / PWG4 / AliAnaGammaIsolCut.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 /* History of cvs commits:
18  *
19  * $Log$
20  * Revision 1.1  2007/01/25 17:24:20  schutz
21  * new class
22  *
23  * Revision 1.1  2007/01/23 17:17:29  schutz
24  * New Gamma package
25  *
26  *
27  */
28
29 //_________________________________________________________________________
30 // Class for the analysis of gamma correlations (gamma-jet, 
31 // gamma-hadron and isolation cut.
32 // This class makes isolation cut analysis for 2 IC methods 
33 //(cone pt sum and particle pt threshold), for different cone sizes 
34 //and pt thresholds
35 //
36 //  Class created from old AliPHOSGammaJet 
37 //  (see AliRoot versions previous Release 4-09)
38 //
39 //*-- Author: Gustavo Conesa (LNF-INFN) 
40 //////////////////////////////////////////////////////////////////////////////
41
42
43 // --- ROOT system ---
44
45 #include <TFile.h>
46 #include <TParticle.h>
47 #include <TH2.h>
48
49 #include "AliAnaGammaIsolCut.h" 
50 #include "AliESD.h"
51 #include "AliESDtrack.h"
52 #include "AliESDCaloCluster.h"
53 #include "Riostream.h"
54 #include "AliLog.h"
55
56 ClassImp(AliAnaGammaIsolCut)
57
58 //____________________________________________________________________________
59   AliAnaGammaIsolCut::AliAnaGammaIsolCut(const char *name) : 
60     AliAnaGammaDirect(name),
61     fOutputContainer(new TObjArray(100)),  
62     fNCones(0),fNPtThres(0)
63 {
64   //Ctor        
65   TList * list = gDirectory->GetListOfKeys() ; 
66   TIter next(list) ; 
67   TH2F * h = 0 ;
68   Int_t index ; 
69   for (index = 0 ; index < list->GetSize()-1 ; index++) { 
70     //-1 to avoid GammaJet Task
71     h = dynamic_cast<TH2F*>(gDirectory->Get(list->At(index)->GetName())) ; 
72     fOutputContainer->Add(h) ; 
73   }
74   
75   for(Int_t i = 0; i < 10 ; i++){
76     fConeSizes[i]=0;
77     fPtThresholds[i]=0;
78   }
79   
80   // Input slot #0 works with an Ntuple
81   DefineInput(0, TChain::Class());
82   // Output slot #0 writes into a TH1 container
83   DefineOutput(0,  TObjArray::Class()) ; 
84   
85 }
86
87
88 //____________________________________________________________________________
89 AliAnaGammaIsolCut::AliAnaGammaIsolCut(const AliAnaGammaIsolCut & ic) : 
90   AliAnaGammaDirect(ic),
91   fOutputContainer(ic. fOutputContainer), 
92   fNCones(ic.fNCones),fNPtThres(ic.fNPtThres)
93 {
94   // cpy ctor
95   SetName (ic.GetName()) ; 
96   SetTitle(ic.GetTitle()) ; 
97
98   for(Int_t i = 0; i < 10 ; i++){
99     fConeSizes[i]=  ic.fConeSizes[i];
100     fPtThresholds[i]=   ic.fPtThresholds[i];
101   }
102 }
103
104 //____________________________________________________________________________
105 AliAnaGammaIsolCut::~AliAnaGammaIsolCut() 
106 {
107   // Remove all pointers
108   fOutputContainer->Clear() ; 
109   delete fOutputContainer ;
110
111   delete fhPtCandidate ;
112   delete [] fhPtThresIsolated ;
113   delete [] fhPtSumIsolated ;
114
115 }
116
117 //______________________________________________________________________________
118 void AliAnaGammaIsolCut::ConnectInputData(const Option_t*)
119 {
120   // Initialisation of branch container and histograms 
121   AliAnaGammaDirect::ConnectInputData("");
122
123 }
124
125 //____________________________________________________
126 void AliAnaGammaIsolCut::CreateOutputObjects()
127 {  
128
129   // Init parameteres and create histograms to be saved in output file and 
130   // stores them in fOutputContainer
131   InitParameters();
132
133   fOutputContainer = new TObjArray(100) ; 
134
135   //Isolation cut histograms
136   fhPtCandidate  = new TH1F
137     ("PtCandidate","p_{T} of candidate particles for isolation",240,0,120); 
138   fhPtCandidate->SetXTitle("p_{T} (GeV/c)");
139   fOutputContainer->Add(fhPtCandidate) ;
140   
141   char name[128];
142   char title[128];
143   for(Int_t icone = 0; icone<fNCones; icone++){
144     sprintf(name,"PtSumIsolated_Cone_%d",icone);
145     sprintf(title,"Candidate cone sum p_{T} for cone size %d vs candidate p_{T}",icone);
146     fhPtSumIsolated[icone]  = new TH2F(name, title,240,0,120,120,0,10);
147     fhPtSumIsolated[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");
148     fhPtSumIsolated[icone]->SetXTitle("p_{T} (GeV/c)");
149     fOutputContainer->Add(fhPtSumIsolated[icone]) ; 
150     
151     for(Int_t ipt = 0; ipt<fNPtThres;ipt++){ 
152       sprintf(name,"PtThresIsol_Cone_%d_Pt%d",icone,ipt);
153       sprintf(title,"Isolated candidate p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
154       fhPtThresIsolated[icone][ipt]  = new TH1F(name, title,240,0,120);
155       fhPtThresIsolated[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
156       fOutputContainer->Add(fhPtThresIsolated[icone][ipt]) ; 
157     }//icone loop
158   }//ipt loop
159
160 }
161
162 //____________________________________________________________________________
163 void AliAnaGammaIsolCut::Exec(Option_t *) 
164 {
165   
166   // Processing of one event
167   //Get ESDs
168
169   Long64_t entry = GetChain()->GetReadEntry() ;
170   if (!GetESD()) {
171     AliError("fESD is not connected to the input!") ; 
172     return ; 
173   }
174   if (GetPrintInfo()) 
175     AliInfo(Form("%s ----> Processing event # %lld",  (dynamic_cast<TChain *>(GetChain()))->GetFile()->GetName(), entry)) ; 
176
177   //CreateTLists with arrays of TParticles. Filled with particles only relevant for the analysis.
178
179   TClonesArray * particleList = new TClonesArray("TParticle",1000); // All particles refitted in CTS and detected in EMCAL (jet)
180   TClonesArray * plCTS         = new TClonesArray("TParticle",1000); // All particles refitted in Central Tracking System (ITS+TPC)
181   TClonesArray * plNe         = new TClonesArray("TParticle",1000);   // All particles measured in Jet Calorimeter (EMCAL)
182   TClonesArray * plPHOS     = new TClonesArray("TParticle",1000);  // All particles measured in PHOS as Gamma calorimeter
183   TClonesArray * plEMCAL   = new TClonesArray("TParticle",1000);  // All particles measured in EMCAL as Gamma calorimeter
184   
185   
186   AliDebug(2, "Fill particle lists");
187   
188   //Fill particle lists 
189   CreateParticleList(particleList, plCTS,plEMCAL,plPHOS); 
190   
191   if(GetCalorimeter() == "PHOS")
192     plNe = plPHOS;
193   if(GetCalorimeter() == "EMCAL")
194     plNe = plEMCAL;
195   
196   //Isolation Cut Analysis for both methods and different pt cuts and cones
197   
198   for(Int_t ipr = 0; ipr < plNe->GetEntries() ; ipr ++ ){
199     TParticle * pCandidate = dynamic_cast<TParticle *>(plNe->At(ipr)) ;
200     
201     if(pCandidate->Pt() > GetMinGammaPt()){
202       
203       Bool_t  icPtThres   = kFALSE;
204       Bool_t  icPtSum     = kFALSE;
205       
206       Float_t ptC             = pCandidate->Pt() ;
207       
208       fhPtCandidate->Fill(ptC);
209       
210       for(Int_t icone = 0; icone<fNCones; icone++){
211         SetConeSize(fConeSizes[icone]) ;
212         Float_t coneptsum = 0 ;
213         for(Int_t ipt = 0; ipt<fNPtThres;ipt++){ 
214           SetPtThreshold(fPtThresholds[ipt]) ;
215           MakeIsolationCut(plCTS,plNe, pCandidate, ipr, icPtThres, icPtSum,coneptsum);
216           AliDebug(4,Form("Candidate pt %f, pt in cone %f, Isolated? ICPt %d, ICSum %d",
217                           pCandidate->Pt(), coneptsum, icPtThres, icPtSum));
218           
219           fhPtThresIsolated[icone][ipt]->Fill(ptC); 
220         }//pt thresh loop
221         fhPtSumIsolated[icone]->Fill(ptC,coneptsum) ;
222       }//cone size loop
223     }//min pt candidate
224   }//candidate loop
225   
226   AliDebug(2, "End of analysis, delete pointers");
227   
228   particleList->Delete() ; 
229   plCTS->Delete() ;
230   plNe->Delete() ;
231   plPHOS->Delete() ;
232   plEMCAL->Delete() ;
233
234   delete plNe ;
235   delete plCTS ;
236   //delete plPHOS ;
237   //delete plEMCAL ;
238   delete particleList ;
239
240   PostData(0, fOutputContainer);
241 }    
242
243   //____________________________________________________________________________
244 void AliAnaGammaIsolCut::InitParameters()
245 {
246   // Initialisation of branch container 
247   AliAnaGammaDirect::InitParameters();
248
249   fNCones           = 4 ; 
250   fNPtThres         = 4 ; 
251   fConeSizes[0] = 0.1; fConeSizes[0] = 0.2; fConeSizes[2] = 0.3; fConeSizes[3] = 0.4;
252   fPtThresholds[0]=1.; fPtThresholds[0]=2.; fPtThresholds[0]=3.; fPtThresholds[0]=4.;
253 }
254
255 void AliAnaGammaIsolCut::Print(const Option_t * opt) const
256 {
257
258   //Print some relevant parameters set for the analysis
259   if(! opt)
260     return;
261
262   Info("Print", "%s %s", GetName(), GetTitle() ) ;
263   printf("N Cone Sizes               =     %d\n", fNCones) ; 
264   printf("N pT thresholds           =     %d\n", fNPtThres) ;
265   printf("Cone Sizes                  =    \n") ;
266   for(Int_t i = 0; i < fNCones; i++)
267     printf("   %f;",  fConeSizes[i]) ;
268   printf("    \n") ;
269   for(Int_t i = 0; i < fNPtThres; i++)
270     printf("   %f;",  fPtThresholds[i]) ;
271   printf("    \n") ;
272   
273
274
275 void AliAnaGammaIsolCut::Terminate(Option_t *)
276 {
277   // The Terminate() function is the last function to be called during
278   // a query. It always runs on the client, it can be used to present
279   // the results graphically or save the results to file.
280  
281 }