#ifndef AliMuonForwardTrackAnalysis_H #define AliMuonForwardTrackAnalysis_H //==================================================================================================================================================== // // Class for the analysis of the ALICE muon forward tracks (MUON + MFT) // // Contact author: antonio.uras@cern.ch // //==================================================================================================================================================== #include "TObject.h" #include "TClonesArray.h" #include "AliMuonForwardTrack.h" #include "AliMuonForwardTrackPair.h" #include "TMatrixD.h" #include "TTree.h" #include "TH1D.h" #include "TH2D.h" #include "TH3D.h" #include "AliLog.h" #include "TFile.h" #include "TParticle.h" #include "AliMUONTrackParam.h" #include "AliMUONTrackExtrap.h" #include "TDatabasePDG.h" #include "TGraph.h" #include "TAxis.h" //==================================================================================================================================================== class AliMuonForwardTrackAnalysis : public TObject { public: enum {kNoOption, kResonanceOnly, kCharmOnly, kBeautyOnly, kBackground1mu, kBackground2mu, kNoResonances}; enum {kSingleEvent, kMixedEvent}; AliMuonForwardTrackAnalysis(); virtual ~AliMuonForwardTrackAnalysis() {}; // destructor Bool_t Init(Char_t *inputFileName); Bool_t LoadNextEvent(); void Terminate(Char_t *outputFileName); void BookHistos(); void SetInputDir(Char_t *inputDir) { fInputDir = inputDir; } void SetOutputDir(Char_t *outputDir) { fOutputDir = outputDir; } Int_t GetNTracksAnalyzed() { return fNTracksAnalyzed; } void SetMassRange(Double_t min, Double_t max) { fMassMin=min; fMassMax=max; } void SetTrueMass(Double_t mass) { fTrueMass = mass; } void SetSingleMuonAnalysis(Bool_t singleMuonAnalysis) { fSingleMuonAnalysis = singleMuonAnalysis; } void SetMuonPairAnalysis(Bool_t muonPairAnalysis) { fMuonPairAnalysis = muonPairAnalysis; } void SetMatchTrigger(Int_t triggerLevel) { fTriggerLevel = triggerLevel; } Bool_t AnalyzeSingleMuon(); Bool_t AnalyzeMuonPair(Int_t opt); void BuildMuonPairs(); void BuildMuonPairsMix(); void EvalDimuonVtxResolution(Bool_t eval) { fEvalDimuonVtxResolution = eval; } Bool_t PassedCutSingleMuon(AliMuonForwardTrack *track); Bool_t PassedCutMuonPair(AliMuonForwardTrackPair *pair); void SetVertResMC(Double_t xRes, Double_t yRes, Double_t zRes) { fXVertResMC=xRes; fYVertResMC=yRes; fZVertResMC=zRes; } void SetOption(Int_t option) { fOption = option; } void SetMaxNWrongClustersMC(Int_t nClusters) { fMaxNWrongClustersMC = nClusters; } void SetMinPtSingleMuons(Double_t ptMin) { fMinPtSingleMuons = ptMin; } void SetEtaRangeSingleMuons(Double_t min, Double_t max) { fMinEtaSingleMuons=min; fMaxEtaSingleMuons=max; } void SetMaxChi2SingleMuons(Double_t chi2Max) { fMaxChi2SingleMuons = chi2Max; } void SetMaxOffsetSingleMuons(Double_t offsetMax) { fMaxOffsetSingleMuons = offsetMax; } void CorrelateCutOnOffsetChi2(Bool_t option) { fCorrelateCutOnOffsetChi2 = option; } void SetMaxWOffsetMuonPairsAtPrimaryVtx(Double_t wOffsetMax) { fMaxWOffsetMuonPairsAtPrimaryVtx = wOffsetMax; } void SetMaxWOffsetMuonPairsAtPCA(Double_t wOffsetMax) { fMaxWOffsetMuonPairsAtPCA = wOffsetMax; } void SetMaxDistancePrimaryVtxPCA(Double_t distanceMax) { fMaxDistancePrimaryVtxPCA = distanceMax; } void SetMinPCAQuality(Double_t minQuality) { fMinPCAQuality = minQuality; } void ReadEvents(Int_t firstEv, Int_t lastEv) { fFirstEvent = firstEv; fLastEvent = lastEv; } Int_t GetFirstEvent() { return fFirstEvent; } Int_t GetLastEvent() { return fLastEvent; } void UseBransonForCut(Bool_t useBranson) { fUseBransonForCut = useBranson; } void UseBransonForKinematics(Bool_t useBranson) { fUseBransonForKinematics = useBranson; } Double_t GetPseudoProperDecayLength(AliMuonForwardTrackPair *pair, Double_t trueMass); void SetNEventsToMix(Int_t nEvents) { fNEventsToMix = nEvents; if (0