]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGGA/GammaConv/AliConversionCuts.h
Adding information about 2012 pp data triggers (in histos and a new counter). (Chiara...
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliConversionCuts.h
index 679164257ac8d577be20941f3f3690a5667c4cda..edeebd11ef1bb8f8ea267657f67a0d2344c07f73 100644 (file)
@@ -2,7 +2,7 @@
 #define ALICONVERSIONCUTS_H
 
 // Class handling all kinds of selection cuts for Gamma Conversion analysis
-// Authors: Svein Lindal, Daniel Lohner                                                                                                *
+// Authors: Svein Lindal, Daniel Lohner                                    *
 
 #include "AliAODpidUtil.h"
 #include "AliConversionPhotonBase.h"
@@ -14,6 +14,9 @@
 #include "AliStack.h"
 #include "AliAnalysisCuts.h"
 #include "TH1F.h"
+#include "TF1.h"
+#include "AliAnalysisUtils.h"
+#include "AliAnalysisManager.h"
 
 class AliESDEvent;
 class AliAODEvent;
@@ -21,46 +24,50 @@ class AliConversionPhotonBase;
 class AliKFVertex;
 class TH1F;
 class TH2F;
+class TF1;
 class AliPIDResponse;
 class AliAnalysisCuts;
 class iostream;
 class TList;
 class AliAnalysisManager;
+class AliAODMCParticle;
 
 using namespace std;
 
 class AliConversionCuts : public AliAnalysisCuts {
-       
+   
  public: 
-
+   
 
   enum cutIds {
-       kisHeavyIon,                  
-       kCentralityMin,               
-       kCentralityMax,               
-       kselectV0AND,                 
-       kmultiplicityMethod,             
-       kremovePileUp,                
-       kExtraSignals,  
-       kv0FinderType,                
-       ketaCut,                                     
-       kRCut,                     
-       ksinglePtCut,                 
-       kclsTPCCut,                   
-       kededxSigmaCut,               
-       kpidedxSigmaCut,              
-       kpiMomdedxSigmaCut,        
-       kpiMaxMomdedxSigmaCut,        
-       kLowPRejectionSigmaCut,       
-       kTOFelectronPID,              
-       kQtMaxCut,                    
-       kchi2GammaCut,                
-       kPsiPair, 
-       kdoPhotonAsymmetryCut,
-       kCosPAngle,
-       kElecShare,
-       kToCloseV0s,
-       kNCuts
+   kisHeavyIon,                  
+   kCentralityMin,               
+   kCentralityMax,               
+   kselectV0AND,                 
+   kmultiplicityMethod,             
+   kremovePileUp,                
+   kExtraSignals, 
+   kv0FinderType,                
+   ketaCut,                                     
+   kRCut,                     
+   ksinglePtCut,                 
+   kclsTPCCut,                   
+   kededxSigmaCut,               
+   kpidedxSigmaCut,              
+   kpiMomdedxSigmaCut,        
+   kpiMaxMomdedxSigmaCut,        
+   kLowPRejectionSigmaCut,       
+   kTOFelectronPID,              
+   kQtMaxCut,                    
+   kchi2GammaCut,                
+   kPsiPair, 
+   kdoPhotonAsymmetryCut,
+   kCosPAngle,
+   kElecShare,
+   kToCloseV0s,
+        kDcaRPrimVtx,
+        kDcaZPrimVtx,
+   kNCuts
   };
 
   enum photonCuts {
@@ -87,29 +94,46 @@ class AliConversionCuts : public AliAnalysisCuts {
 
 
   Bool_t InitializeCutsFromCutString(const TString analysisCutSelection);
-  void SelectCollisionCandidates(UInt_t offlineTriggerMask = AliVEvent::kMB) {fOfflineTriggerMask = offlineTriggerMask;}
+  void SelectCollisionCandidates(UInt_t offlineTriggerMask = AliVEvent::kAny) {
+     fOfflineTriggerMask = offlineTriggerMask;
+     fTriggerSelectedManually = kTRUE;
+  }
+  void SelectSpecialTrigger(UInt_t offlineTriggerMask = AliVEvent::kAny, TString TriggerClassName = "AliVEvent::kAny" ) {
+     fOfflineTriggerMask = offlineTriggerMask;
+     fSpecialTriggerName = TriggerClassName;
+     cout << fSpecialTriggerName.Data() << endl;
+     
+  }   
   void FillElectonLabelArray(AliAODConversionPhoton* photon, Int_t nV0);
   void SetAcceptedHeader(TList *HeaderList){fHeaderList = HeaderList;}   
+  void SetPreSelectionCutFlag(Bool_t preSelFlag){fPreSelCut = preSelFlag;}   
   TString *GetFoundHeader(){return fGeneratorNames;}
 
   Int_t GetEventQuality(){return fEventQuality;}
   Bool_t GetIsFromPileup(){return fRemovePileUp;}
   
   AliConversionCuts(const char *name="V0Cuts", const char * title="V0 Cuts");
+  AliConversionCuts(const AliConversionCuts&);
+  AliConversionCuts& operator=(const AliConversionCuts&);
+
   virtual ~AliConversionCuts();                            //virtual destructor
 
+  static AliConversionCuts * GetStandardCuts2010PbPb();
+  static AliConversionCuts * GetStandardCuts2010pp();
+
   virtual Bool_t IsSelected(TObject* /*obj*/){return kTRUE;}
   virtual Bool_t IsSelected(TList* /*list*/) {return kTRUE;}
 
   TString GetCutNumber();
-
+  
   void GetCentralityRange(Double_t range[2]){range[0]=10*fCentralityMin;range[1]=10*fCentralityMax;};
-
+  
   // Cut Selection
   Bool_t EventIsSelected(AliVEvent *fInputEvent, AliVEvent *fMCEvent);
   Int_t IsEventAcceptedByConversionCut(AliConversionCuts *ReaderCuts, AliVEvent *InputEvent, AliMCEvent *MCEvent, Bool_t isHeavyIon);
   Bool_t PhotonIsSelected(AliConversionPhotonBase * photon, AliVEvent  * event);
   Bool_t PhotonIsSelectedMC(TParticle *particle,AliStack *fMCStack,Bool_t checkForConvertedGamma=kTRUE);
+  Bool_t PhotonIsSelectedAODMC(AliAODMCParticle *particle,TClonesArray *aodmcArray,Bool_t checkForConvertedGamma=kTRUE);
   Bool_t ElectronIsSelectedMC(TParticle *particle,AliStack *fMCStack);
   Bool_t TracksAreSelected(AliVTrack * negTrack, AliVTrack * posTrack);
   Bool_t MesonIsSelected(AliAODConversionMother *pi0,Bool_t IsSignal=kTRUE);
@@ -127,7 +151,27 @@ class AliConversionCuts : public AliAnalysisCuts {
   void SetFillCutHistograms(TString name="",Bool_t preCut = kTRUE){if(!fHistograms){InitCutHistograms(name,preCut);};}
   TList *GetCutHistograms(){return fHistograms;}
   void FillPhotonCutIndex(Int_t photoncut){if(hCutIndex)hCutIndex->Fill(photoncut);}
-
+  void SetEtaShift(Double_t etaShift) {
+     fEtaShift = etaShift;
+     fLineCutZRSlope = tan(2*atan(exp(-fEtaCut + etaShift)));
+     if(fEtaCutMin > -0.1)
+        fLineCutZRSlopeMin = tan(2*atan(exp(-fEtaCutMin + etaShift)));
+  }
+  void SetEtaShift(TString pPbOrPbp) {
+     Double_t etaShift = 0.0;
+     if(!pPbOrPbp.CompareTo("pPb"))      etaShift = -0.465;
+     else if(!pPbOrPbp.CompareTo("Pbp")) etaShift =  0.465;
+     
+     fEtaShift = etaShift;
+     fLineCutZRSlope = tan(2*atan(exp(-fEtaCut + etaShift)));
+     if(fEtaCutMin > -0.1)
+        fLineCutZRSlopeMin = tan(2*atan(exp(-fEtaCutMin + etaShift)));
+  }
+  Double_t GetEtaShift() {return fEtaShift;}
+  Bool_t GetDoEtaShift(){return fDoEtaShift;}
+  void DoEtaShift(Bool_t doEtaShift){fDoEtaShift = doEtaShift;}
+  void GetCorrectEtaShiftFromPeriod(TString periodName);
+  
   static AliVTrack * GetTrack(AliVEvent * event, Int_t label);
   static AliESDtrack *GetESDTrack(AliESDEvent * event, Int_t label);
   
@@ -146,22 +190,39 @@ class AliConversionCuts : public AliAnalysisCuts {
   }
   Bool_t PhotonCuts(AliConversionPhotonBase *photon,AliVEvent *event);
   Bool_t CorrectedTPCClusterCut(AliConversionPhotonBase *photon, AliVEvent * event);
-  Bool_t PsiPairCut(const AliConversionPhotonBase * photon) const;
+  Bool_t PsiPairCut(const AliConversionPhotonBase * photon, Double_t deltaPhi) const;
   Bool_t CosinePAngleCut(const AliConversionPhotonBase * photon, AliVEvent * event) const;
   Bool_t RejectSharedElectronV0s(AliAODConversionPhoton* photon, Int_t nV0, Int_t nV0s);
   Bool_t RejectToCloseV0s(AliAODConversionPhoton* photon, TList *photons, Int_t nV0);
-  Bool_t IsParticleFromBGEvent(Int_t index, AliStack *MCStack);
-  void GetNotRejectedParticles(Int_t rejection, TList *HeaderList, AliMCEvent *MCEvent);
-
+  Int_t IsParticleFromBGEvent(Int_t index, AliStack *MCStack, AliVEvent *InputEvent = 0x0);
+  void GetNotRejectedParticles(Int_t rejection, TList *HeaderList, AliVEvent *MCEvent);
+  void SetUseReweightingWithHistogramFromFile( Bool_t pi0reweight=kTRUE, Bool_t etareweight=kFALSE, Bool_t k0sreweight=kFALSE, TString path="$ALICE_ROOT/PWGGA/GammaConv/MCSpectraInput.root", 
+                                               TString histoNamePi0 = "", TString histoNameEta = "", TString histoNameK0s = "",
+                                               TString fitNamePi0 = "", TString fitNameEta = "", TString fitNameK0s ="" ) {
+     AliInfo(Form("enabled reweighting for: pi0 : %i, eta: %i, K0s: %i",pi0reweight, etareweight, k0sreweight));
+     fDoReweightHistoMCPi0 = pi0reweight; 
+     fDoReweightHistoMCEta = etareweight; 
+     fDoReweightHistoMCK0s = k0sreweight; 
+     fPathTrFReweighting=path;
+     fNameHistoReweightingPi0 =histoNamePi0;
+     fNameHistoReweightingEta =histoNameEta;
+     fNameHistoReweightingK0s =histoNameK0s; 
+     fNameFitDataPi0 =fitNamePi0;
+     fNameFitDataEta =fitNameEta;
+     fNameFitDataK0s =fitNameK0s; 
+     
+  }
+  void  LoadReweightingHistosMCFromFile ();
   // Event Cuts
   Bool_t IsCentralitySelected(AliVEvent *fInputEvent, AliVEvent *fMCEvent = NULL);
   Double_t GetCentrality(AliVEvent *event);
   Int_t GetNumberOfContributorsVtx(AliVEvent *event);
   Bool_t VertexZCut(AliVEvent *fInputEvent);
-  Bool_t IsTriggerSelected();
+  Bool_t IsTriggerSelected(AliVEvent *fInputEvent);
   Bool_t HasV0AND(){return fHasV0AND;}
   Bool_t IsSDDFired(){return fIsSDDFired;}
   Int_t IsSpecialTrigger(){return fSpecialTrigger;}
+  TString GetSpecialTriggerName(){return fSpecialTriggerName;}
 
   // Set Individual Cuts
   Bool_t SetRCut(Int_t RCut);
@@ -190,18 +251,27 @@ class AliConversionCuts : public AliAnalysisCuts {
   Bool_t SetSharedElectronCut(Int_t sharedElec);
   Bool_t SetToCloseV0sCut(Int_t toClose);
   Bool_t SetRejectExtraSignalsCut(Int_t extraSignal);
+  Bool_t SetDCARPhotonPrimVtxCut(Int_t DCARPhotonPrimVtx);
+  Bool_t SetDCAZPhotonPrimVtxCut(Int_t DCAZPhotonPrimVtx);
+   
   // Request Flags
 
-  Bool_t IsHeavyIon(){return fIsHeavyIon;}
+  Int_t IsHeavyIon(){return fIsHeavyIon;}
   Int_t GetFirstTPCRow(Double_t radius);
+  Float_t GetWeightForMeson(TString period, Int_t index, AliStack *MCStack, AliVEvent *InputEvent = 0x0);
 
   Bool_t UseElecSharingCut(){return fDoSharedElecCut;}
   Bool_t UseToCloseV0sCut(){return fDoToCloseV0sCut;}
   Int_t GetMultiplicityMethod(){return fMultiplicityMethod;}
   Double_t GetEtaCut(){return fEtaCut;}
   Int_t GetSignalRejection(){return fRejectExtraSignals;}
+  Int_t GetNAcceptedHeaders(){return fnHeaders; }
+  TString * GetAcceptedHeaderNames(){return fGeneratorNames;}
+  Int_t * GetAcceptedHeaderStart(){return fNotRejectedStart;}
+  Int_t * GetAcceptedHeaderEnd(){return fNotRejectedEnd;}
   TList* GetAcceptedHeader(){return fHeaderList;}
-
+  
+  
   protected:
   TList *fHistograms;
   TList *fHeaderList;
@@ -261,8 +331,8 @@ class AliConversionCuts : public AliAnalysisCuts {
   Bool_t   fDoPhotonAsymmetryCut; // flag to use the PhotonAsymetryCut
   Double_t fMinPPhotonAsymmetryCut; // Min Momentum for Asymmetry Cut
   Double_t fMinPhotonAsymmetry;  // Asymmetry Cut
-  Bool_t fIsHeavyIon;               // flag for heavy ion
-  Int_t fDetectorCentrality;   // centrality detecotor V0M or CL1
+  Int_t  fIsHeavyIon;               // flag for heavy ion
+  Int_t fDetectorCentrality;  // centrality detecotor V0M or CL1
   Int_t fModCentralityClass; // allows to select smaller centrality classes
   Double_t fMaxVertexZ;    // max z offset of vertex
   Int_t fCentralityMin;  // centrality selection lower bin value
@@ -274,6 +344,8 @@ class AliConversionCuts : public AliAnalysisCuts {
   Bool_t fRemovePileUp; //flag
   Float_t fOpeningAngle; // min opening angle for meson
   Float_t fPsiPairCut;
+  Float_t fPsiPairDeltaPhiCut;
+  Bool_t fDo2DPsiPair;
   Float_t fCosPAngleCut;
   Bool_t fDoToCloseV0sCut; //
   Int_t fRejectExtraSignals;//
@@ -285,6 +357,8 @@ class AliConversionCuts : public AliAnalysisCuts {
   TRandom3 fRandom; //
   Int_t fElectronArraySize; // Size of electron array
   Int_t *fElectronLabelArray; //[fElectronArraySize]
+  Double_t fDCAZPrimVtxCut; // cut value for the maximum distance in Z between the photon & the primary vertex [cm]
+  Double_t fDCARPrimVtxCut; // cut value for the maximum distance in R between the photon & the primary vertex [cm]
   Float_t fConversionPointXArray; // Array with conversion Point x
   Float_t fConversionPointYArray; // Array with conversion Point y
   Float_t fConversionPointZArray; // Array with conversion Point z
@@ -292,11 +366,21 @@ class AliConversionCuts : public AliAnalysisCuts {
   Int_t *fNotRejectedStart; //[fnHeaders]
   Int_t *fNotRejectedEnd; //[fnHeaders]
   TString *fGeneratorNames; //[fnHeaders]
-
-
-
-  // Histograms
   TObjString *fCutString; // cut number used for analysis
+  AliAnalysisUtils *fUtils;
+  Double_t fEtaShift;
+  Bool_t fDoEtaShift;            // Flag for Etashift
+  Bool_t fDoReweightHistoMCPi0; // Flag for reweighting Pi0 input with histogram
+  Bool_t fDoReweightHistoMCEta; // Flag for reweighting Eta input with histogram
+  Bool_t fDoReweightHistoMCK0s; // Flag for reweighting K0s input with histogram
+  TString fPathTrFReweighting; // Path for file used in reweighting
+  TString fNameHistoReweightingPi0; //Histogram name for reweighting Pi0
+  TString fNameHistoReweightingEta; //Histogram name for reweighting Eta
+  TString fNameHistoReweightingK0s; //Histogram name for reweighting K0s
+  TString fNameFitDataPi0; //Fit name for fit to spectrum of pi0s in Data
+  TString fNameFitDataEta; //Fit name for fit to spectrum of etas in Data
+  TString fNameFitDataK0s; //Fit name for fit to spectrum of k0s in Data
+  // Histograms
   TH1F *hdEdxCuts;  // bookkeeping for dEdx cuts
   TH2F *hTPCdEdxbefore; // TPC dEdx before cuts
   TH2F *hTPCdEdxafter; // TPC dEdx after cuts
@@ -305,6 +389,7 @@ class AliConversionCuts : public AliAnalysisCuts {
   TH2F *hTOFbefore; // TOF before cuts
   TH2F *hTOFSigbefore; // TOF Sigma before cuts
   TH2F *hTOFSigafter; // TOF Sigma after cuts
+  TH2F *hPsiPairDeltaPhiafter; // TOF Sigma after cuts
   TH1F *hTrackCuts; // bookkeeping for track cuts
   TH1F *hPhotonCuts; // bookkeeping for photon specific cuts
   TH1F *hInvMassbefore; // e+e- inv mass distribution before cuts
@@ -315,17 +400,22 @@ class AliConversionCuts : public AliAnalysisCuts {
   TH1F *hCutIndex; // bookkeeping for cuts
   TH1F *hV0EventCuts; // bookkeeping for event selection cuts
   TH1F *hCentrality; // centrality distribution for selected events
+  TH2F *hCentralityVsNumberOfPrimaryTracks; // centrality distribution for selected events
   TH1F *hVertexZ; // vertex z distribution for selected events
   TH1F *hTriggerClass; //fired offline trigger class
-
-
+  TH1F *hTriggerClassSelected; //selected fired offline trigger class
+  TH1D *hReweightMCHistPi0; //histogram input for reweighting Pi0
+  TH1D *hReweightMCHistEta; //histogram input for reweighting Eta
+  TH1D *hReweightMCHistK0s; //histogram input for reweighting K0s
+  TF1  *fFitDataPi0; //fit to pi0 spectrum in Data
+  TF1  *fFitDataEta; //fit to eta spectrum in Data
+  TF1  *fFitDataK0s; //fit to K0s spectrum in Data
+  Bool_t fPreSelCut; // Flag for preselection cut used in V0Reader
+  Bool_t fTriggerSelectedManually; // Flag for manual trigger selection
+  TString fSpecialTriggerName; // Name of the Special Triggers
 private:
 
-  AliConversionCuts(const AliConversionCuts&); // not implemented
-  AliConversionCuts& operator=(const AliConversionCuts&); // not implemented
-
-
-  ClassDef(AliConversionCuts,2)
+  ClassDef(AliConversionCuts,5)
 };