#ifndef ALICONVEVENTCUTS_H #define ALICONVEVENTCUTS_H // Class handling all kinds of selection cuts for Gamma Conversion analysis // Authors: Svein Lindal, Daniel Lohner * #include "AliAODTrack.h" #include "AliESDtrack.h" #include "AliVEvent.h" #include "AliMCEvent.h" #include "AliVTrack.h" #include "AliStack.h" #include "AliAnalysisCuts.h" #include "TH1F.h" #include "TF1.h" #include "AliAnalysisUtils.h" #include "AliAnalysisManager.h" #include "TRandom3.h" #include "AliVCaloTrigger.h" #include "AliEmcalTriggerPatchInfo.h" class AliESDEvent; class AliAODEvent; class TH1F; class TH2F; class TF1; class AliAnalysisCuts; class iostream; class TList; class AliAnalysisManager; class AliAODMCParticle; using namespace std; class AliConvEventCuts : public AliAnalysisCuts { public: enum cutIds { kisHeavyIon, kCentralityMin, kCentralityMax, kSelectSpecialTriggerAlias, kSelectSubTriggerClass, kremovePileUp, kExtraSignals, kNCuts }; enum TriggerTypeEMCAL { kND = -1, //not defined kJ1 = 1, kJ2 = 2, kG1 = 3, kG2 = 4, kL0 = 5, }; AliConvEventCuts(const char *name="EventCuts", const char * title="Event Cuts"); AliConvEventCuts(const AliConvEventCuts&); AliConvEventCuts& operator=(const AliConvEventCuts&); virtual ~AliConvEventCuts(); //virtual destructor // static AliConvEventCuts * GetStandardCuts2010PbPb(); // static AliConvEventCuts * GetStandardCuts2010pp(); Int_t fCuts[kNCuts]; Bool_t UpdateCutString(); static const char * fgkCutNames[kNCuts]; // Seters Bool_t SetCutIds (TString cutString); Bool_t SetCut (cutIds cutID, Int_t cut); Bool_t SetIsHeavyIon (Int_t isHeavyIon); Bool_t SetCentralityMax (Int_t centralityBin); Bool_t SetCentralityMin (Int_t centralityBin); Bool_t SetRemovePileUp (Int_t removePileUp); Bool_t SetMultiplicityMethod (Int_t multiplicityMethod); Bool_t SetSelectSpecialTrigger (Int_t selectSpecialTrigger); Bool_t SetSelectSubTriggerClass (Int_t selectSpecialSubTriggerClass); Bool_t SetRejectExtraSignalsCut (Int_t extraSignal); void SetV0ReaderName (TString name) { fV0ReaderName = name ; } void SetAddedSignalPDGCode (Int_t addedSignalPDGcode) { fAddedSignalPDGCode = addedSignalPDGcode ; } void SetPreSelectionCutFlag (Bool_t preSelFlag) { fPreSelCut = preSelFlag ; } void SetCaloTriggerPatchInfoName(const char *n) { fCaloTriggerPatchInfoName = n ; } void SetCaloTriggersName(const char *n) { fCaloTriggersName = n ; } void SetAcceptedHeader(TList *HeaderList) { fHeaderList = HeaderList ; } void SetFillCutHistograms( TString name="", Bool_t preCut = kTRUE) { if(!fHistograms){ InitCutHistograms(name,preCut);} ; } void SetEtaShift(Double_t etaShift) { fEtaShift = etaShift ; } // Eta shift Setting 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 ; } 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 ; } // Geters TString GetCutNumber(); TString* GetFoundHeader() { return fGeneratorNames ; } Int_t GetEventQuality() { return fEventQuality; ; } Bool_t GetIsFromPileup() { return fRemovePileUp; } void GetCentralityRange(Double_t range[2]) { range[0]=10*fCentralityMin ; range[1]=10*fCentralityMax ; } TList* GetCutHistograms() { return fHistograms ; } Int_t GetMultiplicityMethod() { return fMultiplicityMethod ; } 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 ; } Int_t GetNumberOfContributorsVtx(AliVEvent *event); Double_t GetEtaShift() { return fEtaShift ; } Bool_t GetDoEtaShift() { return fDoEtaShift ; } TString GetSpecialTriggerName() { return fSpecialTriggerName ; } AliEmcalTriggerPatchInfo *GetMainTriggerPatch(); ULong_t GetTriggerList(); Float_t GetWeightForMeson(TString period, Int_t index, AliStack *MCStack, AliVEvent *InputEvent = 0x0); Double_t GetCentrality(AliVEvent *event); void GetCorrectEtaShiftFromPeriod(TString periodName); void GetNotRejectedParticles(Int_t rejection, TList *HeaderList, AliVEvent *MCEvent); TClonesArray* GetArrayFromEvent(AliVEvent* fInputEvent, const char *name, const char *clname=0); Bool_t InitializeCutsFromCutString(const TString analysisCutSelection); 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; } virtual Bool_t IsSelected(TObject* /*obj*/){return kTRUE;} virtual Bool_t IsSelected(TList* /*list*/) {return kTRUE;} // Cut Selection Bool_t EventIsSelected(AliVEvent *fInputEvent, AliVEvent *fMCEvent); Int_t IsEventAcceptedByCut(AliConvEventCuts *ReaderCuts, AliVEvent *InputEvent, AliMCEvent *MCEvent, Int_t isHeavyIon); void PrintCuts(); void PrintCutsWithValues(); void InitCutHistograms(TString name="",Bool_t preCut = kTRUE); ///Cut functions Int_t IsParticleFromBGEvent(Int_t index, AliStack *MCStack, AliVEvent *InputEvent = 0x0); void LoadReweightingHistosMCFromFile (); // Event Cuts Bool_t IsCentralitySelected(AliVEvent *fInputEvent, AliVEvent *fMCEvent = NULL); Bool_t VertexZCut(AliVEvent *fInputEvent); Bool_t IsTriggerSelected(AliVEvent *fInputEvent, Bool_t isMC); Bool_t HasV0AND() { return fHasV0AND ; } Bool_t IsSDDFired() { return fIsSDDFired ; } Int_t IsSpecialTrigger() { return fSpecialTrigger ; } Int_t IsSpecialSubTrigger() { return fSpecialSubTrigger ; } void InitializeEMCALTrigger( AliVEvent *fInputEvent); Bool_t HasTriggerType(TriggerTypeEMCAL t); // Request Flags Int_t IsHeavyIon() { return fIsHeavyIon ; } void DoEtaShift(Bool_t doEtaShift) { fDoEtaShift = doEtaShift ; } protected: TList *fHistograms; TList *fHeaderList; Int_t fEventQuality; // EventQuality //cuts 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 Int_t fCentralityMax; // centrality selection upper bin value Int_t fMultiplicityMethod; // selected multiplicity method Int_t fSpecialTrigger; // flag Int_t fSpecialSubTrigger; // flag Bool_t fRemovePileUp; // flag Int_t fRejectExtraSignals; // UInt_t fOfflineTriggerMask; // Task processes collision candidates only Bool_t fHasV0AND; // V0AND Offline Trigger Bool_t fIsSDDFired; // SDD FIRED to select with SDD events TRandom3 fRandom; // Int_t fnHeaders; // Number of Headers Int_t *fNotRejectedStart; //[fnHeaders] Int_t *fNotRejectedEnd; //[fnHeaders] TString *fGeneratorNames; //[fnHeaders] 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 *fHistoEventCuts; // 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 Int_t fAddedSignalPDGCode; 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 TString fSpecialSubTriggerName; // Name of the Special Triggers Int_t fNSpecialSubTriggerOptions; // trigger information TString fV0ReaderName; // Name of V0Reader AliVCaloTrigger *fCaloTriggers; //! calo triggers TClonesArray *fTriggerPatchInfo; //! trigger patch info array AliEmcalTriggerPatchInfo *fMainTriggerPatchEMCAL; // main trigger patch, will be cached after first call TString fCaloTriggersName; // name of calo triggers collection TString fCaloTriggerPatchInfoName; // trigger patch info array name ULong_t fTriggersEMCAL; // list of fired EMCAL triggers ULong_t fTriggersEMCALSelected; // list of accepted triggers Bool_t fEMCALTrigInitialized; // EMCAL triggers initialized private: ClassDef(AliConvEventCuts,3) }; #endif