]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG4/GammaConv/AliAnalysisTaskGammaConversion.h
IsHeavyIon flag, added Centrality Selection, Add mising Cut for Nch, extra histograms...
[u/mrichter/AliRoot.git] / PWG4 / GammaConv / AliAnalysisTaskGammaConversion.h
1 #ifndef ALIANALYSISTASKGAMMACONVERSION_H
2 #define ALIANALYSISTASKGAMMACONVERSION_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 ////////////////////////////////////////////////
8 //--------------------------------------------- 
9 // Class used to do analysis on conversion pairs
10 //---------------------------------------------
11 ////////////////////////////////////////////////
12
13 #include "AliAnalysisTaskSE.h"
14 #include <vector>
15 #include "AliV0Reader.h"
16 #include "AliGammaConversionBGHandler.h"
17 //#include "TRandom3.h"
18 //#include "AliCFManager.h"  // for CF
19 //#include "AliCFContainer.h"   // for CF
20
21 class AliGammaConversionAODObject;
22 class TNtuple;
23 class AliGammaConversionHistograms;
24 class AliESDv0;
25 class AliV0;
26 class AliKFParticle;
27 class AliKFVertex;
28 class AliESDInputHandler;
29 class AliESDEvent;
30 class AliAODEvent;
31 class AliMCEvent;
32 class TList;
33 class AliStack;
34 class AliESDtrackCuts;
35 class AliTriggerAnalysis;
36 class AliCFManager; // for CF
37 class AliCFContainer; // for CF
38 class TRandom3;
39
40 class AliAnalysisTaskGammaConversion : public AliAnalysisTaskSE
41 {
42         
43  public:
44   typedef enum { kProcSD, kProcDD, kProcND, kProcUnknown, kNProcs } ProcType_t; 
45   AliAnalysisTaskGammaConversion();
46   AliAnalysisTaskGammaConversion(const char* name);
47   virtual ~AliAnalysisTaskGammaConversion() ;// virtual destructor
48                 
49   // Implementation of interface methods
50   virtual void UserCreateOutputObjects();
51   virtual void Init();
52   virtual void LocalInit() {Init();}
53   virtual void UserExec(Option_t *option);
54   virtual void Terminate(Option_t *option);
55   //virtual void ConnectInputData(Option_t * option);
56   void CheckMesonProcessTypeEventQuality(Int_t evtQ);
57   Int_t GetProcessType(const AliMCEvent * mcEvt) ;
58   void ProcessMCData();
59   void ProcessV0sNoCut();
60   void ProcessV0s();
61   void ProcessGammasForNeutralMesonAnalysis();
62   void ProcessGammasForOmegaMesonAnalysis();
63   //  void ProcessConvPHOSGammasForNeutralMesonAnalysis();
64   void RecalculateV0ForGamma();
65   // for CF
66   void SetCFManager(AliCFManager * const io) {fCFManager = io;};
67   AliCFManager *GetCFManager() const {return fCFManager;}
68                 
69                 
70   // AOD
71   TString GetAODBranchName() const {return  fAODBranchName;}
72   void SetAODBranchName(TString name)  {fAODBranchName = name ;}        
73   void SetForceAOD(Bool_t forceAOD ) { fKFForceAOD = forceAOD; }
74   void FillAODWithConversionGammas();
75   // end AOD
76                 
77   static Bool_t IsGoodImpPar(const AliESDtrack *const track);
78         
79   // for GammaJetAnalysis
80   void ProcessGammasForGammaJetAnalysis();
81   void CreateListOfChargedParticles();
82   Double_t GetMinimumDistanceToCharge(Int_t indexHighestPtGamma);
83   void CalculateJetCone(Int_t gammaIndex);
84   Int_t GetIndexHighestPtGamma();
85   void SetESDtrackCuts();
86   // end of Gamma Jet
87                 
88   void SetMinPtForGammaJet(Double_t minPtForGammaJet){fMinPtForGammaJet=minPtForGammaJet;}
89   void SetMinIsoConeSize(Double_t minIsoConeSize){fMinIsoConeSize=minIsoConeSize;}
90   void SetMinPtIsoCone(Double_t minPtIsoCone){fMinPtIsoCone=minPtIsoCone;}
91   void SetMinPtGamChargedCorr(Double_t minPtGamChargedCorr){fMinPtGamChargedCorr=minPtGamChargedCorr;}
92   void SetMinPtJetCone(Double_t minPtJetCone){fMinPtJetCone=minPtJetCone;}
93
94   void SetLowPtMapping(Double_t lowPtMapping){fLowPtMapping=lowPtMapping;}
95   void SetHighPtMapping(Double_t highPtMapping){fHighPtMapping=highPtMapping;}
96
97                 
98   void SetHistograms(AliGammaConversionHistograms *const histograms){fHistograms=histograms;}
99   void SetTriggerCINT1B(Bool_t flag){fTriggerCINT1B=flag;}
100   void SetDoMCTruth(Bool_t flag){fDoMCTruth=flag;}
101   void SetDoNeutralMeson(Bool_t flag){fDoNeutralMeson=flag;}
102   void SetDoOmegaMeson(Bool_t flag){fDoOmegaMeson=flag;}
103   void SetDoNeutralMesonV0MCCheck(Bool_t flag){fDoNeutralMesonV0MCCheck=flag;}
104   void SetDoJet(Bool_t flag){fDoJet=flag;}
105   void SetDoChic(Bool_t flag){fDoChic=flag;}
106   void SetRecalculateV0ForGamma(Bool_t flag){fRecalculateV0ForGamma=flag;}              
107
108   void SetElectronMass(Double_t electronMass){fElectronMass = electronMass;}
109   void SetGammaMass(Double_t gammaMass){fGammaMass = gammaMass;}
110   void SetGammaWidth(Double_t gammaWidth){fGammaWidth = gammaWidth;}
111   void SetPi0Mass(Double_t pi0Mass){fPi0Mass = pi0Mass;}
112   void SetPi0Width(Double_t pi0Width){fPi0Width = pi0Width;}
113   void SetEtaMass(Double_t etaMass){fEtaMass = etaMass;}
114   void SetEtaWidth(Double_t etaWidth){fEtaWidth = etaWidth;}
115   void SetMinOpeningAngleGhostCut(Double_t ghostCut){fMinOpeningAngleGhostCut = ghostCut;}
116   void SetV0Reader(AliV0Reader* const reader){fV0Reader=reader; fV0Reader->SetESDtrackCuts(fEsdTrackCuts);}
117   void SetCalculateBackground(Bool_t bg){fCalculateBackground=bg;}
118   void CalculateBackground();
119   void SetWriteNtuple(Bool_t writeNtuple){fWriteNtuple = writeNtuple;}
120   void FillNtuple();
121   Double_t GetMCOpeningAngle(const TParticle* const daughter0,const TParticle* const daughter1) const;
122   void CheckV0Efficiency();
123   void SetDeltaAODFileName(TString fn) { fKFDeltaAODFileName = fn; };
124                 
125   //////////////////Chi_c Analysis////////////////////////////
126   void GetPID(const AliESDtrack *track, Stat_t &pid, Stat_t &weight);   
127   double GetSigmaToVertex(const AliESDtrack* t);
128   void ElectronBackground(TString hBg, TClonesArray e);
129   void FillAngle(TString histoName,TClonesArray const tlVeNeg, TClonesArray const tlVePos);
130   void FillElectronInvMass(TString histoName, TClonesArray const negativeElectron, TClonesArray const positiveElectron);
131   void FillGammaElectronInvMass(TString histoMass,TString histoDiff, TClonesArray const fKFGammas, TClonesArray const tlVeNeg,TClonesArray const tlVePos);
132   void CleanWithAngleCuts(TClonesArray const negativeElectrons, TClonesArray const positiveElectrons, TClonesArray const gammas);
133   TClonesArray GetTLorentzVector(TClonesArray* esdTrack);       
134   void ProcessGammaElectronsForChicAnalysis();
135   ///////////////////////////////////////////////////////////////
136
137   void SetDoCF(Bool_t flag){fDoCF = flag;}
138
139   void SetUseChargedTracksMultiplicityForBG(Bool_t flag){fUseTrackMultiplicityForBG = flag;}            
140
141   void SetMoveParticleAccordingToVertex(Bool_t flag){fMoveParticleAccordingToVertex = flag;}
142
143   void MoveParticleAccordingToVertex(AliKFParticle * particle,const AliGammaConversionBGHandler::GammaConversionVertex *vertex);
144
145   void SetApplyChi2Cut(Bool_t flag){fApplyChi2Cut = flag;}
146
147   void SetDoRotation(Bool_t flag){fDoRotation = flag;}
148
149   void SetPMDegreesBG(Int_t deg){fNDegreesPMBackground=deg;}
150
151   void SetNumberOfRotationsBG(Int_t nRot){fNRandomEventsForBG=nRot;}
152
153   void RotateKFParticle(AliKFParticle * kfParticle,Double_t angle);
154
155   void SetCheckBGProbability(Bool_t flag){fCheckBGProbability = flag;}
156
157   void SetRemovePileUp(Bool_t removePileUp) { fRemovePileUp = removePileUp; }
158
159   void SetSelectV0AND(Bool_t selectV0AND) { fSelectV0AND = selectV0AND; }
160   void SetUseMultiplicity(Int_t useMultiplicity) {fUseMultiplicity=useMultiplicity;}
161   void SetUseMultiplicityBin(Int_t useMultiplicityBin) {fUseMultiplicityBin=useMultiplicityBin;}
162   Int_t CalculateMultiplicityBin();
163   void SetUseCentrality(Int_t useCentrality) {fUseCentrality=useCentrality;}
164   void SetUseCentralityBin(Int_t useCentralityBin) {fUseCentralityBin=useCentralityBin;}
165
166
167
168
169  private:
170   AliAnalysisTaskGammaConversion(const AliAnalysisTaskGammaConversion&); // Not implemented
171   AliAnalysisTaskGammaConversion& operator=(const AliAnalysisTaskGammaConversion&); // Not implemented
172   
173   /// Add reconstructed pions to aod
174   void AddPionToAOD(const AliKFParticle * const pionkf, Double_t mass, Int_t daughter1, Int_t daughter2); 
175   void AddOmegaToAOD(const AliKFParticle * const omegakf, Double_t mass, Int_t daughter1, Int_t daughter2); 
176                 
177   // for CF
178   enum{
179     kStepGenerated = 0,
180     kStepReconstructable = 1, 
181     kStepGetOnFly = 2,
182     kStepLikeSign = 3,
183     kStepTPCRefit = 4,
184     kStepKinks = 5,
185     kStepdEdxElectronSelection = 6,
186     kStepdEdxPpionRejection = 7,
187     kStepNContributors = 8,
188     kStepTPCPID = 9,
189     kStepR = 10,
190     kStepLine = 11,
191     kStepZ = 12,
192     kStepMinClsTPC = 13,
193     kStepSinglePt = 14,
194     kStepNDF = 15,
195     kStepChi2 = 16,
196     kStepEta = 17,
197     kStepPt = 18,
198     kStepTrueGamma = 19
199   };
200   
201   AliV0Reader* fV0Reader; // The V0 reader object 
202                 
203   AliStack * fStack; // pointer to the MC particle stack
204   AliMCEventHandler *fMCTruth; // for CF   pointer to MCTruth
205   AliMCEvent *fGCMCEvent;  // for CF    pointer to the MC Event
206   AliESDEvent* fESDEvent; //pointer to the ESDEvent
207   TList * fOutputContainer; // Histogram container
208   AliCFManager *fCFManager;  // for CF
209   //  AliCFContainer *container;   // for CF
210
211                 
212                 
213   AliGammaConversionHistograms *fHistograms; // Pointer to the histogram handling class
214   Bool_t fTriggerCINT1B; //Flag to select trigger CINT1B
215   Bool_t fDoMCTruth; // Flag to switch on/off MC truth 
216   Bool_t fDoNeutralMeson; // flag
217   Bool_t fDoOmegaMeson; // flag
218   Bool_t fDoJet; // flag
219   Bool_t fDoChic; // flag
220   Bool_t fRecalculateV0ForGamma;//flag
221                 
222   TClonesArray * fKFReconstructedGammasTClone; //! transient
223   TClonesArray * fKFReconstructedPi0sTClone; //! transient
224   TClonesArray * fKFRecalculatedGammasTClone; //! transient
225   TClonesArray * fCurrentEventPosElectronTClone; //! transient
226   TClonesArray * fCurrentEventNegElectronTClone; //! transient
227   TClonesArray * fKFReconstructedGammasCutTClone; //! transient
228   TClonesArray * fPreviousEventTLVNegElectronTClone; //! transient
229   TClonesArray * fPreviousEventTLVPosElectronTClone; //! transient
230                 
231   //  vector<AliKFParticle> fKFReconstructedGammas; // vector containing all reconstructed gammas
232   vector<Int_t> fElectronv1; // vector containing index of electron 1
233   vector<Int_t> fElectronv2; // vector containing index of electron 2
234                 
235   vector<Int_t> fGammav1; // vector containing index of gamma 1
236   vector<Int_t> fGammav2; // vector containing index of gamma 2
237
238   vector<Int_t> fElectronRecalculatedv1; // vector containing index of electron 1
239   vector<Int_t> fElectronRecalculatedv2; // vector containing index of electron 2
240                 
241   //  AliESDpid * fESDpid; // esd pid
242
243
244   ///////Chi_c Analysis///////////////////////////
245   //  vector<AliESDtrack*> fCurrentEventPosElectron;       // comment here
246   //  vector<AliESDtrack*> fCurrentEventNegElectron;       // comment here
247   //  vector<AliKFParticle> fKFReconstructedGammasCut;     // comment here
248   //  vector<TLorentzVector> fPreviousEventTLVNegElectron; // comment here
249   //  vector<TLorentzVector> fPreviousEventTLVPosElectron; // comment here
250   //////////////////////////////////////////////////    
251                 
252   //mass defines
253   Double_t fElectronMass; //electron mass
254   Double_t fGammaMass;    //gamma mass
255   Double_t fPi0Mass;      //pi0mass
256   Double_t fEtaMass;      //eta mass
257                 
258   // width defines
259   Double_t fGammaWidth; //gamma width cut
260   Double_t fPi0Width;   // pi0 width cut
261   Double_t fEtaWidth;   // eta width cut
262                 
263   Double_t fMinOpeningAngleGhostCut; // minimum angle cut
264                 
265   AliESDtrackCuts* fEsdTrackCuts;           // Object containing the parameters of the esd track cuts
266                 
267   Bool_t fCalculateBackground; //flag to set backgrount calculation on/off
268   Bool_t fWriteNtuple;         // flag to set if writing to ntuple on/off
269   TNtuple *fGammaNtuple;       // Ntuple for gamma values
270   TNtuple *fNeutralMesonNtuple;// NTuple for mesons
271                 
272   Int_t fTotalNumberOfAddedNtupleEntries; // number of added ntuple entries
273                 
274   TClonesArray* fChargedParticles;  //! transient
275   vector<Int_t> fChargedParticlesId;  //! transient
276                 
277   Double_t fGammaPtHighest;  //! transient
278   Double_t fMinPtForGammaJet;  //! transient
279   Double_t fMinIsoConeSize; //! transient
280   Double_t fMinPtIsoCone; //! transient
281   Double_t fMinPtGamChargedCorr; //! transient
282   Double_t fMinPtJetCone; //! transient
283   Int_t    fLeadingChargedIndex; //! transient
284   Double_t fLowPtMapping; //! transient
285   Double_t fHighPtMapping; //! transient
286   Bool_t fDoCF; //! transient
287                 
288   TClonesArray * fAODGamma; //TClonesArray for gammas to put in AOD
289   TClonesArray * fAODPi0; //TTClonesArray for Pi0s to put in AOD
290   TClonesArray * fAODOmega; //TTClonesArray for omegas to put in AOD
291   TString fAODBranchName; // New AOD branch name
292   Bool_t fKFForceAOD;  //Set the Analysis Manager FillAOD variable to true every event
293   TString fKFDeltaAODFileName; //! File name for delta AOD (if any)
294   Bool_t fDoNeutralMesonV0MCCheck; //flag
295   Bool_t fUseTrackMultiplicityForBG; //flag
296   Bool_t fMoveParticleAccordingToVertex; //flag
297   Bool_t fApplyChi2Cut; //flag
298   Int_t fNRandomEventsForBG; //number of random events to use in rotation method
299   Int_t fNDegreesPMBackground; // number of degree window to rotate particles for rotation method
300   Bool_t fDoRotation; //flag
301   Bool_t fCheckBGProbability; //flag
302   vector<Int_t>fKFReconstructedGammasV0Index; // index of the reconstructed v0s
303   Bool_t fRemovePileUp;                 // Remove Pile Up
304   Bool_t fSelectV0AND;                 // Select V0AND
305   AliTriggerAnalysis *fTriggerAnalysis; //! Trigger Analysis for Normalisation
306   Int_t fMultiplicity;
307   Int_t fUseMultiplicity;
308   Int_t fUseMultiplicityBin;
309   Int_t fUseCentrality;
310   Int_t fUseCentralityBin;
311   ClassDef(AliAnalysisTaskGammaConversion, 16); // Analysis task for gamma conversions
312 };
313
314 #endif //ALIANALYSISTASKGAMMA_H