1 #ifndef AliMuonForwardTrackAnalysis_H
2 #define AliMuonForwardTrackAnalysis_H
4 //====================================================================================================================================================
6 // Class for the analysis of the ALICE muon forward tracks (MUON + MFT)
8 // Contact author: antonio.uras@cern.ch
10 //====================================================================================================================================================
13 #include "TClonesArray.h"
14 #include "AliMuonForwardTrack.h"
21 #include "TParticle.h"
22 #include "AliMUONTrackParam.h"
23 #include "AliMUONTrackExtrap.h"
24 #include "TDatabasePDG.h"
28 //====================================================================================================================================================
30 class AliMuonForwardTrackAnalysis : public TObject {
34 enum {kNoOption, kPionsKaons, kResonanceOnly};
36 AliMuonForwardTrackAnalysis();
38 virtual ~AliMuonForwardTrackAnalysis() {}; // destructor
40 Bool_t Init(Char_t *inputFileName);
41 Bool_t LoadNextEvent();
42 void Terminate(Char_t *outputFileName);
46 void SetInputDir(Char_t *inputDir) { fInputDir = inputDir; }
47 void SetOutputDir(Char_t *outputDir) { fOutputDir = outputDir; }
49 Int_t GetNTracksAnalyzed() { return fNTracksAnalyzed; }
51 void SetMassRange(Int_t nBins, Double_t min, Double_t max) { fNMassBins=nBins; fMassMin=min; fMassMax=max; }
52 void SetPtDimuRange(Int_t nBins, Double_t min, Double_t max) { fNPtDimuBins=TMath::Min(nBins,fNMaxPtBinsDimuons) ; fPtDimuMin=min; fPtDimuMax=max; }
53 void SetSingleMuonAnalysis(Bool_t singleMuonAnalysis) { fSingleMuonAnalysis = singleMuonAnalysis; }
54 void SetMuonPairAnalysis(Bool_t muonPairAnalysis) { fMuonPairAnalysis = muonPairAnalysis; }
55 void SetMatchTrigger(Bool_t matchTrigger) { fMatchTrigger = matchTrigger; }
57 Bool_t AnalyzeSingleMuon();
58 Bool_t AnalyzeMuonPair();
59 void BuildMuonPairs();
61 void EvalDimuonVtxResolution(Bool_t eval) { fEvalDimuonVtxResolution = eval; }
63 Bool_t PassedCutSingleMuon(AliMuonForwardTrack *track);
64 Bool_t PassedCutMuonPair(AliMuonForwardTrackPair *pair);
66 void SetVertResMC(Double_t xRes, Double_t yRes, Double_t zRes) { fXVertResMC=xRes; fYVertResMC=yRes; fZVertResMC=zRes; }
68 void SetOption(Int_t option) { fOption = option; }
69 void SetMaxNWrongClustersMC(Int_t nClusters) { fMaxNWrongClustersMC = nClusters; }
70 void SetPtMinSingleMuons(Double_t ptMin) { fPtMinSingleMuons = ptMin; }
72 void ReadEvents(Int_t firstEv, Int_t lastEv) { fFirstEvent = firstEv; fLastEvent = lastEv; }
73 Int_t GetFirstEvent() { return fFirstEvent; }
74 Int_t GetLastEvent() { return fLastEvent; }
76 void UseBransonForCut(Bool_t useBranson) { fUseBransonForCut = useBranson; }
77 void UseBransonForKinematics(Bool_t useBranson) { fUseBransonForKinematics = useBranson; }
78 void UseCutOnOffsetChi2(Bool_t useCut) { fCutOnOffsetChi2 = useCut; }
82 static const Int_t fNMaxPtBinsDimuons = 50;
84 TString fInputDir, fOutputDir;
86 TTree *fInputTreeWithBranson, *fInputTreeWithoutBranson; //!
88 TClonesArray *fMuonForwardTracksWithBranson, *fMuonForwardTrackPairsWithBranson; //!
89 TClonesArray *fMuonForwardTracksWithoutBranson, *fMuonForwardTrackPairsWithoutBranson; //!
90 AliMuonForwardTrack *fMFTTrackWithBranson, *fMFTTrackWithoutBranson, *fMFTTrack; //!
91 AliMuonForwardTrackPair *fMFTTrackPairWithBranson, *fMFTTrackPairWithoutBranson, *fMFTTrackPair; //!
92 TParticle *fMCRefTrack; //!
94 Int_t fEv, fFirstEvent, fLastEvent, fNTracksOfEvent, fNTracksAnalyzedOfEvent, fNTracksAnalyzed, fNPairsOfEvent, fNPairsAnalyzedOfEvent;
95 Int_t fNTracksAnalyzedOfEventAfterCut, fNPairsAnalyzedOfEventAfterCut;
97 TH1D *fHistOffsetSingleMuonsX, *fHistOffsetSingleMuonsY, *fHistOffsetSingleMuons, *fHistWOffsetSingleMuons; //!
98 TH1D *fHistErrorSingleMuonsX, *fHistErrorSingleMuonsY; //!
99 TH1D *fHistZOriginSingleMuonsMC;
101 TH2D *fHistZROriginSingleMuonsMC, *fHistSingleMuonsPtRapidityMC; //!
102 TH2D *fHistSingleMuonsOffsetChi2, *fHistSingleMuonsOffsetChi2_BeforeMFT, *fHistSingleMuonsOffsetChi2_AfterMFT; //!
103 TGraph *fGraphSingleMuonsOffsetChi2; //!
105 TH1D *fHistMassMuonPairs[fNMaxPtBinsDimuons+1]; //!
106 TH1D *fHistMassMuonPairsWithoutMFT[fNMaxPtBinsDimuons+1]; //!
107 TH1D *fHistMassMuonPairsMC[fNMaxPtBinsDimuons+1]; //!
108 TH1D *fHistWOffsetMuonPairsAtPrimaryVtx[fNMaxPtBinsDimuons+1]; //!
109 TH1D *fHistWOffsetMuonPairsAtPCA[fNMaxPtBinsDimuons+1]; //!
110 TH1D *fHistDistancePrimaryVtxPCA[fNMaxPtBinsDimuons+1]; //!
111 TH2D *fHistDistancePrimaryVtxPCAvsWOffsetMuonPairsAtPCA[fNMaxPtBinsDimuons+1]; //!
112 TH1D *fHistDimuonVtxResolutionX[fNMaxPtBinsDimuons+1]; //!
113 TH1D *fHistDimuonVtxResolutionY[fNMaxPtBinsDimuons+1]; //!
114 TH1D *fHistDimuonVtxResolutionZ[fNMaxPtBinsDimuons+1]; //!
116 TH2D *fHistRapidityPtMuonPairs; //!
118 TH2D *fHistMassMuonPairsVsPt; //!
119 TH2D *fHistMassMuonPairsWithoutMFTVsPt; //!
120 TH2D *fHistMassMuonPairsVsPtLSp; //!
121 TH2D *fHistMassMuonPairsWithoutMFTVsPtLSp; //!
122 TH2D *fHistMassMuonPairsVsPtLSm; //!
123 TH2D *fHistMassMuonPairsWithoutMFTVsPtLSm; //!
125 Bool_t fEvalDimuonVtxResolution;
127 Int_t fNMassBins, fNPtDimuBins;
128 Double_t fMassMin, fMassMax, fPtDimuMin, fPtDimuMax;
129 TAxis *fPtAxisDimuons;
131 Bool_t fSingleMuonAnalysis, fMuonPairAnalysis, fMatchTrigger;
134 Double_t fXVertResMC, fYVertResMC, fZVertResMC;
135 Double_t fPrimaryVtxX, fPrimaryVtxY, fPrimaryVtxZ;
136 Int_t fMaxNWrongClustersMC;
137 Double_t fPtMinSingleMuons;
139 Bool_t fUseBransonForCut, fUseBransonForKinematics, fCutOnOffsetChi2;
141 Double_t fCenterOffset, fCenterChi2, fScaleOffset, fScaleChi2, fRadiusCut;
143 ClassDef(AliMuonForwardTrackAnalysis, 1)
147 //====================================================================================================================================================