#include "AliAnalysisUtils.h"
#include "AliAnalysisManager.h"
#include "TRandom3.h"
+#include "AliVCaloTrigger.h"
+#include "AliEmcalTriggerPatchInfo.h"
class AliESDEvent;
class AliAODEvent;
kNCuts
};
- Bool_t SetCutIds(TString cutString);
- Int_t fCuts[kNCuts];
- Bool_t SetCut(cutIds cutID, Int_t cut);
- Bool_t UpdateCutString();
- static const char * fgkCutNames[kNCuts];
-
- 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;
-
- }
-
- void SetAcceptedHeader(TList *HeaderList){fHeaderList = HeaderList;}
- TString *GetFoundHeader(){return fGeneratorNames;}
+ enum TriggerTypeEMCAL {
+ kND = -1, //not defined
+ kJ1 = 1,
+ kJ2 = 2,
+ kG1 = 3,
+ kG2 = 4,
+ kL0 = 5,
+ };
- Int_t GetEventQuality(){return fEventQuality;}
- Bool_t GetIsFromPileup(){return fRemovePileUp;}
-
AliConvEventCuts(const char *name="EventCuts", const char * title="Event Cuts");
AliConvEventCuts(const AliConvEventCuts&);
AliConvEventCuts& operator=(const AliConvEventCuts&);
// static AliConvEventCuts * GetStandardCuts2010PbPb();
// static AliConvEventCuts * GetStandardCuts2010pp();
- virtual Bool_t IsSelected(TObject* /*obj*/){return kTRUE;}
- virtual Bool_t IsSelected(TList* /*list*/) {return kTRUE;}
+ Int_t fCuts[kNCuts];
+ Bool_t UpdateCutString();
+ static const char * fgkCutNames[kNCuts];
- TString GetCutNumber();
+ // 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 ; }
- void GetCentralityRange(Double_t range[2]){range[0]=10*fCentralityMin;range[1]=10*fCentralityMax;};
+ // 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);
- // Cut Selection
- Bool_t EventIsSelected(AliVEvent *fInputEvent, AliVEvent *fMCEvent);
- Int_t IsEventAcceptedByCut(AliConvEventCuts *ReaderCuts, AliVEvent *InputEvent, AliMCEvent *MCEvent, Int_t isHeavyIon);
+ 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;
- void PrintCuts();
- void PrintCutsWithValues();
+ }
- void InitCutHistograms(TString name="",Bool_t preCut = kTRUE);
- void SetFillCutHistograms(TString name="",Bool_t preCut = kTRUE){if(!fHistograms){InitCutHistograms(name,preCut);};}
- TList *GetCutHistograms(){return fHistograms;}
+ 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, Bool_t isEMCALAnalysis);
+
+ 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 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 ();
- void SetAddedSignalPDGCode(Int_t addedSignalPDGcode) {fAddedSignalPDGCode = addedSignalPDGcode;}
+ Int_t IsParticleFromBGEvent(Int_t index, AliStack *MCStack, AliVEvent *InputEvent = 0x0);
+
+ 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(AliVEvent *fInputEvent);
- Bool_t HasV0AND(){return fHasV0AND;}
- Bool_t IsSDDFired(){return fIsSDDFired;}
- Int_t IsSpecialTrigger(){return fSpecialTrigger;}
- TString GetSpecialTriggerName(){return fSpecialTriggerName;}
-
- // Request Flags
- Int_t IsHeavyIon(){return fIsHeavyIon;}
- Float_t GetWeightForMeson(TString period, Int_t index, AliStack *MCStack, AliVEvent *InputEvent = 0x0);
- void SetPreSelectionCutFlag(Bool_t preSelFlag){fPreSelCut = preSelFlag;}
-
+ 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 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;}
+ // Request Flags
+ Int_t IsHeavyIon() { return fIsHeavyIon ; }
+ void DoEtaShift(Bool_t doEtaShift) { fDoEtaShift = doEtaShift ; }
- // Eta shift Setting
- 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;
- }
- Double_t GetEtaShift() {return fEtaShift;}
- Bool_t GetDoEtaShift(){return fDoEtaShift;}
- void DoEtaShift(Bool_t doEtaShift){fDoEtaShift = doEtaShift;}
- void GetCorrectEtaShiftFromPeriod(TString periodName);
-
- 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);
+ //MC particle flags - determine whether particle is primary or secondary
+ Bool_t IsConversionPrimaryESD( AliStack *MCStack, Int_t stackpos, Double_t prodVtxX, Double_t prodVtxY, Double_t prodVtxZ);
protected:
- TList *fHistograms;
- TList *fHeaderList;
+ TList *fHistograms;
+ TList *fHeaderList;
- Int_t fEventQuality; // EventQuality
+ 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
+ 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;
+ 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
+ // Primary secondary distinction
+ Double_t fSecProdBoundary; // 3D radius of production (cm) for primary-secodary distinction
private:
- ClassDef(AliConvEventCuts,1)
+ ClassDef(AliConvEventCuts,3)
};