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