1 //====================================================================================================================================================
3 // Class for the analysis of the ALICE muon forward tracks (MUON + MFT)
5 // Contact author: antonio.uras@cern.ch
7 //====================================================================================================================================================
10 #include "TClonesArray.h"
11 #include "AliMuonForwardTrack.h"
12 #include "AliMuonForwardTrackPair.h"
18 #include "TParticle.h"
19 #include "AliMUONTrackParam.h"
20 #include "AliMUONTrackExtrap.h"
21 #include "TGeoManager.h"
23 #include "TLorentzVector.h"
24 #include "TDatabasePDG.h"
26 #include "AliMuonForwardTrackAnalysis.h"
28 ClassImp(AliMuonForwardTrackAnalysis)
30 //====================================================================================================================================================
32 AliMuonForwardTrackAnalysis::AliMuonForwardTrackAnalysis():
36 fInputTreeWithBranson(0x0),
37 fInputTreeWithoutBranson(0x0),
38 fMuonForwardTracksWithBranson(0),
39 fMuonForwardTrackPairsWithBranson(0),
40 fMuonForwardTracksWithoutBranson(0),
41 fMuonForwardTrackPairsWithoutBranson(0),
42 fMFTTrackWithBranson(0),
43 fMFTTrackWithoutBranson(0),
45 fMFTTrackPairWithBranson(0),
46 fMFTTrackPairWithoutBranson(0),
53 fNTracksAnalyzedOfEvent(0),
56 fNPairsAnalyzedOfEvent(0),
57 fHistOffsetSingleMuonsX(0x0),
58 fHistOffsetSingleMuonsY(0x0),
59 fHistOffsetSingleMuons(0x0),
60 fHistWOffsetSingleMuons(0x0),
61 fHistErrorSingleMuonsX(0x0),
62 fHistErrorSingleMuonsY(0x0),
63 fHistOffsetSingleMuonsX_vsPtRapidity(0x0),
64 fHistOffsetSingleMuonsY_vsPtRapidity(0x0),
65 fHistSingleMuonsPtRapidity(0x0),
66 fHistSingleMuonsOffsetChi2(0x0),
67 fHistWOffsetMuonPairs(0x0),
68 fHistMassMuonPairs(0x0),
69 fHistMassMuonPairsWithoutMFT(0x0),
70 fHistMassMuonPairsMC(0x0),
71 fHistRapidityPtMuonPairsMC(0x0),
72 fGraphSingleMuonsOffsetChi2(0x0),
76 fSingleMuonAnalysis(1),
86 fMaxNWrongClustersMC(999),
88 fUseBransonForCut(kFALSE),
89 fUseBransonForKinematics(kFALSE),
90 fCutOnOffsetChi2(kFALSE),
98 // default constructor
100 for (Int_t rapBin=0; rapBin<fNRapBinsOffsetSingleMuons; rapBin++) {
101 for (Int_t ptBin=0; ptBin<fNPtBinsOffsetSingleMuons; ptBin++) {
102 fHistOffsetSingleMuonsX_tmp[rapBin][ptBin] = 0x0;
103 fHistOffsetSingleMuonsY_tmp[rapBin][ptBin] = 0x0;
109 //====================================================================================================================================================
111 Bool_t AliMuonForwardTrackAnalysis::Init(Char_t *inputFileName) {
115 TFile *inputFile = new TFile(Form("%s/%s",fInputDir.Data(),inputFileName));
116 if (!inputFile || !inputFile->IsOpen()) {
117 AliError(Form("Error opening file %s", inputFileName));
120 fInputTreeWithBranson = (TTree*) inputFile->Get("AliMuonForwardTracksWithBranson");
121 if (!fInputTreeWithBranson) {
122 AliError("Error reading input tree");
125 fInputTreeWithoutBranson = (TTree*) inputFile->Get("AliMuonForwardTracksWithoutBranson");
126 if (!fInputTreeWithoutBranson) {
127 AliError("Error reading input tree");
131 if (fFirstEvent<0 || fLastEvent<0 || fFirstEvent>fLastEvent || fFirstEvent>=fInputTreeWithBranson->GetEntries()) {
133 fLastEvent = fInputTreeWithBranson->GetEntries()-1;
136 fLastEvent = TMath::Min(fLastEvent, Int_t(fInputTreeWithBranson->GetEntries()-1));
139 AliInfo(Form("Analysing events %d to %d", fFirstEvent, fLastEvent));
141 fMuonForwardTracksWithBranson = new TClonesArray("AliMuonForwardTrack");
142 fInputTreeWithBranson->SetBranchAddress("tracks", &fMuonForwardTracksWithBranson);
144 fMuonForwardTracksWithoutBranson = new TClonesArray("AliMuonForwardTrack");
145 fInputTreeWithoutBranson->SetBranchAddress("tracks", &fMuonForwardTracksWithoutBranson);
147 TGeoManager::Import(Form("%s/geometry.root",fInputDir.Data()));
149 AliMUONTrackExtrap::SetField();
151 fMuonForwardTrackPairsWithBranson = new TClonesArray("AliMuonForwardTrackPair");
152 fMuonForwardTrackPairsWithoutBranson = new TClonesArray("AliMuonForwardTrackPair");
158 //====================================================================================================================================================
160 Bool_t AliMuonForwardTrackAnalysis::LoadNextEvent() {
162 if (fEv>fLastEvent) return kFALSE;
163 if (fEv<fFirstEvent) { fEv++; return kTRUE; }
164 fMuonForwardTracksWithBranson -> Delete();
165 fMuonForwardTracksWithoutBranson -> Delete();
166 fInputTreeWithBranson->GetEvent(fEv);
167 fInputTreeWithoutBranson->GetEvent(fEv);
168 AliInfo(Form("**** analyzing event # %4d (%3d tracks) ****", fEv, fMuonForwardTracksWithBranson->GetEntries()));
170 fPrimaryVtxX = gRandom->Gaus(0., fXVertResMC);
171 fPrimaryVtxY = gRandom->Gaus(0., fYVertResMC);
172 fPrimaryVtxZ = gRandom->Gaus(0., fZVertResMC);
174 if (fSingleMuonAnalysis) {
175 fNTracksAnalyzedOfEvent = 0;
176 fNTracksOfEvent = fMuonForwardTracksWithBranson->GetEntries();
177 while (AnalyzeSingleMuon()) continue;
180 if (fMuonPairAnalysis) {
181 if (fMuonForwardTrackPairsWithBranson) {
182 fMuonForwardTrackPairsWithBranson->Delete();
183 fMuonForwardTrackPairsWithoutBranson->Delete();
186 fNPairsAnalyzedOfEvent = 0;
187 fNPairsOfEvent = fMuonForwardTrackPairsWithBranson->GetEntries();
188 while (AnalyzeMuonPair()) continue;
197 //====================================================================================================================================================
199 Bool_t AliMuonForwardTrackAnalysis::AnalyzeSingleMuon() {
201 if (fNTracksAnalyzedOfEvent>=fNTracksOfEvent) return kFALSE;
203 fMFTTrackWithBranson = (AliMuonForwardTrack*) fMuonForwardTracksWithBranson->At(fNTracksAnalyzedOfEvent);
204 fMFTTrackWithoutBranson = (AliMuonForwardTrack*) fMuonForwardTracksWithoutBranson->At(fNTracksAnalyzedOfEvent);
206 fNTracksAnalyzedOfEvent++;
208 Bool_t passedCut = kFALSE;
209 if (fUseBransonForCut) passedCut = PassedCutSingleMuon(fMFTTrackWithBranson);
210 else passedCut = PassedCutSingleMuon(fMFTTrackWithoutBranson);
211 if (!passedCut) return kTRUE;
213 if (fUseBransonForKinematics) fMFTTrack = fMFTTrackWithBranson;
214 else fMFTTrack = fMFTTrackWithoutBranson;
215 if (fMatchTrigger && !fMFTTrack->GetMatchTrigger()) return kTRUE;
216 fMCRefTrack = fMFTTrack->GetMCTrackRef();
218 if (!fMCRefTrack) return kTRUE;
219 if (fMFTTrack->GetNWrongClustersMC()>fMaxNWrongClustersMC) return kTRUE;
221 AliMUONTrackParam *param = fMFTTrack->GetTrackParamAtMFTCluster(0);
222 AliMUONTrackExtrap::ExtrapToZCov(param, fPrimaryVtxZ);
225 Double_t mMu = TDatabasePDG::Instance()->GetParticle("mu-")->Mass();
226 Double_t energy = TMath::Sqrt(param->P()*param->P() + mMu*mMu);
227 pMu.SetPxPyPzE(param->Px(), param->Py(), param->Pz(), energy);
230 cov = param->GetCovariances();
232 fHistErrorSingleMuonsX -> Fill(1.e4*TMath::Sqrt(cov(0,0)));
233 fHistErrorSingleMuonsY -> Fill(1.e4*TMath::Sqrt(cov(2,2)));
235 Double_t dX = fMFTTrack->GetOffsetX(fPrimaryVtxX, fPrimaryVtxZ);
236 Double_t dY = fMFTTrack->GetOffsetY(fPrimaryVtxY, fPrimaryVtxZ);
238 Double_t offset = fMFTTrack->GetOffset(fPrimaryVtxX, fPrimaryVtxY, fPrimaryVtxZ);
239 Double_t weightedOffset = fMFTTrack->GetWeightedOffset(fPrimaryVtxX, fPrimaryVtxY, fPrimaryVtxZ);
241 // AliDebug(2, Form("pdg code = %d\n", fMCRefTrack->GetPdgCode()));
243 fHistOffsetSingleMuonsX -> Fill(1.e4*dX);
244 fHistOffsetSingleMuonsY -> Fill(1.e4*dY);
245 Int_t rapBin = fHistOffsetSingleMuonsX_vsPtRapidity->GetXaxis()->FindBin(pMu.Rapidity());
246 Int_t ptBin = fHistOffsetSingleMuonsX_vsPtRapidity->GetYaxis()->FindBin(pMu.Pt());
247 // AliDebug(1, Form("pt = %f (%d), rap = %f (%d)\n", pMu.Pt(), pMu.Rapidity(), ptBin, rapBin));
248 if (0<rapBin && rapBin<=fNRapBinsOffsetSingleMuons && 0<ptBin && ptBin<=fNPtBinsOffsetSingleMuons) {
249 fHistOffsetSingleMuonsX_tmp[rapBin-1][ptBin-1]->Fill(1.e4*dX);
250 fHistOffsetSingleMuonsY_tmp[rapBin-1][ptBin-1]->Fill(1.e4*dY);
252 fHistSingleMuonsPtRapidity -> Fill(pMu.Rapidity(), pMu.Pt());
253 fHistOffsetSingleMuons -> Fill(1.e4*offset);
254 fHistWOffsetSingleMuons -> Fill(weightedOffset);
255 Double_t chi2OverNdf = fMFTTrack->GetGlobalChi2()/Double_t(fMFTTrack->GetNMFTClusters()+fMFTTrack->GetNMUONClusters());
256 fHistSingleMuonsOffsetChi2 -> Fill(1.e4*offset, chi2OverNdf);
257 fGraphSingleMuonsOffsetChi2 -> SetPoint(fGraphSingleMuonsOffsetChi2->GetN(),1.e4*offset, chi2OverNdf);
265 //====================================================================================================================================================
267 Bool_t AliMuonForwardTrackAnalysis::AnalyzeMuonPair() {
269 if (fNPairsAnalyzedOfEvent>=fNPairsOfEvent) return kFALSE;
271 fMFTTrackPairWithBranson = (AliMuonForwardTrackPair*) fMuonForwardTrackPairsWithBranson->At(fNPairsAnalyzedOfEvent);
272 fMFTTrackPairWithoutBranson = (AliMuonForwardTrackPair*) fMuonForwardTrackPairsWithoutBranson->At(fNPairsAnalyzedOfEvent);
274 fNPairsAnalyzedOfEvent++;
276 Bool_t passedCut = kFALSE;
277 if (fUseBransonForCut) passedCut = PassedCutMuonPair(fMFTTrackPairWithBranson);
278 else passedCut = PassedCutMuonPair(fMFTTrackPairWithoutBranson);
280 if (!passedCut) return kTRUE;
282 if (fUseBransonForKinematics) fMFTTrackPair = fMFTTrackPairWithBranson;
283 else fMFTTrackPair = fMFTTrackPairWithoutBranson;
285 if ( fMFTTrackPair->GetTrack(0)->GetNWrongClustersMC()>fMaxNWrongClustersMC ||
286 fMFTTrackPair->GetTrack(1)->GetNWrongClustersMC()>fMaxNWrongClustersMC ) return kTRUE;
288 if (fOption==kResonanceOnly && !fMFTTrackPair->IsResonance()) return kTRUE;
290 fHistMassMuonPairs -> Fill(fMFTTrackPair->GetMass(fPrimaryVtxZ));
291 fHistWOffsetMuonPairs -> Fill(fMFTTrackPair->GetWeightedOffset(fPrimaryVtxX, fPrimaryVtxY, fPrimaryVtxZ));
292 fHistMassMuonPairsWithoutMFT -> Fill(fMFTTrackPair->GetMassWithoutMFT(fPrimaryVtxX, fPrimaryVtxY, fPrimaryVtxZ));
293 fHistMassMuonPairsMC -> Fill(fMFTTrackPair->GetMassMC());
294 fHistRapidityPtMuonPairsMC -> Fill(fMFTTrackPair->GetRapidityMC(), fMFTTrackPair->GetPtMC());
296 AliDebug(1, Form("mass = %f MC = %f", fMFTTrackPair->GetMass(fPrimaryVtxZ), fMFTTrackPair->GetMassMC()));
302 //====================================================================================================================================================
304 void AliMuonForwardTrackAnalysis::BuildMuonPairs() {
306 for (Int_t iTrack=0; iTrack<fMuonForwardTracksWithBranson->GetEntries(); iTrack++) {
307 for (Int_t jTrack=0; jTrack<iTrack; jTrack++) {
309 AliMuonForwardTrack *track0_WithBranson = (AliMuonForwardTrack*) fMuonForwardTracksWithBranson->At(iTrack);
310 AliMuonForwardTrack *track1_WithBranson = (AliMuonForwardTrack*) fMuonForwardTracksWithBranson->At(jTrack);
312 AliMuonForwardTrack *track0_WithoutBranson = (AliMuonForwardTrack*) fMuonForwardTracksWithoutBranson->At(iTrack);
313 AliMuonForwardTrack *track1_WithoutBranson = (AliMuonForwardTrack*) fMuonForwardTracksWithoutBranson->At(jTrack);
315 if (fMatchTrigger) if (!track0_WithBranson->GetMatchTrigger() || !track1_WithBranson->GetMatchTrigger()) continue;
316 if (!track0_WithBranson->GetMCTrackRef() || !track1_WithBranson->GetMCTrackRef()) continue;
318 AliMuonForwardTrackPair *trackPairWithBranson = new AliMuonForwardTrackPair(track0_WithBranson, track1_WithBranson);
319 AliMuonForwardTrackPair *trackPairWithoutBranson = new AliMuonForwardTrackPair(track0_WithoutBranson, track1_WithoutBranson);
320 if (fOption==kResonanceOnly && !trackPairWithBranson->IsResonance()) {
321 delete trackPairWithBranson;
322 delete trackPairWithoutBranson;
325 new ((*fMuonForwardTrackPairsWithBranson)[fMuonForwardTrackPairsWithBranson->GetEntries()]) AliMuonForwardTrackPair(*trackPairWithBranson);
326 new ((*fMuonForwardTrackPairsWithoutBranson)[fMuonForwardTrackPairsWithoutBranson->GetEntries()]) AliMuonForwardTrackPair(*trackPairWithoutBranson);
332 //====================================================================================================================================================
334 Bool_t AliMuonForwardTrackAnalysis::PassedCutSingleMuon(AliMuonForwardTrack *track) {
336 AliMUONTrackParam *param = track->GetTrackParamAtMFTCluster(0);
337 AliMUONTrackExtrap::ExtrapToZCov(param, fPrimaryVtxZ);
339 if (track->Pt()<fPtMinSingleMuons) return kFALSE;
341 if (fCutOnOffsetChi2) {
342 Double_t offset = 1.e4*track->GetOffset(fPrimaryVtxX, fPrimaryVtxY, fPrimaryVtxZ);
343 Double_t chi2OverNdf = track->GetGlobalChi2() / Double_t(track->GetNMFTClusters()+track->GetNMUONClusters());
344 offset /= fScaleOffset;
345 chi2OverNdf /= fScaleChi2;
346 offset -= fCenterOffset;
347 chi2OverNdf -= fCenterChi2;
348 // printf("cut on offset and chi2: returning %d\n", TMath::Sqrt(offset*offset + chi2OverNdf*chi2OverNdf)>fRadiusCut);
349 if (TMath::Sqrt(offset*offset + chi2OverNdf*chi2OverNdf) > fRadiusCut) return kFALSE;
356 //====================================================================================================================================================
358 Bool_t AliMuonForwardTrackAnalysis::PassedCutMuonPair(AliMuonForwardTrackPair *pair) {
360 return PassedCutSingleMuon(pair->GetTrack(0)) && PassedCutSingleMuon(pair->GetTrack(1));
364 //====================================================================================================================================================
366 void AliMuonForwardTrackAnalysis::Terminate(Char_t *outputFileName) {
368 for (Int_t rapBin=0; rapBin<fNRapBinsOffsetSingleMuons; rapBin++) {
369 for (Int_t ptBin=0; ptBin<fNPtBinsOffsetSingleMuons; ptBin++) {
370 Int_t binMin_x = fHistOffsetSingleMuonsX_tmp[rapBin][ptBin]->FindBin(-3*fHistOffsetSingleMuonsX_tmp[rapBin][ptBin]->GetRMS());
371 Int_t binMax_x = fHistOffsetSingleMuonsX_tmp[rapBin][ptBin]->FindBin(+3*fHistOffsetSingleMuonsX_tmp[rapBin][ptBin]->GetRMS());
372 for (Int_t bin=1; bin<=fHistOffsetSingleMuonsX_tmp[rapBin][ptBin]->GetNbinsX(); bin++) {
373 if (bin<binMin_x || bin>binMax_x) fHistOffsetSingleMuonsX_tmp[rapBin][ptBin]->SetBinContent(bin, 0);
375 Int_t binMin_y = fHistOffsetSingleMuonsY_tmp[rapBin][ptBin]->FindBin(-3*fHistOffsetSingleMuonsY_tmp[rapBin][ptBin]->GetRMS());
376 Int_t binMax_y = fHistOffsetSingleMuonsY_tmp[rapBin][ptBin]->FindBin(+3*fHistOffsetSingleMuonsY_tmp[rapBin][ptBin]->GetRMS());
377 for (Int_t bin=1; bin<=fHistOffsetSingleMuonsY_tmp[rapBin][ptBin]->GetNbinsX(); bin++) {
378 if (bin<binMin_y || bin>binMax_y) fHistOffsetSingleMuonsY_tmp[rapBin][ptBin]->SetBinContent(bin, 0);
380 fHistOffsetSingleMuonsX_vsPtRapidity->SetBinContent(rapBin+1, ptBin+1, fHistOffsetSingleMuonsX_tmp[rapBin][ptBin]->GetRMS());
381 fHistOffsetSingleMuonsX_vsPtRapidity->SetBinError(rapBin+1, ptBin+1, fHistOffsetSingleMuonsX_tmp[rapBin][ptBin]->GetRMSError());
382 fHistOffsetSingleMuonsY_vsPtRapidity->SetBinContent(rapBin+1, ptBin+1, fHistOffsetSingleMuonsY_tmp[rapBin][ptBin]->GetRMS());
383 fHistOffsetSingleMuonsY_vsPtRapidity->SetBinError(rapBin+1, ptBin+1, fHistOffsetSingleMuonsY_tmp[rapBin][ptBin]->GetRMSError());
387 TFile *fileOut = new TFile(Form("%s/%s",fOutputDir.Data(),outputFileName), "recreate");
389 printf("Writing output objects to file %s\n", fileOut->GetName());
391 fHistOffsetSingleMuonsX -> Write();
392 fHistOffsetSingleMuonsY -> Write();
393 fHistOffsetSingleMuons -> Write();
394 fHistWOffsetSingleMuons -> Write();
395 fHistErrorSingleMuonsX -> Write();
396 fHistErrorSingleMuonsY -> Write();
398 fHistOffsetSingleMuonsX_vsPtRapidity -> Write();
399 fHistOffsetSingleMuonsY_vsPtRapidity -> Write();
401 // for (Int_t rapBin=0; rapBin<fNRapBinsOffsetSingleMuons; rapBin++) {
402 // for (Int_t ptBin=0; ptBin<fNPtBinsOffsetSingleMuons; ptBin++) {
403 // fHistOffsetSingleMuonsX_tmp[rapBin][ptBin] -> Write();
404 // fHistOffsetSingleMuonsY_tmp[rapBin][ptBin] -> Write();
408 fHistSingleMuonsPtRapidity -> Write();
409 fHistSingleMuonsOffsetChi2 -> Write();
411 fGraphSingleMuonsOffsetChi2 -> Write();
413 fHistWOffsetMuonPairs -> Write();
414 fHistMassMuonPairs -> Write();
415 fHistMassMuonPairsWithoutMFT -> Write();
416 fHistMassMuonPairsMC -> Write();
417 fHistRapidityPtMuonPairsMC -> Write();
423 //====================================================================================================================================================
425 void AliMuonForwardTrackAnalysis::BookHistos() {
427 fHistOffsetSingleMuonsX = new TH1D("fHistOffsetSingleMuonsX", "Offset for single muons along X", 200, -1000, 1000);
428 fHistOffsetSingleMuonsY = new TH1D("fHistOffsetSingleMuonsY", "Offset for single muons along Y", 200, -1000, 1000);
429 fHistErrorSingleMuonsX = new TH1D("fHistErrorSingleMuonsX", "Coordinate Error for single muons along X", 200, 0, 1000);
430 fHistErrorSingleMuonsY = new TH1D("fHistErrorSingleMuonsY", "Coordinate Error for single muons along Y", 200, 0, 1000);
431 fHistOffsetSingleMuons = new TH1D("fHistOffsetSingleMuons", "Offset for single muons", 200, 0, 2000);
432 fHistWOffsetSingleMuons = new TH1D("fHistWOffsetSingleMuons", "Weighted Offset for single muons", 300, 0, 15);
434 fHistOffsetSingleMuonsX_vsPtRapidity = new TH2D("fHistOffsetSingleMuonsX_vsPtRapidity", "Offset for single muons along X",
435 10, -4, -2.5, 10, 0.5, 5.5);
436 fHistOffsetSingleMuonsY_vsPtRapidity = new TH2D("fHistOffsetSingleMuonsY_vsPtRapidity", "Offset for single muons along Y",
437 10, -4, -2.5, 10, 0.5, 5.5);
439 for (Int_t rapBin=0; rapBin<fNRapBinsOffsetSingleMuons; rapBin++) {
440 for (Int_t ptBin=0; ptBin<fNPtBinsOffsetSingleMuons; ptBin++) {
441 fHistOffsetSingleMuonsX_tmp[rapBin][ptBin] = new TH1D(Form("fHistOffsetSingleMuonsX_tmp_%02d_%02d",rapBin,ptBin), "", 1000, -1000, 1000);
442 fHistOffsetSingleMuonsY_tmp[rapBin][ptBin] = new TH1D(Form("fHistOffsetSingleMuonsY_tmp_%02d_%02d",rapBin,ptBin), "", 1000, -1000, 1000);
446 fHistSingleMuonsPtRapidity = new TH2D("fHistSingleMuonsPtRapidity", "Phase Space for single muons", 10, -4, -2.5, 10, 0.5, 5.5);
447 fHistSingleMuonsOffsetChi2 = new TH2D("fHistSingleMuonsOffsetChi2", "Offset vs #chi^{2}/ndf for single muons", 400, 0, 4000, 100, 0, 20);
449 fHistOffsetSingleMuonsX -> SetXTitle("Offset(X) [#mum]");
450 fHistOffsetSingleMuonsY -> SetXTitle("Offset(Y) [#mum]");
451 fHistErrorSingleMuonsX -> SetXTitle("Err. on track position at z_{vtx} (X) [#mum]");
452 fHistErrorSingleMuonsY -> SetXTitle("Err. on track position at z_{vtx} (Y) [#mum]");
453 fHistOffsetSingleMuons -> SetXTitle("Offset [#mum]");
454 fHistWOffsetSingleMuons -> SetXTitle("Weighted Offset");
456 fHistOffsetSingleMuonsX_vsPtRapidity -> SetXTitle("y^{#mu}");
457 fHistOffsetSingleMuonsY_vsPtRapidity -> SetXTitle("y^{#mu}");
458 fHistOffsetSingleMuonsX_vsPtRapidity -> SetYTitle("p_{T}^{#mu} [GeV/c]");
459 fHistOffsetSingleMuonsY_vsPtRapidity -> SetYTitle("p_{T}^{#mu} [GeV/c]");
461 fHistSingleMuonsPtRapidity -> SetXTitle("y^{#mu}");
462 fHistSingleMuonsPtRapidity -> SetYTitle("p_{T}^{#mu} [GeV/c]");
463 fHistSingleMuonsOffsetChi2 -> SetXTitle("Offset [#mum]");
464 fHistSingleMuonsOffsetChi2 -> SetYTitle("#chi^{2}/ndf");
466 fHistOffsetSingleMuonsX -> Sumw2();
467 fHistOffsetSingleMuonsY -> Sumw2();
468 fHistErrorSingleMuonsX -> Sumw2();
469 fHistErrorSingleMuonsY -> Sumw2();
470 fHistOffsetSingleMuons -> Sumw2();
471 fHistWOffsetSingleMuons -> Sumw2();
473 fHistOffsetSingleMuonsX_vsPtRapidity -> Sumw2();
474 fHistOffsetSingleMuonsY_vsPtRapidity -> Sumw2();
475 fHistSingleMuonsPtRapidity -> Sumw2();
476 fHistSingleMuonsOffsetChi2 -> Sumw2();
478 //--------------------------------------------
480 fGraphSingleMuonsOffsetChi2 = new TGraph();
481 fGraphSingleMuonsOffsetChi2 -> SetName("fGraphSingleMuonsOffsetChi2");
482 fGraphSingleMuonsOffsetChi2 -> SetTitle("fGraphSingleMuonsOffsetChi2");
484 //--------------------------------------------
486 fHistWOffsetMuonPairs = new TH1D("fHistWOffsetMuonPairs", "Weighted Offset for Muon Pairs", 300, 0, 60);
487 fHistMassMuonPairs = new TH1D("fHistMassMuonPairs", "Dimuon Mass (MUON+MFT)", fNMassBins, fMassMin, fMassMax);
488 fHistMassMuonPairsWithoutMFT = new TH1D("fHistMassMuonPairsWithoutMFT", "Dimuon Mass (MUON only)", fNMassBins, fMassMin, fMassMax);
489 fHistMassMuonPairsMC = new TH1D("fHistMassMuonPairsMC", "Dimuon Mass (MC)", fNMassBins, fMassMin, fMassMax);
490 fHistRapidityPtMuonPairsMC = new TH2D("fHistRapidityPtMuonPairsMC", "Dimuon Phase Space (MC)", 100, -4.5, -2., 100, 0., 10.);
492 fHistWOffsetMuonPairs -> SetXTitle("Weighted Offset");
493 fHistMassMuonPairs -> SetXTitle("Mass [GeV/c^{2}]");
494 fHistMassMuonPairsWithoutMFT -> SetXTitle("Mass [GeV/c^{2}]");
495 fHistMassMuonPairsMC -> SetXTitle("Mass [GeV/c^{2}]");
496 fHistRapidityPtMuonPairsMC -> SetXTitle("Rapidity");
497 fHistRapidityPtMuonPairsMC -> SetYTitle("p_{T} [GeV/c]");
499 fHistWOffsetMuonPairs -> Sumw2();
500 fHistMassMuonPairs -> Sumw2();
501 fHistMassMuonPairsWithoutMFT -> Sumw2();
502 fHistMassMuonPairsMC -> Sumw2();
503 fHistRapidityPtMuonPairsMC -> Sumw2();
507 //====================================================================================================================================================