18 #include <Riostream.h> 26 #include "TObjArray.h" 32 #include "TObjString.h" 35 #include "AliESDEvent.h" 36 #include "AliESDMuonTrack.h" 37 #include "AliESDMuonCluster.h" 38 #include "AliESDInputHandler.h" 39 #include "AliESDVZERO.h" 42 #include "AliAnalysisDataSlot.h" 43 #include "AliAnalysisManager.h" 45 #include "AliCounterCollection.h" 46 #include "AliPhysicsSelection.h" 47 #include "AliTriggerAnalysis.h" 50 #include "AliAnalysisMuonUtility.h" 51 #include "AliMuonEventCuts.h" 52 #include "AliMuonTrackCuts.h" 75 fSelectMatched(kFALSE),
96 fEventCuts(new AliMuonEventCuts(
"stdEventCuts",
"stdEventCuts")),
97 fTrackCuts(new AliMuonTrackCuts(
"stdMuonCuts",
"stdMuonCuts")),
103 DefineOutput(1,TObjArray::Class());
105 DefineOutput(2,TObjArray::Class());
107 DefineOutput(3,AliCounterCollection::Class());
109 DefineOutput(4,AliCounterCollection::Class());
111 DefineOutput(5,TObjArray::Class());
113 fTrackCuts->SetFilterMask(AliMuonTrackCuts::kMuEta | AliMuonTrackCuts::kMuThetaAbs | AliMuonTrackCuts::kMuPdca );
121 if (!AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
147 fTrackCuts =
new AliMuonTrackCuts(*trackCuts);
163 TH1F* hNTracks =
new TH1F(
"hNTracks",
"number of tracks;n_{tracks}", 20, 0., 20.);
166 Int_t muonTrigIndex[] = { AliVEvent::kMuonUnlikePB, AliVEvent::kMuonLikePB, AliVEvent::kMUSHPB, AliVEvent::kMuonUnlikePB | AliVEvent::kMuonLikePB, AliVEvent::kMuonUnlikePB | AliVEvent::kMUSHPB, AliVEvent::kMuonLikePB | AliVEvent::kMUSHPB, AliVEvent::kMuonUnlikePB | AliVEvent::kMuonLikePB | AliVEvent::kMUSHPB};
167 const Int_t nTrigIndexes =
sizeof(muonTrigIndex)/
sizeof(muonTrigIndex[0]);
169 TString label[nTrigIndexes] = {
"Unlike",
"Like",
"Single Hpt",
"Like&Unlike",
"Unlike&Hpt",
"Like&Hpt",
"Unlike&Like&Hpt"};
170 TH1I* hMuonTriggers =
new TH1I(
"hMuonTriggers",
"Muon triggers", nTrigIndexes, -0.5, -0.5+(
Double_t)nTrigIndexes);
171 for(
Int_t ibin=0; ibin<nTrigIndexes; ibin++) hMuonTriggers->GetXaxis()->SetBinLabel(ibin+1,label[ibin].
Data());
175 TH1F* hMatchTrig =
new TH1F(
"hMatchTrig",
"number of tracks matched with trigger;n_{tracks}", 20, 0., 20.);
178 TH1F* hSign =
new TH1F(
"hSign",
"track sign;sign", 3, -1.5, 1.5);
181 TH1F* hDCA =
new TH1F(
"hDCA",
"DCA distribution;DCA (cm)", 500, 0., 500.);
184 TH1F* hP =
new TH1F(
"hP",
"momentum distribution;p (GeV/c)", 300, 0., 300.);
187 TH1F* hPMuPlus =
new TH1F(
"hPMuPlus",
"momentum distribution of #mu^{+};p (GeV/c)", 300, 0., 300.);
190 TH1F* hPMuMinus =
new TH1F(
"hPMuMinus",
"momentum distribution of #mu^{-};p (GeV/c)", 300, 0., 300.);
196 TH1F* hPt =
new TH1F(
"hPt",
"transverse momentum distribution;p_{t} (GeV/c)", nPtBins, ptMin,
ptMax);
199 TH1F* hPtMuPlus =
new TH1F(
"hPtMuPlus",
"transverse momentum distribution of #mu^{+};p_{t} (GeV/c)", nPtBins, ptMin,
ptMax);
202 TH1F* hPtMuMinus =
new TH1F(
"hPtMuMinus",
"transverse momentum distribution of #mu^{-};p_{t} (GeV/c)", nPtBins, ptMin,
ptMax);
205 TH1F* hRapidity =
new TH1F(
"hRapidity",
"rapidity distribution;rapidity", 200, -4.5, -2.);
208 TH1F* hThetaX =
new TH1F(
"hThetaX",
"#theta_{X} distribution;#theta_{X} (degree)", 360, -180., 180);
211 TH1F* hThetaY =
new TH1F(
"hThetaY",
"#theta_{Y} distribution;#theta_{Y} (degree)", 360, -180., 180);
214 TH1F* hChi2 =
new TH1F(
"hChi2",
"normalized #chi^{2} distribution;#chi^{2} / ndf", 500, 0., 50.);
217 TH1F* hProbChi2 =
new TH1F(
"hProbChi2",
"distribution of probability of #chi^{2};prob(#chi^{2})", 100, 0., 1.);
221 TH1F* hNClustersPerTrack =
new TH1F(
"hNClustersPerTrack",
"number of associated clusters per track;n_{clusters}", 20, 0., 20.);
224 TH1F* hNChamberHitPerTrack =
new TH1F(
"hNChamberHitPerTrack",
"number of chambers hit per track;n_{chamber hit}", 15, 0., 15.);
228 TH1F* hPtMatchLpt =
new TH1F(
"hPtMatchLpt",
"transverse momentum distribution matching Lpt;p_{t} (GeV/c)", nPtBins, ptMin,
ptMax);
231 TH1F* hPtMatchHpt =
new TH1F(
"hPtMatchHpt",
"transverse momentum distribution matching Hpt;p_{t} (GeV/c)", nPtBins, ptMin,
ptMax);
234 TH1F* hPtMuPlusMatchLpt =
new TH1F(
"hPtMuPlusMatchLpt",
"transverse momentum distribution of #mu^{+} matching Lpt;p_{t} (GeV/c)", nPtBins, ptMin,
ptMax);
237 TH1F* hPtMuPlusMatchHpt =
new TH1F(
"hPtMuPlusMatchHpt",
"transverse momentum distribution of #mu^{+} matching Hpt;p_{t} (GeV/c)", nPtBins, ptMin,
ptMax);
240 TH1F* hPtMuMinusMatchLpt =
new TH1F(
"hPtMuMinusMatchLpt",
"transverse momentum distribution of #mu^{-} matching Lpt;p_{t} (GeV/c)", nPtBins, ptMin,
ptMax);
243 TH1F* hPtMuMinusMatchHpt =
new TH1F(
"hPtMuMinusMatchHpt",
"transverse momentum distribution of #mu^{-} matching Hpt;p_{t} (GeV/c)", nPtBins, ptMin,
ptMax);
246 TH1F* hNClustersPerCh =
new TH1F(
"hNClustersPerCh",
"averaged number of clusters per chamber per track;chamber ID;<n_{clusters}>",
nCh, -0.5,
nCh-0.5);
247 hNClustersPerCh->Sumw2();
248 hNClustersPerCh->SetOption(
"P");
249 hNClustersPerCh->SetMarkerStyle(kFullDotMedium);
250 hNClustersPerCh->SetMarkerColor(kBlue);
253 TH1F* hNClustersPerDE =
new TH1F(
"hNClustersPerDE",
"averaged number of clusters per DE per track;DetElem ID;<n_{clusters}>",
nDE+1, -0.5,
nDE+0.5);
254 hNClustersPerDE->Sumw2();
255 hNClustersPerDE->SetOption(
"P");
256 hNClustersPerDE->SetMarkerStyle(kFullDotMedium);
257 hNClustersPerDE->SetMarkerColor(kBlue);
262 TH2F* hClusterHitMapInCh =
new TH2F(Form(
"hClusterHitMapInCh%d",i+1), Form(
"cluster position distribution in chamber %d;X (cm);Y (cm)",i+1),
263 100, -rMax, rMax, 100, -rMax, rMax);
266 TH1F* hClusterChargeInCh =
new TH1F(Form(
"hClusterChargeInCh%d",i+1), Form(
"cluster charge distribution in chamber %d;charge (fC)",i+1), 100, 0., 1000.);
269 TH1F* hClusterSizeInCh =
new TH1F(Form(
"hClusterSizeInCh%d",i+1), Form(
"cluster size distribution in chamber %d;size (n_{pads})",i+1), 200, 0., 200.);
273 TH2F* hClusterChargePerDE =
new TH2F(
"hClusterChargePerDE",
"cluster charge distribution per DE;DetElem ID;charge (fC)",
nDE+1, -0.5,
nDE+0.5, 100, 0., 1000.);
276 TH2F* hClusterSizePerDE =
new TH2F(
"hClusterSizePerDE",
"cluster size distribution per DE;DetElem ID;size (n_{pads})",
nDE+1, -0.5,
nDE+0.5, 200, 0., 200.);
281 fTrackCounters->AddRubric(
"track",
"trackeronly/triggeronly/matched/notrack");
326 Printf(
"ERROR: fESD not available");
331 Bool_t t0PileUp = kFALSE, spdPileUp = kFALSE, bgID = kFALSE;
332 spdPileUp = fESD->IsPileupFromSPDInMultBins();
333 AliPhysicsSelection *physicsSelection = (AliPhysicsSelection*)((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->GetEventSelection();
334 if ( physicsSelection ) {
335 AliTriggerAnalysis * triggerAnalysis = (AliTriggerAnalysis*)physicsSelection->GetTriggerAnalysis();
336 if ( triggerAnalysis ) {
337 t0PileUp = triggerAnalysis->EvaluateTrigger(fESD, (AliTriggerAnalysis::Trigger) (AliTriggerAnalysis::kOfflineFlag | AliTriggerAnalysis::kT0Pileup));
338 bgID = triggerAnalysis->EvaluateTrigger(fESD, (AliTriggerAnalysis::Trigger) (AliTriggerAnalysis::kSPDClsVsTrkBG | AliTriggerAnalysis::kOfflineFlag));
342 UInt_t geomAccMask = ( AliMuonTrackCuts::kMuEta | AliMuonTrackCuts::kMuThetaAbs );
345 TString selected = isEventSelected ?
"selected:yes" :
"selected:no";
346 selected += t0PileUp ?
"/t0pileup:yes" :
"/t0pileup:no";
347 selected += bgID ?
"/bgID:yes" :
"/bgID:no";
348 selected += spdPileUp ?
"/spdpileup:yes" :
"/spdpileup:no";
351 UInt_t triggerWord = (fInputHandler) ? fInputHandler->IsEventSelected() : 0;
354 if ( ( triggerWord & currMask ) == currMask ) ((
TH1I*)
fList->UncheckedAt(
kMuonTrig))->Fill(idx);
359 const TObjArray* selectedTrigClasses =
fEventCuts->GetSelectedTrigClassesInEvent(InputEvent());
362 AliESDVZERO* v0Data = fESD->GetVZEROData();
364 const Int_t nV0MultRange = 4;
365 const Int_t nCollType = 2;
367 Int_t v0MultRange[nCollType][nV0MultRange]= {{239,1165,12191,20633},{25,60,200,800}};
371 if (!strcmp(fESD->GetBeamType(),
"A-A")){
373 for (
Int_t i = 0 ; i < 64 ; i++) v0Mult += v0Data->GetMultiplicity(i);
375 else if (!strcmp(fESD->GetBeamType(),
"p-A")){
377 for (
Int_t i = 0 ; i < 32 ; i++) v0Mult += v0Data->GetMultiplicityV0A(i);
379 else if (!strcmp(fESD->GetBeamType(),
"A-p")){
381 for (
Int_t i = 0 ; i < 32 ; i++) v0Mult += v0Data->GetMultiplicityV0C(i);
386 listV0MultKey.SetOwner();
387 listV0MultKey.AddLast(
new TObjString(
"v0mult:any"));
388 if (v0Mult >= v0MultRange[iCollType][0] && v0Mult < v0MultRange[iCollType][1]) listV0MultKey.AddLast(
new TObjString(
"v0mult:low"));
389 else if (v0Mult >= v0MultRange[iCollType][1] && v0Mult < v0MultRange[iCollType][2]) listV0MultKey.AddLast(
new TObjString(
"v0mult:int"));
390 else if (v0Mult >= v0MultRange[iCollType][2] && v0Mult < v0MultRange[iCollType][3]) listV0MultKey.AddLast(
new TObjString(
"v0mult:high"));
392 TIter nextV0MultKey(&listV0MultKey);
395 Int_t maxTriggerRO = (!strcmp(fESD->GetBeamType(),
"p-p")) ? 10 : 1000;
396 Int_t nTracks = (
Int_t) fESD->GetNumberOfMuonTracks();
397 Int_t nTriggerTracks = 0;
398 for (
Int_t iTrack = 0; iTrack < nTracks; ++iTrack)
399 if (fESD->GetMuonTrack(iTrack)->ContainTriggerData()) nTriggerTracks++;
400 TString triggerRO = (nTriggerTracks < maxTriggerRO) ?
"triggerRO:good" :
"triggerRO:bad";
408 TObjString* triggerKey = 0x0;
409 TIter nextTriggerCase(triggerCases);
410 while ((triggerKey = static_cast<TObjString*>(nextTriggerCase()))) {
413 TObjString* v0MultKey = 0x0;
414 nextV0MultKey.Reset();
415 while ((v0MultKey = static_cast<TObjString*>(nextV0MultKey()))) {
418 fEventCounters->Count(Form(
"event:any/%s/run:%d/%s/%s/%s", triggerKey->GetName(), fCurrentRunNumber, selected.Data(), triggerRO.Data(), v0MultKey->GetName()));
422 fEventCounters->Count(Form(
"event:muon/%s/run:%d/%s/%s/%s", triggerKey->GetName(), fCurrentRunNumber, selected.Data(), triggerRO.Data(), v0MultKey->GetName()));
426 fTrackCounters->Count(Form(
"%s/%s/run:%d/%s/%s/%s/%s/%s/%s/%s",
"track:notrack", triggerKey->GetName(),
427 fCurrentRunNumber,selected.Data(),
"charge:any",
"pt:any",
"triggerRO:bad",
428 v0MultKey->GetName(),
"acc:out",
"tagTrack:good"));
436 Int_t nSelectedTrackerTracks = 0;
437 Int_t nSelectedTrackMatchTrig = 0;
438 Int_t nPVTracks = fESD->GetPrimaryVertex()->GetNContributors();
440 for (
Int_t iTrack = 0; iTrack < nTracks; ++iTrack) {
443 AliESDMuonTrack* esdTrack = fESD->GetMuonTrack(iTrack);
450 Bool_t isBeamGas = kFALSE;
452 chargeKeyList.SetOwner();
453 chargeKeyList.Add(
new TObjString(
"charge:any"));
455 ptKeyList.SetOwner();
456 ptKeyList.Add(
new TObjString(
"pt:any"));
458 if (esdTrack->ContainTrackerData()) {
460 if (esdTrack->ContainTriggerData()) trackKey +=
"matched";
461 else trackKey +=
"trackeronly";
463 Short_t trackCharge = esdTrack->Charge();
465 chargeKey += ( trackCharge < 0 ) ?
"neg" :
"pos";
466 chargeKeyList.Add(
new TObjString(chargeKey));
469 Bool_t passGeomAccCuts = ( ( mask & geomAccMask ) == geomAccMask );
470 accKey += ( passGeomAccCuts ) ?
"in" :
"out";
471 if ( passGeomAccCuts && nPVTracks>0 ) {
473 if ( trackPt > 1. ) ptKeyList.Add(
new TObjString(
"pt:low"));
474 if ( trackPt > 2. ) ptKeyList.Add(
new TObjString(
"pt:high"));;
476 if ( ( mask & AliMuonTrackCuts::kMuPdca ) == 0 ) isBeamGas = kTRUE;
479 trackKey +=
"triggeronly";
485 tagKey += ( isBeamGas ) ?
"beamGas" :
"good";
488 nextTriggerCase.Reset();
489 while ((triggerKey = static_cast<TObjString*>(nextTriggerCase()))) {
492 TObjString* v0MultKey = 0x0;
493 nextV0MultKey.Reset();
494 while ((v0MultKey = static_cast<TObjString*>(nextV0MultKey()))) {
496 for (
Int_t icharge=0; icharge<chargeKeyList.GetEntries(); icharge++ ) {
497 for (
Int_t ipt=0; ipt<ptKeyList.GetEntries(); ipt++ ) {
498 fTrackCounters->Count(Form(
"%s/%s/run:%d/%s/%s/%s/%s/%s/%s/%s", trackKey.Data(), triggerKey->GetName(), fCurrentRunNumber,
499 selected.Data(), chargeKeyList.At(icharge)->GetName(), ptKeyList.At(ipt)->GetName(),
500 triggerRO.Data(), v0MultKey->GetName(), accKey.Data(), tagKey.Data()));
510 if (!esdTrack->ContainTrackerData())
continue;
524 nSelectedTrackerTracks++;
525 if (esdTrack->ContainTriggerData()) nSelectedTrackMatchTrig++;
529 Short_t trackCharge = esdTrack->Charge();
530 ((TH1F*)
fList->UncheckedAt(
kP))->Fill(trackP);
531 ((TH1F*)
fList->UncheckedAt(
kPt))->Fill(trackPt);
532 Bool_t matchTrigLpt = (esdTrack->GetMatchTrigger()>=2);
533 Bool_t matchTrigHpt = (esdTrack->GetMatchTrigger()>=3);
534 if ( matchTrigLpt ) ((TH1F*)
fList->UncheckedAt(
kPtMatchLpt))->Fill(trackPt);
535 if ( matchTrigHpt ) ((TH1F*)
fList->UncheckedAt(
kPtMatchHpt))->Fill(trackPt);
536 if (trackCharge < 0) {
548 Int_t ndf = 2 * esdTrack->GetNHit() - 5;
549 ((TH1F*)
fList->UncheckedAt(
kChi2))->Fill(esdTrack->GetChi2()/ndf);
550 ((TH1F*)
fList->UncheckedAt(
kProbChi2))->Fill(TMath::Prob(esdTrack->GetChi2(),ndf));
554 ((TH1F*)
fList->UncheckedAt(
kSign))->Fill(trackCharge);
555 ((TH1F*)
fList->UncheckedAt(
kDCA))->Fill(esdTrack->GetDCA());
557 Int_t nChamberHit = 0;
558 for (
Int_t ich=0; ich<10; ich++)
if (esdTrack->IsInMuonClusterMap(ich)) nChamberHit++;
562 for (
Int_t icl=0; icl<esdTrack->GetNClusters(); icl++) {
564 AliESDMuonCluster* esdCluster = esdTrack->GetESDEvent()->FindMuonCluster(esdTrack->GetClusterId(icl));
566 Int_t chId = esdCluster->GetChamberId();
567 Int_t deId = esdCluster->GetDetElemId();
577 if (esdCluster->PadsStored()) {
587 ((TH1F*)
fList->UncheckedAt(
kNTracks))->Fill(nSelectedTrackerTracks);
588 ((TH1F*)
fList->UncheckedAt(
kMatchTrig))->Fill(nSelectedTrackMatchTrig);
609 fTrackCounters =
static_cast<AliCounterCollection*
>(GetOutputData(3));
610 fEventCounters =
static_cast<AliCounterCollection*
>(GetOutputData(4));
612 if (!gROOT->IsBatch()) {
613 cout<<
"whole statistics without selection:"<<endl;
616 cout<<
"whole statistics of selected events:"<<endl;
640 TH1F* hClusterChargePerChMean =
new TH1F(
"hClusterChargePerChMean",
"cluster mean charge per chamber;chamber ID;<charge> (fC)",
nCh, -0.5,
nCh-0.5);
641 hClusterChargePerChMean->SetOption(
"P");
642 hClusterChargePerChMean->SetMarkerStyle(kFullDotMedium);
643 hClusterChargePerChMean->SetMarkerColor(kBlue);
646 TH1F* hClusterChargePerChSigma =
new TH1F(
"hClusterChargePerChSigma",
"cluster charge dispersion per chamber;chamber ID;#sigma_{charge} (fC)",
nCh, -0.5,
nCh-0.5);
647 hClusterChargePerChSigma->SetOption(
"P");
648 hClusterChargePerChSigma->SetMarkerStyle(kFullDotMedium);
649 hClusterChargePerChSigma->SetMarkerColor(kBlue);
652 TH1F* hClusterChargePerDEMean =
new TH1F(
"hClusterChargePerDEMean",
"cluster mean charge per DE;DetElem ID;<charge> (fC)",
nDE+1, -0.5,
nDE+0.5);
653 hClusterChargePerDEMean->SetOption(
"P");
654 hClusterChargePerDEMean->SetMarkerStyle(kFullDotMedium);
655 hClusterChargePerDEMean->SetMarkerColor(kBlue);
658 TH1F* hClusterChargePerDESigma =
new TH1F(
"hClusterChargePerDESigma",
"cluster charge dispersion per DE;DetElem ID;#sigma_{charge} (fC)",
nDE+1, -0.5,
nDE+0.5);
659 hClusterChargePerDESigma->SetOption(
"P");
660 hClusterChargePerDESigma->SetMarkerStyle(kFullDotMedium);
661 hClusterChargePerDESigma->SetMarkerColor(kBlue);
665 TH1F* hClusterSizePerChMean =
new TH1F(
"hClusterSizePerChMean",
"cluster mean size per chamber;chamber ID;<size> (n_{pads})",
nCh, -0.5,
nCh-0.5);
666 hClusterSizePerChMean->SetOption(
"P");
667 hClusterSizePerChMean->SetMarkerStyle(kFullDotMedium);
668 hClusterSizePerChMean->SetMarkerColor(kBlue);
671 TH1F* hClusterSizePerChSigma =
new TH1F(
"hClusterSizePerChSigma",
"cluster size dispersion per chamber;chamber ID;#sigma_{size} (n_{pads})",
nCh, -0.5,
nCh-0.5);
672 hClusterSizePerChSigma->SetOption(
"P");
673 hClusterSizePerChSigma->SetMarkerStyle(kFullDotMedium);
674 hClusterSizePerChSigma->SetMarkerColor(kBlue);
677 TH1F* hClusterSizePerDEMean =
new TH1F(
"hClusterSizePerDEMean",
"cluster mean size per DE;DetElem ID;<size> (n_{pads})",
nDE+1, -0.5,
nDE+0.5);
678 hClusterSizePerDEMean->SetOption(
"P");
679 hClusterSizePerDEMean->SetMarkerStyle(kFullDotMedium);
680 hClusterSizePerDEMean->SetMarkerColor(kBlue);
683 TH1F* hClusterSizePerDESigma =
new TH1F(
"hClusterSizePerDESigma",
"cluster size dispersion per DE;DetElem ID;#sigma_{size} (n_{pads})",
nDE+1, -0.5,
nDE+0.5);
684 hClusterSizePerDESigma->SetOption(
"P");
685 hClusterSizePerDESigma->SetMarkerStyle(kFullDotMedium);
686 hClusterSizePerDESigma->SetMarkerColor(kBlue);
699 for (
Int_t iCh = 0; iCh <
nCh; iCh++) {
702 hClusterChargePerChMean->SetBinContent(iCh+1, hClusterChargeInCh->GetMean());
703 hClusterChargePerChMean->SetBinError(iCh+1, hClusterChargeInCh->GetMeanError());
704 hClusterChargePerChSigma->SetBinContent(iCh+1, hClusterChargeInCh->GetRMS());
705 hClusterChargePerChSigma->SetBinError(iCh+1, hClusterChargeInCh->GetRMSError());
708 hClusterSizePerChMean->SetBinContent(iCh+1, hClusterSizeInCh->GetMean());
709 hClusterSizePerChMean->SetBinError(iCh+1, hClusterSizeInCh->GetMeanError());
710 hClusterSizePerChSigma->SetBinContent(iCh+1, hClusterSizeInCh->GetRMS());
711 hClusterSizePerChSigma->SetBinError(iCh+1, hClusterSizeInCh->GetRMSError());
718 for (
Int_t iDE = 1; iDE <
nDE+1; iDE++) {
720 TH1D *tmp = hClusterChargePerDE->ProjectionY(
"tmp",iDE,iDE,
"e");
721 if (tmp->GetEntries() > 10.) {
722 hClusterChargePerDEMean->SetBinContent(iDE, tmp->GetMean());
723 hClusterChargePerDEMean->SetBinError(iDE, tmp->GetMeanError());
724 hClusterChargePerDESigma->SetBinContent(iDE, tmp->GetRMS());
725 hClusterChargePerDESigma->SetBinError(iDE, tmp->GetRMSError());
729 tmp = hClusterSizePerDE->ProjectionY(
"tmp",iDE,iDE,
"e");
730 if (tmp->GetEntries() > 10.) {
731 hClusterSizePerDEMean->SetBinContent(iDE, tmp->GetMean());
732 hClusterSizePerDEMean->SetBinError(iDE, tmp->GetMeanError());
733 hClusterSizePerDESigma->SetBinContent(iDE, tmp->GetRMS());
734 hClusterSizePerDESigma->SetBinError(iDE, tmp->GetRMSError());
748 if(theta < -2.5)
return (theta / TMath::Pi() + 1.) * 180.;
749 else if(theta > 2.5)
return (theta / TMath::Pi() - 1.) * 180.;
750 else return theta / TMath::Pi() * 180.;
764 for (
Int_t itrig = 0; itrig<obj->GetEntries(); itrig++ ) {
765 TString sTrigClassName = ((TObjString*)obj->At(itrig))->GetString();
767 list->AddLast(
new TObjString(Form(
"trigger:%s",sTrigClassName.Data())));
772 if (list->GetSize() == 1) list->AddLast(
new TObjString(
"trigger:other"));
cluster charge distribution in chamber i
number of chamber hit per track
number of clusters per DE per track
number of clusters per DE
virtual void Terminate(Option_t *)
virtual void UserExec(Option_t *)
cluster size distribution in chamber i
AliMuonTrackCuts * fTrackCuts
Track cuts.
Pt distribution match Hpt.
number of clusters per chamber per track
static const Int_t nCh
number of tracking chambers
AliMuonEventCuts * fEventCuts
Event cuts.
cluster charge per DE: dispersion
cluster size per DE: mean
void SetTrackCuts(AliMuonTrackCuts *trackCuts)
Quality assurance of MUON ESDs.
cluster size per DE: dispersion
cluster charge per DE: mean
static const Int_t nDE
number of DE
virtual ~AliAnalysisTaskMuonQA()
Pt distribution of mu+ match Hpt.
Pt distribution of mu- match Lpt.
TObjArray * fListExpert
List of output object for experts.
cluster charge per Ch: mean
static const Float_t dMax[5]
maximum diameter of each station
TArrayI fMuonTrigIndex
Combined muon trigger index.
TObjArray * fListNorm
Normalized histograms.
Pt distribution of mu+ match Lpt.
TObjArray * fList
List of output object for everybody.
cluster charge distribution per DE
Double_t ChangeThetaRange(Double_t theta)
cluster size distribution per DE
distribution of probability of chi2
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)
Bool_t fApplyAccCut
use only tracks passing the acceptance cuts (Rabs, eta)
AliCounterCollection * fTrackCounters
track statistics
Pt distribution match Lpt.
number of clusters per track
Bool_t fSelectMatched
Fill histograms only with tracks matching the trigger.
TList * BuildListOfTriggers(const TObjArray *)
Bool_t fSelectEvent
Fill histograms only with events passing the AliMuonEventCuts selection.
AliCounterCollection * fEventCounters
event statistics
cluster size per Ch: dispersion
cluster position distribution in chamber i
number of clusters per chamber
TH2 * Scale(TH2 *h, TH1 *g)
Pt distribution of mu- match Hpt.
cluster size per Ch: mean
normalized chi2 distribution
Short_t fSelectCharge
Fill histograms only with negative/position tracks (0=all)
number of tracks matched with trigger
cluster charge per Ch: dispersion
virtual void UserCreateOutputObjects()