#ifndef ALICONVEVENTCUTS_H
#define ALICONVEVENTCUTS_H
#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,
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();
Int_t fCuts[kNCuts];
Bool_t UpdateCutString();
static const char * fgkCutNames[kNCuts];
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 ; }
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 ; }
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* ){return kTRUE;}
virtual Bool_t IsSelected(TList* ) {return kTRUE;}
Bool_t EventIsSelected(AliVEvent *fInputEvent, AliVEvent *fMCEvent);
Int_t IsEventAcceptedByCut(AliConvEventCuts *ReaderCuts, AliVEvent *InputEvent, AliMCEvent *MCEvent, Int_t isHeavyIon, Bool_t isEMCALAnalysis);
void PrintCuts();
void PrintCutsWithValues();
void InitCutHistograms(TString name="",Bool_t preCut = kTRUE);
Int_t IsParticleFromBGEvent(Int_t index, AliStack *MCStack, AliVEvent *InputEvent = 0x0);
void LoadReweightingHistosMCFromFile ();
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);
Int_t IsHeavyIon() { return fIsHeavyIon ; }
void DoEtaShift(Bool_t doEtaShift) { fDoEtaShift = doEtaShift ; }
protected:
TList *fHistograms;
TList *fHeaderList;
Int_t fEventQuality;
Int_t fIsHeavyIon;
Int_t fDetectorCentrality;
Int_t fModCentralityClass;
Double_t fMaxVertexZ;
Int_t fCentralityMin;
Int_t fCentralityMax;
Int_t fMultiplicityMethod;
Int_t fSpecialTrigger;
Int_t fSpecialSubTrigger;
Bool_t fRemovePileUp;
Int_t fRejectExtraSignals;
UInt_t fOfflineTriggerMask;
Bool_t fHasV0AND;
Bool_t fIsSDDFired;
TRandom3 fRandom;
Int_t fnHeaders;
Int_t *fNotRejectedStart;
Int_t *fNotRejectedEnd;
TString *fGeneratorNames;
TObjString *fCutString;
AliAnalysisUtils *fUtils;
Double_t fEtaShift;
Bool_t fDoEtaShift;
Bool_t fDoReweightHistoMCPi0;
Bool_t fDoReweightHistoMCEta;
Bool_t fDoReweightHistoMCK0s;
TString fPathTrFReweighting;
TString fNameHistoReweightingPi0;
TString fNameHistoReweightingEta;
TString fNameHistoReweightingK0s;
TString fNameFitDataPi0;
TString fNameFitDataEta;
TString fNameFitDataK0s;
TH1F *fHistoEventCuts;
TH1F *hCentrality;
TH2F *hCentralityVsNumberOfPrimaryTracks;
TH1F *hVertexZ;
TH1F *hTriggerClass;
TH1F *hTriggerClassSelected;
TH1D *hReweightMCHistPi0;
TH1D *hReweightMCHistEta;
TH1D *hReweightMCHistK0s;
TF1 *fFitDataPi0;
TF1 *fFitDataEta;
TF1 *fFitDataK0s;
Int_t fAddedSignalPDGCode;
Bool_t fPreSelCut;
Bool_t fTriggerSelectedManually;
TString fSpecialTriggerName;
TString fSpecialSubTriggerName;
Int_t fNSpecialSubTriggerOptions;
TString fV0ReaderName;
AliVCaloTrigger *fCaloTriggers;
TClonesArray *fTriggerPatchInfo;
AliEmcalTriggerPatchInfo *fMainTriggerPatchEMCAL;
TString fCaloTriggersName;
TString fCaloTriggerPatchInfoName;
ULong_t fTriggersEMCAL;
ULong_t fTriggersEMCALSelected;
Bool_t fEMCALTrigInitialized;
private:
ClassDef(AliConvEventCuts,3)
};
#endif