]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG4/GammaConv/AliAnalysisTaskGammaConversion.h
Multiplicity selection in pp as cut number
[u/mrichter/AliRoot.git] / PWG4 / GammaConv / AliAnalysisTaskGammaConversion.h
index 9e48cdf8deb69fc2a7b3f609e8dc63a062dd455c..91039dd8d4f8c1324da6fcdc5a3312f4dbf626a5 100644 (file)
-#ifndef ALIANALYSISTASKGAMMACONVERSION_H\r
-#define ALIANALYSISTASKGAMMACONVERSION_H\r
\r
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
- * See cxx source for full Copyright notice                               */\r
-\r
-////////////////////////////////////////////////\r
-//--------------------------------------------- \r
-// Class used to do analysis on conversion pairs\r
-//---------------------------------------------\r
-////////////////////////////////////////////////\r
\r
-#include "AliAnalysisTaskSE.h"\r
-#include <vector>\r
-#include "AliV0Reader.h"\r
-\r
-class AliGammaConversionHistograms;\r
-class AliESDv0;\r
-class AliKFParticle;\r
-class AliESDInputHandler;\r
-class AliESDEvent;\r
-class AliAODEvent;\r
-class TList;\r
-class AliStack;\r
-\r
-class AliAnalysisTaskGammaConversion : public AliAnalysisTaskSE\r
-{\r
- public:\r
-    AliAnalysisTaskGammaConversion();\r
-    AliAnalysisTaskGammaConversion(const char* name);\r
-    virtual ~AliAnalysisTaskGammaConversion() ;// virtual destructor\r
\r
-    // Implementation of interface methods\r
-    virtual void UserCreateOutputObjects();\r
-    virtual void Init();\r
-    virtual void LocalInit() {Init();}\r
-    virtual void Exec(Option_t *option);\r
-    virtual void Terminate(Option_t *option);\r
-    virtual void ConnectInputData(Option_t *);\r
-       \r
-    void ProcessMCData();\r
-    void ProcessV0s();\r
-    void ProcessGammasForNeutralMesonAnalysis();\r
-    void SetHistograms(AliGammaConversionHistograms *histograms){fHistograms=histograms;}\r
-    void SetDoMCTruth(Bool_t flag){fDoMCTruth=flag;}\r
-    void SetElectronMass(Double_t electronMass){fElectronMass = electronMass;}\r
-    void SetGammaMass(Double_t gammaMass){fGammaMass = gammaMass;}\r
-    void SetGammaWidth(Double_t gammaWidth){fGammaWidth = gammaWidth;}\r
-    void SetPi0Mass(Double_t pi0Mass){fPi0Mass = pi0Mass;}\r
-    void SetPi0Width(Double_t pi0Width){fPi0Width = pi0Width;}\r
-    void SetEtaMass(Double_t etaMass){fEtaMass = etaMass;}\r
-    void SetEtaWidth(Double_t etaWidth){fEtaWidth = etaWidth;}\r
-    void SetV0Reader(AliV0Reader* reader){fV0Reader=reader;}\r
-    void SetCalculateBackground(Bool_t bg){fCalculateBackground=bg;}\r
-    void CalculateBackground();\r
-    Double_t GetMCOpeningAngle(TParticle* daughter0, TParticle* daughter1) const;\r
-\r
- private:\r
-    AliAnalysisTaskGammaConversion(const AliAnalysisTaskGammaConversion&); // Not implemented\r
-    AliAnalysisTaskGammaConversion& operator=(const AliAnalysisTaskGammaConversion&); // Not implemented\r
-\r
-    AliV0Reader* fV0Reader;\r
-\r
-    AliStack * fStack;\r
-\r
-    TList * fOutputContainer ; // Histogram container\r
-\r
-    AliGammaConversionHistograms *fHistograms;\r
-\r
-    Bool_t fDoMCTruth;\r
-    \r
-    vector<TParticle*> fMCAllGammas;\r
-    vector<TParticle*> fMCPi0s;\r
-    vector<TParticle*> fMCEtas;\r
-    vector<TParticle*> fMCGammaChic;\r
-\r
-    vector<AliKFParticle> fKFReconstructedGammas;\r
-\r
-    //mass defines\r
-    Double_t fElectronMass;\r
-    Double_t fGammaMass;\r
-    Double_t fPi0Mass;\r
-    Double_t fEtaMass;\r
-\r
-    // width defines\r
-    Double_t fGammaWidth;\r
-    Double_t fPi0Width;\r
-    Double_t fEtaWidth;\r
-    Bool_t fCalculateBackground;\r
-\r
-\r
-    ClassDef(AliAnalysisTaskGammaConversion, 0); // Analysis task for gamma conversions\r
-};\r
\r
-#endif //ALIANALYSISTASKGAMMA_H\r
+#ifndef ALIANALYSISTASKGAMMACONVERSION_H
+#define ALIANALYSISTASKGAMMACONVERSION_H
+
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+////////////////////////////////////////////////
+//--------------------------------------------- 
+// Class used to do analysis on conversion pairs
+//---------------------------------------------
+////////////////////////////////////////////////
+
+#include "AliAnalysisTaskSE.h"
+#include <vector>
+#include "AliV0Reader.h"
+#include "AliGammaConversionBGHandler.h"
+//#include "TRandom3.h"
+//#include "AliCFManager.h"  // for CF
+//#include "AliCFContainer.h"   // for CF
+
+class AliGammaConversionAODObject;
+class TNtuple;
+class AliGammaConversionHistograms;
+class AliESDv0;
+class AliV0;
+class AliKFParticle;
+class AliKFVertex;
+class AliESDInputHandler;
+class AliESDEvent;
+class AliAODEvent;
+class AliMCEvent;
+class TList;
+class AliStack;
+class AliESDtrackCuts;
+class AliTriggerAnalysis;
+class AliCFManager; // for CF
+class AliCFContainer; // for CF
+class TRandom3;
+
+class AliAnalysisTaskGammaConversion : public AliAnalysisTaskSE
+{
+       
+ public:
+  typedef enum { kProcSD, kProcDD, kProcND, kProcUnknown, kNProcs } ProcType_t; 
+  AliAnalysisTaskGammaConversion();
+  AliAnalysisTaskGammaConversion(const char* name);
+  virtual ~AliAnalysisTaskGammaConversion() ;// virtual destructor
+               
+  // Implementation of interface methods
+  virtual void UserCreateOutputObjects();
+  virtual void Init();
+  virtual void LocalInit() {Init();}
+  virtual void UserExec(Option_t *option);
+  virtual void Terminate(Option_t *option);
+  //virtual void ConnectInputData(Option_t * option);
+  void CheckMesonProcessTypeEventQuality(Int_t evtQ);
+  Int_t GetProcessType(const AliMCEvent * mcEvt) ;
+  void ProcessMCData();
+  void ProcessV0sNoCut();
+  void ProcessV0s();
+  void ProcessGammasForNeutralMesonAnalysis();
+  void ProcessGammasForOmegaMesonAnalysis();
+  //  void ProcessConvPHOSGammasForNeutralMesonAnalysis();
+  void RecalculateV0ForGamma();
+  // for CF
+  void SetCFManager(AliCFManager * const io) {fCFManager = io;};
+  AliCFManager *GetCFManager() const {return fCFManager;}
+               
+               
+  // AOD
+  TString GetAODBranchName() const {return  fAODBranchName;}
+  void SetAODBranchName(TString name)  {fAODBranchName = name ;}       
+  void SetForceAOD(Bool_t forceAOD ) { fKFForceAOD = forceAOD; }
+  void FillAODWithConversionGammas();
+  // end AOD
+               
+  static Bool_t IsGoodImpPar(const AliESDtrack *const track);
+       
+  // for GammaJetAnalysis
+  void ProcessGammasForGammaJetAnalysis();
+  void CreateListOfChargedParticles();
+  Double_t GetMinimumDistanceToCharge(Int_t indexHighestPtGamma);
+  void CalculateJetCone(Int_t gammaIndex);
+  Int_t GetIndexHighestPtGamma();
+  void SetESDtrackCuts();
+  // end of Gamma Jet
+               
+  void SetMinPtForGammaJet(Double_t minPtForGammaJet){fMinPtForGammaJet=minPtForGammaJet;}
+  void SetMinIsoConeSize(Double_t minIsoConeSize){fMinIsoConeSize=minIsoConeSize;}
+  void SetMinPtIsoCone(Double_t minPtIsoCone){fMinPtIsoCone=minPtIsoCone;}
+  void SetMinPtGamChargedCorr(Double_t minPtGamChargedCorr){fMinPtGamChargedCorr=minPtGamChargedCorr;}
+  void SetMinPtJetCone(Double_t minPtJetCone){fMinPtJetCone=minPtJetCone;}
+
+  void SetLowPtMapping(Double_t lowPtMapping){fLowPtMapping=lowPtMapping;}
+  void SetHighPtMapping(Double_t highPtMapping){fHighPtMapping=highPtMapping;}
+
+               
+  void SetHistograms(AliGammaConversionHistograms *const histograms){fHistograms=histograms;}
+  void SetTriggerCINT1B(Bool_t flag){fTriggerCINT1B=flag;}
+  void SetDoMCTruth(Bool_t flag){fDoMCTruth=flag;}
+  void SetDoNeutralMeson(Bool_t flag){fDoNeutralMeson=flag;}
+  void SetDoOmegaMeson(Bool_t flag){fDoOmegaMeson=flag;}
+  void SetDoNeutralMesonV0MCCheck(Bool_t flag){fDoNeutralMesonV0MCCheck=flag;}
+  void SetDoJet(Bool_t flag){fDoJet=flag;}
+  void SetDoChic(Bool_t flag){fDoChic=flag;}
+  void SetRecalculateV0ForGamma(Bool_t flag){fRecalculateV0ForGamma=flag;}             
+
+  void SetElectronMass(Double_t electronMass){fElectronMass = electronMass;}
+  void SetGammaMass(Double_t gammaMass){fGammaMass = gammaMass;}
+  void SetGammaWidth(Double_t gammaWidth){fGammaWidth = gammaWidth;}
+  void SetPi0Mass(Double_t pi0Mass){fPi0Mass = pi0Mass;}
+  void SetPi0Width(Double_t pi0Width){fPi0Width = pi0Width;}
+  void SetEtaMass(Double_t etaMass){fEtaMass = etaMass;}
+  void SetEtaWidth(Double_t etaWidth){fEtaWidth = etaWidth;}
+  void SetMinOpeningAngleGhostCut(Double_t ghostCut){fMinOpeningAngleGhostCut = ghostCut;}
+  void SetV0Reader(AliV0Reader* const reader){fV0Reader=reader; fV0Reader->SetESDtrackCuts(fEsdTrackCuts);}
+  void SetCalculateBackground(Bool_t bg){fCalculateBackground=bg;}
+  void CalculateBackground();
+  void SetWriteNtuple(Bool_t writeNtuple){fWriteNtuple = writeNtuple;}
+  void FillNtuple();
+  Double_t GetMCOpeningAngle(const TParticle* const daughter0,const TParticle* const daughter1) const;
+  void CheckV0Efficiency();
+  void SetDeltaAODFileName(TString fn) { fKFDeltaAODFileName = fn; };
+               
+  //////////////////Chi_c Analysis////////////////////////////
+  void GetPID(const AliESDtrack *track, Stat_t &pid, Stat_t &weight);  
+  double GetSigmaToVertex(const AliESDtrack* t);
+  void ElectronBackground(TString hBg, TClonesArray e);
+  void FillAngle(TString histoName,TClonesArray const tlVeNeg, TClonesArray const tlVePos);
+  void FillElectronInvMass(TString histoName, TClonesArray const negativeElectron, TClonesArray const positiveElectron);
+  void FillGammaElectronInvMass(TString histoMass,TString histoDiff, TClonesArray const fKFGammas, TClonesArray const tlVeNeg,TClonesArray const tlVePos);
+  void CleanWithAngleCuts(TClonesArray const negativeElectrons, TClonesArray const positiveElectrons, TClonesArray const gammas);
+  TClonesArray GetTLorentzVector(TClonesArray* esdTrack);      
+  void ProcessGammaElectronsForChicAnalysis();
+  ///////////////////////////////////////////////////////////////
+
+  void SetDoCF(Bool_t flag){fDoCF = flag;}
+
+  void SetUseChargedTracksMultiplicityForBG(Bool_t flag){fUseTrackMultiplicityForBG = flag;}           
+
+  void SetMoveParticleAccordingToVertex(Bool_t flag){fMoveParticleAccordingToVertex = flag;}
+
+  void MoveParticleAccordingToVertex(AliKFParticle * particle,const AliGammaConversionBGHandler::GammaConversionVertex *vertex);
+
+  void SetApplyChi2Cut(Bool_t flag){fApplyChi2Cut = flag;}
+
+  void SetDoRotation(Bool_t flag){fDoRotation = flag;}
+
+  void SetPMDegreesBG(Int_t deg){fNDegreesPMBackground=deg;}
+
+  void SetNumberOfRotationsBG(Int_t nRot){fNRandomEventsForBG=nRot;}
+
+  void RotateKFParticle(AliKFParticle * kfParticle,Double_t angle);
+
+  void SetCheckBGProbability(Bool_t flag){fCheckBGProbability = flag;}
+
+  void SetRemovePileUp(Bool_t removePileUp) { fRemovePileUp = removePileUp; }
+
+  void SetSelectV0AND(Bool_t selectV0AND) { fSelectV0AND = selectV0AND; }
+  void SetUseMultiplicity(Int_t useMultiplicity) {fUseMultiplicity=useMultiplicity;}
+  void SetUseMultiplicityBin(Int_t useMultiplicityBin) {fUseMultiplicityBin=useMultiplicityBin;}
+  Int_t CalculateMultiplicityBin();
+ private:
+  AliAnalysisTaskGammaConversion(const AliAnalysisTaskGammaConversion&); // Not implemented
+  AliAnalysisTaskGammaConversion& operator=(const AliAnalysisTaskGammaConversion&); // Not implemented
+  
+  /// Add reconstructed pions to aod
+  void AddPionToAOD(const AliKFParticle * const pionkf, Double_t mass, Int_t daughter1, Int_t daughter2); 
+  void AddOmegaToAOD(const AliKFParticle * const omegakf, Double_t mass, Int_t daughter1, Int_t daughter2); 
+               
+  // for CF
+  enum{
+    kStepGenerated = 0,
+    kStepReconstructable = 1, 
+    kStepGetOnFly = 2,
+    kStepLikeSign = 3,
+    kStepTPCRefit = 4,
+    kStepKinks = 5,
+    kStepdEdxElectronSelection = 6,
+    kStepdEdxPpionRejection = 7,
+    kStepNContributors = 8,
+    kStepTPCPID = 9,
+    kStepR = 10,
+    kStepLine = 11,
+    kStepZ = 12,
+    kStepMinClsTPC = 13,
+    kStepSinglePt = 14,
+    kStepNDF = 15,
+    kStepChi2 = 16,
+    kStepEta = 17,
+    kStepPt = 18,
+    kStepTrueGamma = 19
+  };
+  
+  AliV0Reader* fV0Reader; // The V0 reader object 
+               
+  AliStack * fStack; // pointer to the MC particle stack
+  AliMCEventHandler *fMCTruth; // for CF   pointer to MCTruth
+  AliMCEvent *fGCMCEvent;  // for CF    pointer to the MC Event
+  AliESDEvent* fESDEvent; //pointer to the ESDEvent
+  TList * fOutputContainer; // Histogram container
+  AliCFManager *fCFManager;  // for CF
+  //  AliCFContainer *container;   // for CF
+
+               
+               
+  AliGammaConversionHistograms *fHistograms; // Pointer to the histogram handling class
+  Bool_t fTriggerCINT1B; //Flag to select trigger CINT1B
+  Bool_t fDoMCTruth; // Flag to switch on/off MC truth 
+  Bool_t fDoNeutralMeson; // flag
+  Bool_t fDoOmegaMeson; // flag
+  Bool_t fDoJet; // flag
+  Bool_t fDoChic; // flag
+  Bool_t fRecalculateV0ForGamma;//flag
+               
+  TClonesArray * fKFReconstructedGammasTClone; //! transient
+  TClonesArray * fKFReconstructedPi0sTClone; //! transient
+  TClonesArray * fKFRecalculatedGammasTClone; //! transient
+  TClonesArray * fCurrentEventPosElectronTClone; //! transient
+  TClonesArray * fCurrentEventNegElectronTClone; //! transient
+  TClonesArray * fKFReconstructedGammasCutTClone; //! transient
+  TClonesArray * fPreviousEventTLVNegElectronTClone; //! transient
+  TClonesArray * fPreviousEventTLVPosElectronTClone; //! transient
+               
+  //  vector<AliKFParticle> fKFReconstructedGammas; // vector containing all reconstructed gammas
+  vector<Int_t> fElectronv1; // vector containing index of electron 1
+  vector<Int_t> fElectronv2; // vector containing index of electron 2
+               
+  vector<Int_t> fGammav1; // vector containing index of gamma 1
+  vector<Int_t> fGammav2; // vector containing index of gamma 2
+
+  vector<Int_t> fElectronRecalculatedv1; // vector containing index of electron 1
+  vector<Int_t> fElectronRecalculatedv2; // vector containing index of electron 2
+               
+  //  AliESDpid * fESDpid; // esd pid
+
+
+  ///////Chi_c Analysis///////////////////////////
+  //  vector<AliESDtrack*> fCurrentEventPosElectron;       // comment here
+  //  vector<AliESDtrack*> fCurrentEventNegElectron;       // comment here
+  //  vector<AliKFParticle> fKFReconstructedGammasCut;     // comment here
+  //  vector<TLorentzVector> fPreviousEventTLVNegElectron; // comment here
+  //  vector<TLorentzVector> fPreviousEventTLVPosElectron; // comment here
+  //////////////////////////////////////////////////   
+               
+  //mass defines
+  Double_t fElectronMass; //electron mass
+  Double_t fGammaMass;    //gamma mass
+  Double_t fPi0Mass;      //pi0mass
+  Double_t fEtaMass;      //eta mass
+               
+  // width defines
+  Double_t fGammaWidth; //gamma width cut
+  Double_t fPi0Width;   // pi0 width cut
+  Double_t fEtaWidth;   // eta width cut
+               
+  Double_t fMinOpeningAngleGhostCut; // minimum angle cut
+               
+  AliESDtrackCuts* fEsdTrackCuts;           // Object containing the parameters of the esd track cuts
+               
+  Bool_t fCalculateBackground; //flag to set backgrount calculation on/off
+  Bool_t fWriteNtuple;         // flag to set if writing to ntuple on/off
+  TNtuple *fGammaNtuple;       // Ntuple for gamma values
+  TNtuple *fNeutralMesonNtuple;// NTuple for mesons
+               
+  Int_t fTotalNumberOfAddedNtupleEntries; // number of added ntuple entries
+               
+  TClonesArray* fChargedParticles;  //! transient
+  vector<Int_t> fChargedParticlesId;  //! transient
+               
+  Double_t fGammaPtHighest;  //! transient
+  Double_t fMinPtForGammaJet;  //! transient
+  Double_t fMinIsoConeSize; //! transient
+  Double_t fMinPtIsoCone; //! transient
+  Double_t fMinPtGamChargedCorr; //! transient
+  Double_t fMinPtJetCone; //! transient
+  Int_t    fLeadingChargedIndex; //! transient
+  Double_t fLowPtMapping; //! transient
+  Double_t fHighPtMapping; //! transient
+  Bool_t fDoCF; //! transient
+               
+  TClonesArray * fAODGamma; //TClonesArray for gammas to put in AOD
+  TClonesArray * fAODPi0; //TTClonesArray for Pi0s to put in AOD
+  TClonesArray * fAODOmega; //TTClonesArray for omegas to put in AOD
+  TString fAODBranchName; // New AOD branch name
+  Bool_t fKFForceAOD;  //Set the Analysis Manager FillAOD variable to true every event
+  TString fKFDeltaAODFileName; //! File name for delta AOD (if any)
+  Bool_t fDoNeutralMesonV0MCCheck; //flag
+  Bool_t fUseTrackMultiplicityForBG; //flag
+  Bool_t fMoveParticleAccordingToVertex; //flag
+  Bool_t fApplyChi2Cut; //flag
+  Int_t fNRandomEventsForBG; //number of random events to use in rotation method
+  Int_t fNDegreesPMBackground; // number of degree window to rotate particles for rotation method
+  Bool_t fDoRotation; //flag
+  Bool_t fCheckBGProbability; //flag
+  vector<Int_t>fKFReconstructedGammasV0Index; // index of the reconstructed v0s
+  Bool_t fRemovePileUp;                 // Remove Pile Up
+  Bool_t fSelectV0AND;                 // Select V0AND
+  AliTriggerAnalysis *fTriggerAnalysis; //! Trigger Analysis for Normalisation
+  Int_t fMultiplicity;
+  Int_t fUseMultiplicity;
+  Int_t fUseMultiplicityBin;
+  ClassDef(AliAnalysisTaskGammaConversion, 15); // Analysis task for gamma conversions
+};
+
+#endif //ALIANALYSISTASKGAMMA_H