]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MFT/AliMuonForwardTrackAnalysis.h
updates from Fengchu
[u/mrichter/AliRoot.git] / MFT / AliMuonForwardTrackAnalysis.h
1 #ifndef AliMuonForwardTrackAnalysis_H
2 #define AliMuonForwardTrackAnalysis_H 
3
4 //====================================================================================================================================================
5 //
6 //      Class for the analysis of the ALICE muon forward tracks (MUON + MFT)
7 //
8 //      Contact author: antonio.uras@cern.ch
9 //
10 //====================================================================================================================================================
11
12 #include "TObject.h"
13 #include "TClonesArray.h"
14 #include "AliMuonForwardTrack.h"
15 #include "TMatrixD.h"
16 #include "TTree.h"
17 #include "TH1D.h"
18 #include "TH2D.h"
19 #include "AliLog.h"
20 #include "TFile.h"
21 #include "TParticle.h"
22 #include "AliMUONTrackParam.h"
23 #include "AliMUONTrackExtrap.h"
24 #include "TDatabasePDG.h"
25 #include "TGraph.h"
26 #include "TAxis.h"
27
28 //====================================================================================================================================================
29
30 class AliMuonForwardTrackAnalysis : public TObject {
31
32 public:
33
34   enum {kNoOption, kPionsKaons, kResonanceOnly};
35   
36   AliMuonForwardTrackAnalysis();
37   
38   virtual ~AliMuonForwardTrackAnalysis() {};  // destructor
39
40   Bool_t Init(Char_t *inputFileName);
41   Bool_t LoadNextEvent();
42   void Terminate(Char_t *outputFileName);
43
44   void BookHistos();
45
46   void SetInputDir(Char_t *inputDir)   { fInputDir  = inputDir; }
47   void SetOutputDir(Char_t *outputDir) { fOutputDir = outputDir; }
48
49   Int_t GetNTracksAnalyzed() { return fNTracksAnalyzed; }
50
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; }
56
57   Bool_t AnalyzeSingleMuon();
58   Bool_t AnalyzeMuonPair();
59   void BuildMuonPairs();
60
61   void EvalDimuonVtxResolution(Bool_t eval) { fEvalDimuonVtxResolution = eval; }
62
63   Bool_t PassedCutSingleMuon(AliMuonForwardTrack *track);
64   Bool_t PassedCutMuonPair(AliMuonForwardTrackPair *pair);
65
66   void SetVertResMC(Double_t xRes, Double_t yRes, Double_t zRes) { fXVertResMC=xRes; fYVertResMC=yRes; fZVertResMC=zRes; }
67
68   void SetOption(Int_t option) { fOption = option; }
69   void SetMaxNWrongClustersMC(Int_t nClusters) { fMaxNWrongClustersMC = nClusters; }
70   void SetPtMinSingleMuons(Double_t ptMin) { fPtMinSingleMuons = ptMin; }
71
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; }
75
76   void UseBransonForCut(Bool_t useBranson) { fUseBransonForCut = useBranson; }
77   void UseBransonForKinematics(Bool_t useBranson) { fUseBransonForKinematics = useBranson; }
78   void UseCutOnOffsetChi2(Bool_t useCut) { fCutOnOffsetChi2 = useCut; }
79
80 private:
81
82   static const Int_t fNMaxPtBinsDimuons = 50;
83
84   TString fInputDir, fOutputDir;
85
86   TTree *fInputTreeWithBranson, *fInputTreeWithoutBranson;  //!
87
88   TClonesArray *fMuonForwardTracksWithBranson,    *fMuonForwardTrackPairsWithBranson;                //!
89   TClonesArray *fMuonForwardTracksWithoutBranson, *fMuonForwardTrackPairsWithoutBranson;             //!
90   AliMuonForwardTrack *fMFTTrackWithBranson, *fMFTTrackWithoutBranson, *fMFTTrack;                   //!
91   AliMuonForwardTrackPair *fMFTTrackPairWithBranson, *fMFTTrackPairWithoutBranson, *fMFTTrackPair;   //!
92   TParticle *fMCRefTrack;                                                                            //!
93
94   Int_t fEv, fFirstEvent, fLastEvent, fNTracksOfEvent, fNTracksAnalyzedOfEvent, fNTracksAnalyzed, fNPairsOfEvent, fNPairsAnalyzedOfEvent;
95   Int_t fNTracksAnalyzedOfEventAfterCut, fNPairsAnalyzedOfEventAfterCut;
96   
97   TH1D *fHistOffsetSingleMuonsX, *fHistOffsetSingleMuonsY, *fHistOffsetSingleMuons, *fHistWOffsetSingleMuons;      //!
98   TH1D *fHistErrorSingleMuonsX, *fHistErrorSingleMuonsY;                                                           //!
99   TH1D *fHistZOriginSingleMuonsMC;
100   
101   TH2D *fHistZROriginSingleMuonsMC, *fHistSingleMuonsPtRapidityMC;                                                //! 
102   TH2D *fHistSingleMuonsOffsetChi2, *fHistSingleMuonsOffsetChi2_BeforeMFT, *fHistSingleMuonsOffsetChi2_AfterMFT;  //!
103   TGraph *fGraphSingleMuonsOffsetChi2;                                                                            //!
104
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];                           //!
115
116   TH2D *fHistRapidityPtMuonPairs;           //!
117  
118   TH2D *fHistMassMuonPairsVsPt;             //!
119   TH2D *fHistMassMuonPairsWithoutMFTVsPt;   //!
120         TH2D *fHistMassMuonPairsVsPtLSp;             //!
121         TH2D *fHistMassMuonPairsWithoutMFTVsPtLSp;   //!
122         TH2D *fHistMassMuonPairsVsPtLSm;             //!
123         TH2D *fHistMassMuonPairsWithoutMFTVsPtLSm;   //!
124         
125   Bool_t fEvalDimuonVtxResolution;
126
127   Int_t fNMassBins, fNPtDimuBins;
128   Double_t fMassMin, fMassMax, fPtDimuMin, fPtDimuMax;
129   TAxis *fPtAxisDimuons;
130
131   Bool_t fSingleMuonAnalysis, fMuonPairAnalysis, fMatchTrigger;
132   Int_t fOption;
133
134   Double_t fXVertResMC, fYVertResMC, fZVertResMC;
135   Double_t fPrimaryVtxX, fPrimaryVtxY, fPrimaryVtxZ;
136   Int_t fMaxNWrongClustersMC;
137   Double_t fPtMinSingleMuons;
138
139   Bool_t fUseBransonForCut, fUseBransonForKinematics, fCutOnOffsetChi2;
140
141   Double_t fCenterOffset, fCenterChi2, fScaleOffset, fScaleChi2, fRadiusCut;
142
143   ClassDef(AliMuonForwardTrackAnalysis, 1)
144
145 };
146
147 //====================================================================================================================================================
148         
149 #endif
150