31 #include "TGraphErrors.h"
32 #include "TGraphAsymmErrors.h"
34 #include "TObjArray.h"
37 #include "TMCProcess.h"
38 #include "TGeoGlobalMagField.h"
39 #include "TGeoManager.h"
42 #include "AliMCEvent.h"
43 #include "AliMCParticle.h"
44 #include "AliMCEventHandler.h"
45 #include "AliESDEvent.h"
46 #include "AliESDMuonTrack.h"
47 #include "AliCDBManager.h"
48 #include "AliGeomManager.h"
51 #include "AliAnalysisManager.h"
52 #include "AliAnalysisDataSlot.h"
53 #include "AliAnalysisDataContainer.h"
54 #include "AliMultSelection.h"
57 #include "AliCFContainer.h"
58 #include "AliCFGridSparse.h"
59 #include "AliCFEffGrid.h"
62 #include "AliMUONConstants.h"
63 #include "AliMUONTrack.h"
64 #include "AliMUONTriggerTrack.h"
65 #include "AliMUONLocalTrigger.h"
66 #include "AliMUONVTrackStore.h"
67 #include "AliMUONVTriggerTrackStore.h"
68 #include "AliMUONESDInterface.h"
69 #include "AliMUONRecoParam.h"
70 #include "AliMUONCDB.h"
71 #include "AliMUONTrackExtrap.h"
72 #include "AliMUONTrackParam.h"
73 #include "AliMUONRecoCheck.h"
74 #include "AliMUONVCluster.h"
75 #include "AliMUONVTrackReconstructor.h"
78 #include "AliMpSegmentation.h"
79 #include "AliMpDEIterator.h"
98 fRecoParamOCDBpath(""),
100 fCorrectForSystematics(kFALSE),
101 fFitResiduals(kFALSE),
102 fEnforceTrkCriteria(kFALSE),
103 fUseMCKinematics(kFALSE),
104 fMCTrigLevelFromMatchTrk(kFALSE),
105 fRequestedStationMask(0),
106 fRequest2ChInSameSt45(0),
110 fEfficiencyList(0x0),
114 fSlopeAtVtxList(0x0),
118 fSlopeAt1stClList(0x0),
127 fClusterMaxRes[0] = 0.;
128 fClusterMaxRes[1] = 0.;
129 for (
Int_t i = 0; i < 1100; i++) fDEIndices[i] = 0;
130 for (
Int_t i = 0; i < 200; i++) fDEIds[i] = 0;
137 fDefaultStorage(
"raw://"),
139 fRecoParamOCDBpath(
""),
141 fCorrectForSystematics(kFALSE),
142 fFitResiduals(kFALSE),
143 fEnforceTrkCriteria(kFALSE),
144 fUseMCKinematics(kFALSE),
145 fMCTrigLevelFromMatchTrk(kFALSE),
146 fRequestedStationMask(0),
147 fRequest2ChInSameSt45(0),
151 fEfficiencyList(0x0),
155 fSlopeAtVtxList(0x0),
159 fSlopeAt1stClList(0x0),
173 DefineOutput(1, AliCFContainer::Class());
174 DefineOutput(2, TObjArray::Class());
175 DefineOutput(3, TObjArray::Class());
176 DefineOutput(4, TObjArray::Class());
177 DefineOutput(5, TObjArray::Class());
178 DefineOutput(6, TObjArray::Class());
179 DefineOutput(7, TObjArray::Class());
180 DefineOutput(8, TObjArray::Class());
181 DefineOutput(9, TObjArray::Class());
182 DefineOutput(10, TObjArray::Class());
183 DefineOutput(11, TObjArray::Class());
184 DefineOutput(12, TObjArray::Class());
194 if (!AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
223 AliCDBManager* cdbm = AliCDBManager::Instance();
224 if (cdbm->IsDefaultStorageSet()) printf(
"PerformanceTask: CDB default storage already set!\n");
230 if (cdbm->GetRun() > -1) printf(
"PerformanceTask: run number already set!\n");
231 else cdbm->SetRun(fCurrentRunNumber);
234 if (!TGeoGlobalMagField::Instance()->GetField()) {
235 if (!AliMUONCDB::LoadField())
return;
239 if (!AliMpSegmentation::Instance(kFALSE)) {
240 if (!AliMUONCDB::LoadMapping(kTRUE))
return;
244 if (!AliGeomManager::GetGeometry()) {
245 AliGeomManager::LoadGeometry();
246 if (!AliGeomManager::GetGeometry())
return;
247 if (!AliGeomManager::ApplyAlignObjsFromCDB(
"MUON"))
return;
251 const AliMUONRecoParam* recoParam = (AliMUONESDInterface::GetTracker())
252 ? AliMUONESDInterface::GetTracker()->GetRecoParam()
253 : AliMUONCDB::LoadRecoParam();
259 AliError(
"--> skip this run");
273 if (!AliMUONESDInterface::GetTracker()) AliMUONESDInterface::ResetTracker(recoParam);
275 for (
Int_t i = 0; i < AliMUONConstants::NTrackingCh(); i++) {
284 while (!it.IsDone()) {
312 TString ptTitle(
"p_{t}"), ptUnits(
"GeV/c");
315 Double_t etaMin = -4., etaMax = -2.5;
316 TString etaTitle(
"#eta"), etaUnits(
"a.u.");
320 TString phiTitle(
"#phi"), phiUnits(
"rad");
322 Int_t nThetaAbsEndBins = 4;
323 Double_t thetaAbsEndMin = -0.5, thetaAbsEndMax = 3.5;
324 TString thetaAbsEndTitle(
"#theta_{abs}"), thetaAbsEndUnits(
"a.u.");
326 Int_t nChargeBins = 2;
327 Double_t chargeMin = -2, chargeMax = 2.;
328 TString chargeTitle(
"charge"), chargeUnits(
"e");
330 Int_t nHasTrackerBins = 2;
331 Double_t hasTrackerMin = -0.5, hasTrackerMax = (
Double_t)nHasTrackerBins - 0.5;
332 TString hasTrackerTitle(
"Has tracker"), hasTrackerUnits(
"");
336 TString triggerTitle(
"Trigger match"), triggerUnits(
"");
340 TString motherTypeTitle(
"motherType"), motherTypeUnits(
"");
344 TString matchMCTitle(
"MatchMC"), matchMCUnits(
"");
347 Double_t mcTriggerMin = -0.5, mcTriggerMax = (
Double_t)nMCTriggerBins - 0.5;
348 TString mcTriggerTitle(
"MC Trigger match"), mcTriggerUnits(
"");
352 TString centTitle(
"centrality"), centUnits(
"%");
354 Int_t nDupliTrgBins = 2;
355 Double_t dupliTrgMin = -0.5, dupliTrgMax = 1.5;
356 TString dupliTrgTitle(
"duplicate trigger"), dupliTrgUnits(
"");
358 Int_t nbins[
kNvars] = {
nPtBins, nEtaBins, nPhiBins, nThetaAbsEndBins, nChargeBins, nHasTrackerBins, nTriggerBins, nMotherTypeBins, nMatchMCBins, nMCTriggerBins,
nCentBins, nDupliTrgBins};
359 Double_t xmin[
kNvars] = {
ptMin, etaMin, phiMin, thetaAbsEndMin, chargeMin, hasTrackerMin, triggerMin, motherTypeMin, matchMCMin, mcTriggerMin,
centMin, dupliTrgMin};
360 Double_t xmax[
kNvars] = {
ptMax, etaMax, phiMax, thetaAbsEndMax, chargeMax, hasTrackerMax, triggerMax, motherTypeMax, matchMCMax, mcTriggerMax,
centMax, dupliTrgMax};
361 TString axisTitle[
kNvars] = {ptTitle, etaTitle, phiTitle, thetaAbsEndTitle, chargeTitle, hasTrackerTitle, triggerTitle, motherTypeTitle, matchMCTitle, mcTriggerTitle, centTitle, dupliTrgTitle};
362 TString axisUnits[
kNvars] = {ptUnits, etaUnits, phiUnits, thetaAbsEndUnits, chargeUnits, hasTrackerUnits, triggerUnits, motherTypeUnits, matchMCUnits, mcTriggerUnits, centUnits, dupliTrgUnits};
365 fCFContainer =
new AliCFContainer(GetOutputSlot(1)->GetContainer()->GetName(),
"container for tracks",
kNsteps,
kNvars,nbins);
369 TString histoTitle = Form(
"%s (%s)", axisTitle[idim].
Data(), axisUnits[idim].
Data());
370 histoTitle.ReplaceAll(
"()",
"");
372 fCFContainer->SetBinLimits(idim, xmin[idim], xmax[idim]);
406 AliCFGridSparse* gridSparse =
fCFContainer->GetGrid(istep);
411 triggerAxis->SetBinLabel(ibin+1,trigName[ibin]);
417 motherTypeAxis->SetBinLabel(ibin+1,srcName[ibin]);
423 matchMCAxis->SetBinLabel(ibin+1,mMCName[ibin]);
429 mcTriggerAxis->SetBinLabel(ibin+1,trigName[ibin]);
439 TH1F* h1 =
new TH1F(
"hResTrigX11",
"Residual X11;X11_{reco} - X11_{MC} (cm)", 100, -10., 10.);
441 h1 =
new TH1F(
"hResTrigY11",
"Residual Y11;Y11_{reco} - Y11_{MC} (cm)", 100, -10., 10.);
443 h1 =
new TH1F(
"hResTrigSlopeY",
"Residual slope y;ySlope_{reco} - ySlope_{MC} (rad)", 100, -0.1, 0.1);
452 const Int_t deltaPAtVtxNBins = 250;
454 deltaPAtVtxEdges[0] = -20. - 0.05 *
fPRange[1];
455 deltaPAtVtxEdges[1] = 5. + 0.05 *
fPRange[1];
457 h1 =
new TH1F(
"hResPAtVtx",
" delta P at vertex;#Delta_{p} (GeV/c)",deltaPAtVtxNBins,deltaPAtVtxEdges[0],deltaPAtVtxEdges[1]);
459 TH2F *h2 =
new TH2F(
"hResPAtVtxVsP",
"#Delta_{p} at vertex versus p;p (GeV/c);#Delta_{p} (GeV/c)",2*
fNPBins,
fPRange[0],
fPRange[1],deltaPAtVtxNBins,deltaPAtVtxEdges[0],deltaPAtVtxEdges[1]);
461 h2 =
new TH2F(
"hResPAtVtxVsPIn23deg",
"#Delta_{p} at vertex versus p for tracks between 2 and 3 degrees at absorber end;p (GeV/c);#Delta_{p} (GeV/c)",2*
fNPBins,
fPRange[0],
fPRange[1],deltaPAtVtxNBins,deltaPAtVtxEdges[0],deltaPAtVtxEdges[1]);
463 h2 =
new TH2F(
"hResPAtVtxVsPIn310deg",
"#Delta_{p} at vertex versus p for tracks between 3 and 10 degrees at absorber end;p (GeV/c);#Delta_{p} (GeV/c)",2*
fNPBins,
fPRange[0],
fPRange[1],deltaPAtVtxNBins,deltaPAtVtxEdges[0],deltaPAtVtxEdges[1]);
465 h2 =
new TH2F(
"hResPAtVtxVsPIn02degMC",
"#Delta_{p} at vertex versus p for tracks with MC angle below 2 degrees;p (GeV/c);#Delta_{p} (GeV/c)",2*
fNPBins,
fPRange[0],
fPRange[1],deltaPAtVtxNBins/10,deltaPAtVtxEdges[0],deltaPAtVtxEdges[1]);
467 h2 =
new TH2F(
"hResPAtVtxVsPosAbsEndIn02degMC",
"#Delta_{p} at vertex versus track position at absorber end for tracks with MC angle < 2 degrees;position (cm);#Delta_{p} (GeV/c)",1000,0.,100.,deltaPAtVtxNBins,deltaPAtVtxEdges[0],deltaPAtVtxEdges[1]);
469 h2 =
new TH2F(
"hResPAtVtxVsPosAbsEndIn23degMC",
"#Delta_{p} at vertex versus track position at absorber end for tracks with MC angle in [2,3[ degrees;position (cm);#Delta_{p} (GeV/c)",1000,0.,100.,deltaPAtVtxNBins,deltaPAtVtxEdges[0],deltaPAtVtxEdges[1]);
471 h2 =
new TH2F(
"hResPAtVtxVsPosAbsEndIn310degMC",
"#Delta_{p} at vertex versus track position at absorber end for tracks with MC angle in [3,10[ degrees;position (cm);#Delta_{p} (GeV/c)",1000,0.,100.,deltaPAtVtxNBins,deltaPAtVtxEdges[0],deltaPAtVtxEdges[1]);
473 h2 =
new TH2F(
"hResPAtVtxVsAngleAtAbsEnd",
"#Delta_{p} at vertex versus track position at absorber end converted to degrees;angle (Deg);#Delta_{p} (GeV/c)",10,0.,10.,deltaPAtVtxNBins,deltaPAtVtxEdges[0],deltaPAtVtxEdges[1]);
475 h2 =
new TH2F(
"hResPAtVtxVsMCAngle",
"#Delta_{p} at vertex versus MC angle;MC angle (Deg);#Delta_{p} (GeV/c)",10,0.,10.,deltaPAtVtxNBins,deltaPAtVtxEdges[0],deltaPAtVtxEdges[1]);
477 TH3F *h3 =
new TH3F(
"hResPAtVtxVsAngleAtAbsEndVsP",
"#Delta_{p} at vertex versus track position at absorber end converted to degrees versus momentum;p (GeV/c);angle (Deg);#Delta_{p} (GeV/c)",2*
fNPBins,
fPRange[0],
fPRange[1],100,0.,10.,deltaPAtVtxNBins,deltaPAtVtxEdges[0],deltaPAtVtxEdges[1]);
481 h2 =
new TH2F(
"hResPtAtVtxVsPt",
"#Delta_{p_{t}} at vertex versus p_{t};p_{t} (GeV/c);#Delta_{p_{t}} (GeV/c)",2*
fNPBins,
fPRange[0]/10.,
fPRange[1]/10.,deltaPAtVtxNBins,deltaPAtVtxEdges[0]/10.,deltaPAtVtxEdges[1]/10.);
485 const Int_t deltaPAtFirstClNBins = 500;
487 deltaPAtFirstClEdges[0] = -5. - 0.05 *
fPRange[1];
488 deltaPAtFirstClEdges[1] = 5. + 0.05 *
fPRange[1];
490 h1 =
new TH1F(
"hResPAt1stCl",
" delta P at first cluster;#Delta_{p} (GeV/c)",deltaPAtFirstClNBins,deltaPAtFirstClEdges[0],deltaPAtFirstClEdges[1]);
492 h2 =
new TH2F(
"hResPAt1stClVsP",
"#Delta_{p} at first cluster versus p;p (GeV/c);#Delta_{p} (GeV/c)",2*
fNPBins,
fPRange[0],
fPRange[1],deltaPAtFirstClNBins,deltaPAtFirstClEdges[0],deltaPAtFirstClEdges[1]);
496 h2 =
new TH2F(
"hResPtAt1stClVsPt",
"#Delta_{p_{t}} at first cluster versus p_{t};p_{t} (GeV/c);#Delta_{p_{t}} (GeV/c)",2*
fNPBins,
fPRange[0]/10.,
fPRange[1]/10.,deltaPAtFirstClNBins,deltaPAtFirstClEdges[0]/10.,deltaPAtFirstClEdges[1]/10.);
500 const Int_t deltaSlopeAtVtxNBins = 500;
501 const Double_t deltaSlopeAtVtxEdges[2] = {-0.05, 0.05};
503 h1 =
new TH1F(
"hResSlopeXAtVtx",
"#Delta_{slope_{X}} at vertex;#Delta_{slope_{X}}", deltaSlopeAtVtxNBins, deltaSlopeAtVtxEdges[0], deltaSlopeAtVtxEdges[1]);
505 h1 =
new TH1F(
"hResSlopeYAtVtx",
"#Delta_{slope_{Y}} at vertex;#Delta_{slope_{Y}}", deltaSlopeAtVtxNBins, deltaSlopeAtVtxEdges[0], deltaSlopeAtVtxEdges[1]);
507 h2 =
new TH2F(
"hResSlopeXAtVtxVsP",
"#Delta_{slope_{X}} at vertex versus p;p (GeV/c);#Delta_{slope_{X}}",2*
fNPBins,
fPRange[0],
fPRange[1], deltaSlopeAtVtxNBins, deltaSlopeAtVtxEdges[0], deltaSlopeAtVtxEdges[1]);
509 h2 =
new TH2F(
"hResSlopeYAtVtxVsP",
"#Delta_{slope_{Y}} at vertex versus p;p (GeV/c);#Delta_{slope_{Y}}",2*
fNPBins,
fPRange[0],
fPRange[1], deltaSlopeAtVtxNBins, deltaSlopeAtVtxEdges[0], deltaSlopeAtVtxEdges[1]);
511 h2 =
new TH2F(
"hResSlopeXAtVtxVsPosAbsEndIn02degMC",
"#Delta_{slope_{X}} at vertex versus track position at absorber end for tracks with MC angle < 2 degrees;position (cm);#Delta_{slope_{X}}",1000,0.,100.,deltaSlopeAtVtxNBins, deltaSlopeAtVtxEdges[0], deltaSlopeAtVtxEdges[1]);
513 h2 =
new TH2F(
"hResSlopeYAtVtxVsPosAbsEndIn02degMC",
"#Delta_{slope_{Y}} at vertex versus track position at absorber end for tracks with MC angle < 2 degrees;position (cm);#Delta_{slope_{Y}}",1000,0.,100.,deltaSlopeAtVtxNBins, deltaSlopeAtVtxEdges[0], deltaSlopeAtVtxEdges[1]);
515 h2 =
new TH2F(
"hResSlopeXAtVtxVsPosAbsEndIn23degMC",
"#Delta_{slope_{X}} at vertex versus track position at absorber end for tracks with MC angle in [2,3[ degrees;position (cm);#Delta_{slope_{X}}",1000,0.,100.,deltaSlopeAtVtxNBins, deltaSlopeAtVtxEdges[0], deltaSlopeAtVtxEdges[1]);
517 h2 =
new TH2F(
"hResSlopeYAtVtxVsPosAbsEndIn23degMC",
"#Delta_{slope_{Y}} at vertex versus track position at absorber end for tracks with MC angle in [2,3[ degrees;position (cm);#Delta_{slope_{Y}}",1000,0.,100.,deltaSlopeAtVtxNBins, deltaSlopeAtVtxEdges[0], deltaSlopeAtVtxEdges[1]);
519 h2 =
new TH2F(
"hResSlopeXAtVtxVsPosAbsEndIn310degMC",
"#Delta_{slope_{X}} at vertex versus track position at absorber end for tracks with MC angle in [3,10[ degrees;position (cm);#Delta_{slope_{X}}",1000,0.,100.,deltaSlopeAtVtxNBins, deltaSlopeAtVtxEdges[0], deltaSlopeAtVtxEdges[1]);
521 h2 =
new TH2F(
"hResSlopeYAtVtxVsPosAbsEndIn310degMC",
"#Delta_{slope_{Y}} at vertex versus track position at absorber end for tracks with MC angle in [3,10[ degrees;position (cm);#Delta_{slope_{Y}}",1000,0.,100.,deltaSlopeAtVtxNBins, deltaSlopeAtVtxEdges[0], deltaSlopeAtVtxEdges[1]);
523 h2 =
new TH2F(
"hResSlopeXAtVtxVsAngleAtAbsEnd",
"#Delta_{slope_{X}} at vertex versus track position at absorber end converted to degrees;angle (Deg);#Delta_{slope_{X}}",10,0.,10.,deltaSlopeAtVtxNBins, deltaSlopeAtVtxEdges[0], deltaSlopeAtVtxEdges[1]);
525 h2 =
new TH2F(
"hResSlopeYAtVtxVsAngleAtAbsEnd",
"#Delta_{slope_{Y}} at vertex versus track position at absorber end converted to degrees;angle (Deg);#Delta_{slope_{Y}}",10,0.,10.,deltaSlopeAtVtxNBins, deltaSlopeAtVtxEdges[0], deltaSlopeAtVtxEdges[1]);
527 h2 =
new TH2F(
"hResSlopeXAtVtxVsMCAngle",
"#Delta_{slope_{X}} at vertex versus MC angle;MC angle (Deg);#Delta_{slope_{X}}",10,0.,10.,deltaSlopeAtVtxNBins, deltaSlopeAtVtxEdges[0], deltaSlopeAtVtxEdges[1]);
529 h2 =
new TH2F(
"hResSlopeYAtVtxVsMCAngle",
"#Delta_{slope_{Y}} at vertex versus MC angle;MC angle (Deg);#Delta_{slope_{Y}}",10,0.,10.,deltaSlopeAtVtxNBins, deltaSlopeAtVtxEdges[0], deltaSlopeAtVtxEdges[1]);
533 const Int_t deltaSlopeAtFirstClNBins = 500;
534 const Double_t deltaSlopeAtFirstClEdges[2] = {-0.01, 0.01};
536 h1 =
new TH1F(
"hResSlopeXAt1stCl",
"#Delta_{slope_{X}} at first cluster;#Delta_{slope_{X}}", deltaSlopeAtFirstClNBins, deltaSlopeAtFirstClEdges[0], deltaSlopeAtFirstClEdges[1]);
538 h1 =
new TH1F(
"hResSlopeYAt1stCl",
"#Delta_{slope_{Y}} at first cluster;#Delta_{slope_{Y}}", deltaSlopeAtFirstClNBins, deltaSlopeAtFirstClEdges[0], deltaSlopeAtFirstClEdges[1]);
540 h2 =
new TH2F(
"hResSlopeXAt1stClVsP",
"#Delta_{slope_{X}} at first cluster versus p;p (GeV/c);#Delta_{slope_{X}}",2*
fNPBins,
fPRange[0],
fPRange[1], deltaSlopeAtFirstClNBins, deltaSlopeAtFirstClEdges[0], deltaSlopeAtFirstClEdges[1]);
542 h2 =
new TH2F(
"hResSlopeYAt1stClVsP",
"#Delta_{slope_{Y}} at first cluster versus p;p (GeV/c);#Delta_{slope_{Y}}",2*
fNPBins,
fPRange[0],
fPRange[1], deltaSlopeAtFirstClNBins, deltaSlopeAtFirstClEdges[0], deltaSlopeAtFirstClEdges[1]);
546 const Int_t deltaEtaAtVtxNBins = 500;
547 const Double_t deltaEtaAtVtxEdges[2] = {-0.5, 0.5};
549 h1 =
new TH1F(
"hResEtaAtVtx",
"#Delta_{eta} at vertex;#Delta_{eta}", deltaEtaAtVtxNBins, deltaEtaAtVtxEdges[0], deltaEtaAtVtxEdges[1]);
551 h2 =
new TH2F(
"hResEtaAtVtxVsP",
"#Delta_{eta} at vertex versus p;p (GeV/c);#Delta_{eta}",2*
fNPBins,
fPRange[0],
fPRange[1], deltaEtaAtVtxNBins, deltaEtaAtVtxEdges[0], deltaEtaAtVtxEdges[1]);
553 h2 =
new TH2F(
"hResEtaAtVtxVsPosAbsEndIn02degMC",
"#Delta_{eta} at vertex versus track position at absorber end for tracks with MC angle < 2 degrees;position (cm);#Delta_{eta}",1000,0.,100.,deltaEtaAtVtxNBins, deltaEtaAtVtxEdges[0], deltaEtaAtVtxEdges[1]);
555 h2 =
new TH2F(
"hResEtaAtVtxVsPosAbsEndIn23degMC",
"#Delta_{eta} at vertex versus track position at absorber end for tracks with MC angle in [2,3[ degrees;position (cm);#Delta_{eta}",1000,0.,100.,deltaEtaAtVtxNBins, deltaEtaAtVtxEdges[0], deltaEtaAtVtxEdges[1]);
557 h2 =
new TH2F(
"hResEtaAtVtxVsPosAbsEndIn310degMC",
"#Delta_{eta} at vertex versus track position at absorber end for tracks with MC angle in [3,10[ degrees;position (cm);#Delta_{eta}",1000,0.,100.,deltaEtaAtVtxNBins, deltaEtaAtVtxEdges[0], deltaEtaAtVtxEdges[1]);
559 h2 =
new TH2F(
"hResEtaAtVtxVsAngleAtAbsEnd",
"#Delta_{eta} at vertex versus track position at absorber end converted to degrees;angle (Deg);#Delta_{eta}",10,0.,10.,deltaEtaAtVtxNBins, deltaEtaAtVtxEdges[0], deltaEtaAtVtxEdges[1]);
561 h2 =
new TH2F(
"hResEtaAtVtxVsMCAngle",
"#Delta_{eta} at vertex versus MC angle;MC angle (Deg);#Delta_{eta}",10,0.,10.,deltaEtaAtVtxNBins, deltaEtaAtVtxEdges[0], deltaEtaAtVtxEdges[1]);
565 const Int_t deltaPhiAtVtxNBins = 500;
566 const Double_t deltaPhiAtVtxEdges[2] = {-0.5, 0.5};
568 h1 =
new TH1F(
"hResPhiAtVtx",
"#Delta_{phi} at vertex;#Delta_{phi}", deltaPhiAtVtxNBins, deltaPhiAtVtxEdges[0], deltaPhiAtVtxEdges[1]);
570 h2 =
new TH2F(
"hResPhiAtVtxVsP",
"#Delta_{phi} at vertex versus p;p (GeV/c);#Delta_{phi}",2*
fNPBins,
fPRange[0],
fPRange[1], deltaPhiAtVtxNBins, deltaPhiAtVtxEdges[0], deltaPhiAtVtxEdges[1]);
572 h2 =
new TH2F(
"hResPhiAtVtxVsPosAbsEndIn02degMC",
"#Delta_{phi} at vertex versus track position at absorber end for tracks with MC angle < 2 degrees;position (cm);#Delta_{phi}",1000,0.,100.,deltaPhiAtVtxNBins, deltaPhiAtVtxEdges[0], deltaPhiAtVtxEdges[1]);
574 h2 =
new TH2F(
"hResPhiAtVtxVsPosAbsEndIn23degMC",
"#Delta_{phi} at vertex versus track position at absorber end for tracks with MC angle in [2,3[ degrees;position (cm);#Delta_{phi}",1000,0.,100.,deltaPhiAtVtxNBins, deltaPhiAtVtxEdges[0], deltaPhiAtVtxEdges[1]);
576 h2 =
new TH2F(
"hResPhiAtVtxVsPosAbsEndIn310degMC",
"#Delta_{phi} at vertex versus track position at absorber end for tracks with MC angle in [3,10[ degrees;position (cm);#Delta_{phi}",1000,0.,100.,deltaPhiAtVtxNBins, deltaPhiAtVtxEdges[0], deltaPhiAtVtxEdges[1]);
578 h2 =
new TH2F(
"hResPhiAtVtxVsAngleAtAbsEnd",
"#Delta_{phi} at vertex versus track position at absorber end converted to degrees;angle (Deg);#Delta_{phi}",10,0.,10.,deltaPhiAtVtxNBins, deltaPhiAtVtxEdges[0], deltaPhiAtVtxEdges[1]);
580 h2 =
new TH2F(
"hResPhiAtVtxVsMCAngle",
"#Delta_{phi} at vertex versus MC angle;MC angle (Deg);#Delta_{phi}",10,0.,10.,deltaPhiAtVtxNBins, deltaPhiAtVtxEdges[0], deltaPhiAtVtxEdges[1]);
584 const Int_t deltaPDCANBins = 500;
585 const Double_t deltaPDCAEdges[2] = {0., 1000.};
586 const Double_t deltaPMCSAngEdges[2] = {-1.5, 1.5};
588 h1 =
new TH1F(
"hPDCA",
"p #times DCA at vertex;p #times DCA (GeV #times cm)", deltaPDCANBins, deltaPDCAEdges[0], deltaPDCAEdges[1]);
590 h2 =
new TH2F(
"hPDCAVsPIn23deg",
"p #times DCA versus p for tracks within [2,3[ degrees at absorber end;p (GeV/c);p #times DCA (GeV #times cm)",2*
fNPBins,
fPRange[0],
fPRange[1], deltaPDCANBins, deltaPDCAEdges[0], deltaPDCAEdges[1]);
592 h2 =
new TH2F(
"hPDCAVsPIn310deg",
"p #times DCA versus p for tracks within [3,10[ degrees at absorber end;p (GeV/c);p #times DCA (GeV #times cm)",2*
fNPBins,
fPRange[0],
fPRange[1], deltaPDCANBins, deltaPDCAEdges[0], deltaPDCAEdges[1]);
594 h2 =
new TH2F(
"hPDCAVsPosAbsEndIn02degMC",
"p #times DCA versus track position at absorber end for tracks with MC angle < 2 degrees;position (cm);p #times DCA (GeV #times cm)",1000,0.,100.,deltaPDCANBins, deltaPDCAEdges[0], deltaPDCAEdges[1]);
596 h2 =
new TH2F(
"hPDCAVsPosAbsEndIn23degMC",
"p #times DCA}versus track position at absorber end for tracks with MC angle in [2,3[ degrees;position (cm);p #times DCA (GeV #times cm)",1000,0.,100.,deltaPDCANBins, deltaPDCAEdges[0], deltaPDCAEdges[1]);
598 h2 =
new TH2F(
"hPDCAVsPosAbsEndIn310degMC",
"p #times DCA versus track position at absorber end for tracks with MC angle in [3,10[ degrees;position (cm);p #times DCA (GeV #times cm)",1000,0.,100.,deltaPDCANBins, deltaPDCAEdges[0], deltaPDCAEdges[1]);
600 h2 =
new TH2F(
"hPDCAVsAngleAtAbsEnd",
"p #times DCA versus track position at absorber end converted to degrees;angle (Deg);p #times DCA (GeV #times cm)",10,0.,10.,deltaPDCANBins, deltaPDCAEdges[0], deltaPDCAEdges[1]);
602 h2 =
new TH2F(
"hPDCAVsMCAngle",
"p #times DCA versus MC angle;MC angle (Deg);p #times DCA (GeV #times cm)",10,0.,10.,deltaPDCANBins, deltaPDCAEdges[0], deltaPDCAEdges[1]);
606 h2 =
new TH2F(
"hPMCSAngVsPIn23deg",
"p #times #Delta#theta_{MCS} versus p for tracks within [2,3[ degrees at absorber end;p (GeV/c);p #times #Delta#theta_{MCS} (GeV)",2*
fNPBins,
fPRange[0],
fPRange[1], deltaPDCANBins, deltaPMCSAngEdges[0], deltaPMCSAngEdges[1]);
608 h2 =
new TH2F(
"hPMCSAngVsPIn310deg",
"p #times #Delta#theta_{MCS} versus p for tracks within [2,3[ degrees at absorber end;p (GeV/c);p #times #Delta#theta_{MCS} (GeV)",2*
fNPBins,
fPRange[0],
fPRange[1], deltaPDCANBins, deltaPMCSAngEdges[0], deltaPMCSAngEdges[1]);
612 Int_t nCh = AliMUONConstants::NTrackingCh();
613 const Int_t clusterResNBins = 5000;
617 h2 =
new TH2F(
"hResClXVsCh",
"cluster-track residual-X distribution per chamber;chamber ID;#Delta_{X} (cm)", nCh, 0.5, nCh+0.5, clusterResNBins, -clusterResMaxX, clusterResMaxX);
619 h2 =
new TH2F(
"hResClYVsCh",
"cluster-track residual-Y distribution per chamber;chamber ID;#Delta_{Y} (cm)", nCh, 0.5, nCh+0.5, clusterResNBins, -clusterResMaxY, clusterResMaxY);
621 h2 =
new TH2F(
"hResClXVsDE",
"cluster-track residual-X distribution per DE;DE ID;#Delta_{X} (cm)",
fNDE, 0.5,
fNDE+0.5, clusterResNBins, -clusterResMaxX, clusterResMaxX);
622 for (
Int_t i = 1; i <=
fNDE; i++) h2->GetXaxis()->SetBinLabel(i, Form(
"%d",
fDEIds[i]));
624 h2 =
new TH2F(
"hResClYVsDE",
"cluster-track residual-Y distribution per DE;DE ID;#Delta_{Y} (cm)",
fNDE, 0.5,
fNDE+0.5, clusterResNBins, -clusterResMaxY, clusterResMaxY);
625 for (
Int_t i = 1; i <=
fNDE; i++) h2->GetXaxis()->SetBinLabel(i, Form(
"%d",
fDEIds[i]));
629 AliLog::SetClassDebugLevel(
"AliMCEvent",-1);
650 AliError (
"ESD event not found. Nothing done!");
655 AliMCEventHandler* mcH =
static_cast<AliMCEventHandler*
>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
657 AliError (
"MCH event handler not found. Nothing done!");
662 AliMultSelection *multSelection =
static_cast<AliMultSelection*
>(esd->FindListObject(
"MultSelection"));
663 Double_t centrality = multSelection ? multSelection->GetMultiplicityPercentile(
"V0M") : -1.;
666 AliMUONRecoCheck rc(esd,mcH);
667 AliMUONVTriggerTrackStore* triggerTrackRefStore = rc.TriggerableTracks(-1);
668 AliMUONVTrackStore* trackRefStore = rc.TrackRefs(-1);
673 AliMUONTrackParam *trackParam;
674 Double_t x1,y1,z1,slopex1,slopey1,pX1,pY1,pZ1,p1,pT1,eta1,phi1;
675 Double_t x2,y2,z2,slopex2,slopey2,pX2,pY2,pZ2,p2,pT2,eta2,phi2;
677 Double_t xAbs,yAbs,dAbs,aAbs,aMCS,aMC;
681 AliESDMuonTrack *esdTrack = 0x0;
682 Int_t nMuTracks = esd->GetNumberOfMuonTracks();
684 Int_t nTrgTracks = 0;
685 for (
Int_t iMuTrack = 0; iMuTrack < nMuTracks; ++iMuTrack) {
687 esdTrack = esd->GetMuonTrack(iMuTrack);
690 AliMUONTrack* matchedTrackRef = 0x0;
693 if (esdTrack->ContainTrackerData()) {
696 AliMUONTrack muonTrack;
697 AliMUONESDInterface::ESDToMUON(*esdTrack, muonTrack, kFALSE);
703 Int_t mcLabel = esdTrack->GetLabel();
704 if (mcLabel >= 0 && !esdTrack->TestBit(BIT(22)))
705 matchedTrackRef = static_cast<AliMUONTrack*>(trackRefStore->FindObject(mcLabel));
709 if (matchedTrackRef && !esdTrack->TestBit(BIT(23))) {
712 trackParam = matchedTrackRef->GetTrackParamAtVertex();
713 x1 = trackParam->GetNonBendingCoor();
714 y1 = trackParam->GetBendingCoor();
715 z1 = trackParam->GetZ();
716 slopex1 = trackParam->GetNonBendingSlope();
717 slopey1 = trackParam->GetBendingSlope();
718 pX1 = trackParam->Px();
719 pY1 = trackParam->Py();
720 pZ1 = trackParam->Pz();
721 p1 = trackParam->P();
722 pT1 = TMath::Sqrt(pX1*pX1 + pY1*pY1);
723 aMC = TMath::ATan(-pT1/pZ1) * TMath::RadToDeg();
724 eta1 = TMath::Log(TMath::Tan(0.5*TMath::ATan(-pT1/pZ1)));
725 phi1 = TMath::Pi()+TMath::ATan2(-pY1, -pX1);
728 AliMUONTrackParam trackParamAtAbsEnd(*((AliMUONTrackParam*)muonTrack.GetTrackParamAtCluster()->First()));
729 AliMUONTrackExtrap::ExtrapToZ(&trackParamAtAbsEnd, AliMUONConstants::AbsZEnd());
730 xAbs = trackParamAtAbsEnd.GetNonBendingCoor();
731 yAbs = trackParamAtAbsEnd.GetBendingCoor();
732 dAbs = TMath::Sqrt(xAbs*xAbs + yAbs*yAbs);
733 aAbs = TMath::ATan(-dAbs/AliMUONConstants::AbsZEnd()) * TMath::RadToDeg();
734 pX2 = trackParamAtAbsEnd.Px();
735 pY2 = trackParamAtAbsEnd.Py();
736 pZ2 = trackParamAtAbsEnd.Pz();
737 pT2 = TMath::Sqrt(pX2*pX2 + pY2*pY2);
738 aMCS = TMath::ATan(-pT2/pZ2) * TMath::RadToDeg();
741 trackParam = muonTrack.GetTrackParamAtVertex();
742 x2 = trackParam->GetNonBendingCoor();
743 y2 = trackParam->GetBendingCoor();
744 z2 = trackParam->GetZ();
745 slopex2 = trackParam->GetNonBendingSlope();
746 slopey2 = trackParam->GetBendingSlope();
747 pX2 = trackParam->Px();
748 pY2 = trackParam->Py();
749 pZ2 = trackParam->Pz();
750 p2 = trackParam->P();
751 pT2 = TMath::Sqrt(pX2*pX2 + pY2*pY2);
752 eta2 = TMath::Log(TMath::Tan(0.5*TMath::ATan(-pT2/pZ2)));
753 phi2 = TMath::Pi()+TMath::ATan2(-pY2, -pX2);
756 AliMUONTrackParam trackParamAtDCA(*((AliMUONTrackParam*) muonTrack.GetTrackParamAtCluster()->First()));
757 pU = trackParamAtDCA.P();
758 AliMUONTrackExtrap::ExtrapToVertexWithoutBranson(&trackParamAtDCA, z2);
759 xDCA = trackParamAtDCA.GetNonBendingCoor();
760 yDCA = trackParamAtDCA.GetBendingCoor();
761 dca = TMath::Sqrt(xDCA*xDCA + yDCA*yDCA);
764 if (dPhi < -TMath::Pi()) dPhi += 2.*TMath::Pi();
765 else if (dPhi > TMath::Pi()) dPhi -= 2.*TMath::Pi();
798 if (aAbs > 2. && aAbs < 3.) {
804 }
else if (aAbs >= 3. && aAbs < 10.) {
822 }
else if (aMC >= 2. && aMC < 3) {
831 }
else if (aMC >= 3. && aMC < 10.) {
843 trackParam = (AliMUONTrackParam*) matchedTrackRef->GetTrackParamAtCluster()->First();
844 x1 = trackParam->GetNonBendingCoor();
845 y1 = trackParam->GetBendingCoor();
846 z1 = trackParam->GetZ();
847 slopex1 = trackParam->GetNonBendingSlope();
848 slopey1 = trackParam->GetBendingSlope();
849 pX1 = trackParam->Px();
850 pY1 = trackParam->Py();
851 pZ1 = trackParam->Pz();
852 p1 = trackParam->P();
853 pT1 = TMath::Sqrt(pX1*pX1 + pY1*pY1);
856 trackParam = (AliMUONTrackParam*) muonTrack.GetTrackParamAtCluster()->First();
857 x2 = trackParam->GetNonBendingCoor();
858 y2 = trackParam->GetBendingCoor();
859 z2 = trackParam->GetZ();
860 slopex2 = trackParam->GetNonBendingSlope();
861 slopey2 = trackParam->GetBendingSlope();
862 pX2 = trackParam->Px();
863 pY2 = trackParam->Py();
864 pZ2 = trackParam->Pz();
865 p2 = trackParam->P();
866 pT2 = TMath::Sqrt(pX2*pX2 + pY2*pY2);
878 for (
Int_t iCl1 = 0; iCl1 < muonTrack.GetNClusters(); iCl1++) {
880 AliMUONVCluster* cluster1 =
static_cast<AliMUONTrackParam*
>(muonTrack.GetTrackParamAtCluster()->UncheckedAt(iCl1))->GetClusterPtr();
881 Int_t chId = cluster1->GetChamberId();
882 Int_t deId = cluster1->GetDetElemId();
884 for (
Int_t iCl2 = 0; iCl2 < matchedTrackRef->GetNClusters(); iCl2++) {
886 AliMUONVCluster* cluster2 =
static_cast<AliMUONTrackParam*
>(matchedTrackRef->GetTrackParamAtCluster()->UncheckedAt(iCl2))->GetClusterPtr();
888 if (cluster2->GetDetElemId() == deId) {
909 AliMUONTriggerTrack* triggerTrackRef = (isValid && matchedTrackRef)
910 ? static_cast<AliMUONTriggerTrack*>(triggerTrackRefStore->FindObject(matchedTrackRef->GetUniqueID()))
914 AliMUONTriggerTrack* matchedTrigTrackRef = 0x0;
916 if (esdTrack->ContainTriggerData()) {
919 Bool_t trackExist = kFALSE;
920 for (
Int_t i=0; i<nTrgTracks; i++)
if (esdTrack->LoCircuit() == loCircuit[i]) trackExist = kTRUE;
922 else loCircuit[nTrgTracks++] = esdTrack->LoCircuit();
925 AliMUONLocalTrigger locTrg;
926 AliMUONESDInterface::ESDToMUON(*esdTrack, locTrg);
927 AliMUONTriggerTrack trigTrack;
928 rc.TriggerToTrack(locTrg, trigTrack);
931 if (triggerTrackRef && trigTrack.Match(*triggerTrackRef,
fSigmaCutTrig)) matchedTrigTrackRef = triggerTrackRef;
934 matchedTrigTrackRef = rc.FindCompatibleTrack(trigTrack, *triggerTrackRefStore,
fSigmaCutTrig);
935 if (matchedTrigTrackRef) {
936 if (isValid && matchedTrackRef) {
941 triggerTrackRef = matchedTrigTrackRef;
947 if (matchedTrigTrackRef) {
956 if (triggerTrackRef) {
958 else if (triggerTrackRef->GetPtCutLevel() == 1) containerInput[
kVarMCTrigger] = static_cast<Double_t>(
kAllPtTrig);
959 else if (triggerTrackRef->GetPtCutLevel() == 2) containerInput[
kVarMCTrigger] = static_cast<Double_t>(
kLowPtTrig);
965 if (isValid && matchedTrackRef) mcID =
static_cast<Int_t>(matchedTrackRef->GetUniqueID());
966 else if (matchedTrigTrackRef) mcID =
static_cast<Int_t>(matchedTrigTrackRef->GetUniqueID());
979 AliMUONTrack* trackRef = 0x0;
980 TIter next(reconstructibleStore->CreateIterator());
981 while ((trackRef = static_cast<AliMUONTrack*>(next()))) {
984 UInt_t mcID = trackRef->GetUniqueID();
985 AliMUONTriggerTrack* trigTrackRef =
static_cast<AliMUONTriggerTrack*
>(triggerTrackRefStore->FindObject(mcID));
988 FillContainerInfoMC(containerInput, static_cast<AliMCParticle*>(fMCEvent->GetTrack(static_cast<Int_t>(mcID))));
991 if (trigTrackRef->GetPtCutLevel() == 0) containerInput[
kVarTrigger] = static_cast<Double_t>(
kOtherTrig);
992 else if (trigTrackRef->GetPtCutLevel() == 1) containerInput[
kVarTrigger] = static_cast<Double_t>(
kAllPtTrig);
993 else if (trigTrackRef->GetPtCutLevel() == 2) containerInput[
kVarTrigger] = static_cast<Double_t>(
kLowPtTrig);
994 else if (trigTrackRef->GetPtCutLevel() == 3) containerInput[
kVarTrigger] = static_cast<Double_t>(
kHighPtTrig);
1003 AliMUONTriggerTrack* trigTrackRef = 0x0;
1004 TIter nextTrig(triggerTrackRefStore->CreateIterator());
1005 while ((trigTrackRef = static_cast<AliMUONTriggerTrack*>(nextTrig()))) {
1008 UInt_t mcID = trigTrackRef->GetUniqueID();
1009 if (reconstructibleStore->FindObject(mcID))
continue;
1012 FillContainerInfoMC(containerInput, static_cast<AliMCParticle*>(fMCEvent->GetTrack(static_cast<Int_t>(mcID))));
1014 if (trigTrackRef->GetPtCutLevel() == 0) containerInput[
kVarTrigger] = static_cast<Double_t>(
kOtherTrig);
1015 else if (trigTrackRef->GetPtCutLevel() == 1) containerInput[
kVarTrigger] = static_cast<Double_t>(
kAllPtTrig);
1016 else if (trigTrackRef->GetPtCutLevel() == 2) containerInput[
kVarTrigger] = static_cast<Double_t>(
kLowPtTrig);
1017 else if (trigTrackRef->GetPtCutLevel() == 3) containerInput[
kVarTrigger] = static_cast<Double_t>(
kHighPtTrig);
1041 fCFContainer =
dynamic_cast<AliCFContainer*
>(GetOutputData(1));
1045 AliWarning(
"Output containers not found: summary histograms are not created");
1054 effAnyPt->SetName(
"effAnyPt");
1055 effAnyPt->SetOwner();
1059 effAllPt->SetName(
"effAllPt");
1060 effAllPt->SetOwner();
1064 effLowPt->SetName(
"effLowPt");
1065 effLowPt->SetOwner();
1069 effHighPt->SetName(
"effHighPt");
1070 effHighPt->SetOwner();
1074 notTrgable->SetName(
"notTrgable");
1075 notTrgable->SetOwner();
1079 trgableNoPtOnly->SetName(
"trgableNoPtOnly");
1080 trgableNoPtOnly->SetOwner();
1084 trgableAPtOnly->SetName(
"trgableAPtOnly");
1085 trgableAPtOnly->SetOwner();
1089 trgableLPtOnly->SetName(
"trgableLPtOnly");
1090 trgableLPtOnly->SetOwner();
1094 trgableHPtOnly->SetName(
"trgableHPtOnly");
1095 trgableHPtOnly->SetOwner();
1098 AliCFEffGrid* efficiency =
new AliCFEffGrid(
"eff",
"",*
fCFContainer);
1100 Double_t totalEff = 0., totalEffErr = 0.;
1101 Int_t sumEffBin = 0;
1104 TH1D* effSummary =
new TH1D(
"effSummary",
"Efficiency summary", 1, 0., 0.);
1105 effSummary->GetYaxis()->SetTitle(
"Efficiency");
1113 efficiency->GetNum()->GetAxis(
kVarTrigger)->SetRange();
1114 efficiency->GetDen()->GetAxis(
kVarTrigger)->SetRange();
1115 efficiency->GetNum()->GetAxis(
kVarMatchMC)->SetRange();
1119 effSummary->Fill(
"Tracker_all", totalEff);
1120 effSummary->SetBinError(++sumEffBin, totalEffErr);
1121 printf(
"Tracker efficiency using all reconstructed tracks = %f +- %f\n", totalEff, totalEffErr);
1127 effSummary->Fill(
"Tracker_MCId", totalEff);
1128 effSummary->SetBinError(++sumEffBin, totalEffErr);
1129 printf(
"Tracker efficiency using reconstructed tracks matching MC = %f +- %f\n", totalEff, totalEffErr);
1136 efficiency->GetNum()->GetAxis(
kVarMatchMC)->SetRange();
1139 effSummary->Fill(
"Matched_all", totalEff);
1140 effSummary->SetBinError(++sumEffBin, totalEffErr);
1141 printf(
"Matched efficiency using all reconstructed tracks = %f +- %f\n", totalEff, totalEffErr);
1145 FillEffHistos(efficiency,
"matchedTracksMatchMC", effAnyPt);
1147 effSummary->Fill(
"Matched_MCId", totalEff);
1148 effSummary->SetBinError(++sumEffBin, totalEffErr);
1149 printf(
"Matched efficiency using reconstructed tracks matching MC = %f +- %f\n", totalEff, totalEffErr);
1153 FillEffHistos(efficiency,
"matchedTracksMatchMCAnypt", effAnyPt);
1155 effSummary->Fill(
"Matched_MCIdAnypt", totalEff);
1156 effSummary->SetBinError(++sumEffBin, totalEffErr);
1157 printf(
"Matched efficiency using reconstructed tracks matching MC-anyPt = %f +- %f\n", totalEff, totalEffErr);
1161 FillEffHistos(efficiency,
"matchedTracksMatchMCNoTrig", effAnyPt);
1163 effSummary->Fill(
"Matched_MCIdNoTrig", totalEff);
1164 effSummary->SetBinError(++sumEffBin, totalEffErr);
1165 printf(
"Matched efficiency using reconstructed tracks matching MC-noTrig = %f +- %f\n", totalEff, totalEffErr);
1170 FillEffHistos(efficiency,
"matchedTracksMatchSameMC", effAnyPt);
1172 effSummary->Fill(
"Matched_SameMCId", totalEff);
1173 effSummary->SetBinError(++sumEffBin, totalEffErr);
1174 printf(
"Matched efficiency using reconstructed tracks matching same MC = %f +- %f\n", totalEff, totalEffErr);
1178 FillEffHistos(efficiency,
"matchedTracksMatchDiffMC", effAnyPt);
1180 effSummary->Fill(
"Matched_DiffMCId", totalEff);
1181 effSummary->SetBinError(++sumEffBin, totalEffErr);
1182 printf(
"Matched efficiency using reconstructed tracks matching different MC = %f +- %f\n", totalEff, totalEffErr);
1186 FillEffHistos(efficiency,
"matchedTracksMatchTrkMC", effAnyPt);
1188 effSummary->Fill(
"Matched_TrkMCId", totalEff);
1189 effSummary->SetBinError(++sumEffBin, totalEffErr);
1190 printf(
"Matched efficiency using reconstructed tracks matching tracker MC = %f +- %f\n", totalEff, totalEffErr);
1196 efficiency->GetNum()->GetAxis(
kVarMatchMC)->SetRange();
1199 printf(
"Matched Apt efficiency using all reconstructed tracks = %f +- %f\n", totalEff, totalEffErr);
1203 FillEffHistos(efficiency,
"matchedTracksMatchMC", effAllPt);
1205 printf(
"Matched Apt efficiency using reconstructed tracks matching MC = %f +- %f\n", totalEff, totalEffErr);
1209 FillEffHistos(efficiency,
"matchedTracksMatchMCApt", effAllPt);
1211 printf(
"Matched Apt efficiency using reconstructed tracks matching MC-Apt = %f +- %f\n", totalEff, totalEffErr);
1215 FillEffHistos(efficiency,
"matchedTracksMatchMCOther", effAllPt);
1217 printf(
"Matched Apt efficiency using reconstructed tracks matching MC-other = %f +- %f\n", totalEff, totalEffErr);
1221 FillEffHistos(efficiency,
"matchedTracksMatchMCNoTrig", effAllPt);
1223 printf(
"Matched Apt efficiency using reconstructed tracks matching MC-noTrig = %f +- %f\n", totalEff, totalEffErr);
1228 FillEffHistos(efficiency,
"matchedTracksMatchSameMCApt", effAllPt);
1232 FillEffHistos(efficiency,
"matchedTracksMatchSameMCOther", effAllPt);
1237 FillEffHistos(efficiency,
"matchedTracksMatchDiffMCApt", effAllPt);
1241 FillEffHistos(efficiency,
"matchedTracksMatchDiffMCOther", effAllPt);
1246 FillEffHistos(efficiency,
"matchedTracksMatchTrkMCApt", effAllPt);
1250 FillEffHistos(efficiency,
"matchedTracksMatchTrkMCOther", effAllPt);
1257 efficiency->GetNum()->GetAxis(
kVarMatchMC)->SetRange();
1261 printf(
"Matched Lpt efficiency using all reconstructed tracks = %f +- %f\n", totalEff, totalEffErr);
1265 FillEffHistos(efficiency,
"matchedTracksMatchMC", effLowPt);
1267 printf(
"Matched Lpt efficiency using reconstructed tracks matching MC = %f +- %f\n", totalEff, totalEffErr);
1271 FillEffHistos(efficiency,
"matchedTracksMatchMCLpt", effLowPt);
1273 printf(
"Matched Lpt efficiency using reconstructed tracks matching MC-Lpt = %f +- %f\n", totalEff, totalEffErr);
1277 FillEffHistos(efficiency,
"matchedTracksMatchMCOther", effLowPt);
1279 printf(
"Matched Lpt efficiency using reconstructed tracks matching MC-other = %f +- %f\n", totalEff, totalEffErr);
1283 FillEffHistos(efficiency,
"matchedTracksMatchMCNoTrig", effLowPt);
1285 printf(
"Matched Lpt efficiency using reconstructed tracks matching MC-noTrig = %f +- %f\n", totalEff, totalEffErr);
1290 FillEffHistos(efficiency,
"matchedTracksMatchSameMCLpt", effLowPt);
1294 FillEffHistos(efficiency,
"matchedTracksMatchSameMCOther", effLowPt);
1299 FillEffHistos(efficiency,
"matchedTracksMatchDiffMCLpt", effLowPt);
1303 FillEffHistos(efficiency,
"matchedTracksMatchDiffMCOther", effLowPt);
1308 FillEffHistos(efficiency,
"matchedTracksMatchTrkMCLpt", effLowPt);
1312 FillEffHistos(efficiency,
"matchedTracksMatchTrkMCOther", effLowPt);
1319 efficiency->GetNum()->GetAxis(
kVarMatchMC)->SetRange();
1323 printf(
"Matched Hpt efficiency using all reconstructed tracks = %f +- %f\n", totalEff, totalEffErr);
1327 FillEffHistos(efficiency,
"matchedTracksMatchMC", effHighPt);
1329 printf(
"Matched Hpt efficiency using reconstructed tracks matching MC = %f +- %f\n", totalEff, totalEffErr);
1333 FillEffHistos(efficiency,
"matchedTracksMatchMCHpt", effHighPt);
1335 printf(
"Matched Hpt efficiency using reconstructed tracks matching MC-Hpt = %f +- %f\n", totalEff, totalEffErr);
1339 FillEffHistos(efficiency,
"matchedTracksMatchMCOther", effHighPt);
1341 printf(
"Matched Hpt efficiency using reconstructed tracks matching MC-other = %f +- %f\n", totalEff, totalEffErr);
1345 FillEffHistos(efficiency,
"matchedTracksMatchMCNoTrig", effHighPt);
1347 printf(
"Matched Hpt efficiency using reconstructed tracks matching MC-noTrig = %f +- %f\n", totalEff, totalEffErr);
1352 FillEffHistos(efficiency,
"matchedTracksMatchSameMCHpt", effHighPt);
1356 FillEffHistos(efficiency,
"matchedTracksMatchSameMCOther", effHighPt);
1361 FillEffHistos(efficiency,
"matchedTracksMatchDiffMCHpt", effHighPt);
1365 FillEffHistos(efficiency,
"matchedTracksMatchDiffMCOther", effHighPt);
1370 FillEffHistos(efficiency,
"matchedTracksMatchTrkMCHpt", effHighPt);
1374 FillEffHistos(efficiency,
"matchedTracksMatchTrkMCOther", effHighPt);
1383 efficiency->GetNum()->GetAxis(
kVarMatchMC)->SetRange();
1385 efficiency->GetNum()->SetRangeUser(
kVarDupliTrg, 0., 0.);
1388 effSummary->Fill(
"Trigger_all", totalEff);
1389 effSummary->SetBinError(++sumEffBin, totalEffErr);
1390 printf(
"Trigger efficiency using all reconstructed tracks = %f +- %f\n", totalEff, totalEffErr);
1394 FillEffHistos(efficiency,
"triggerTracksMatchMC", effAnyPt);
1396 effSummary->Fill(
"Trigger_MCId", totalEff);
1397 effSummary->SetBinError(++sumEffBin, totalEffErr);
1398 printf(
"Trigger efficiency using reconstructed tracks matching MC = %f +- %f\n", totalEff, totalEffErr);
1404 efficiency->GetNum()->GetAxis(
kVarMatchMC)->SetRange();
1410 FillEffHistos(efficiency,
"triggerTracksMatchMCApt", effAllPt);
1414 FillEffHistos(efficiency,
"triggerTracksMatchMCOther", effAllPt);
1421 efficiency->GetNum()->GetAxis(
kVarMatchMC)->SetRange();
1428 FillEffHistos(efficiency,
"triggerTracksMatchMCLpt", effLowPt);
1432 FillEffHistos(efficiency,
"triggerTracksMatchMCOther", effLowPt);
1439 efficiency->GetNum()->GetAxis(
kVarMatchMC)->SetRange();
1446 FillEffHistos(efficiency,
"triggerTracksMatchMCHpt", effHighPt);
1450 FillEffHistos(efficiency,
"triggerTracksMatchMCOther", effHighPt);
1457 efficiency->GetNum()->GetAxis(
kVarTrigger)->SetRange();
1461 efficiency->GetNum()->GetAxis(
kVarDupliTrg)->SetRange();
1483 efficiency->GetNum()->GetAxis(
kVarTrigger)->SetRange();
1507 efficiency->GetNum()->GetAxis(
kVarTrigger)->SetRange();
1531 efficiency->GetNum()->GetAxis(
kVarTrigger)->SetRange();
1555 efficiency->GetNum()->GetAxis(
kVarTrigger)->SetRange();
1579 efficiency->GetNum()->GetAxis(
kVarTrigger)->SetRange();
1580 efficiency->GetDen()->GetAxis(
kVarTrigger)->SetRange();
1581 efficiency->GetNum()->GetAxis(
kVarMatchMC)->SetRange();
1583 efficiency->GetNum()->GetAxis(
kVarDupliTrg)->SetRange();
1588 TCanvas* cEffSummary =
new TCanvas(
"cEffSummary",
"Efficiency summary",20,20,310,310);
1589 cEffSummary->SetFillColor(10); cEffSummary->SetHighLightColor(10);
1590 cEffSummary->SetLeftMargin(0.15); cEffSummary->SetBottomMargin(0.15);
1591 effSummary->DrawCopy(
"etext");
1594 TCanvas* cTriggerResolution =
new TCanvas(
"cTriggerResolution",
"Trigger resolution",10,10,310,310);
1595 cTriggerResolution->SetFillColor(10); cTriggerResolution->SetHighLightColor(10);
1596 cTriggerResolution->SetLeftMargin(0.15); cTriggerResolution->SetBottomMargin(0.15);
1597 cTriggerResolution->Divide(2,2);
1598 cTriggerResolution->cd(1);
1600 cTriggerResolution->cd(2);
1602 cTriggerResolution->cd(3);
1611 gMeanResPAtVtxVsP->SetName(
"gMeanResPAtVtxVsP");
1612 gMeanResPAtVtxVsP->SetTitle(
"<#Delta_{p}> at vertex versus p;p (GeV/c);<#Delta_{p}> (GeV/c)");
1615 gMostProbResPAtVtxVsP->SetName(
"gMostProbResPAtVtxVsP");
1616 gMostProbResPAtVtxVsP->SetTitle(
"Most probable #Delta_{p} at vertex versus p;p (GeV/c);Most prob. #Delta_{p} (GeV/c)");
1619 gSigmaResPAtVtxVsP->SetName(
"gSigmaResPAtVtxVsP");
1620 gSigmaResPAtVtxVsP->SetTitle(
"#sigma_{p}/p at vertex versus p;p (GeV/c);#sigma_{p}/p (%)");
1625 FitLandauGausResVsP(h,
"momentum residuals at vertex", gMeanResPAtVtxVsP, gMostProbResPAtVtxVsP, gSigmaResPAtVtxVsP);
1628 Int_t rebinFactorX = TMath::Max(h->GetNbinsX()/
fNPBins, 1);
1629 for (
Int_t i = rebinFactorX; i <= h->GetNbinsX(); i+=rebinFactorX) {
1631 gSigmaResPAtVtxVsP->GetPoint(i/rebinFactorX-1, x, y);
1632 gSigmaResPAtVtxVsP->SetPoint(i/rebinFactorX-1, x, 100.*y/x);
1633 gSigmaResPAtVtxVsP->SetPointEYlow(i/rebinFactorX-1, 100.*gSigmaResPAtVtxVsP->GetErrorYlow(i/rebinFactorX-1)/x);
1634 gSigmaResPAtVtxVsP->SetPointEYhigh(i/rebinFactorX-1, 100.*gSigmaResPAtVtxVsP->GetErrorYhigh(i/rebinFactorX-1)/x);
1643 gMeanResPAt1stClVsP->SetName(
"gMeanResPAt1stClVsP");
1644 gMeanResPAt1stClVsP->SetTitle(
"<#Delta_{p}> at first cluster versus p;p (GeV/c);<#Delta_{p}> (GeV/c)");
1647 gSigmaResPAt1stClVsP->SetName(
"gSigmaResPAt1stClVsP");
1648 gSigmaResPAt1stClVsP->SetTitle(
"#sigma_{p}/p at first cluster versus p;p (GeV/c);#sigma_{p}/p (%)");
1653 FitGausResVsMom(h, 0., 1.,
"momentum residuals at first cluster", gMeanResPAt1stClVsP, gSigmaResPAt1stClVsP);
1656 rebinFactorX = TMath::Max(h->GetNbinsX()/
fNPBins, 1);
1657 for (
Int_t i = rebinFactorX; i <= h->GetNbinsX(); i+=rebinFactorX) {
1659 gSigmaResPAt1stClVsP->GetPoint(i/rebinFactorX-1, x, y);
1660 gSigmaResPAt1stClVsP->SetPoint(i/rebinFactorX-1, x, 100.*y/x);
1661 gSigmaResPAt1stClVsP->SetPointEYlow(i/rebinFactorX-1, 100.*gSigmaResPAt1stClVsP->GetErrorYlow(i/rebinFactorX-1)/x);
1662 gSigmaResPAt1stClVsP->SetPointEYhigh(i/rebinFactorX-1, 100.*gSigmaResPAt1stClVsP->GetErrorYhigh(i/rebinFactorX-1)/x);
1671 gMeanResSlopeXAtVtxVsP->SetName(
"gMeanResSlopeXAtVtxVsP");
1672 gMeanResSlopeXAtVtxVsP->SetTitle(
"<#Delta_{slope_{X}}> at vertex versus p;p (GeV/c);<#Delta_{slope_{X}}>");
1675 gMeanResSlopeYAtVtxVsP->SetName(
"gMeanResSlopeYAtVtxVsP");
1676 gMeanResSlopeYAtVtxVsP->SetTitle(
"<#Delta_{slope_{Y}}> at vertex versus p;p (GeV/c);<#Delta_{slope_{Y}}>");
1679 gSigmaResSlopeXAtVtxVsP->SetName(
"gSigmaResSlopeXAtVtxVsP");
1680 gSigmaResSlopeXAtVtxVsP->SetTitle(
"#sigma_{slope_{X}} at vertex versus p;p (GeV/c);#sigma_{slope_{X}}");
1683 gSigmaResSlopeYAtVtxVsP->SetName(
"gSigmaResSlopeYAtVtxVsP");
1684 gSigmaResSlopeYAtVtxVsP->SetTitle(
"#sigma_{slope_{Y}} at vertex versus p;p (GeV/c);#sigma_{slope_{Y}}");
1689 "slopeX residuals at vertex", gMeanResSlopeXAtVtxVsP, gSigmaResSlopeXAtVtxVsP);
1691 "slopeY residuals at vertex", gMeanResSlopeYAtVtxVsP, gSigmaResSlopeYAtVtxVsP);
1699 gMeanResSlopeXAt1stClVsP->SetName(
"gMeanResSlopeXAt1stClVsP");
1700 gMeanResSlopeXAt1stClVsP->SetTitle(
"<#Delta_{slope_{X}}> at first cluster versus p;p (GeV/c);<#Delta_{slope_{X}}>");
1703 gMeanResSlopeYAt1stClVsP->SetName(
"gMeanResSlopeYAt1stClVsP");
1704 gMeanResSlopeYAt1stClVsP->SetTitle(
"<#Delta_{slope_{Y}}> at first cluster versus p;p (GeV/c);<#Delta_{slope_{Y}}>");
1707 gSigmaResSlopeXAt1stClVsP->SetName(
"gSigmaResSlopeXAt1stClVsP");
1708 gSigmaResSlopeXAt1stClVsP->SetTitle(
"#sigma_{slope_{X}} at first cluster versus p;p (GeV/c);#sigma_{slope_{X}}");
1711 gSigmaResSlopeYAt1stClVsP->SetName(
"gSigmaResSlopeYAt1stClVsP");
1712 gSigmaResSlopeYAt1stClVsP->SetTitle(
"#sigma_{slope_{Y}} at first cluster versus p;p (GeV/c);#sigma_{slope_{Y}}");
1717 "slopeX residuals at first cluster", gMeanResSlopeXAt1stClVsP, gSigmaResSlopeXAt1stClVsP);
1719 "slopeY residuals at first cluster", gMeanResSlopeYAt1stClVsP, gSigmaResSlopeYAt1stClVsP);
1727 gMeanResEtaAtVtxVsP->SetName(
"gMeanResEtaAtVtxVsP");
1728 gMeanResEtaAtVtxVsP->SetTitle(
"<#Delta_{eta}> at vertex versus p;p (GeV/c);<#Delta_{eta}>");
1731 gSigmaResEtaAtVtxVsP->SetName(
"gSigmaResEtaAtVtxVsP");
1732 gSigmaResEtaAtVtxVsP->SetTitle(
"#sigma_{eta} at vertex versus p;p (GeV/c);#sigma_{eta}");
1737 "eta residuals at vertex", gMeanResEtaAtVtxVsP, gSigmaResEtaAtVtxVsP);
1745 gMeanResPhiAtVtxVsP->SetName(
"gMeanResPhiAtVtxVsP");
1746 gMeanResPhiAtVtxVsP->SetTitle(
"<#Delta_{phi}> at vertex versus p;p (GeV/c);<#Delta_{phi}>");
1749 gSigmaResPhiAtVtxVsP->SetName(
"gSigmaResPhiAtVtxVsP");
1750 gSigmaResPhiAtVtxVsP->SetTitle(
"#sigma_{phi} at vertex versus p;p (GeV/c);#sigma_{phi}");
1755 "phi residuals at vertex", gMeanResPhiAtVtxVsP, gSigmaResPhiAtVtxVsP);
1763 gMeanPDCAVsPIn23deg->SetName(
"gMeanPDCAVsPIn23deg");
1764 gMeanPDCAVsPIn23deg->SetTitle(
"<p #times DCA> versus p for tracks within [2,3[ degrees at absorber end;p (GeV/c);<p #times DCA> (GeV #times cm)");
1767 gSigmaPDCAVsPIn23deg->SetName(
"gSigmaPDCAVsPIn23deg");
1768 gSigmaPDCAVsPIn23deg->SetTitle(
"#sigma_{p #times DCA} versus p for tracks within [2,3[ degrees at absorber end;p (GeV/c);#sigma_{p #times DCA} (GeV #times cm)");
1771 gMeanPDCAVsPIn310deg->SetName(
"gMeanPDCAVsPIn310deg");
1772 gMeanPDCAVsPIn310deg->SetTitle(
"<p #times DCA> versus p for tracks within [3,10[ degrees at absorber end;p (GeV/c);<p #times DCA> (GeV #times cm)");
1775 gSigmaPDCAVsPIn310deg->SetName(
"gSigmaPDCAVsPIn310deg");
1776 gSigmaPDCAVsPIn310deg->SetTitle(
"#sigma_{p #times DCA} versus p for tracks within [3,10[ degrees at absorber end;p (GeV/c);#sigma_{p #times DCA} (GeV #times cm)");
1780 gMeanPMCSAngVsPIn23deg->SetName(
"gMeanPMCSAngVsPIn23deg");
1781 gMeanPMCSAngVsPIn23deg->SetTitle(
"<p #times #Delta#theta_{MCS}> versus p for tracks within [2,3[ degrees at absorber end;p (GeV/c);<p #times #Delta#theta_{MCS}> (GeV)");
1784 gSigmaPMCSAngVsPIn23deg->SetName(
"gSigmaPMCSAngVsPIn23deg");
1785 gSigmaPMCSAngVsPIn23deg->SetTitle(
"#sigma_{p #times #Delta#theta_{MCS}} versus p for tracks within [2,3[ degrees at absorber end;p (GeV/c);#sigma_{p #times #Delta#theta_{MCS}} (GeV)");
1788 gMeanPMCSAngVsPIn310deg->SetName(
"gMeanPMCSAngVsPIn310deg");
1789 gMeanPMCSAngVsPIn310deg->SetTitle(
"<p #times #Delta#theta_{MCS}> versus p for tracks within [3,10[ degrees at absorber end;p (GeV/c);<p #times #Delta#theta_{MCS}> (GeV)");
1792 gSigmaPMCSAngVsPIn310deg->SetName(
"gSigmaPMCSAngVsPIn310deg");
1793 gSigmaPMCSAngVsPIn310deg->SetTitle(
"#sigma_{p #times #Delta#theta_{MCS}} versus p for tracks within [3,10[ degrees at absorber end;p (GeV/c);#sigma_{p #times #Delta#theta_{MCS}} (GeV)");
1798 "p*DCA (tracks in [2,3] deg.)", gMeanPDCAVsPIn23deg, gSigmaPDCAVsPIn23deg);
1800 "p*DCA (tracks in [3,10] deg.)", gMeanPDCAVsPIn310deg, gSigmaPDCAVsPIn310deg);
1802 "p*MCSAngle (tracks in [2,3] deg.)", gMeanPMCSAngVsPIn23deg, gSigmaPMCSAngVsPIn23deg);
1804 "p*MCSAngle (tracks in [3,10] deg.)", gMeanPMCSAngVsPIn310deg, gSigmaPMCSAngVsPIn310deg);
1812 gMeanResClXVsCh->SetName(
"gMeanResClXVsCh");
1813 gMeanResClXVsCh->SetTitle(
"cluster-trackRef residual-X per Ch: mean;chamber ID;<#Delta_{X}> (cm)");
1814 gMeanResClXVsCh->SetMarkerStyle(kFullDotLarge);
1817 gMeanResClYVsCh->SetName(
"gMeanResClYVsCh");
1818 gMeanResClYVsCh->SetTitle(
"cluster-trackRef residual-Y per Ch: mean;chamber ID;<#Delta_{Y}> (cm)");
1819 gMeanResClYVsCh->SetMarkerStyle(kFullDotLarge);
1822 gSigmaResClXVsCh->SetName(
"gSigmaResClXVsCh");
1823 gSigmaResClXVsCh->SetTitle(
"cluster-trackRef residual-X per Ch: sigma;chamber ID;#sigma_{X} (cm)");
1824 gSigmaResClXVsCh->SetMarkerStyle(kFullDotLarge);
1827 gSigmaResClYVsCh->SetName(
"gSigmaResClYVsCh");
1828 gSigmaResClYVsCh->SetTitle(
"cluster-trackRef residual-Y per Ch: sigma;chamber ID;#sigma_{Y} (cm)");
1829 gSigmaResClYVsCh->SetMarkerStyle(kFullDotLarge);
1834 gMeanResClXVsDE->SetName(
"gMeanResClXVsDE");
1835 gMeanResClXVsDE->SetTitle(
"cluster-trackRef residual-X per DE: mean;DE ID;<#Delta_{X}> (cm)");
1836 gMeanResClXVsDE->SetMarkerStyle(kFullDotLarge);
1839 gMeanResClYVsDE->SetName(
"gMeanResClYVsDE");
1840 gMeanResClYVsDE->SetTitle(
"cluster-trackRef residual-Y per dE: mean;DE ID;<#Delta_{Y}> (cm)");
1841 gMeanResClYVsDE->SetMarkerStyle(kFullDotLarge);
1844 gSigmaResClXVsDE->SetName(
"gSigmaResClXVsDE");
1845 gSigmaResClXVsDE->SetTitle(
"cluster-trackRef residual-X per DE: sigma;DE ID;#sigma_{X} (cm)");
1846 gSigmaResClXVsDE->SetMarkerStyle(kFullDotLarge);
1849 gSigmaResClYVsDE->SetName(
"gSigmaResClYVsDE");
1850 gSigmaResClYVsDE->SetTitle(
"cluster-trackRef residual-Y per DE: sigma;DE ID;#sigma_{Y} (cm)");
1851 gSigmaResClYVsDE->SetMarkerStyle(kFullDotLarge);
1856 for (
Int_t i = 0; i < AliMUONConstants::NTrackingCh(); i++) {
1858 FitClusterResidual(tmp, i, clusterResPerCh[i][0], gMeanResClXVsCh, gSigmaResClXVsCh);
1861 FitClusterResidual(tmp, i, clusterResPerCh[i][1], gMeanResClYVsCh, gSigmaResClYVsCh);
1869 FitClusterResidual(tmp, i, clusterResPerDE[i][0], gMeanResClXVsDE, gSigmaResClXVsDE);
1872 FitClusterResidual(tmp, i, clusterResPerDE[i][1], gMeanResClYVsDE, gSigmaResClYVsDE);
1878 gMeanResClXVsDE->GetXaxis()->Set(fNDE, 0.5, fNDE+0.5);
1879 gMeanResClYVsDE->GetXaxis()->Set(fNDE, 0.5, fNDE+0.5);
1880 gSigmaResClXVsDE->GetXaxis()->Set(fNDE, 0.5, fNDE+0.5);
1881 gSigmaResClYVsDE->GetXaxis()->Set(fNDE, 0.5, fNDE+0.5);
1883 const char* label = xAxis->GetBinLabel(i);
1884 gMeanResClXVsDE->GetXaxis()->SetBinLabel(i, label);
1885 gMeanResClYVsDE->GetXaxis()->SetBinLabel(i, label);
1886 gSigmaResClXVsDE->GetXaxis()->SetBinLabel(i, label);
1887 gSigmaResClYVsDE->GetXaxis()->SetBinLabel(i, label);
1891 TCanvas* cResPAtVtx =
DrawVsAng(
"cResPAtVtx",
"momentum residual at vertex in 3 angular regions",
1895 TCanvas* cResPAtVtxMC =
DrawVsAng(
"cResPAtVtxMC",
"momentum residual at vertex in 3 MC angular regions",
1899 TCanvas* cResPAtVtxVsPosAbsEndMC =
DrawVsPos(
"cResPAtVtxVsPosAbsEndMC",
"momentum residual at vertex versus position at absorber end in 3 MC angular regions",
1904 TCanvas* cResPAtVtxVsPIn23deg =
DrawFitLandauGausResPVsP(
"cResPAtVtxVsPIn23deg",
"momentum residual for tracks between 2 and 3 degrees",
1906 10,
"momentum residuals at vertex (tracks in [2,3] deg.)");
1908 TCanvas* cResPAtVtxVsPIn310deg =
DrawFitLandauGausResPVsP(
"cResPAtVtxVsPIn310deg",
"momentum residual for tracks between 3 and 10 degrees",
1910 10,
"momentum residuals at vertex (tracks in [3,10] deg.)");
1912 TCanvas* cResPAtVtxVsPIn02degMC =
DrawResPVsP(
"cResPAtVtxVsPIn02degMC",
"momentum residuals for tracks with MC angle < 2 degrees",
1917 TCanvas* cResSlopeXAtVtx =
DrawVsAng(
"cResSlopeXAtVtx",
"slope_{X} residual at vertex in 3 angular regions",
1921 TCanvas* cResSlopeYAtVtx =
DrawVsAng(
"cResSlopeYAtVtx",
"slope_{Y} residual at vertex in 3 angular regions",
1925 TCanvas* cResSlopeXAtVtxMC =
DrawVsAng(
"cResSlopeXAtVtxMC",
"slope_{X} residual at vertex in 3 MC angular regions",
1929 TCanvas* cResSlopeYAtVtxMC =
DrawVsAng(
"cResSlopeYAtVtxMC",
"slope_{Y} residual at vertex in 3 MC angular regions",
1933 TCanvas* cResSlopeXAtVtxVsPosAbsEndMC =
DrawVsPos(
"cResSlopeXAtVtxVsPosAbsEndMC",
"slope_{X} residual at vertex versus position at absorber end in 3 MC angular regions",
1938 TCanvas* cResSlopeYAtVtxVsPosAbsEndMC =
DrawVsPos(
"cResSlopeYAtVtxVsPosAbsEndMC",
"slope_{Y} residual at vertex versus position at absorber end in 3 MC angular regions",
1945 TCanvas* cResEtaAtVtx =
DrawVsAng(
"cResEtaAtVtx",
"eta residual at vertex in 3 angular regions",
1949 TCanvas* cResEtaAtVtxMC =
DrawVsAng(
"cResEtaAtVtxMC",
"eta residual at vertex in 3 MC angular regions",
1953 TCanvas* cResEtaAtVtxVsPosAbsEndMC =
DrawVsPos(
"cResEtaAtVtxVsPosAbsEndMC",
"eta residual at vertex versus position at absorber end in 3 MC angular regions",
1960 TCanvas* cResPhiAtVtx =
DrawVsAng(
"cResPhiAtVtx",
"phi residual at vertex in 3 angular regions",
1964 TCanvas* cResPhiAtVtxMC =
DrawVsAng(
"cResPhiAtVtxMC",
"phi residual at vertex in 3 MC angular regions",
1968 TCanvas* cResPhiAtVtxVsPosAbsEndMC =
DrawVsPos(
"cResPhiAtVtxVsPosAbsEndMC",
"phi residual at vertex versus position at absorber end in 3 MC angular regions",
1975 TCanvas* cPDCA =
DrawVsAng(
"cPDCA",
"p #times DCA in 3 angular regions",
1979 TCanvas* cPDCAMC =
DrawVsAng(
"cPDCAMC",
"p #times DCA in 3 MC angular regions",
1983 TCanvas* cPDCAVsPosAbsEndMC =
DrawVsPos(
"cPDCAVsPosAbsEndMC",
"p #times DCA versus position at absorber end in 3 MC angular regions",
2013 for (
Int_t ihisto=0; ihisto<2; ihisto++ ) {
2014 histo = ( ihisto==0 ) ? efficiency->GetNum()->Project(
kVarCharge) : efficiency->GetDen()->Project(
kVarCharge);
2015 sum[ihisto] = histo->Integral();
2019 if ( sum[1] == 0. ) isGood = kFALSE;
2021 calcEff = ( isGood ) ? sum[0]/sum[1] : 0.;
2022 if ( calcEff > 1. ) isGood = kFALSE;
2024 calcEffErr = ( isGood ) ? TMath::Sqrt(calcEff*(1-calcEff)/sum[1]) : 0.;
2039 Int_t recoPdg = mcParticle->PdgCode();
2042 if ( TMath::Abs(recoPdg) != 13 )
return kRecoHadron;
2044 Int_t imother = mcParticle->GetMother();
2046 Bool_t isFirstMotherHF = kFALSE;
2050 while ( imother >= 0 ) {
2051 TParticle* part =
static_cast<AliMCParticle*
>(fMCEvent->GetTrack(imother))->Particle();
2054 if ( part->GetUniqueID() == kPHadronic )
2057 Int_t absPdg = TMath::Abs(part->GetPdgCode());
2061 isFirstMotherHF = ( ( absPdg >= 400 && absPdg < 600 ) ||
2062 ( absPdg >= 4000 && absPdg < 6000 ) );
2067 if ( isFirstMotherHF) {
2070 else if ( absPdg == 5 )
2074 imother = part->GetFirstMother();
2087 Float_t thetaDeg = ( isTheta ) ? RAtAbsEnd : TMath::ATan( RAtAbsEnd / 505. );
2088 thetaDeg *= TMath::RadToDeg();
2089 if ( thetaDeg < 2. )
2091 else if ( thetaDeg < 3. )
2093 else if ( thetaDeg < 10. )
2107 AliMCParticle* mcPart = (mcID >= 0) ? static_cast<AliMCParticle*>(fMCEvent->GetTrack(mcID)) : 0x0;
2110 containerInput[
kVarPt] = mcPart->Pt();
2111 containerInput[
kVarEta] = mcPart->Eta();
2112 containerInput[
kVarPhi] = mcPart->Phi();
2114 containerInput[
kVarPt] = esdTrack->Pt();
2115 containerInput[
kVarEta] = esdTrack->Eta();
2116 containerInput[
kVarPhi] = esdTrack->Phi();
2122 else if (esdTrack->GetMatchTrigger() == 1) containerInput[
kVarTrigger] = static_cast<Double_t>(
kAllPtTrig);
2123 else if (esdTrack->GetMatchTrigger() == 2) containerInput[
kVarTrigger] = static_cast<Double_t>(
kLowPtTrig);
2124 else if (esdTrack->GetMatchTrigger() == 3) containerInput[
kVarTrigger] = static_cast<Double_t>(
kHighPtTrig);
2136 containerInput[
kVarPt] = mcPart->Pt();
2137 containerInput[
kVarEta] = mcPart->Eta();
2138 containerInput[
kVarPhi] = mcPart->Phi();
2160 Double_t invsq2pi = 0.3989422804014;
2164 Double_t mpc = par[1] - mpshift * par[0];
2167 Double_t xlow = x[0] - 5. * par[3];
2168 Double_t xupp = x[0] + 5. * par[3];
2169 Double_t step = TMath::Min(0.2*par[0],0.1*par[3]);
2175 sum += TMath::Landau(-xx,mpc,par[0]) * TMath::Gaus(x[0],xx,par[3]);
2179 return (par[2] * step * sum * invsq2pi / par[3] / par[0]);
2189 static TF1 *fGaus2 = 0x0;
2190 if (!fGaus2) fGaus2 =
new TF1(
"fGaus2",
"gaus");
2191 static TF1* fLandauGaus = 0x0;
2193 fLandauGaus =
new TF1(
"fLandauGaus",
langaufun,h->GetYaxis()->GetBinLowEdge(1),h->GetYaxis()->GetBinLowEdge(h->GetNbinsY()+1),4);
2194 fLandauGaus->SetNpx(10000);
2197 Int_t rebinFactorX = TMath::Max(h->GetNbinsX()/
fNPBins, 1);
2198 for (
Int_t i = rebinFactorX; i <= h->GetNbinsX(); i+=rebinFactorX) {
2200 cout<<Form(
"\rFitting %s... %d/%d",fitting,i/rebinFactorX,
fNPBins)<<flush;
2202 TH1D *tmp = h->ProjectionY(
"tmp",i-rebinFactorX+1,i,
"e");
2205 fGaus2->SetParameters((
Double_t)tmp->GetEntries(), 0., 1.);
2206 tmp->Fit(
"fGaus2",
"WWNQ");
2210 Int_t rebin =
static_cast<Int_t>(TMath::Min(0.1*tmp->GetNbinsX(),TMath::Max(0.5*sigma/tmp->GetBinWidth(1),1.)));
2211 while (tmp->GetNbinsX()%rebin!=0) rebin--;
2215 Double_t mean = fGaus2->GetParameter(1);
2216 fLandauGaus->SetParameters(0.25*sigma*TMath::Sqrt(8.*log(2.)), mean, tmp->GetEntries()*tmp->GetXaxis()->GetBinWidth(1), 0.5*
sigma);
2217 fLandauGaus->SetParLimits(0, 0.0025*sigma*TMath::Sqrt(8.*log(2.)), 1000.);
2218 fLandauGaus->SetParLimits(3, 0., 2.*sigma);
2219 Double_t xMin = TMath::Max(mean-50.*sigma, tmp->GetXaxis()->GetXmin());
2220 Double_t xMax = TMath::Min(mean+10.*sigma, tmp->GetXaxis()->GetXmax());
2221 if (xMin < tmp->GetXaxis()->GetXmax() && xMax > tmp->GetXaxis()->GetXmin()) fLandauGaus->SetRange(xMin, xMax);
2222 tmp->Fit(
"fLandauGaus",
"RNQ");
2225 Double_t fwhm = 4.*fLandauGaus->GetParameter(0);
2226 sigma = fLandauGaus->GetParameter(3);
2227 Double_t sigmaP = TMath::Sqrt(sigma*sigma + fwhm*fwhm/(8.*log(2.)));
2228 Double_t fwhmErr = fLandauGaus->GetParError(0);
2229 Double_t sigmaErr = fLandauGaus->GetParError(3);
2230 Double_t sigmaPErr = TMath::Sqrt(sigma*sigma*sigmaErr*sigmaErr + fwhm*fwhm*fwhmErr*fwhmErr/(64.*log(2.)*log(2.))) / sigmaP;
2231 h->GetXaxis()->SetRange(i-rebinFactorX+1,i);
2232 Double_t p = (tmp->GetEntries() > 0) ? h->GetMean() : 0.5 * (h->GetXaxis()->GetBinLowEdge(i-rebinFactorX+1) + h->GetXaxis()->GetBinLowEdge(i+1));
2233 h->GetXaxis()->SetRange();
2234 Double_t pErr[2] = {p-h->GetXaxis()->GetBinLowEdge(i-rebinFactorX+1), h->GetXaxis()->GetBinLowEdge(i+1)-p};
2235 gMean->SetPoint(i/rebinFactorX-1, p, tmp->GetMean());
2236 gMean->SetPointError(i/rebinFactorX-1, pErr[0], pErr[1], tmp->GetMeanError(), tmp->GetMeanError());
2237 gMostProb->SetPoint(i/rebinFactorX-1, p, -fLandauGaus->GetParameter(1));
2238 gMostProb->SetPointError(i/rebinFactorX-1, pErr[0], pErr[1], fLandauGaus->GetParError(1), fLandauGaus->GetParError(1));
2239 gSigma->SetPoint(i/rebinFactorX-1, p, sigmaP);
2240 gSigma->SetPointError(i/rebinFactorX-1, pErr[0], pErr[1], sigmaPErr, sigmaPErr);
2246 cout<<Form(
"\rFitting %s... %d/%d",fitting,
fNPBins,
fNPBins)<<endl;
2252 const Double_t sigma0,
const char* fitting,
2257 static TF1* fGaus = 0x0;
2258 if (!fGaus) fGaus =
new TF1(
"fGaus",
"gaus");
2260 Int_t rebinFactorX = TMath::Max(h->GetNbinsX()/
fNPBins, 1);
2261 for (
Int_t i = rebinFactorX; i <= h->GetNbinsX(); i+=rebinFactorX) {
2263 cout<<Form(
"\rFitting %s... %d/%d",fitting,i/rebinFactorX,
fNPBins)<<flush;
2265 TH1D *tmp = h->ProjectionY(
"tmp",i-rebinFactorX+1,i,
"e");
2268 fGaus->SetParameters(tmp->GetEntries(), mean0, sigma0);
2269 tmp->Fit(
"fGaus",
"WWNQ");
2272 Int_t rebin =
static_cast<Int_t>(TMath::Min(0.1*tmp->GetNbinsX(),TMath::Max(0.5*fGaus->GetParameter(2)/tmp->GetBinWidth(1),1.)));
2273 while (tmp->GetNbinsX()%rebin!=0) rebin--;
2277 tmp->Fit(
"fGaus",
"NQ");
2280 h->GetXaxis()->SetRange(i-rebinFactorX+1,i);
2281 Double_t p = (tmp->GetEntries() > 0) ? h->GetMean() : 0.5 * (h->GetXaxis()->GetBinLowEdge(i-rebinFactorX+1) + h->GetXaxis()->GetBinLowEdge(i+1));
2282 h->GetXaxis()->SetRange();
2283 Double_t pErr[2] = {p-h->GetXaxis()->GetBinLowEdge(i-rebinFactorX+1), h->GetXaxis()->GetBinLowEdge(i+1)-p};
2284 gMean->SetPoint(i/rebinFactorX-1, p, fGaus->GetParameter(1));
2285 gMean->SetPointError(i/rebinFactorX-1, pErr[0], pErr[1], fGaus->GetParError(1), fGaus->GetParError(1));
2286 gSigma->SetPoint(i/rebinFactorX-1, p, fGaus->GetParameter(2));
2287 gSigma->SetPointError(i/rebinFactorX-1, pErr[0], pErr[1], fGaus->GetParError(2), fGaus->GetParError(2));
2293 cout<<Form(
"\rFitting %s... %d/%d",fitting,
fNPBins,
fNPBins)<<endl;
2303 static TF1* fPGaus = 0x0;
2304 if (!fPGaus) fPGaus =
new TF1(
"fPGaus",
"x*gaus");
2306 Int_t rebinFactorX = TMath::Max(h->GetNbinsX()/
fNPBins, 1);
2307 for (
Int_t i = rebinFactorX; i <= h->GetNbinsX(); i+=rebinFactorX) {
2309 cout<<Form(
"\rFitting %s... %d/%d",fitting,i/rebinFactorX,
fNPBins)<<flush;
2311 TH1D *tmp = h->ProjectionY(
"tmp",i-rebinFactorX+1,i,
"e");
2314 Int_t rebin =
static_cast<Int_t>(25*(tmp->GetNbinsX()/(tmp->GetBinLowEdge(tmp->GetNbinsX()+1)-tmp->GetBinLowEdge(1))));
2315 while (tmp->GetNbinsX()%rebin!=0) rebin--;
2319 fPGaus->SetParameters(1.,0.,80.);
2320 tmp->Fit(
"fPGaus",
"NQ");
2323 h->GetXaxis()->SetRange(i-rebinFactorX+1,i);
2324 Double_t p = (tmp->GetEntries() > 0) ? h->GetMean() : 0.5 * (h->GetXaxis()->GetBinLowEdge(i-rebinFactorX+1) + h->GetXaxis()->GetBinLowEdge(i+1));
2325 h->GetXaxis()->SetRange();
2326 Double_t pErr[2] = {p-h->GetXaxis()->GetBinLowEdge(i-rebinFactorX+1), h->GetXaxis()->GetBinLowEdge(i+1)-p};
2327 gMean->SetPoint(i/rebinFactorX-1, p, fPGaus->GetParameter(1));
2328 gMean->SetPointError(i/rebinFactorX-1, pErr[0], pErr[1], fPGaus->GetParError(1), fPGaus->GetParError(1));
2329 gSigma->SetPoint(i/rebinFactorX-1, p, fPGaus->GetParameter(2));
2330 gSigma->SetPointError(i/rebinFactorX-1, pErr[0], pErr[1], fPGaus->GetParError(2), fPGaus->GetParError(2));
2336 cout<<Form(
"\rFitting %s... %d/%d",fitting,
fNPBins,
fNPBins)<<endl;
2346 static TF1* fRGaus = 0x0;
2351 if (!fRGaus) fRGaus =
new TF1(
"fRGaus",
"gaus");
2354 Double_t xMin = h->GetXaxis()->GetXmin();
2355 Double_t xMax = h->GetXaxis()->GetXmax();
2356 fRGaus->SetRange(xMin, xMax);
2357 fRGaus->SetParameters(h->GetEntries(), 0., 0.1);
2358 fRGaus->SetParLimits(1, xMin, xMax);
2359 h->Fit(
"fRGaus",
"WWNQ");
2362 Int_t rebin =
static_cast<Int_t>(TMath::Min(0.1*h->GetNbinsX(),TMath::Max(0.3*fRGaus->GetParameter(2)/h->GetBinWidth(1),1.)));
2363 while (h->GetNbinsX()%rebin!=0) rebin--;
2367 xMin = TMath::Max(fRGaus->GetParameter(1)-10.*fRGaus->GetParameter(2), h->GetXaxis()->GetXmin());
2368 xMax = TMath::Min(fRGaus->GetParameter(1)+10.*fRGaus->GetParameter(2), h->GetXaxis()->GetXmax());
2369 fRGaus->SetRange(xMin, xMax);
2370 fRGaus->SetParLimits(1, xMin, xMax);
2371 h->Fit(
"fRGaus",
"NQR");
2373 mean = fRGaus->GetParameter(1);
2374 meanErr = fRGaus->GetParError(1);
2375 sigma = fRGaus->GetParameter(2);
2376 sigmaErr = fRGaus->GetParError(2);
2381 mean = h->GetMean();
2382 meanErr = h->GetMeanError();
2383 sigma = h->GetRMS();
2384 sigmaErr = h->GetRMSError();
2385 h->GetXaxis()->SetRange(0,0);
2389 gMean->SetPoint(i, i+1, mean);
2390 gMean->SetPointError(i, 0., meanErr);
2393 Double_t s = TMath::Sqrt(mean*mean + sigma*sigma);
2394 sigmaErr = (s>0.) ? TMath::Sqrt(sigma*sigma*sigmaErr*sigmaErr + mean*mean*meanErr*meanErr) / s : 0.;
2398 gSigma->SetPoint(i, i+1, sigma);
2399 gSigma->SetPointError(i, 0., sigmaErr);
2407 TCanvas*
c =
new TCanvas(name, title);
2410 TH1D *proj1 = h2->ProjectionY(Form(
"%s_proj_0_2",h2->GetName()),1,2);
2411 proj1->SetLineColor(2);
2412 proj1->Draw(
"sames");
2413 TH1D *proj2 = h2->ProjectionY(Form(
"%s_proj_2_3",h2->GetName()),3,3);
2414 proj2->SetLineColor(4);
2415 proj2->Draw(
"sames");
2416 TH1D *proj3 = h2->ProjectionY(Form(
"%s__proj_3_10",h2->GetName()),4,10);
2417 proj3->SetLineColor(3);
2418 proj3->Draw(
"sames");
2426 TCanvas*
c =
new TCanvas(name, title);
2428 h1->SetMarkerColor(2);
2430 h2->SetMarkerColor(4);
2431 h2->DrawCopy(
"sames");
2432 h3->SetMarkerColor(3);
2433 h3->DrawCopy(
"sames");
2439 TH2* h,
const Int_t nBins,
const char* fitting)
2443 static TF1 *fGaus3 = 0x0;
2444 if (!fGaus3) fGaus3 =
new TF1(
"fGaus3",
"gaus");
2445 static TF1* fLandauGaus2 = 0x0;
2446 if (!fLandauGaus2) {
2447 fLandauGaus2 =
new TF1(
"fLandauGaus2",
langaufun,h->GetYaxis()->GetBinLowEdge(1),h->GetYaxis()->GetBinLowEdge(h->GetNbinsY()+1),4);
2448 fLandauGaus2->SetNpx(10000);
2451 TLegend* l =
new TLegend(0.15,0.25,0.3,0.85);
2452 TCanvas*
c =
new TCanvas(name, title);
2457 Int_t rebinFactorX = TMath::Max(h->GetNbinsX()/nBins, 1);
2458 for (
Int_t i = rebinFactorX; i <= h->GetNbinsX(); i+=rebinFactorX) {
2460 cout<<Form(
"\rFitting %s... %d/%d",fitting,i/rebinFactorX,nBins)<<flush;
2463 TH1D* proj = h->ProjectionY(Form(
"%s_%d",h->GetName(),i/rebinFactorX),i-rebinFactorX+1,i);
2464 if (proj->GetEntries() > 0) proj->Scale(1./proj->GetEntries());
2465 proj->Draw((i==rebinFactorX)?
"hist":
"histsames");
2466 proj->SetLineColor(i/rebinFactorX);
2468 if (proj->GetEntries() > 10) {
2471 fGaus3->SetParameters(1., 0., 1.);
2472 proj->Fit(
"fGaus3",
"WWNQ");
2476 Int_t rebin =
static_cast<Int_t>(TMath::Min(0.1*proj->GetNbinsX(),TMath::Max(0.5*sigma/proj->GetBinWidth(1),1.)));
2477 while (proj->GetNbinsX()%rebin!=0) rebin--;
2479 proj->Scale(1./rebin);
2482 Double_t mean = fGaus3->GetParameter(1);
2483 fLandauGaus2->SetParameters(0.25*sigma*TMath::Sqrt(8.*log(2.)), mean, proj->GetXaxis()->GetBinWidth(1), 0.5*
sigma);
2484 fLandauGaus2->SetParLimits(0, 0.0025*sigma*TMath::Sqrt(8.*log(2.)), 1000.);
2485 fLandauGaus2->SetParLimits(3, 0., 2.*sigma);
2486 Double_t xMin = TMath::Max(mean-50.*sigma, proj->GetXaxis()->GetXmin());
2487 Double_t xMax = TMath::Min(mean+10.*sigma, proj->GetXaxis()->GetXmax());
2488 if (xMin < proj->GetXaxis()->GetXmax() && xMax > proj->GetXaxis()->GetXmin()) fLandauGaus2->SetRange(xMin, xMax);
2489 fLandauGaus2->SetLineColor(i/rebinFactorX);
2490 proj->Fit(
"fLandauGaus2",
"RQ",
"sames");
2495 Double_t p = 0.5 * (h->GetXaxis()->GetBinLowEdge(i-rebinFactorX+1) + h->GetXaxis()->GetBinLowEdge(i+1));
2496 l->AddEntry(proj,Form(
"%5.1f GeV",p));
2500 cout<<Form(
"\rFitting %s... %d/%d",fitting,nBins,nBins)<<endl;
2513 TLegend* l =
new TLegend(0.15,0.25,0.3,0.85);
2514 TCanvas*
c =
new TCanvas(name, title);
2519 Int_t rebinFactorX = TMath::Max(h->GetNbinsX()/nBins, 1);
2520 for (
Int_t i = rebinFactorX; i <= h->GetNbinsX(); i+=rebinFactorX) {
2523 TH1D* proj = h->ProjectionY(Form(
"%s_%d",h->GetName(),i/rebinFactorX),i-rebinFactorX+1,i);
2524 if (proj->GetEntries() > 0) proj->Scale(1./proj->GetEntries());
2525 proj->Draw((i==rebinFactorX)?
"hist":
"histsames");
2526 proj->SetLineColor(i/rebinFactorX);
2527 proj->SetLineWidth(2);
2530 Double_t p = 0.5 * (h->GetXaxis()->GetBinLowEdge(i-rebinFactorX+1) + h->GetXaxis()->GetBinLowEdge(i+1));
2531 l->AddEntry(proj,Form(
"%5.1f GeV",p));
2545 Double_t maxEventsCut = fractionCut * h->GetEntries();
2546 Int_t nBins = h->GetNbinsX();
2551 for (minBin = 1; minBin <= nBins; minBin++) {
2552 eventsCut += h->GetBinContent(minBin);
2553 if (eventsCut > maxEventsCut)
break;
2559 for (maxBin = nBins; maxBin >= 1; maxBin--) {
2560 eventsCut += h->GetBinContent(maxBin);
2561 if (eventsCut > maxEventsCut)
break;
2565 h->GetXaxis()->SetRange(--minBin, ++maxBin);
2573 TH1* auxHisto = efficiency->Project(
kVarPt);
2574 auxHisto->SetName(Form(
"effVsPt_%s",suffix));
2575 list->AddLast(auxHisto);
2577 auxHisto = efficiency->Project(
kVarEta);
2578 auxHisto->SetName(Form(
"effVsEta_%s",suffix));
2579 list->AddLast(auxHisto);
2581 auxHisto = efficiency->Project(
kVarPhi);
2582 auxHisto->SetName(Form(
"effVsPhi_%s",suffix));
2583 list->AddLast(auxHisto);
2585 auxHisto = efficiency->Project(
kVarCent);
2586 auxHisto->SetName(Form(
"effVsCent_%s",suffix));
2587 list->AddLast(auxHisto);
TList * list
TDirectory file where lists per trigger are stored in train ouput.
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
ClassImp(AliAnalysisTaskDeltaPt) AliAnalysisTaskDeltaPt