#include "TString.h"
class TF1;
class TCanvas;
+class TList;
+#include "AliPhysicsSelection.h"
+#include "AliBackgroundSelection.h"
#include "AliPID.h"
class AliESDEvent;
class AliESDtrack;
class AliProtonAnalysisBase : public TObject {
public:
enum TriggerMode { kMB1 = 0, kMB2, kSPDFASTOR };
- enum AnalysisMode { kInvalid = -1, kTPC = 0, kHybrid, kGlobal };
- enum PIDMode { kBayesian = 0, kRatio, kSigma1, kSigma2 };
+ enum AnalysisMode { kInvalid = -1, kTPC = 0, kHybrid, kFullHybrid, kGlobal };
+ enum PIDMode { kBayesian = 0, kRatio, kSigma};
AliProtonAnalysisBase();
virtual ~AliProtonAnalysisBase();
void SetAnalysisLevel(const char* type) {fProtonAnalysisLevel = type;}
void SetAnalysisMode(AnalysisMode analysismode) {fProtonAnalysisMode = analysismode;}
void SetEtaMode() {fAnalysisEtaMode = kTRUE;}
- void SetTriggerMode(TriggerMode triggermode) {fTriggerMode = triggermode;}
+ void SetTriggerMode(TriggerMode triggermode) {
+ fAnalysisMC = kTRUE; fTriggerMode = triggermode;}
void SetPIDMode(PIDMode pidmode) {fProtonPIDMode = pidmode;}
const char *GetAnalysisLevel() {return fProtonAnalysisLevel.Data();}
Bool_t GetEtaMode() const {return fAnalysisEtaMode;}
TriggerMode GetTriggerMode() const {return fTriggerMode;}
PIDMode GetPIDMode() const {return fProtonPIDMode;}
+ Bool_t GetMCAnalysisMode() {return fAnalysisMC;}
const AliESDVertex *GetVertex(AliESDEvent *esd,
AnalysisMode mode,
Double_t GetVxMax() const {return fVxMax;}
Double_t GetVyMax() const {return fVyMax;}
Double_t GetVzMax() const {return fVzMax;}
+ void SetMinNumOfContributors(Int_t nContributors) {
+ fMinNumOfContributors = nContributors;}
+ Int_t GetMinNumOfContributors() {return fMinNumOfContributors;}
void SetPhaseSpace(Int_t nBinsX, Double_t gXmin, Double_t gXmax,
Int_t nBinsY, Double_t gYmin, Double_t gYmax) {
Double_t GetMaxX() const {return fMaxX;}
Double_t GetMaxY() const {return fMaxY;}
- static Bool_t IsEventTriggered(const AliESDEvent *esd,
- TriggerMode trigger = kMB2);
- Bool_t IsAccepted(AliESDEvent *esd,
- const AliESDVertex *vertex,
- AliESDtrack *track);
+ //Trigger
+ Bool_t IsOnlineTriggerUsed() {return kUseOnlineTrigger;}
+ void UseOnlineTrigger() {kUseOnlineTrigger = kTRUE;}
+ Bool_t IsEventTriggered(const AliESDEvent *esd,
+ TriggerMode trigger = kMB2);
+ void OfflineTriggerInit() {
+ kUseOfflineTrigger = kTRUE;
+ fPhysicsSelection = new AliPhysicsSelection();
+ fPhysicsSelection->AddBackgroundIdentification(new AliBackgroundSelection());
+ fPhysicsSelection->SetAnalyzeMC(fAnalysisMC);
+ }
+ Bool_t IsOfflineTriggerUsed() {return kUseOfflineTrigger;}
+ AliPhysicsSelection *GetPhysicsSelectionObject() {return fPhysicsSelection;}
+
+ Bool_t IsPrimary(AliESDEvent *esd,
+ const AliESDVertex *vertex,
+ AliESDtrack *track);
+ Bool_t IsAccepted(AliESDtrack *track);
Bool_t IsInPhaseSpace(AliESDtrack *track);
Float_t GetSigmaToVertex(AliESDtrack* esdTrack) const;
Double_t Rapidity(Double_t Px, Double_t Py, Double_t Pz) const;
//Cut functions
+ void SetPointOnSPDLayers() {fPointOnSPDLayersFlag = kTRUE;}
+ void SetPointOnSDDLayers() {fPointOnSDDLayersFlag = kTRUE;}
+ void SetPointOnSSDLayers() {fPointOnSSDLayersFlag = kTRUE;}
void SetPointOnITSLayer1() {fPointOnITSLayer1Flag = kTRUE;}
void SetPointOnITSLayer2() {fPointOnITSLayer2Flag = kTRUE;}
void SetPointOnITSLayer3() {fPointOnITSLayer3Flag = kTRUE;}
void SetPointOnITSLayer4() {fPointOnITSLayer4Flag = kTRUE;}
void SetPointOnITSLayer5() {fPointOnITSLayer5Flag = kTRUE;}
void SetPointOnITSLayer6() {fPointOnITSLayer6Flag = kTRUE;}
+ Bool_t IsUsedPointOnSPDLayer() const {return fPointOnSPDLayersFlag;}
+ Bool_t IsUsedPointOnSDDLayer() const {return fPointOnSDDLayersFlag;}
+ Bool_t IsUsedPointOnSSDLayer() const {return fPointOnSSDLayersFlag;}
Bool_t IsUsedPointOnITSLayer1() const {return fPointOnITSLayer1Flag;}
Bool_t IsUsedPointOnITSLayer2() const {return fPointOnITSLayer2Flag;}
Bool_t IsUsedPointOnITSLayer3() const {return fPointOnITSLayer3Flag;}
Bool_t IsUsedMaxDCA3D() const {return fMaxDCA3DFlag;}
Double_t GetMaxDCA3D() const {return fMaxDCA3D;}
+ void SetPtDependentDCAxy(Int_t nSigma, Double_t p0,
+ Double_t p1, Double_t p2);
+ Bool_t IsUsedPtDependentDCAxy() const {return fPtDependentDcaXYFlag;}
+
void SetMaxDCA3DTPC(Double_t maxDCA3D) {
fMaxDCA3DTPC = maxDCA3D;
fMaxDCA3DTPCFlag = kTRUE;
Bool_t IsUsedESDpid() const {return fESDpidFlag;}
void SetTPCpid() {fTPCpidFlag = kTRUE;}
Bool_t IsUsedTPCpid() const {return fTPCpidFlag;}
+ void SetTOFpid() {fTOFpidFlag = kTRUE;}
+ Bool_t IsUsedTOFpid() const {return fTOFpidFlag;}
TCanvas *GetListOfCuts();
Bool_t IsProton(AliESDtrack *track);
void SetNSigma(Int_t nsigma) {fNSigma = nsigma;}
Int_t GetNSigma() const {return fNSigma;}
- void SetdEdxBandInfo(const char* filename);
+ void SetRatio(Double_t ratio) {fNRatio = ratio;}
+ Double_t GetRatio() {return fNRatio;}
void SetPriorProbabilities(Double_t * const partFrac) {
for(Int_t i = 0; i < AliPID::kSPECIESN; i++) fPartFrac[i] = partFrac[i];}
void SetPriorProbabilityFunctions(TF1 *const felectron,
}
Bool_t IsPriorProbabilityFunctionUsed() const {return fFunctionProbabilityFlag;}
Double_t GetParticleFraction(Int_t i, Double_t p);
- Double_t Bethe(Double_t bg) const;
+ //Double_t Bethe(Double_t bg) const;
void SetDebugMode() {fDebugMode = kTRUE;}
Bool_t GetDebugMode() const {return fDebugMode;}
+ void SetRunQA() {fRunQAAnalysis = kTRUE;}
+ Bool_t IsQARun() {return fRunQAAnalysis;}
+ TList *GetVertexQAList() {return fListVertexQA;}
+
private:
AliProtonAnalysisBase(const AliProtonAnalysisBase&); // Not implemented
AliProtonAnalysisBase& operator=(const AliProtonAnalysisBase&); // Not implemented
TString fProtonAnalysisLevel;//"ESD", "AOD" or "MC"
+ Bool_t fAnalysisMC; //kTRUE if MC analysis while reading the ESDs
TriggerMode fTriggerMode; //Trigger mode
+ Bool_t kUseOnlineTrigger; //use the online trigger or not
+ Bool_t kUseOfflineTrigger; //use the offline trigger or not
+ AliPhysicsSelection *fPhysicsSelection; //Trigger selection: offline
AnalysisMode fProtonAnalysisMode; //Analysis mode: TPC-Hybrid-Global
PIDMode fProtonPIDMode; //PID mode: Bayesian-dE/dx ratio-Nsigma areas
Bool_t fAnalysisEtaMode; //run the analysis in eta or y
+ Bool_t fRunQAAnalysis; //boolnean to indicate to run the QA or not
Double_t fVxMax, fVyMax, fVzMax; //vertex diamond constrain
+ Int_t fMinNumOfContributors;//min number of contributors
Int_t fNBinsX; //number of bins in y or eta
Double_t fMinX, fMaxX; //min & max value of y or eta
Bool_t fMaxDCA3DFlag, fMaxDCA3DTPCFlag; //shows if this cut is used or not
Bool_t fMaxConstrainChi2Flag; //shows if this cut is used or not
Bool_t fITSRefitFlag, fTPCRefitFlag; //shows if this cut is used or not
- Bool_t fESDpidFlag, fTPCpidFlag; //shows if this cut is used or not
+ Bool_t fESDpidFlag, fTPCpidFlag, fTOFpidFlag; //shows if this cut is used or not
+ Bool_t fPointOnSPDLayersFlag;//shows if this cut is used or not
+ Bool_t fPointOnSDDLayersFlag;//shows if this cut is used or not
+ Bool_t fPointOnSSDLayersFlag;//shows if this cut is used or not
Bool_t fPointOnITSLayer1Flag, fPointOnITSLayer2Flag; //shows if this cut is used or not
Bool_t fPointOnITSLayer3Flag, fPointOnITSLayer4Flag; //shows if this cut is used or not
Bool_t fPointOnITSLayer5Flag, fPointOnITSLayer6Flag; //shows if this cut is used or not
Bool_t fMinTPCdEdxPointsFlag; //shows if this cut is used or not
+ TF1 *fPtDependentDcaXY; //pt dependence dca cut (xy)
+ Bool_t fPtDependentDcaXYFlag; //shows if this cut is used or not
+ Int_t fNSigmaDCAXY; //n-sigma dca xy cut (pt dependent)
//pid
Bool_t fFunctionProbabilityFlag; //flag: kTRUE if functions used
Int_t fNSigma; //N-sigma cut in the dE/dx band
- Double_t fdEdxMean[24]; //mean values of the dE/dx distributions for the proton band - P slices
- Double_t fdEdxSigma[24]; //sigma values of the dE/dx distributions for the proton band - P slices
+ Double_t fNRatio; //min value of the ratio of the measured dE/dx vs the expected
Double_t fPartFrac[10]; //prior probabilities
TF1 *fElectronFunction; //momentum dependence of the prior probs
TF1 *fMuonFunction; //momentum dependence of the prior probs
//Debug
Bool_t fDebugMode; //Enable the debug mode
+ //QA list
+ TList *fListVertexQA; //vertex QA list
+
ClassDef(AliProtonAnalysisBase,1);
};