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 fNTracksAnalyzedOfEventAfterCut(0),
58 fNPairsAnalyzedOfEventAfterCut(0),
59 fHistOffsetSingleMuonsX(0x0),
60 fHistOffsetSingleMuonsY(0x0),
61 fHistOffsetSingleMuons(0x0),
62 fHistWOffsetSingleMuons(0x0),
63 fHistErrorSingleMuonsX(0x0),
64 fHistErrorSingleMuonsY(0x0),
65 fHistZOriginSingleMuonsMC(0x0),
66 fHistZROriginSingleMuonsMC(0x0),
67 fHistSingleMuonsPtRapidityMC(0x0),
68 fHistSingleMuonsOffsetChi2(0x0),
69 fHistSingleMuonsOffsetChi2_BeforeMFT(0x0),
70 fHistSingleMuonsOffsetChi2_AfterMFT(0x0),
71 fGraphSingleMuonsOffsetChi2(0x0),
72 fHistRapidityPtMuonPairs(0x0),
80 fSingleMuonAnalysis(1),
90 fMaxNWrongClustersMC(999),
92 fUseBransonForCut(kFALSE),
93 fUseBransonForKinematics(kFALSE),
94 fCutOnOffsetChi2(kFALSE),
102 // default constructor
104 for (Int_t iPtBin=0; iPtBin<fNMaxPtBinsDimuons+1; iPtBin++) {
105 fHistWOffsetMuonPairs[iPtBin] = NULL;
106 fHistMassMuonPairs[iPtBin] = NULL;
107 fHistMassMuonPairsWithoutMFT[iPtBin] = NULL;
108 fHistMassMuonPairsMC[iPtBin] = NULL;
113 //====================================================================================================================================================
115 Bool_t AliMuonForwardTrackAnalysis::Init(Char_t *inputFileName) {
117 fPtAxisDimuons = new TAxis(fNPtDimuBins, fPtDimuMin, fPtDimuMax);
121 TFile *inputFile = new TFile(Form("%s/%s",fInputDir.Data(),inputFileName));
122 if (!inputFile || !inputFile->IsOpen()) {
123 AliError(Form("Error opening file %s", inputFileName));
126 fInputTreeWithBranson = (TTree*) inputFile->Get("AliMuonForwardTracksWithBranson");
127 if (!fInputTreeWithBranson) {
128 AliError("Error reading input tree");
131 fInputTreeWithoutBranson = (TTree*) inputFile->Get("AliMuonForwardTracksWithoutBranson");
132 if (!fInputTreeWithoutBranson) {
133 AliError("Error reading input tree");
137 if (fFirstEvent<0 || fLastEvent<0 || fFirstEvent>fLastEvent || fFirstEvent>=fInputTreeWithBranson->GetEntries()) {
139 fLastEvent = fInputTreeWithBranson->GetEntries()-1;
142 fLastEvent = TMath::Min(fLastEvent, Int_t(fInputTreeWithBranson->GetEntries()-1));
145 AliInfo(Form("Analysing events %d to %d", fFirstEvent, fLastEvent));
147 fMuonForwardTracksWithBranson = new TClonesArray("AliMuonForwardTrack");
148 fInputTreeWithBranson->SetBranchAddress("tracks", &fMuonForwardTracksWithBranson);
150 fMuonForwardTracksWithoutBranson = new TClonesArray("AliMuonForwardTrack");
151 fInputTreeWithoutBranson->SetBranchAddress("tracks", &fMuonForwardTracksWithoutBranson);
153 TGeoManager::Import(Form("%s/geometry.root",fInputDir.Data()));
155 AliMUONTrackExtrap::SetField();
157 fMuonForwardTrackPairsWithBranson = new TClonesArray("AliMuonForwardTrackPair");
158 fMuonForwardTrackPairsWithoutBranson = new TClonesArray("AliMuonForwardTrackPair");
164 //====================================================================================================================================================
166 Bool_t AliMuonForwardTrackAnalysis::LoadNextEvent() {
168 if (fEv>fLastEvent) return kFALSE;
169 if (fEv<fFirstEvent) { fEv++; return kTRUE; }
170 fMuonForwardTracksWithBranson -> Delete();
171 fMuonForwardTracksWithoutBranson -> Delete();
172 fInputTreeWithBranson->GetEvent(fEv);
173 fInputTreeWithoutBranson->GetEvent(fEv);
174 AliInfo(Form("**** analyzing event # %4d (%3d tracks) ****", fEv, fMuonForwardTracksWithBranson->GetEntries()));
176 fPrimaryVtxX = gRandom->Gaus(0., fXVertResMC);
177 fPrimaryVtxY = gRandom->Gaus(0., fYVertResMC);
178 fPrimaryVtxZ = gRandom->Gaus(0., fZVertResMC);
180 if (fSingleMuonAnalysis) {
181 fNTracksAnalyzedOfEvent = 0;
182 fNTracksAnalyzedOfEventAfterCut = 0;
183 fNTracksOfEvent = fMuonForwardTracksWithBranson->GetEntries();
184 while (AnalyzeSingleMuon()) continue;
187 if (fMuonPairAnalysis) {
188 if (fMuonForwardTrackPairsWithBranson) {
189 fMuonForwardTrackPairsWithBranson->Delete();
190 fMuonForwardTrackPairsWithoutBranson->Delete();
193 fNPairsAnalyzedOfEvent = 0;
194 fNPairsAnalyzedOfEventAfterCut = 0;
195 fNPairsOfEvent = fMuonForwardTrackPairsWithBranson->GetEntries();
196 while (AnalyzeMuonPair()) continue;
199 AliInfo(Form("**** analyzed event # %4d (%3d tracks and %3d pairs analyzed) ****", fEv, fNTracksAnalyzedOfEventAfterCut, fNPairsAnalyzedOfEventAfterCut));
207 //====================================================================================================================================================
209 Bool_t AliMuonForwardTrackAnalysis::AnalyzeSingleMuon() {
211 if (fNTracksAnalyzedOfEvent>=fNTracksOfEvent) return kFALSE;
213 fMFTTrackWithBranson = (AliMuonForwardTrack*) fMuonForwardTracksWithBranson->At(fNTracksAnalyzedOfEvent);
214 fMFTTrackWithoutBranson = (AliMuonForwardTrack*) fMuonForwardTracksWithoutBranson->At(fNTracksAnalyzedOfEvent);
216 fNTracksAnalyzedOfEvent++;
218 Bool_t passedCut = kFALSE;
219 if (fUseBransonForCut) passedCut = PassedCutSingleMuon(fMFTTrackWithBranson);
220 else passedCut = PassedCutSingleMuon(fMFTTrackWithoutBranson);
221 if (!passedCut) return kTRUE;
223 if (fUseBransonForKinematics) fMFTTrack = fMFTTrackWithBranson;
224 else fMFTTrack = fMFTTrackWithoutBranson;
225 if (fMatchTrigger && !fMFTTrack->GetMatchTrigger()) return kTRUE;
226 fMCRefTrack = fMFTTrack->GetMCTrackRef();
228 if (fOption!=kPionsKaons && !fMCRefTrack) return kTRUE;
229 if (fOption!=kPionsKaons && fMFTTrack->GetNWrongClustersMC()>fMaxNWrongClustersMC) return kTRUE;
232 fHistZOriginSingleMuonsMC -> Fill(-1.*fMCRefTrack->Vz());
233 fHistZROriginSingleMuonsMC -> Fill(-1.*fMCRefTrack->Vz(), TMath::Sqrt(fMCRefTrack->Vx()*fMCRefTrack->Vx()+fMCRefTrack->Vy()*fMCRefTrack->Vy()));
236 AliMUONTrackParam *param = fMFTTrack->GetTrackParamAtMFTCluster(0);
237 AliMUONTrackExtrap::ExtrapToZCov(param, fPrimaryVtxZ);
240 Double_t mMu = TDatabasePDG::Instance()->GetParticle("mu-")->Mass();
241 Double_t energy = TMath::Sqrt(param->P()*param->P() + mMu*mMu);
242 pMu.SetPxPyPzE(param->Px(), param->Py(), param->Pz(), energy);
245 cov = param->GetCovariances();
247 fHistErrorSingleMuonsX -> Fill(1.e4*TMath::Sqrt(cov(0,0)));
248 fHistErrorSingleMuonsY -> Fill(1.e4*TMath::Sqrt(cov(2,2)));
250 Double_t dX = fMFTTrack->GetOffsetX(fPrimaryVtxX, fPrimaryVtxZ);
251 Double_t dY = fMFTTrack->GetOffsetY(fPrimaryVtxY, fPrimaryVtxZ);
253 Double_t offset = fMFTTrack->GetOffset(fPrimaryVtxX, fPrimaryVtxY, fPrimaryVtxZ);
254 Double_t weightedOffset = fMFTTrack->GetWeightedOffset(fPrimaryVtxX, fPrimaryVtxY, fPrimaryVtxZ);
256 // AliDebug(2, Form("pdg code = %d\n", fMCRefTrack->GetPdgCode()));
258 fHistOffsetSingleMuonsX -> Fill(1.e4*dX);
259 fHistOffsetSingleMuonsY -> Fill(1.e4*dY);
261 if (fOption!=kPionsKaons) fHistSingleMuonsPtRapidityMC-> Fill(fMCRefTrack->Y(), fMCRefTrack->Pt());
262 fHistOffsetSingleMuons -> Fill(1.e4*offset);
263 fHistWOffsetSingleMuons -> Fill(weightedOffset);
264 Double_t chi2OverNdf = fMFTTrack->GetGlobalChi2()/Double_t(fMFTTrack->GetNMFTClusters()+fMFTTrack->GetNMUONClusters());
265 fHistSingleMuonsOffsetChi2 -> Fill(1.e4*offset, chi2OverNdf);
267 if (-1.*fMCRefTrack->Vz()<5.) fHistSingleMuonsOffsetChi2_BeforeMFT -> Fill(1.e4*offset, chi2OverNdf);
268 else fHistSingleMuonsOffsetChi2_AfterMFT -> Fill(1.e4*offset, chi2OverNdf);
271 fGraphSingleMuonsOffsetChi2 -> SetPoint(fGraphSingleMuonsOffsetChi2->GetN(),1.e4*offset, chi2OverNdf);
274 fNTracksAnalyzedOfEventAfterCut++;
280 //====================================================================================================================================================
282 Bool_t AliMuonForwardTrackAnalysis::AnalyzeMuonPair() {
284 if (fNPairsAnalyzedOfEvent>=fNPairsOfEvent) return kFALSE;
286 fMFTTrackPairWithBranson = (AliMuonForwardTrackPair*) fMuonForwardTrackPairsWithBranson->At(fNPairsAnalyzedOfEvent);
287 fMFTTrackPairWithoutBranson = (AliMuonForwardTrackPair*) fMuonForwardTrackPairsWithoutBranson->At(fNPairsAnalyzedOfEvent);
289 fNPairsAnalyzedOfEvent++;
291 Bool_t passedCut = kFALSE;
292 if (fUseBransonForCut) passedCut = PassedCutMuonPair(fMFTTrackPairWithBranson);
293 else passedCut = PassedCutMuonPair(fMFTTrackPairWithoutBranson);
295 if (!passedCut) return kTRUE;
297 if (fUseBransonForKinematics) fMFTTrackPair = fMFTTrackPairWithBranson;
298 else fMFTTrackPair = fMFTTrackPairWithoutBranson;
300 if ( fMFTTrackPair->GetTrack(0)->GetNWrongClustersMC()>fMaxNWrongClustersMC ||
301 fMFTTrackPair->GetTrack(1)->GetNWrongClustersMC()>fMaxNWrongClustersMC ) return kTRUE;
303 if (fOption==kResonanceOnly && !fMFTTrackPair->IsResonance()) return kTRUE;
305 fMFTTrackPair -> SetKinem(fPrimaryVtxZ);
307 Int_t ptBin = fPtAxisDimuons->FindBin(fMFTTrackPair->GetPtMC());
309 if (1<=ptBin && ptBin<=fNPtDimuBins) {
310 fHistMassMuonPairs[ptBin] -> Fill(fMFTTrackPair->GetMass());
311 fHistWOffsetMuonPairs[ptBin] -> Fill(fMFTTrackPair->GetWeightedOffset(fPrimaryVtxX, fPrimaryVtxY, fPrimaryVtxZ));
312 fHistMassMuonPairsWithoutMFT[ptBin] -> Fill(fMFTTrackPair->GetMassWithoutMFT(fPrimaryVtxX, fPrimaryVtxY, fPrimaryVtxZ));
313 if (fOption!=kPionsKaons) fHistMassMuonPairsMC[ptBin] -> Fill(fMFTTrackPair->GetMassMC());
315 fHistMassMuonPairs[0] -> Fill(fMFTTrackPair->GetMass());
316 fHistWOffsetMuonPairs[0] -> Fill(fMFTTrackPair->GetWeightedOffset(fPrimaryVtxX, fPrimaryVtxY, fPrimaryVtxZ));
317 fHistMassMuonPairsWithoutMFT[0] -> Fill(fMFTTrackPair->GetMassWithoutMFT(fPrimaryVtxX, fPrimaryVtxY, fPrimaryVtxZ));
318 if (fOption!=kPionsKaons) fHistMassMuonPairsMC[0] -> Fill(fMFTTrackPair->GetMassMC());
320 if (fOption!=kPionsKaons) fHistRapidityPtMuonPairs -> Fill(fMFTTrackPair->GetRapidityMC(), fMFTTrackPair->GetPtMC());
321 else if (fMFTTrackPair->IsKinemSet()) fHistRapidityPtMuonPairs -> Fill(fMFTTrackPair->GetRapidity(), fMFTTrackPair->GetPt());
323 AliDebug(1, Form("mass = %f MC = %f", fMFTTrackPair->GetMass(), fMFTTrackPair->GetMassMC()));
325 fNPairsAnalyzedOfEventAfterCut++;
331 //====================================================================================================================================================
333 void AliMuonForwardTrackAnalysis::BuildMuonPairs() {
335 for (Int_t iTrack=0; iTrack<fMuonForwardTracksWithBranson->GetEntries(); iTrack++) {
336 for (Int_t jTrack=0; jTrack<iTrack; jTrack++) {
338 AliMuonForwardTrack *track0_WithBranson = (AliMuonForwardTrack*) fMuonForwardTracksWithBranson->At(iTrack);
339 AliMuonForwardTrack *track1_WithBranson = (AliMuonForwardTrack*) fMuonForwardTracksWithBranson->At(jTrack);
341 AliMuonForwardTrack *track0_WithoutBranson = (AliMuonForwardTrack*) fMuonForwardTracksWithoutBranson->At(iTrack);
342 AliMuonForwardTrack *track1_WithoutBranson = (AliMuonForwardTrack*) fMuonForwardTracksWithoutBranson->At(jTrack);
344 if (fMatchTrigger) if (!track0_WithBranson->GetMatchTrigger() || !track1_WithBranson->GetMatchTrigger()) continue;
345 if (fOption!=kPionsKaons && (!track0_WithBranson->GetMCTrackRef() || !track1_WithBranson->GetMCTrackRef())) continue;
347 AliMuonForwardTrackPair *trackPairWithBranson = new AliMuonForwardTrackPair(track0_WithBranson, track1_WithBranson);
348 AliMuonForwardTrackPair *trackPairWithoutBranson = new AliMuonForwardTrackPair(track0_WithoutBranson, track1_WithoutBranson);
349 if (fOption==kResonanceOnly && !trackPairWithBranson->IsResonance()) {
350 delete trackPairWithBranson;
351 delete trackPairWithoutBranson;
354 // if (fMFTTrackPairWithBranson) fMFTTrackPairWithBranson -> SetKinem(fPrimaryVtxZ);
355 // if (fMFTTrackPairWithoutBranson) fMFTTrackPairWithoutBranson -> SetKinem(fPrimaryVtxZ);
356 new ((*fMuonForwardTrackPairsWithBranson)[fMuonForwardTrackPairsWithBranson->GetEntries()]) AliMuonForwardTrackPair(*trackPairWithBranson);
357 new ((*fMuonForwardTrackPairsWithoutBranson)[fMuonForwardTrackPairsWithoutBranson->GetEntries()]) AliMuonForwardTrackPair(*trackPairWithoutBranson);
363 //====================================================================================================================================================
365 Bool_t AliMuonForwardTrackAnalysis::PassedCutSingleMuon(AliMuonForwardTrack *track) {
367 AliMUONTrackParam *param = track->GetTrackParamAtMFTCluster(0);
368 AliMUONTrackExtrap::ExtrapToZCov(param, fPrimaryVtxZ);
370 if (track->Pt()<fPtMinSingleMuons) return kFALSE;
372 if (fCutOnOffsetChi2) {
373 Double_t offset = 1.e4*track->GetOffset(fPrimaryVtxX, fPrimaryVtxY, fPrimaryVtxZ);
374 Double_t chi2OverNdf = track->GetGlobalChi2() / Double_t(track->GetNMFTClusters()+track->GetNMUONClusters());
375 offset /= fScaleOffset;
376 chi2OverNdf /= fScaleChi2;
377 offset -= fCenterOffset;
378 chi2OverNdf -= fCenterChi2;
379 // printf("cut on offset and chi2: returning %d\n", TMath::Sqrt(offset*offset + chi2OverNdf*chi2OverNdf)>fRadiusCut);
380 if (TMath::Sqrt(offset*offset + chi2OverNdf*chi2OverNdf) > fRadiusCut) return kFALSE;
387 //====================================================================================================================================================
389 Bool_t AliMuonForwardTrackAnalysis::PassedCutMuonPair(AliMuonForwardTrackPair *pair) {
391 return PassedCutSingleMuon(pair->GetTrack(0)) && PassedCutSingleMuon(pair->GetTrack(1));
395 //====================================================================================================================================================
397 void AliMuonForwardTrackAnalysis::Terminate(Char_t *outputFileName) {
399 TFile *fileOut = new TFile(Form("%s/%s",fOutputDir.Data(),outputFileName), "recreate");
401 printf("Writing output objects to file %s\n", fileOut->GetName());
403 fHistOffsetSingleMuonsX -> Write();
404 fHistOffsetSingleMuonsY -> Write();
405 fHistOffsetSingleMuons -> Write();
406 fHistWOffsetSingleMuons -> Write();
407 fHistErrorSingleMuonsX -> Write();
408 fHistErrorSingleMuonsY -> Write();
410 fHistSingleMuonsPtRapidityMC -> Write();
411 fHistSingleMuonsOffsetChi2 -> Write();
412 fHistSingleMuonsOffsetChi2_BeforeMFT -> Write();
413 fHistSingleMuonsOffsetChi2_AfterMFT -> Write();
415 fGraphSingleMuonsOffsetChi2 -> Write();
417 fHistZOriginSingleMuonsMC -> Write();
418 fHistZROriginSingleMuonsMC -> Write();
420 for (Int_t iPtBin=0; iPtBin<fNPtDimuBins+1; iPtBin++) {
421 fHistWOffsetMuonPairs[iPtBin] -> Write();
422 fHistMassMuonPairs[iPtBin] -> Write();
423 fHistMassMuonPairsWithoutMFT[iPtBin] -> Write();
424 fHistMassMuonPairsMC[iPtBin] -> Write();
427 fHistRapidityPtMuonPairs -> Write();
433 //====================================================================================================================================================
435 void AliMuonForwardTrackAnalysis::BookHistos() {
437 fHistOffsetSingleMuonsX = new TH1D("fHistOffsetSingleMuonsX", "Offset for single muons along X", 200, -1000, 1000);
438 fHistOffsetSingleMuonsY = new TH1D("fHistOffsetSingleMuonsY", "Offset for single muons along Y", 200, -1000, 1000);
439 fHistErrorSingleMuonsX = new TH1D("fHistErrorSingleMuonsX", "Coordinate Error for single muons along X", 200, 0, 1000);
440 fHistErrorSingleMuonsY = new TH1D("fHistErrorSingleMuonsY", "Coordinate Error for single muons along Y", 200, 0, 1000);
441 fHistOffsetSingleMuons = new TH1D("fHistOffsetSingleMuons", "Offset for single muons", 200, 0, 2000);
442 fHistWOffsetSingleMuons = new TH1D("fHistWOffsetSingleMuons", "Weighted Offset for single muons", 300, 0, 15);
444 fHistSingleMuonsPtRapidityMC = new TH2D("fHistSingleMuonsPtRapidityMC", "Phase Space for single muons", 100, -4.5, -2., 100, 0., 10.);
445 fHistSingleMuonsOffsetChi2 = new TH2D("fHistSingleMuonsOffsetChi2", "Offset vs #chi^{2}/ndf for single muons", 400, 0, 4000, 100, 0, 20);
446 fHistSingleMuonsOffsetChi2_BeforeMFT = new TH2D("fHistSingleMuonsOffsetChi2_BeforeMFT",
447 "Offset vs #chi^{2}/ndf for single muons with origin before MFT", 400, 0, 4000, 100, 0, 20);
448 fHistSingleMuonsOffsetChi2_AfterMFT = new TH2D("fHistSingleMuonsOffsetChi2_AfterMFT",
449 "Offset vs #chi^{2}/ndf for single muons with origin after MFT", 400, 0, 4000, 100, 0, 20);
451 fHistZOriginSingleMuonsMC = new TH1D("fHistZOriginSingleMuonsMC", "Z origin for single muons (from MC)", 1000, 0., 500.);
452 fHistZROriginSingleMuonsMC = new TH2D("fHistZROriginSingleMuonsMC", "Z-R origin for single muons (from MC)", 1000, 0., 500., 1000, 0., 100.);
454 fHistOffsetSingleMuonsX -> SetXTitle("Offset(X) [#mum]");
455 fHistOffsetSingleMuonsY -> SetXTitle("Offset(Y) [#mum]");
456 fHistErrorSingleMuonsX -> SetXTitle("Err. on track position at z_{vtx} (X) [#mum]");
457 fHistErrorSingleMuonsY -> SetXTitle("Err. on track position at z_{vtx} (Y) [#mum]");
458 fHistOffsetSingleMuons -> SetXTitle("Offset [#mum]");
459 fHistWOffsetSingleMuons -> SetXTitle("Weighted Offset");
461 fHistSingleMuonsPtRapidityMC -> SetXTitle("y^{#mu}");
462 fHistSingleMuonsPtRapidityMC -> SetYTitle("p_{T}^{#mu} [GeV/c]");
463 fHistSingleMuonsOffsetChi2 -> SetXTitle("Offset [#mum]");
464 fHistSingleMuonsOffsetChi2 -> SetYTitle("#chi^{2}/ndf");
465 fHistSingleMuonsOffsetChi2_BeforeMFT -> SetXTitle("Offset [#mum]");
466 fHistSingleMuonsOffsetChi2_BeforeMFT -> SetYTitle("#chi^{2}/ndf");
467 fHistSingleMuonsOffsetChi2_AfterMFT -> SetXTitle("Offset [#mum]");
468 fHistSingleMuonsOffsetChi2_AfterMFT -> SetYTitle("#chi^{2}/ndf");
470 fHistZOriginSingleMuonsMC -> SetXTitle("Z [cm]");
471 fHistZROriginSingleMuonsMC -> SetXTitle("Z [cm]");
472 fHistZROriginSingleMuonsMC -> SetXTitle("R [cm]");
474 fHistOffsetSingleMuonsX -> Sumw2();
475 fHistOffsetSingleMuonsY -> Sumw2();
476 fHistErrorSingleMuonsX -> Sumw2();
477 fHistErrorSingleMuonsY -> Sumw2();
478 fHistOffsetSingleMuons -> Sumw2();
479 fHistWOffsetSingleMuons -> Sumw2();
481 fHistZOriginSingleMuonsMC -> Sumw2();
482 fHistZROriginSingleMuonsMC -> Sumw2();
484 fHistSingleMuonsPtRapidityMC -> Sumw2();
485 fHistSingleMuonsOffsetChi2 -> Sumw2();
486 fHistSingleMuonsOffsetChi2_BeforeMFT -> Sumw2();
487 fHistSingleMuonsOffsetChi2_AfterMFT -> Sumw2();
489 //--------------------------------------------
491 fGraphSingleMuonsOffsetChi2 = new TGraph();
492 fGraphSingleMuonsOffsetChi2 -> SetName("fGraphSingleMuonsOffsetChi2");
493 fGraphSingleMuonsOffsetChi2 -> SetTitle("fGraphSingleMuonsOffsetChi2");
495 //--------------------------------------------
497 for (Int_t iPtBin=0; iPtBin<=fNPtDimuBins+1; iPtBin++) {
500 fHistWOffsetMuonPairs[iPtBin] = new TH1D(Form("fHistWOffsetMuonPairs_%d",iPtBin),
501 "Weighted Offset for Muon Pairs (All p_{T}^{#mu#mu})",
503 fHistMassMuonPairs[iPtBin] = new TH1D(Form("fHistMassMuonPairs_%d",iPtBin),
504 "Dimuon Mass (MUON+MFT) (All p_{T}^{#mu#mu})",
505 fNMassBins, fMassMin, fMassMax);
506 fHistMassMuonPairsWithoutMFT[iPtBin] = new TH1D(Form("fHistMassMuonPairsWithoutMFT_%d",iPtBin),
507 "Dimuon Mass (MUON only) (All p_{T}^{#mu#mu})",
508 fNMassBins, fMassMin, fMassMax);
509 fHistMassMuonPairsMC[iPtBin] = new TH1D(Form("fHistMassMuonPairsMC_%d",iPtBin),
510 "Dimuon Mass (MC) (All p_{T}^{#mu#mu})",
511 fNMassBins, fMassMin, fMassMax);
515 Double_t ptMin = fPtAxisDimuons->GetBinLowEdge(iPtBin);
516 Double_t ptMax = fPtAxisDimuons->GetBinUpEdge(iPtBin);
517 fHistWOffsetMuonPairs[iPtBin] = new TH1D(Form("fHistWOffsetMuonPairs_%d",iPtBin),
518 Form("Weighted Offset for Muon Pairs ( %3.1f < p_{T}^{#mu#mu} < %3.1f GeV/c)",ptMin,ptMax),
520 fHistMassMuonPairs[iPtBin] = new TH1D(Form("fHistMassMuonPairs_%d",iPtBin),
521 Form("Dimuon Mass (MUON+MFT) (%3.1f < p_{T}^{#mu#mu} < %3.1f GeV/c)",ptMin,ptMax),
522 fNMassBins, fMassMin, fMassMax);
523 fHistMassMuonPairsWithoutMFT[iPtBin] = new TH1D(Form("fHistMassMuonPairsWithoutMFT_%d",iPtBin),
524 Form("Dimuon Mass (MUON only) (%3.1f < p_{T}^{#mu#mu} < %3.1f GeV/c)",ptMin,ptMax),
525 fNMassBins, fMassMin, fMassMax);
526 fHistMassMuonPairsMC[iPtBin] = new TH1D(Form("fHistMassMuonPairsMC_%d",iPtBin),
527 Form("Dimuon Mass (MC) (%3.1f < p_{T}^{#mu#mu} < %3.1f GeV/c)",ptMin,ptMax),
528 fNMassBins, fMassMin, fMassMax);
531 fHistWOffsetMuonPairs[iPtBin] -> SetXTitle("Weighted Offset");
532 fHistMassMuonPairs[iPtBin] -> SetXTitle("Mass [GeV/c^{2}]");
533 fHistMassMuonPairsWithoutMFT[iPtBin] -> SetXTitle("Mass [GeV/c^{2}]");
534 fHistMassMuonPairsMC[iPtBin] -> SetXTitle("Mass [GeV/c^{2}]");
536 fHistWOffsetMuonPairs[iPtBin] -> Sumw2();
537 fHistMassMuonPairs[iPtBin] -> Sumw2();
538 fHistMassMuonPairsWithoutMFT[iPtBin] -> Sumw2();
539 fHistMassMuonPairsMC[iPtBin] -> Sumw2();
543 if (fOption==kPionsKaons) fHistRapidityPtMuonPairs = new TH2D("fHistRapidityPtMuonPairs", "Dimuon Phase Space (rec)", 20, -4.5, -2., 20, 0., 10.);
544 else fHistRapidityPtMuonPairs = new TH2D("fHistRapidityPtMuonPairs", "Dimuon Phase Space (MC)", 100, -4.5, -2., 100, 0., 10.);
545 fHistRapidityPtMuonPairs -> SetXTitle("Rapidity");
546 fHistRapidityPtMuonPairs -> SetYTitle("p_{T} [GeV/c]");
547 fHistRapidityPtMuonPairs -> Sumw2();
551 //====================================================================================================================================================