Final version used to produce the ALICE NOTE on gamma-tagging jets studies
[u/mrichter/AliRoot.git] / PHOS / AliPHOSGammaJet.h
1 #ifndef ALIPHOSGammaJet_H
2 #define ALIPHOSGammaJet_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice     */
5 /* $Id$ */
6
7 //_________________________________________________________________________
8 //  Class for the analysis of gamma-jet correlations     
9 //                  
10 //*-- Author: Gustavo Conesa & Yves Schutz (IFIC, CERN)
11
12 // --- ROOT system ---
13 #include "TTask.h"
14 #include "TH1.h"
15 #include "TH2.h"
16 #include "TMatrix.h"
17 #include "TList.h"
18 #include "AliPHOSGeometry.h"
19 #include "AliPHOSFastGlobalReconstruction.h"
20 #include "../PYTHIA6/AliGenPythia.h"
21 // --- AliRoot header files ---
22
23 class AliPHOSGammaJet : public TTask {
24
25 public: 
26
27   AliPHOSGammaJet() ; // default ctor
28   AliPHOSGammaJet(const TString inputfilename) ; //ctor 
29   AliPHOSGammaJet(const AliPHOSGammaJet & gj) ; // cpy ctor
30   ~AliPHOSGammaJet() ; // dtor
31   virtual void   Exec(Option_t *option); 
32   void List() const; 
33   Double_t GetAngleMaxParam(Int_t i){return fAngleMaxParam.At(i) ; }
34   Double_t GetEtaCut(){return fEtaCut;}
35   Double_t GetPhiEMCALCut(Int_t i){return fPhiEMCALCut[i];}
36   TString  GetHIJINGFileName(){return fHIJINGFileName ; }
37   TString  GetHistosFileName(){return fOutputFileName ; }
38   Double_t GetInvMassMaxCut(){return fInvMassMaxCut ; }
39   Double_t GetInvMassMinCut(){return fInvMassMinCut ; }
40   Double_t GetPhiMaxCut(){return fPhiMaxCut ; }
41   Double_t GetPhiMinCut(){return fPhiMinCut ; }
42   Double_t GetPtCut(){return fPtCut ; }
43   Double_t GetNeutralPtCut(){return fNeutralPtCut ; }
44   Double_t GetChargedPtCut(){return fChargedPtCut ; }
45   Double_t GetPtJetSelectionCut(){return fPtJetSelectionCut ; }
46   Double_t GetMinDistance(){return fMinDistance ; }
47   Double_t GetJetRatioMaxCut(){return fJetRatioMaxCut ; }
48   Double_t GetJetRatioMinCut(){return fJetRatioMinCut ; }
49   Double_t GetRatioMaxCut(){return fRatioMaxCut ; }
50   Double_t GetRatioMinCut(){return fRatioMinCut ; }
51   Int_t    GetNEvent(){return fNEvent ; }
52   Int_t    GetNCones(){return fNCone ; }
53   Int_t    GetNPtThres(){return fNPt ; }
54   Float_t  GetCone(){return fCone ; }
55   Float_t  GetPtThreshold(){return fPtThreshold ; }
56   Float_t  GetCones(Int_t i){return fCones[i] ; }
57   Float_t  GetPtThreshold(Int_t i){return fPtThres[i] ; }
58   TString  GetConeName(Int_t i){return fNameCones[i] ; }
59   TString  GetPtThresName(Int_t i){return fNamePtThres[i] ; }
60   Bool_t   GetTPCCutsLikeEMCAL(){return fTPCCutsLikeEMCAL ; }
61  
62
63   Bool_t   IsAnyConeOrPt(){return fAnyConeOrPt ; }
64   Bool_t   IsFastReconstruction(){return fOptFast ; }
65   Bool_t   IsHIJING(){return fHIJING ; }
66   Bool_t   IsOnlyCharged(){return fOnlyCharged ; }
67
68   void Plot(TString what="all", Option_t *option="") const;
69   void Print(char * opt);
70
71   void SetAngleMaxParam(Int_t i, Double_t par)
72   {fAngleMaxParam.AddAt(par,i) ; }
73   void SetAnyConeOrPt(Bool_t any){fAnyConeOrPt = any ;}
74   void SetEtaCut(Double_t etacut) {fEtaCut = etacut ; }
75   void SetPhiEMCALCut(Double_t phi, Int_t i){fPhiEMCALCut[i] = phi; }
76   void SetFastReconstruction(Bool_t fast){fOptFast = fast ; }
77   void SetHIJING(Bool_t opt){fHIJING = opt; }
78   void SetHIJINGFileName(TString file){fHIJINGFileName = file ; }
79   void SetNCones(Int_t n){fNCone = n ; }
80   void SetNPtThresholds(Int_t n){fNPt = n ; }
81   void SetCones(Int_t i, Float_t cone, TString sc)
82     {fCones[i] = cone ; fNameCones[i] = sc; };
83   void SetCone(Float_t cone)
84     {fCone = cone; }
85   void SetPtThreshold(Float_t pt){fPtThreshold = pt; };
86   void SetPtThresholds(Int_t i,Float_t pt, TString spt){fPtThres[i] = pt ; 
87   fNamePtThres[i] = spt; };
88   void SetOnlyCharged(Bool_t opt){fOnlyCharged = opt; }
89   void SetPythiaFileName(TString file){fInputFileName = file ; }
90   void SetHistosFileName(TString file){fOutputFileName = file ; }
91   void SetInvMassCutRange(Double_t invmassmin, Double_t invmassmax)
92     {fInvMassMaxCut =invmassmax;  fInvMassMinCut =invmassmin;}  
93   void SetJetRatioCutRange(Double_t ratiomin, Double_t ratiomax)
94     {fJetRatioMaxCut =ratiomax;  fJetRatioMinCut = ratiomin ; }
95  void SetJetTPCRatioCutRange(Double_t ratiomin, Double_t ratiomax)
96     {fJetTPCRatioMaxCut =ratiomax;  fJetTPCRatioMinCut = ratiomin ; }
97   void SetNEvent(Int_t n){fNEvent  = n ; }
98   void SetMinDistance(Double_t min){fMinDistance  = min ; }
99   void SetPhiCutRange(Double_t phimin, Double_t phimax)
100   {fPhiMaxCut =phimax;  fPhiMinCut =phimin;}
101   void SetPtCut(Double_t ptcut)
102   {fPtCut =ptcut;}
103   void SetNeutralPtCut(Double_t ptcut)
104   {fNeutralPtCut =ptcut;}
105   void SetChargedPtCut(Double_t ptcut)
106   {fChargedPtCut =ptcut;}
107   void SetPtJetSelectionCut(Double_t cut){fPtJetSelectionCut = cut; }
108   void SetJetSelection(Bool_t select){ fSelect= select ; }
109   void SetRatioCutRange(Double_t ratiomin, Double_t ratiomax)
110   {fRatioMaxCut = ratiomax;  fRatioMinCut = ratiomin;}
111   void SetTPCCutsLikeEMCAL(Bool_t b){ fTPCCutsLikeEMCAL= b ; }
112  
113
114  private:
115 //   void AddHIJINGToList(TList & particleList, TList & particleListCh, 
116 //                     TList & particleListNe, const Int_t iEvent, 
117 //                     const TLorentzVector gamma, Double_t & rot ); 
118  
119   void AddHIJINGToList(Int_t iEvent, TClonesArray * particleList, 
120                        TClonesArray * plCh, TClonesArray * plNe, 
121                        TClonesArray * plNePHOS, const AliPHOSGeometry * geom); 
122
123
124   Double_t CalculateJetRatioLimit(const Double_t ptg, const Double_t *param, 
125                                   const Double_t *x);
126
127   void CreateParticleList(Int_t iEvent, TClonesArray * particleList, 
128                           TClonesArray * plCh, TClonesArray * plNe, 
129                           TClonesArray * plNePHOS, 
130                           const AliPHOSGeometry * geom );
131   
132   void FillJetHistos(TClonesArray * pl, Double_t ptg, TString conf, TString type);
133
134   void FillJetHistosAnyConeOrPt( TClonesArray * pl, Double_t ptg, TString conf, 
135                                  TString type, TString cone, TString ptcut);
136   Bool_t IsAngleInWindow(const Float_t angle, const Float_t e);
137   Bool_t IsJetSelected(const Double_t ptg, const Double_t ptjet, 
138                        const TString type);
139
140   void MakeJet(TClonesArray * particleList, 
141                Double_t ptg, Double_t phig,
142                Double_t ptl, Double_t phil, Double_t etal, 
143                TString  type, TLorentzVector & jet); 
144   void MakeJetAnyConeOrPt(TClonesArray * particleList, Double_t ptg, 
145                           Double_t phil, Double_t ptl, Double_t phil, 
146                           Double_t etal, TString  type); 
147   void GetGammaJet(TClonesArray * pl,  Double_t &pt, 
148                    Double_t &phi, Double_t &eta, Bool_t &Is) ;
149
150   void GetLeadingCharge(TClonesArray * pl, 
151                         Double_t ptg,  Double_t phig, 
152                         Double_t &pt, Double_t &eta, Double_t &phi) ;
153   void GetLeadingPi0   (TClonesArray * pl, 
154                         Double_t ptg, Double_t phig, 
155                         Double_t &pt, Double_t &eta, Double_t &phi) ;
156
157   void InitParameters();
158   Double_t MakeEnergy(const Double_t energy) ;
159   void MakeHistos() ;
160   void MakePhoton(TLorentzVector & particle) ; 
161   TVector3 MakePosition(const Double_t energy, const TVector3 pos) ;
162  
163   void Pi0Decay(Double_t mPi0, TLorentzVector &p0, 
164                 TLorentzVector &p1, TLorentzVector &p2, Double_t &angle) ;
165   Double_t SigmaE(Double_t energy) ;
166   Double_t SigmaP(Double_t energy) ;
167
168   void SetJet(TParticle * part, Bool_t & b, Float_t cone, Double_t eta, 
169               Double_t phi);
170
171  private: 
172   Bool_t     fAnyConeOrPt; 
173   Option_t * fOption ;         //! Fill most interesting histograms 
174                                // and give interesting information
175   TFile *    fOutputFile ;     //! Output file
176   TString    fOutputFileName;  //! Output file Name
177   TString    fInputFileName;   //!
178   TString    fHIJINGFileName;  //!
179   Bool_t     fHIJING;
180   Double_t   fEtaCut ;         // Eta cut
181   Bool_t     fOnlyCharged ;    // Only jets of charged particles
182   Double_t   fPhiEMCALCut[2] ; // Phi cut maximum
183   Double_t   fPhiMaxCut ;      // Phi cut maximum
184   Double_t   fPhiMinCut ;      // Phi cut minimun
185   Double_t   fPtCut ;          // Min pt in PHOS
186   Double_t   fNeutralPtCut ;   // Min pt detected in PHOS
187   Double_t   fChargedPtCut ;   // Min pt detected in TPC
188   Double_t   fInvMassMaxCut ;  // Invariant Mass cut maximum
189   Double_t   fInvMassMinCut ;  // Invariant Masscut minimun
190   Double_t   fMinDistance ;    // Minimal distance to resolve gamma decay.
191   Double_t   fRatioMaxCut ;    // Leading particle/gamma Ratio cut maximum
192   Double_t   fRatioMinCut ;    // Leading particle/gamma Ratio cut minimum
193   Bool_t     fTPCCutsLikeEMCAL ; //Same jet energy ratio limits for both conf.
194
195   //Jet selection parameters
196   //Fixed cuts (old)
197   Double_t   fJetTPCRatioMaxCut ; // Leading particle/gamma Ratio cut maximum
198   Double_t   fJetTPCRatioMinCut ; // Leading particle/gamma Ratio cut minimum
199   Double_t   fJetRatioMaxCut ; // Jet/gamma Ratio cut maximum
200   Double_t   fJetRatioMinCut ; // Jet/gamma Ratio cut minimum
201
202   //Cuts depending on jet pt
203   Double_t fJetE1[2];
204   Double_t fJetE2[2];
205   Double_t fJetSigma1[2];
206   Double_t fJetSigma2[2];
207   Double_t fBkgMean[6];
208   Double_t fBkgRMS[6];
209   Double_t fJetXMin1[6];
210   Double_t fJetXMin2[6];
211   Double_t fJetXMax1[6];
212   Double_t fJetXMax2[6];
213
214   Int_t      fNEvent ;         // Number of events to analyze
215   Int_t      fNCone ;          // Number of jet cones sizes
216   Int_t      fNPt   ;          // Number of jet particle pT threshold
217   Double_t   fCone  ;        // Jet cone sizes under study
218   Double_t   fCones[10];        // Jet cone sizes under study
219   TString    fNameCones[10];
220   Double_t   fPtThreshold;
221   Double_t   fPtThres[10];     // Jet pT threshold under study
222   Double_t   fPtJetSelectionCut;     // Jet pT threshold under study
223   TString    fNamePtThres[10]; 
224   TObjArray * fListHistos ;    //! list of Histograms
225   AliPHOSFastGlobalReconstruction * fFastRec;
226   Bool_t     fOptFast;
227   TRandom    fRan ;       //! random number generator
228   //Energy and position parameters
229   Double_t   fResPara1 ;  // parameter for the energy resolution dependence  
230   Double_t   fResPara2 ;  // parameter for the energy resolution dependence  
231   Double_t   fResPara3 ;  // parameter for the energy resolution dependence 
232   Double_t   fPosParaA ;  // parameter for the position resolution
233   Double_t   fPosParaB ;  // parameter for the position resolution 
234   TArrayD    fAngleMaxParam ;
235   Bool_t fSelect  ;  //Select jet within limits
236
237   ClassDef(AliPHOSGammaJet,2)
238 } ;
239  
240
241 #endif //ALIPHOSGammaJet_H
242
243
244