55 #include "AliRawReader.h" 56 #include "AliRawEventHeaderBase.h" 57 #include <Riostream.h> 62 #include <TObjArray.h> 63 #include <TPaveText.h> 81 Double_t ProtectedSqrt(Double_t x)
83 return ( x > 0.0 ? TMath::Sqrt(x) : 0.0 );
100 fTrackerDataMakerArray(0x0),
101 fTrackerCalDataArray(0x0),
102 fTrackerRecDataArray(0x0),
103 fMappingCheckRecPointsArray(0x0)
121 AliError(
"Some unprocessed logged errors are still there... Please check");
140 TIter next(list[specie]);
143 Bool_t alreadyThere(kFALSE);
145 while ( ( o = next() ) && !alreadyThere )
147 TString classname(o->ClassName());
148 if ( classname.Contains(
"TrackerData") )
150 if ( !strcmp(object->GetName(),o->GetName()) )
152 alreadyThere = kTRUE;
157 if ( (!alreadyThere &&
object) || (alreadyThere && replace) )
161 TNamed* named =
static_cast<TNamed*
>(object);
164 list[specie]->AddAt(
object,indexNumber);
173 Bool_t firstFill = kTRUE;
178 if (! hESDnClustersPerTr)
continue;
179 Double_t nTracks = hESDnClustersPerTr->GetEntries();
180 if (nTracks <= 0)
continue;
219 if (hESDnClustersPerCh && hESDnTotClustersPerCh) {
220 hESDnClustersPerCh->Reset();
221 hESDnClustersPerCh->Add(hESDnTotClustersPerCh, 1./nTracks);
223 if (hESDnClustersPerDE && hESDnTotClustersPerDE) {
224 hESDnClustersPerDE->Reset();
225 hESDnClustersPerDE->Add(hESDnTotClustersPerDE, 1./nTracks);
231 double sigmaCharge=0,sigmaSize=0,sigmaResidualX=0,sigmaResidualY=0,sigmaLocalChi2X=0,sigmaLocalChi2Y=0,sigmaLocalChi2=0;
234 if (hESDClusterChargeInCh) {
235 sigmaCharge = hESDClusterChargeInCh->GetRMS();
236 if (hESDClusterChargePerChMean) {
237 hESDClusterChargePerChMean->SetBinContent(iCh+1, hESDClusterChargeInCh->GetMean());
238 hESDClusterChargePerChMean->SetBinError(iCh+1, hESDClusterChargeInCh->GetMeanError());
240 if (hESDClusterChargePerChSigma) {
241 hESDClusterChargePerChSigma->SetBinContent(iCh+1, sigmaCharge);
242 hESDClusterChargePerChSigma->SetBinError(iCh+1, hESDClusterChargeInCh->GetRMSError());
247 if (hESDClusterSizeInCh) {
248 sigmaSize = hESDClusterSizeInCh->GetRMS();
249 if (hESDClusterSizePerChMean) {
250 hESDClusterSizePerChMean->SetBinContent(iCh+1, hESDClusterSizeInCh->GetMean());
251 hESDClusterSizePerChMean->SetBinError(iCh+1, hESDClusterSizeInCh->GetMeanError());
253 if (hESDClusterSizePerChSigma) {
254 hESDClusterSizePerChSigma->SetBinContent(iCh+1, sigmaSize);
255 hESDClusterSizePerChSigma->SetBinError(iCh+1, hESDClusterSizeInCh->GetRMSError());
260 if (hESDResidualXInCh) {
261 sigmaResidualX = hESDResidualXInCh->GetRMS();
262 if (hESDResidualXPerChMean) {
263 hESDResidualXPerChMean->SetBinContent(iCh+1, hESDResidualXInCh->GetMean());
264 hESDResidualXPerChMean->SetBinError(iCh+1, hESDResidualXInCh->GetMeanError());
266 if (hESDResidualXPerChSigma) {
267 hESDResidualXPerChSigma->SetBinContent(iCh+1, sigmaResidualX);
268 hESDResidualXPerChSigma->SetBinError(iCh+1, hESDResidualXInCh->GetRMSError());
273 if (hESDResidualYInCh) {
274 sigmaResidualY = hESDResidualYInCh->GetRMS();
275 if (hESDResidualYPerChMean) {
276 hESDResidualYPerChMean->SetBinContent(iCh+1, hESDResidualYInCh->GetMean());
277 hESDResidualYPerChMean->SetBinError(iCh+1, hESDResidualYInCh->GetMeanError());
279 if (hESDResidualYPerChSigma) {
280 hESDResidualYPerChSigma->SetBinContent(iCh+1, sigmaResidualY);
281 hESDResidualYPerChSigma->SetBinError(iCh+1, hESDResidualYInCh->GetRMSError());
286 if (hESDLocalChi2XInCh) {
287 sigmaLocalChi2X = hESDLocalChi2XInCh->GetRMS();
288 if (hESDLocalChi2XPerChMean) {
289 hESDLocalChi2XPerChMean->SetBinContent(iCh+1, hESDLocalChi2XInCh->GetMean());
290 hESDLocalChi2XPerChMean->SetBinError(iCh+1, hESDLocalChi2XInCh->GetMeanError());
295 if (hESDLocalChi2YInCh) {
296 sigmaLocalChi2Y = hESDLocalChi2YInCh->GetRMS();
297 if (hESDLocalChi2YPerChMean) {
298 hESDLocalChi2YPerChMean->SetBinContent(iCh+1, hESDLocalChi2YInCh->GetMean());
299 hESDLocalChi2YPerChMean->SetBinError(iCh+1, hESDLocalChi2YInCh->GetMeanError());
304 if (hESDLocalChi2InCh) {
305 sigmaLocalChi2 = hESDLocalChi2InCh->GetRMS();
306 if (hESDLocalChi2PerChMean) {
307 hESDLocalChi2PerChMean->SetBinContent(iCh+1, hESDLocalChi2InCh->GetMean());
308 hESDLocalChi2PerChMean->SetBinError(iCh+1, hESDLocalChi2InCh->GetMeanError());
319 Double_t nClusters = hESDnTotClustersPerDE ? hESDnTotClustersPerDE->GetBinContent(iDE+1) : 0;
322 if (hESDClusterChargePerDE && hESDSumClusterChargePerDE) {
323 hESDClusterChargePerDE->SetBinContent(iDE+1, hESDSumClusterChargePerDE->GetBinContent(iDE+1)/nClusters);
324 hESDClusterChargePerDE->SetBinError(iDE+1, sigmaCharge/TMath::Sqrt(nClusters));
327 if (hESDResidualXPerDEMean && hESDResidualXPerDESigma && hESDSumResidualXPerDE && hESDSumResidualX2PerDE) {
328 Double_t meanResX = hESDSumResidualXPerDE->GetBinContent(iDE+1)/nClusters;
329 hESDResidualXPerDEMean->SetBinContent(iDE+1, meanResX);
330 hESDResidualXPerDEMean->SetBinError(iDE+1, sigmaResidualX/TMath::Sqrt(nClusters));
332 hESDResidualXPerDESigma->SetBinContent(iDE+1, ProtectedSqrt(hESDSumResidualX2PerDE->GetBinContent(iDE+1)/nClusters - meanResX*meanResX));
333 hESDResidualXPerDESigma->SetBinError(iDE+1, sigmaResidualX/TMath::Sqrt(2.*nClusters));
336 if (hESDResidualYPerDEMean && hESDResidualYPerDESigma && hESDSumResidualYPerDE && hESDSumResidualY2PerDE) {
337 Double_t meanResY = hESDSumResidualYPerDE->GetBinContent(iDE+1)/nClusters;
338 hESDResidualYPerDEMean->SetBinContent(iDE+1, meanResY);
339 hESDResidualYPerDEMean->SetBinError(iDE+1, sigmaResidualY/TMath::Sqrt(nClusters));
340 hESDResidualYPerDESigma->SetBinContent(iDE+1, ProtectedSqrt(hESDSumResidualY2PerDE->GetBinContent(iDE+1)/nClusters - meanResY*meanResY));
341 hESDResidualYPerDESigma->SetBinError(iDE+1, sigmaResidualY/TMath::Sqrt(2.*nClusters));
344 if (hESDLocalChi2XPerDEMean && hESDSumLocalChi2XPerDE) {
345 hESDLocalChi2XPerDEMean->SetBinContent(iDE+1, hESDSumLocalChi2XPerDE->GetBinContent(iDE+1)/nClusters);
346 hESDLocalChi2XPerDEMean->SetBinError(iDE+1, sigmaLocalChi2X/TMath::Sqrt(nClusters));
349 if (hESDLocalChi2YPerDEMean && hESDSumLocalChi2YPerDE) {
350 hESDLocalChi2YPerDEMean->SetBinContent(iDE+1, hESDSumLocalChi2YPerDE->GetBinContent(iDE+1)/nClusters);
351 hESDLocalChi2YPerDEMean->SetBinError(iDE+1, sigmaLocalChi2Y/TMath::Sqrt(nClusters));
354 if (hESDLocalChi2PerDEMean && hESDSumLocalChi2PerDE) {
355 hESDLocalChi2PerDEMean->SetBinContent(iDE+1, hESDSumLocalChi2PerDE->GetBinContent(iDE+1)/nClusters);
356 hESDLocalChi2PerDEMean->SetBinError(iDE+1, sigmaLocalChi2/TMath::Sqrt(nClusters));
360 if (hESDClusterChargePerDE && hESDClusterChargeInCh && hESDSumClusterChargePerDE) {
361 hESDClusterChargePerDE->SetBinContent(iDE+1, hESDSumClusterChargePerDE->GetBinContent(iDE+1));
362 hESDClusterChargePerDE->SetBinError(iDE+1, hESDClusterChargeInCh->GetXaxis()->GetXmax());
365 if (hESDResidualXPerDEMean && hESDResidualXPerDESigma && hESDSumResidualXPerDE && hESDResidualXInCh) {
366 hESDResidualXPerDEMean->SetBinContent(iDE+1, hESDSumResidualXPerDE->GetBinContent(iDE+1));
367 hESDResidualXPerDEMean->SetBinError(iDE+1, hESDResidualXInCh->GetXaxis()->GetXmax());
368 hESDResidualXPerDESigma->SetBinContent(iDE+1, 0.);
369 hESDResidualXPerDESigma->SetBinError(iDE+1, hESDResidualXInCh->GetXaxis()->GetXmax());
372 if (hESDResidualYPerDEMean && hESDResidualYPerDESigma && hESDSumResidualYPerDE && hESDResidualYInCh) {
373 hESDResidualYPerDEMean->SetBinContent(iDE+1, hESDSumResidualYPerDE->GetBinContent(iDE+1));
374 hESDResidualYPerDEMean->SetBinError(iDE+1, hESDResidualYInCh->GetXaxis()->GetXmax());
375 hESDResidualYPerDESigma->SetBinContent(iDE+1, 0.);
376 hESDResidualYPerDESigma->SetBinError(iDE+1, hESDResidualYInCh->GetXaxis()->GetXmax());
379 if (hESDLocalChi2XPerDEMean && hESDSumLocalChi2XPerDE && hESDLocalChi2XInCh) {
380 hESDLocalChi2XPerDEMean->SetBinContent(iDE+1, hESDSumLocalChi2XPerDE->GetBinContent(iDE+1));
381 hESDLocalChi2XPerDEMean->SetBinError(iDE+1, hESDLocalChi2XInCh->GetXaxis()->GetXmax());
384 if (hESDLocalChi2YPerDEMean && hESDSumLocalChi2YPerDE && hESDLocalChi2YInCh) {
385 hESDLocalChi2YPerDEMean->SetBinContent(iDE+1, hESDSumLocalChi2YPerDE->GetBinContent(iDE+1));
386 hESDLocalChi2YPerDEMean->SetBinError(iDE+1, hESDLocalChi2YInCh->GetXaxis()->GetXmax());
389 if (hESDLocalChi2PerDEMean && hESDSumLocalChi2PerDE && hESDLocalChi2InCh) {
390 hESDLocalChi2PerDEMean->SetBinContent(iDE+1, hESDSumLocalChi2PerDE->GetBinContent(iDE+1));
391 hESDLocalChi2PerDEMean->SetBinError(iDE+1, hESDLocalChi2InCh->GetXaxis()->GetXmax());
395 Double_t nFullClusters = hESDnTotFullClustersPerDE ? hESDnTotFullClustersPerDE->GetBinContent(iDE+1) : 0;
396 if (nFullClusters > 1) {
397 if (hESDClusterSizePerDE && hESDSumClusterSizePerDE) {
398 hESDClusterSizePerDE->SetBinContent(iDE+1, hESDSumClusterSizePerDE->GetBinContent(iDE+1)/nFullClusters);
399 hESDClusterSizePerDE->SetBinError(iDE+1, sigmaSize/TMath::Sqrt(nFullClusters));
403 if (hESDClusterSizePerDE && hESDSumClusterSizePerDE) {
404 hESDClusterSizePerDE->SetBinContent(iDE+1, hESDSumClusterSizePerDE->GetBinContent(iDE+1));
405 hESDClusterSizePerDE->SetBinError(iDE+1, hESDClusterSizeInCh->GetXaxis()->GetXmax());
423 Bool_t firstFill=kTRUE, needIns0=kTRUE, needIns1=kTRUE;
428 if (!hTrackerClusterChargePerChMean)
continue;
442 Double_t sigmaCharge = 0;
443 if (hTrackerClusterChargePerChamber) {
444 sigmaCharge = hTrackerClusterChargePerChamber->GetRMS();
445 hTrackerClusterChargePerChMean->SetBinContent(iCh+1, hTrackerClusterChargePerChamber->GetMean());
446 hTrackerClusterChargePerChMean->SetBinError(iCh+1, hTrackerClusterChargePerChamber->GetMeanError());
448 if (hTrackerClusterChargePerChSigma) {
449 hTrackerClusterChargePerChSigma->SetBinContent(iCh+1, sigmaCharge);
450 hTrackerClusterChargePerChSigma->SetBinError(iCh+1, hTrackerClusterChargePerChamber->GetRMSError());
455 Double_t sigmaSize = 0;
456 if (hTrackerClusterMultiplicityPerChamber) {
457 sigmaSize = hTrackerClusterMultiplicityPerChamber->GetRMS();
458 if (hTrackerClusterMultiplicityPerChMean) {
459 hTrackerClusterMultiplicityPerChMean->SetBinContent(iCh+1, hTrackerClusterMultiplicityPerChamber->GetMean());
460 hTrackerClusterMultiplicityPerChMean->SetBinError(iCh+1, hTrackerClusterMultiplicityPerChamber->GetMeanError());
462 if (hTrackerClusterMultiplicityPerChSigma) {
463 hTrackerClusterMultiplicityPerChSigma->SetBinContent(iCh+1, sigmaSize);
464 hTrackerClusterMultiplicityPerChSigma->SetBinError(iCh+1, hTrackerClusterMultiplicityPerChamber->GetRMSError());
476 if (hTrackerClusterChargePerDEMean && hTrackerClusterChargePerDE) {
477 hTrackerClusterChargePerDEMean->SetBinContent(iDE+1, hTrackerClusterChargePerDE->GetMean());
478 Double_t nClusters = hTrackerClusterChargePerDE->GetEntries();
479 if (nClusters > 1) hTrackerClusterChargePerDEMean->SetBinError(iDE+1, sigmaCharge/TMath::Sqrt(nClusters));
480 else hTrackerClusterChargePerDEMean->SetBinError(iDE+1, hTrackerClusterChargePerChamber ?
481 hTrackerClusterChargePerChamber->GetXaxis()->GetXmax() : 0);
484 if (hTrackerClusterMultiplicityPerDEMean && hTrackerClusterMultiplicityPerDE) {
485 hTrackerClusterMultiplicityPerDEMean->SetBinContent(iDE+1, hTrackerClusterMultiplicityPerDE->GetMean());
486 Double_t nClusters = hTrackerClusterMultiplicityPerDE->GetEntries();
487 if (nClusters > 1) hTrackerClusterMultiplicityPerDEMean->SetBinError(iDE+1, sigmaSize/TMath::Sqrt(nClusters));
488 else hTrackerClusterMultiplicityPerDEMean->SetBinError(iDE+1, hTrackerClusterMultiplicityPerChamber ?
489 hTrackerClusterMultiplicityPerChamber->GetXaxis()->GetXmax() : 0);
511 if (itc==-1 && (!hbp || !hnevents || !hddl || !hddlevents)) {
512 AliError(Form(
"Missing some histograms : cannot work : hbp=%p hnevents=%p hddl=%p hddlevents=%p",hbp,hnevents,hddl,hddlevents));
543 if ( (!hbp || !hnevents || !hddl || !hddlevents) )
548 AliError(Form(
"Missing some histograms : cannot work : hbp=%p hnevents=%p hddl=%p hddlevents=%p",hbp,hnevents,hddl,hddlevents));
582 hbp.SetStats(kFALSE);
588 while ( ( bp = static_cast<AliMpBusPatch*>(nextBP())) )
590 Int_t busPatchId = bp->
GetId();
591 Int_t bin = hbp.FindBin(busPatchId);
594 hbp.SetBinContent(bin,data->
BusPatch(busPatchId,occDim)*100.0);
600 hnevents.SetStats(kFALSE);
605 hddl.SetStats(kFALSE);
607 hddlevents.SetStats(kFALSE);
612 for ( Int_t iddl = 0; iddl < nddls; ++iddl )
616 Int_t ddlId = offset + ddl->
GetId();
621 hddlevents.Fill(ddlId,nevents);
627 for ( Int_t ide = 0; ide < ddl->
GetNofDEs(); ++ide )
638 occ = occ/npads/nevents;
646 hddl.Fill(ddlId,100.0*occ);
649 TPaveText* text =
new TPaveText(0.50,0.8,0.9,0.9,
"NDC");
653 hddl.GetListOfFunctions()->Add(text);
676 if (!hbp || !hnevents || !hddl || !hddlevents) {
677 if (itc==-1)
AliError(Form(
"Missing some histograms : cannot work : hbp=%p hnevents=%p hddl=%p hddlevents=%p",hbp,hnevents,hddl,hddlevents));
693 if (trigCl!=-1)
return;
711 if (!hparity || !htoken || !hpadding || !hrostatus || !hnevents)
return;
713 Int_t nevents = TMath::Nint(hnevents->GetBinContent(1));
717 TPaveText* text =
new TPaveText(0,0,0.99,0.99,
"NDC");
718 text->AddText(
"FATAL : 0 event seen ? That's NOT normal...");
719 text->SetFillColor(2);
720 hrostatus->GetListOfFunctions()->Delete();
721 hrostatus->GetListOfFunctions()->Add(text);
734 while ( log.
Next(msg,occurence) )
736 AliDebug(1,Form(
"msg=%s occurence=%d",msg.Data(),occurence));
738 if ( msg.Contains(
"token") )
740 Int_t dsp(-1),iddl(-1),ecode(-1);
742 sscanf(msg.Data(),
"Lost token error detected with address 0x%10X of DDL %10d and code %10d.",
744 Int_t localBP = ((dsp >> 16)- 4)*5 + 1;
745 Int_t buspatch = localBP + iddl*100;
758 for ( Int_t i = 0; i < ddl->
GetNofFrts() && !nbus; ++i )
767 AliError(
"GOT NBUS<=0 ! THAT IS BAD ! CHECK !");
773 htoken->Fill(buspatch+nbus-1,occurence);
780 if ( msg.Contains(
"Parity") )
783 sscanf(msg.Data(),
"Parity error in buspatch %d (0x%X).",&buspatch,&buspatch);
784 hparity->Fill(buspatch,occurence);
788 if ( msg.Contains(
"Glitch") )
793 if ( msg.Contains(
"Padding") )
795 Int_t block, dsp, buspatch;
796 sscanf(msg.Data(),
"Padding word error for iBlock %d, iDsp %d, iBus %d.",&block,&dsp,&buspatch);
797 hpadding->Fill(buspatch,occurence);
808 Int_t nofBusPatchesNotInConfig(0);
813 if ( TMath::Nint(buspatchId) != i )
815 AliError(Form(
"buspathId=%e i=%d",buspatchId,i));
823 ++nofBusPatchesNotInConfig;
830 hrostatus->SetBinContent(bin,nofBusPatchesNotInConfig*nevents/nbuspatches);
832 Double_t nofBusPatchesNotInData(0);
837 while ( ( bp = static_cast<AliMpBusPatch*>(next()) ) )
843 hrostatus->SetBinContent(bin,nofBusPatchesNotInData*nevents/nbuspatches);
859 rawReader->Select(
"MUONTRK",i,i);
860 if (rawReader->ReadHeader() )
862 UInt_t ddlsize = rawReader->GetEquipmentSize();
880 while ( ( bp = static_cast<AliMpBusPatch*>(next())) )
882 bpmin = TMath::Min(bpmin,bp->
GetId());
883 bpmax = TMath::Max(bpmax,bp->
GetId());
899 AliWarning(
"Tracker configuration not found. Will not be able to cut on low occupancies");
903 while ( ( bp = static_cast<AliMpBusPatch*>(next())) )
907 Int_t nofManusInConfig(0);
909 for ( Int_t imanu = 0; imanu < bp->
GetNofManus(); ++imanu )
915 if ( nofManusInConfig > 0 )
939 const Bool_t expert = kTRUE ;
940 const Bool_t saveCorr = kTRUE ;
941 const Bool_t image = kTRUE ;
947 TH1* h =
new TH1F(
"hTrackerBusPatchParityErrors",
"Number of parity errors per bus patch",
fBPnbins,
fBPxmin,
fBPxmax);
951 h =
new TH1F(
"hTrackerBusPatchTokenLostErrors",
"Number of token lost errors per bus patch",
fBPnbins,
fBPxmin,
fBPxmax);
954 h =
new TH1F(
"hTrackerBusPatchPaddingErrors",
"Number of padding errors per bus patch",
fBPnbins,
fBPxmin,
fBPxmax);
966 hnevents =
new TH1F(
"hTrackerNofPhysicsEventsSeen",
"Number of physics events seen",1,-0.5,0.5);
968 TAxis* a = hnevents->GetXaxis();
969 a->SetBinLabel(1,
"NPhysicsEvents");
970 hnevents->SetStats(kFALSE);
974 hnevents =
new TH1F(
"hTrackerNofGoodPhysicsEventsUsed",
"Number of good physics events used",1,-0.5,0.5);
977 TAxis* a = hnevents->GetXaxis();
978 a->SetBinLabel(1,
"NGoodPhysicsEvents");
979 hnevents->SetStats(kFALSE);
988 Double_t xmin = offset - 0.5;
989 Double_t xmax = offset + nbins - 0.5;
993 h =
new TH1F(Form(
"hTrackerDDL%sOccupancy",what.Data()),Form(
";DDLId;DDL Occupancy in %% (from %s)",what.Data()),nbins,xmin,xmax);
1000 h =
new TH1F(
"hTrackerDDLNofEventsSeen",
"Number of events seen by DDL;DDLId",nbins,xmin,xmax);
1004 h =
new TH1F(
"hTrackerDDLNofEventsUsed",
"Number of events used by DDL;DDLId",nbins,xmin,xmax);
1020 TH1* h =
new TH1F(
"hTrackerReadoutStatus",
"Readout status (x events)",7,-0.5,6.5);
1021 h->SetStats(kFALSE);
1023 TAxis* a = h->GetXaxis();
1035 TH1* h1 =
static_cast<TH1*
>(h->Clone(
"hTrackerReadoutStatusPerEvent"));
1036 h1->SetTitle(
"Readout status per event");
1037 h1->GetYaxis()->SetTitle(
"Percentage");
1049 Double_t xmin = offset - 0.5;
1050 Double_t xmax = offset + nbins - 0.5;
1052 h =
new TH1F(
"hTrackerDDLEventSize",
"DDL event size (bytes);DDL Id;Data size (bytes)",nbins,xmin,xmax);
1053 h->SetStats(kFALSE);
1056 h =
new TH1F(
"hTrackerDDLMeanEventSize",
"DDL mean event size (KB) per event;DDL Id;Mean Event size (KB)",nbins,xmin,xmax);
1057 h->SetStats(kFALSE);
1094 const Bool_t expert = kTRUE ;
1095 const Bool_t image = kTRUE ;
1109 for ( Int_t i = 0; i < nCh; ++i )
1111 h1I =
new TH1I(Form(
"hTrackerClusterMultiplicityForChamber%d",i+1), Form(
"cluster size distribution in chamber %d;size (n_{pads};Counts)",i+1), 100,0,100);
1114 h1I =
new TH1I(Form(
"hTrackerClusterChargeForChamber%d",i+1), Form(
"cluster charge distribution in chamber %d;charge (fC);Counts",i+1), 100,0,1000);
1118 h2F =
new TH2F(Form(
"hTrackerClusterHitMapForChamber%d",i+1), Form(
"cluster position distribution in chamber %d;X (cm);Y (cm)",i+1), 100, -rMax, rMax, 100, -rMax, rMax);
1123 h1I =
new TH1I(
"hTrackerNumberOfClustersPerChamber",
"Number of clusters per chamber;chamber ID;n_{clusters}", nCh,-0.5,nCh-0.5);
1126 h1F =
new TH1F(
"hTrackerClusterMultiplicityPerChMean",
"cluster mean size per chamber;chamber ID;<size> (n_{pads})", nCh,-0.5,nCh-0.5);
1127 h1F->SetOption(
"P");
1128 h1F->SetMarkerStyle(kFullDotMedium);
1129 h1F->SetMarkerColor(kRed);
1132 h1F =
new TH1F(
"hTrackerClusterMultiplicityPerChSigma",
"cluster size dispersion per chamber;chamber ID;#sigma_{size} (n_{pads})", nCh,-0.5,nCh-0.5);
1133 h1F->SetOption(
"P");
1134 h1F->SetMarkerStyle(kFullDotMedium);
1135 h1F->SetMarkerColor(kRed);
1138 h1F =
new TH1F(
"hTrackerClusterChargePerChMean",
"cluster mean charge per chamber;chamber ID;<charge> (fC)", nCh,-0.5,nCh-0.5);
1139 h1F->SetOption(
"P");
1140 h1F->SetMarkerStyle(kFullDotMedium);
1141 h1F->SetMarkerColor(kRed);
1144 h1F =
new TH1F(
"hTrackerClusterChargePerChSigma",
"cluster charge dispersion per chamber;chamber ID;#sigma_{charge} (fC)", nCh,-0.5,nCh-0.5);
1145 h1F->SetOption(
"P");
1146 h1F->SetMarkerStyle(kFullDotMedium);
1147 h1F->SetMarkerColor(kRed);
1160 ndes = TMath::Max(ndes,detElemId);
1162 h1I =
new TH1I(Form(
"hTrackerClusterMultiplicityForDE%04d",detElemId), Form(
"cluster size distribution in detection element %d;size (n_{pads})",detElemId), 100,0,100);
1165 h1I =
new TH1I(Form(
"hTrackerClusterChargeForDE%04d",detElemId), Form(
"cluster charge distribution in detection element %d;charge (fC)",detElemId), 100,0,1000);
1173 h1I =
new TH1I(
"hTrackerNumberOfClustersPerDE",
"Number of clusters per detection element;DetElem ID;n_{clusters}", ndes+1,-0.5,ndes+0.5);
1176 h1F =
new TH1F(
"hTrackerClusterMultiplicityPerDEMean",
"cluster mean size per DE;DetElem ID;<size> (n_{pads})", ndes+1,-0.5,ndes+0.5);
1177 h1F->SetOption(
"P");
1178 h1F->SetMarkerStyle(kFullDotMedium);
1179 h1F->SetMarkerColor(kRed);
1182 h1F =
new TH1F(
"hTrackerClusterChargePerDEMean",
"cluster mean charge per DE;DetElem ID;<charge> (fC)", ndes+1,-0.5,ndes+0.5);
1183 h1F->SetOption(
"P");
1184 h1F->SetMarkerStyle(kFullDotMedium);
1185 h1F->SetMarkerColor(kRed);
1198 const Bool_t expert = kTRUE ;
1199 const Bool_t image = kTRUE ;
1205 TH1F* hESDnTracks =
new TH1F(
"hESDnTracks",
"number of tracks;n_{tracks}", 20, 0., 20.);
1208 TH1F* hESDMatchTrig =
new TH1F(
"hESDMatchTrig",
"number of tracks matched with trigger;n_{tracks}", 20, 0., 20.);
1211 TH1F* hESDMomentum =
new TH1F(
"hESDMomentum",
"momentum distribution;p (GeV/c)", 300, 0., 300);
1214 TH1F* hESDPt =
new TH1F(
"hESDPt",
"transverse momentum distribution;p_{t} (GeV/c)", 200, 0., 50);
1217 TH1F* hESDRapidity =
new TH1F(
"hESDRapidity",
"rapidity distribution;rapidity", 200, -4.5, -2.);
1220 TH1F* hESDChi2 =
new TH1F(
"hESDChi2",
"normalized #chi^{2} distribution;#chi^{2} / ndf", 500, 0., 50.);
1223 TH1F* hESDProbChi2 =
new TH1F(
"hESDProbChi2",
"distribution of probability of #chi^{2};prob(#chi^{2})", 100, 0., 1.);
1226 TH1F* hESDThetaX =
new TH1F(
"hESDThetaX",
"#theta_{X} distribution;#theta_{X} (degree)", 360, -180., 180);
1229 TH1F* hESDThetaY =
new TH1F(
"hESDThetaY",
"#theta_{Y} distribution;#theta_{Y} (degree)", 360, -180., 180);
1233 for (Int_t i = 0; i < nCh; i++) {
1235 TH2F* hESDClusterHitMap =
new TH2F(Form(
"hESDClusterHitMap%d",i+1), Form(
"cluster position distribution in chamber %d;X (cm);Y (cm)",i+1),
1236 100, -rMax, rMax, 100, -rMax, rMax);
1240 TH1F* hESDnClustersPerTrack =
new TH1F(
"hESDnClustersPerTrack",
"number of associated clusters per track;n_{clusters}", 20, 0., 20.);
1243 TH1F* hESDnClustersPerCh =
new TH1F(
"hESDnClustersPerCh",
"averaged number of clusters per chamber per track;chamber ID;<n_{clusters}>", nCh, -0.5, nCh-0.5);
1244 hESDnClustersPerCh->SetFillColor(kRed);
1247 TH1F* hESDnClustersPerDE =
new TH1F(
"hESDnClustersPerDE",
"averaged number of clusters per DE per track;DetElem ID;<n_{clusters}>", nDE+1, -0.5, nDE+0.5);
1248 hESDnClustersPerDE->SetFillColor(kRed);
1251 for (Int_t i = 0; i < nCh; i++) {
1252 TH1F* hESDClusterChargeInCh =
new TH1F(Form(
"hESDClusterChargeInCh%d",i+1), Form(
"cluster charge distribution in chamber %d;charge (fC)",i+1), 100, 0., 1000.);
1256 TH1F* hESDClusterChargePerChMean =
new TH1F(
"hESDClusterChargePerChMean",
"cluster mean charge per chamber;chamber ID;<charge> (fC)", nCh, -0.5, nCh-0.5);
1257 hESDClusterChargePerChMean->SetOption(
"P");
1258 hESDClusterChargePerChMean->SetMarkerStyle(kFullDotMedium);
1259 hESDClusterChargePerChMean->SetMarkerColor(kRed);
1262 TH1F* hESDClusterChargePerChSigma =
new TH1F(
"hESDClusterChargePerChSigma",
"cluster charge dispersion per chamber;chamber ID;#sigma_{charge} (fC)", nCh, -0.5, nCh-0.5);
1263 hESDClusterChargePerChSigma->SetOption(
"P");
1264 hESDClusterChargePerChSigma->SetMarkerStyle(kFullDotMedium);
1265 hESDClusterChargePerChSigma->SetMarkerColor(kRed);
1268 TH1F* hESDClusterChargePerDE =
new TH1F(
"hESDClusterChargePerDE",
"cluster mean charge per DE;DetElem ID;<charge> (fC)", nDE+1, -0.5, nDE+0.5);
1269 hESDClusterChargePerDE->SetOption(
"P");
1270 hESDClusterChargePerDE->SetMarkerStyle(kFullDotMedium);
1271 hESDClusterChargePerDE->SetMarkerColor(kRed);
1274 for (Int_t i = 0; i < nCh; i++) {
1275 TH1F* hESDClusterSizeInCh =
new TH1F(Form(
"hESDClusterSizeInCh%d",i+1), Form(
"cluster size distribution in chamber %d;size (n_{pads})",i+1), 200, 0., 200.);
1279 TH1F* hESDClusterSizePerChMean =
new TH1F(
"hESDClusterSizePerChMean",
"cluster mean size per chamber;chamber ID;<size> (n_{pads})", nCh, -0.5, nCh-0.5);
1280 hESDClusterSizePerChMean->SetOption(
"P");
1281 hESDClusterSizePerChMean->SetMarkerStyle(kFullDotMedium);
1282 hESDClusterSizePerChMean->SetMarkerColor(kRed);
1285 TH1F* hESDClusterSizePerChSigma =
new TH1F(
"hESDClusterSizePerChSigma",
"cluster size dispersion per chamber;chamber ID;#sigma_{size} (n_{pads})", nCh, -0.5, nCh-0.5);
1286 hESDClusterSizePerChSigma->SetOption(
"P");
1287 hESDClusterSizePerChSigma->SetMarkerStyle(kFullDotMedium);
1288 hESDClusterSizePerChSigma->SetMarkerColor(kRed);
1291 TH1F* hESDClusterSizePerDE =
new TH1F(
"hESDClusterSizePerDE",
"cluster mean size per DE;DetElem ID;<size> (n_{pads})", nDE+1, -0.5, nDE+0.5);
1292 hESDClusterSizePerDE->SetOption(
"P");
1293 hESDClusterSizePerDE->SetMarkerStyle(kFullDotMedium);
1294 hESDClusterSizePerDE->SetMarkerColor(kRed);
1298 for (Int_t i = 0; i < nCh; i++) {
1299 TH1F* hESDResidualXInCh =
new TH1F(Form(
"hESDResidualXInCh%d",i+1), Form(
"cluster-track residual-X distribution in chamber %d;#Delta_{X} (cm)",i+1), 1000, -5., 5.);
1302 TH1F* hESDResidualYInCh =
new TH1F(Form(
"hESDResidualYInCh%d",i+1), Form(
"cluster-track residual-Y distribution in chamber %d;#Delta_{Y} (cm)",i+1), 1000, -1., 1.);
1305 TH1F* hESDLocalChi2XInCh =
new TH1F(Form(
"hESDLocalChi2XInCh%d",i+1), Form(
"local chi2-X distribution in chamber %d;local #chi^{2}_{X}",i+1), 1000, 0., 25);
1308 TH1F* hESDLocalChi2YInCh =
new TH1F(Form(
"hESDLocalChi2YInCh%d",i+1), Form(
"local chi2-Y distribution in chamber %d;local #chi^{2}_{Y}",i+1), 1000, 0., 25);
1311 TH1F* hESDLocalChi2InCh =
new TH1F(Form(
"hESDLocalChi2InCh%d",i+1), Form(
"local chi2 (~0.5*(#chi^{2}_{X}+#chi^{2}_{Y})) distribution in chamber %d;local #chi^{2}",i+1), 1000, 0., 25);
1315 TH1F* hESDResidualXPerChMean =
new TH1F(
"hESDResidualXPerChMean",
"cluster-track residual-X per Ch: mean;chamber ID;<#Delta_{X}> (cm)", nCh, -0.5, nCh-0.5);
1316 hESDResidualXPerChMean->SetOption(
"P");
1317 hESDResidualXPerChMean->SetMarkerStyle(kFullDotMedium);
1318 hESDResidualXPerChMean->SetMarkerColor(kRed);
1321 TH1F* hESDResidualYPerChMean =
new TH1F(
"hESDResidualYPerChMean",
"cluster-track residual-Y per Ch: mean;chamber ID;<#Delta_{Y}> (cm)", nCh, -0.5, nCh-0.5);
1322 hESDResidualYPerChMean->SetOption(
"P");
1323 hESDResidualYPerChMean->SetMarkerStyle(kFullDotMedium);
1324 hESDResidualYPerChMean->SetMarkerColor(kRed);
1327 TH1F* hESDResidualXPerChSigma =
new TH1F(
"hESDResidualXPerChSigma",
"cluster-track residual-X per Ch: sigma;chamber ID;#sigma_{X} (cm)", nCh, -0.5, nCh-0.5);
1328 hESDResidualXPerChSigma->SetOption(
"P");
1329 hESDResidualXPerChSigma->SetMarkerStyle(kFullDotMedium);
1330 hESDResidualXPerChSigma->SetMarkerColor(kRed);
1333 TH1F* hESDResidualYPerChSigma =
new TH1F(
"hESDResidualYPerChSigma",
"cluster-track residual-Y per Ch: sigma;chamber ID;#sigma_{Y} (cm)", nCh, -0.5, nCh-0.5);
1334 hESDResidualYPerChSigma->SetOption(
"P");
1335 hESDResidualYPerChSigma->SetMarkerStyle(kFullDotMedium);
1336 hESDResidualYPerChSigma->SetMarkerColor(kRed);
1339 TH1F* hESDLocalChi2XPerChMean =
new TH1F(
"hESDLocalChi2XPerCh",
"local chi2-X per Ch: mean;chamber ID;<local #chi^{2}_{X}>", nCh, -0.5, nCh-0.5);
1340 hESDLocalChi2XPerChMean->SetOption(
"P");
1341 hESDLocalChi2XPerChMean->SetMarkerStyle(kFullDotMedium);
1342 hESDLocalChi2XPerChMean->SetMarkerColor(kRed);
1345 TH1F* hESDLocalChi2YPerChMean =
new TH1F(
"hESDLocalChi2YPerCh",
"local chi2-Y per Ch: mean;chamber ID;<local #chi^{2}_{Y}>", nCh, -0.5, nCh-0.5);
1346 hESDLocalChi2YPerChMean->SetOption(
"P");
1347 hESDLocalChi2YPerChMean->SetMarkerStyle(kFullDotMedium);
1348 hESDLocalChi2YPerChMean->SetMarkerColor(kRed);
1351 TH1F* hESDLocalChi2PerChMean =
new TH1F(
"hESDLocalChi2PerCh",
"local chi2 (~0.5*(#chi^{2}_{X}+#chi^{2}_{Y})) per Ch: mean;chamber ID;<local #chi^{2}>", nCh, -0.5, nCh-0.5);
1352 hESDLocalChi2PerChMean->SetOption(
"P");
1353 hESDLocalChi2PerChMean->SetMarkerStyle(kFullDotMedium);
1354 hESDLocalChi2PerChMean->SetMarkerColor(kRed);
1357 TH1F* hESDResidualXPerDEMean =
new TH1F(
"hESDResidualXPerDEMean",
"cluster-track residual-X per DE: mean;DetElem ID;<#Delta_{X}> (cm)", nDE+1, -0.5, nDE+0.5);
1358 hESDResidualXPerDEMean->SetOption(
"P");
1359 hESDResidualXPerDEMean->SetMarkerStyle(kFullDotMedium);
1360 hESDResidualXPerDEMean->SetMarkerColor(kRed);
1363 TH1F* hESDResidualYPerDEMean =
new TH1F(
"hESDResidualYPerDEMean",
"cluster-track residual-Y per DE: mean;DetElem ID;<#Delta_{Y}> (cm)", nDE+1, -0.5, nDE+0.5);
1364 hESDResidualYPerDEMean->SetOption(
"P");
1365 hESDResidualYPerDEMean->SetMarkerStyle(kFullDotMedium);
1366 hESDResidualYPerDEMean->SetMarkerColor(kRed);
1369 TH1F* hESDResidualXPerDESigma =
new TH1F(
"hESDResidualXPerDESigma",
"cluster-track residual-X per DE: sigma;DetElem ID;#sigma_{X} (cm)", nDE+1, -0.5, nDE+0.5);
1370 hESDResidualXPerDESigma->SetOption(
"P");
1371 hESDResidualXPerDESigma->SetMarkerStyle(kFullDotMedium);
1372 hESDResidualXPerDESigma->SetMarkerColor(kRed);
1375 TH1F* hESDResidualYPerDESigma =
new TH1F(
"hESDResidualYPerDESigma",
"cluster-track residual-Y per DE: sigma;DetElem ID;#sigma_{Y} (cm)", nDE+1, -0.5, nDE+0.5);
1376 hESDResidualYPerDESigma->SetOption(
"P");
1377 hESDResidualYPerDESigma->SetMarkerStyle(kFullDotMedium);
1378 hESDResidualYPerDESigma->SetMarkerColor(kRed);
1381 TH1F* hESDLocalChi2XPerDEMean =
new TH1F(
"hESDLocalChi2XPerDE",
"local chi2-X per DE: mean;DetElem ID;<local #chi^{2}_{X}>", nDE+1, -0.5, nDE+0.5);
1382 hESDLocalChi2XPerDEMean->SetOption(
"P");
1383 hESDLocalChi2XPerDEMean->SetMarkerStyle(kFullDotMedium);
1384 hESDLocalChi2XPerDEMean->SetMarkerColor(kRed);
1387 TH1F* hESDLocalChi2YPerDEMean =
new TH1F(
"hESDLocalChi2YPerDE",
"local chi2-Y per DE: mean;DetElem ID;<local #chi^{2}_{Y}>", nDE+1, -0.5, nDE+0.5);
1388 hESDLocalChi2YPerDEMean->SetOption(
"P");
1389 hESDLocalChi2YPerDEMean->SetMarkerStyle(kFullDotMedium);
1390 hESDLocalChi2YPerDEMean->SetMarkerColor(kRed);
1393 TH1F* hESDLocalChi2PerDEMean =
new TH1F(
"hESDLocalChi2PerDE",
"local chi2 (~0.5*(#chi^{2}_{X}+#chi^{2}_{Y})) per DE: mean;DetElem ID;<local #chi^{2}>", nDE+1, -0.5, nDE+0.5);
1394 hESDLocalChi2PerDEMean->SetOption(
"P");
1395 hESDLocalChi2PerDEMean->SetMarkerStyle(kFullDotMedium);
1396 hESDLocalChi2PerDEMean->SetMarkerColor(kRed);
1400 TH1F* hESDnTotClustersPerCh =
new TH1F(
"hESDnTotClustersPerCh",
"total number of associated clusters per chamber;chamber ID;#Sigma(n_{clusters})", nCh, -0.5, nCh-0.5);
1402 TH1F* hESDnTotClustersPerDE =
new TH1F(
"hESDnTotClustersPerDE",
"total number of associated clusters per DE;DetElem ID;#Sigma(n_{clusters})", nDE+1, -0.5, nDE+0.5);
1404 TH1F* hESDnTotFullClustersPerDE =
new TH1F(
"hESDnTotFullClustersPerDE",
"total number of associated clusters containing pad info per DE;DetElem ID;#Sigma(n_{full clusters})", nDE+1, -0.5, nDE+0.5);
1406 TH1F* hESDSumClusterChargePerDE =
new TH1F(
"hESDSumClusterChargePerDE",
"sum of cluster charge per DE;DetElem ID;#Sigma(charge) (fC)", nDE+1, -0.5, nDE+0.5);
1408 TH1F* hESDSumClusterSizePerDE =
new TH1F(
"hESDSumClusterSizePerDE",
"sum of cluster size per DE;DetElem ID;#Sigma(size) (n_{pads})", nDE+1, -0.5, nDE+0.5);
1410 TH1F* hESDSumResidualXPerDE =
new TH1F(
"hESDSumResidualXPerDE",
"sum of cluster-track residual-X per DE;DetElem ID;#Sigma(#Delta_{X}) (cm)", nDE+1, -0.5, nDE+0.5);
1412 TH1F* hESDSumResidualYPerDE =
new TH1F(
"hESDSumResidualYPerDE",
"sum of cluster-track residual-Y per DE;DetElem ID;#Sigma(#Delta_{Y}) (cm)", nDE+1, -0.5, nDE+0.5);
1414 TH1F* hESDSumResidualX2PerDE =
new TH1F(
"hESDSumResidualX2PerDE",
"sum of cluster-track residual-X**2 per DE;DetElem ID;#Sigma(#Delta_{X}^{2}) (cm^{2})", nDE+1, -0.5, nDE+0.5);
1416 TH1F* hESDSumResidualY2PerDE =
new TH1F(
"hESDSumResidualY2PerDE",
"sum of cluster-track residual-Y**2 per DE;DetElem ID;#Sigma(#Delta_{Y}^{2}) (cm^{2})", nDE+1, -0.5, nDE+0.5);
1418 TH1F* hESDSumLocalChi2XPerDE =
new TH1F(
"hESDSumLocalChi2XPerDE",
"sum of local chi2-X per DE;DetElem ID;#Sigma(local #chi^{2}_{X})", nDE+1, -0.5, nDE+0.5);
1420 TH1F* hESDSumLocalChi2YPerDE =
new TH1F(
"hESDSumLocalChi2YPerDE",
"sum of local chi2-Y per DE;DetElem ID;#Sigma(local #chi^{2}_{Y})", nDE+1, -0.5, nDE+0.5);
1422 TH1F* hESDSumLocalChi2PerDE =
new TH1F(
"hESDSumLocalChi2PerDE",
"sum of local chi2 (~0.5*(#chi^{2}_{X}+#chi^{2}_{Y})) per DE;DetElem ID;#Sigma(local #chi^{2})", nDE+1, -0.5, nDE+0.5);
1442 Int_t eventType = rawReader->GetType();
1444 if (eventType == AliRawEventHeaderBase::kPhysicsEvent )
1471 digitsTree->GetEvent(0);
1479 while ( ( dig = static_cast<AliMUONVDigit*>(next()) ) )
1481 if ( dig->IsTracker() )
1483 if ( dig->Charge() > 0.0 )
1486 Int_t detElemId = dig->DetElemId();
1487 Int_t manuId = dig->ManuId();
1494 oneEventData.
Add(param);
1531 clustersTree->GetEvent(0);
1542 while ( ( cluster = static_cast<AliMUONVCluster*>(next()) ) )
1544 Int_t detElemId = cluster->GetDetElemId();
1556 if ( mcr ) mcr->
Store(*cluster);
1558 for (
int i = 0; i < cluster->GetNDigits(); ++i )
1560 UInt_t digitId = cluster->GetDigitId(i);
1569 oneEventData.
Add(param);
1591 else AliError(
"Unable to get recoParam: use default ones for residual calculation");
1595 Int_t nTrkTracks = 0, nTrackMatchTrig = 0;
1599 for (Int_t iTrack = 0; iTrack < nTracks; ++iTrack) {
1623 while (trackParam) {
1628 Double_t residualX = cluster->
GetX() - trackParam->GetNonBendingCoor();
1629 Double_t residualY = cluster->
GetY() - trackParam->GetBendingCoor();
1630 Double_t sigmaResidualX2 = cluster->
GetErrX2() - trackParam->GetCovariances()(0,0);
1631 Double_t sigmaResidualY2 = cluster->
GetErrY2() - trackParam->GetCovariances()(2,2);
1632 Double_t localChi2X = (sigmaResidualX2 > 0.) ? residualX*residualX/sigmaResidualX2 : 0.;
1633 Double_t localChi2Y = (sigmaResidualY2 > 0.) ? residualY*residualY/sigmaResidualY2 : 0.;
1634 Double_t localChi2 = 0.5 * trackParam->GetLocalChi2();
1692 while ( ( o = next() ) )
1694 TH1* h =
dynamic_cast<TH1*
>(o);
1697 TString hn(h->GetName());
1699 if ( !hn.Contains(
"TrackerBusPatchConfig") )
1701 AliDebug(1,Form(
"Resetting %s",hn.Data()));
1707 AliDebug(1,Form(
"Will not reset histogram %s",hn.Data()));
1714 TString hn(harr->GetName());
1715 if ( !hn.Contains(
"TrackerBusPatchConfig") ) {
1717 AliDebug(1,Form(
"Resetting clones of %s",hn.Data()));
1721 while ( (hc=dynamic_cast<TH1*>(nextCl())) ) hc->Reset();
1724 AliDebug(1,Form(
"Will not reset clones of histogram %s",hn.Data()));
1731 AliDebug(1,Form(
"Resetting %s",d->GetName()));
1735 AliError(Form(
"Found an object of class %s. Do not know how to reset.",o->ClassName()));
1781 array->SetOwner(kTRUE);
1782 o = array->At(specieIndex);
1797 dm->
Data()->SetName(
"RawCharges");
1801 array->AddAt(o,specieIndex);
1816 o = array->At(specieIndex);
1823 array->AddAt(o,specieIndex);
1838 o = array->At(specieIndex);
1845 array->AddAt(o,specieIndex);
1860 o = array->At(specieIndex);
1861 array->SetOwner(kTRUE);
1866 array->AddAt(o,specieIndex);
Int_t GetNofManus() const
Bin for number of token lost errors.
void EndOfDetectorCycleRecPoints(Int_t specie, TObjArray **list)
Wrap up things at each cycle for RecPoints.
static const char * GetEventSpecieName(EventSpecie_t es)
local chi2-X distribution in chamber i
cluster charge per DE: mean
local chi2-X per DE: mean
virtual Int_t ManuChannel() const =0
The channel within ManuId() this digit belongs to (manuChannel for tracker, localBoardChannel for tri...
void ResetDetectorRaws(TObjArray *list)
Reset anything that must be reset for Raws.
virtual Double_t DetectionElement(Int_t detElemId, Int_t dim=0) const =0
Get the value for a given DE and given dimension.
virtual void DisableChannelLevel()=0
Disable recording of information at the channel level.
whether we're making QA of tracker or not
Implementation of AliMUONVTrackerData.
Number of good physics events seen (and used)
static void ESDToMUON(const AliESDMuonTrack &esdTrack, AliMUONTrack &track, Bool_t refit=kTRUE)
Class to be called from AliMUONQADataMakerRec.
Reading Raw data class for trigger and tracker chambers.
Status of readout (errors, missing pads, etc...)
The iterator over detection elements.
Int_t GetNClusters() const
return the number of clusters attached to the track
static Float_t InvalidFloatValue()
Return 1E38 as invalid float value.
sum of cluster-track residual-Y per DE
void EnableErrorLogger(AliMUONLogger *logger)
Set the error logger.
cluster size per Ch: mean
total number of associated clusters per chamber
void GetBusPerDsp(Int_t *iBusPerDSP) const
cluster-track residual-Y distribution in chamber i
Tracker: cluster multiplicity per chamber.
cluster charge per Ch: dispersion
Int_t GetFrtId(Int_t index) const
AliESDMuonTrack * GetMuonTrack(Int_t i)
Int_t Add2ESDsList(TH1 *hist, const Int_t index, const Bool_t expert=kFALSE, const Bool_t image=kFALSE)
static UInt_t GetExpertBit()
total number of associated clusters containing pad info per DE
Class to describe the MUON tracks in the Event Summary Data class.
Bin for number of glitch errors.
static Int_t NTrackingCh()
Return number of tracking chambers.
AliMUONTrackerQADataMakerRec(AliQADataMakerRec *master)
Bin for number of missing bus patches (in actual data)
Int_t Add2RecPointsList(TH1 *hist, const Int_t index, const Bool_t expert=kFALSE, const Bool_t image=kFALSE)
cluster size per Ch: mean
void FillEventSize(AliRawReader *rawReader)
void FillReadoutStatus(AliMUONLogger &log, AliMUONVTrackerData *data, Int_t trigCl)
cluster size per DE: mean
cluster-track residual-Y per DE: dispersion
static void ResetTracker(const AliMUONRecoParam *recoParam=0x0, Bool_t info=kTRUE)
virtual ~AliMUONTrackerQADataMakerRec()
void Store(AliMUONVCluster &cluster)
cluster charge distribution in chamber i
local chi2-Y per DE: mean
virtual void MakeESDs(AliESDEvent *esd)
Produces QA data for ESD.
Producer of some AliMUONVTrackerData.
local chi2-X distribution in chamber i
Bin for number of parity errors.
Int_t NumberOfEntries() const
void ProjectTrackerData(AliMUONVTrackerData *data, TH1 &hbp, TH1 &hnevents, TH1 &hddl, TH1 &hddlevents)
AliMUONVStore * Config() const
Get the config store.
AliMUONQAMappingCheck * MappingCheckRecPoints(Int_t specie, Bool_t create=kFALSE)
cluster charge per DE: mean
Int_t GetDEId() const
Return the Detection element Id.
virtual void SetDimensionName(Int_t index, const char *value)
Set the name of a given dimension.
Track parameters in ALICE dimuon spectrometer.
AliQADataMakerRec * fMaster
master to get access to its methods
Int_t CurrentDEId() const
virtual Int_t NumberOfEvents(Int_t ddlNumber) const =0
Double_t GetNormalizedChi2() const
virtual void Clear(Option_t *opt="")=0
Clear container.
virtual Double_t GetErrX2() const =0
Return resolution**2 (cm**2) on coordinate X.
Int_t GetManuId(Int_t index) const
virtual void InitRaws()
Initialization for handling Raws.
distribution of probability of chi2
void BookHistograms(AliQAv1::TASKINDEX_t task)
Tracker : cluster multiplicity per DE.
Parity errors during readout of the tracker.
TObjArray * fTrackerCalDataArray
! tracker data accumulation (calibrated digits)
Bool_t Next(TString &msg, Int_t &occurance)
Bool_t ContainTrackerData() const
virtual TIterator * CreateIterator() const =0
Create an iterator to loop over all our digits.
#define AliWarning(message)
Tracker : tracker data of clusters (all and mono-cathode ones)
AliMUONVTrackerData * Data() const
Get our accumulated data.
The class defined electronics properties of DDL.
virtual void MakeRaws(AliRawReader *rawReader)
Produces QA data for Raws.
AliMUONVTrackerData * TrackerCalData(Int_t specie, Bool_t create=kFALSE)
cluster size per DE: mean
virtual void InitDigits()
Initialization for handling Digits.
Int_t Add2List(TH1 *hist, const Int_t index, AliQAv1::TASKINDEX_t task, const Bool_t expert, const Bool_t image, const Bool_t saveForCorr)
cluster size per Ch: dispersion
static Float_t Rmax(Int_t i)
Return chamber i outer radius.
A logger that keeps track of the number of times a message appeared.
virtual TObject * GetESDsData(const Int_t index)
TObjArray * fTrackerRecDataArray
! tracker data accumulation (only calibrated digits belonging to reconstructed clusters) ...
virtual void SetOwnerOfData(Bool_t)
Whether or not we're the owner of our AliMUONVTrackerData.
cluster charge per Ch: mean
Bin for number of empty events.
Container of calibration values for a given number of channels.
static AliMpDDLStore * Instance(Bool_t warn=true)
void EndOfDetectorCycleESDs(Int_t specie, TObjArray **list)
Wrap up things at each cycle for ESD.
static Int_t GetChamberId(Int_t detElemId, Bool_t warn=true)
static Int_t ManuNofChannels()
Max number of channels per manu.
MUON Quality assurance data maker.
abstract base class for clusters
local chi2-Y per Ch: mean
AliMUONDigitMaker * fDigitMaker
! pointer to digit maker
Token lost errors during readout of the tracker.
virtual TObject * FindObject(Int_t i, Int_t j) const
Find an object using 2 ids.
virtual AliMUONVDigitStore * Create() const =0
Create an (empty) object of the same concrete class as *this.
virtual AliMUONVStore * Create() const =0
Create an empty copy of this.
sum of cluster-track residual-Y**2 per DE
Int_t GetNumberOfMuonTracks() const
sum of local chi2-X per DE
event size per DDL per event
cluster size per Ch: dispersion
local chi2-X per Ch: mean
AliMpDDL * GetDDL(Int_t ddlId, Bool_t warn=true) const
Double_t GetGlobalChi2() const
return the minimum value of the function minimized by the fit
sum of cluster charge per DE
Int_t GetId() const
Return the unique Id.
Int_t GetFrtId() const
Return the FRT Id.
normalized chi2 distribution
Int_t GetDEId(Int_t index) const
sum of cluster-track residual-X per DE
Interface for a MUON QADataMakerRec.
void InsertTrackerData(Int_t specie, TObjArray **list, TObject *object, Int_t indexNumber, Bool_t replace=kFALSE)
Double_t GetThetaXUncorrected(void) const
#define AliCodeTimerAuto(message, counter)
cluster size distribution in chamber i
static AliMp::StationType GetStationType(Int_t detElemId)
Implementation of AliMUONVCalibParam for tuples of double.
Bin for number of padding errors.
void EndOfDetectorCycleDigits(Int_t specie, TObjArray **list)
Wrap up things at each cycle for Digits.
sum of local chi2-Y per DE
cluster-track residual-Y per Ch: mean
virtual void DisableChannelLevel()
Disable storing values at the channel level.
virtual Int_t GetNDigits() const =0
Return number of associated digits.
void SetRunning(Bool_t flag)
Set the runnning status.
cluster-track residual-X per DE: dispersion
AliMpBusPatch * GetBusPatch(Int_t busPatchId, Bool_t warn=true) const
Int_t GetDdlId() const
Return the Ddl Id.
virtual void MakeDigits(TTree *dig)
Produces QA data for Digits.
Int_t GetId() const
Return the unique Id.
AliMUONVTrackerDataMaker * TrackerDataMaker(Int_t specie) const
static Int_t GetNTrigClasses()
TObject * GetDigitsData(Int_t index) const
static Int_t DdlIDOffset(const char *detectorName)
nof of events per DDL (seen)
AliMUONVDigitStore * fDigitStore
! pointer to digits store
Tracker: cluster charge per chamber.
Bool_t ProcessEvent()
Process current event.
virtual void InitRecPoints()
Initialization for handling RecPoints.
cluster charge per Ch: mean
virtual Double_t GetErrY2() const =0
Return resolution**2 (cm**2) on coordinate Y.
static AliMUONVTrackReconstructor * GetTracker()
Return pointer to the MUON tracker if any (use first ResetTracker(...) to create it) ...
cluster-track residual-X per Ch: mean
Int_t FillESDsData(Int_t index, double x)
Basic implementation of AliMUONVStore container using AliMpExMap internally.
TObjArray * fMappingCheckRecPointsArray
! mapping cross-checker (RecPoints)
virtual void Clear(Option_t *opt="")=0
Reset the data.
sum of cluster-track residual-X**2 per DE
static Int_t GetChamberId(UInt_t uniqueID)
Return chamber id (0..), part of the uniqueID.
cluster charge per Ch: dispersion
number of clusters per chamber per track
TObjArray * fTrackerDataMakerArray
! tracker data accumulation (Raws)
virtual Double_t GetY() const =0
Return coordinate Y (cm)
The class defines the properties of BusPatch.
#define AliDebug(logLevel, message)
Single entry point to access MUON calibration data.
Implementation of VTrackerDataMaker to read raw data.
TObject * GetRawsData(Int_t index) const
virtual Bool_t Add(TObject *object)
Add an object to the store.
AliMUONLogger * fLogger
! (readout) error logger
number of tracks matched with trigger
void EndOfDetectorCycleRaws(Int_t specie, TObjArray **list)
Wrap up things at each cycle for Raws.
AliMUONVTrackerData * GetTrackerData() const
cluster position distribution in chamber i
AliMUONVClusterStore * fClusterStore
! pointer to cluster store
void Clear(Option_t *="")
virtual Bool_t Add(const AliMUONVStore &store, TArrayI *arrayOfNofEventsPerDDL=0x0)=0
Add values for one event from one full store.
virtual Double_t BusPatch(Int_t busPatchId, Int_t dim=0) const =0
Get the value for a given buspatch and given dimension.
virtual AliMUONVTrackerData * Data() const =0
Our data.
sum of cluster size per DE
Configuration of the tracker.
cluster-track residual-Y per Ch: dispersion
cluster-track residual-X per DE: mean
virtual Int_t ManuId() const =0
The electronic card id this digit belongs to (manuId for tracker, localboardId for trigger) ...
Tracker : number of clusters per DE.
virtual void MakeRecPoints(TTree *recpo)
Produces QA data for RecPoints.
number of clusters per DE per track
Double_t fBPxmin
! min bin value for bus patch
total number of associated clusters per DE
static Int_t GetDetElemId(UInt_t uniqueID)
Return detection element id, part of the uniqueID.
Padding errors during readout of the tracker.
Int_t FillRecPointsData(Int_t index, double x)
Bool_t LastEventWasEmpty() const
Whether last decoded event was empty.
virtual Double_t GetX() const =0
Return coordinate X (cm)
nof of events per DDL (used) WARNING : same as above
Int_t FillRawsData(Int_t index, double x)
void SetTryRecover(Bool_t flag)
const char * Name() const
Get our name.
TH1 * fBusPatchConfig
! bus patch configuration
Bool_t ContainTriggerData() const
Reconstructed track in ALICE dimuon spectrometer.
#define AliError(message)
Tracker : cluster charge per DE.
as kTrackerReadoutStatus but normalized by the number of events
static AliCDBManager * Instance(TMap *entryCache=NULL, Int_t run=-1)
static Int_t AConvert(EventSpecie_t es)
void SetRawReader(AliRawReader *rawReader)
static Int_t NumberOfDdls(const char *detectorName)
const AliMUONRecoParam * GetRecoParam() const
DDL occupancy in percent.
Int_t Add2RawsList(TH1 *hist, const Int_t index, const Bool_t expert=kFALSE, const Bool_t image=kFALSE, const Bool_t saveForCorr=kFALSE)
Base class for MUON data stores.
MUON Quality assurance data maker.
Bin for number of missing bus patches (in config)
static Int_t GetQADebugLevel()
Double_t GetThetaYUncorrected(void) const
cluster-track residual-X distribution in chamber i
virtual Double_t GetCharge() const =0
Set the cluster charge.
virtual TIterator * CreateIterator() const =0
Return an iterator to loop over the whole store.
AliMUONVTrackerData * TrackerRecData(Int_t specie, Bool_t create=kFALSE)
Base class for MUON data that can be presented at different levels in the hierarchy of the MUON syste...
number of clusters per track
virtual Bool_t Connect(TTree &tree, Bool_t alone=kTRUE) const
Connect us to a TTree (only valid if CanConnect()==kTRUE)
Tracker: number of clusters per chamber.
virtual Bool_t HasBusPatch(Int_t busPatchId) const =0
Whether we have data for a given buspath.
AliMUONQADataMakerRec * Master() const
local chi2-Y distribution in chamber i
static Int_t NofTrackingChambers()
Return number of tracking chambers.
static TString GetTaskName(UInt_t tsk)
Double_t fBPxmax
! max bin value for bus patch
virtual TObject * FindObject(const char *name) const
Find an object by name.
Tracker: cluster position distribution per chamber.
TObjArray * GetArray(TObjArray *&array, Bool_t create)
cluster-track residual-X per Ch: dispersion
AliMUONCalibrationData * fCalibrationData
! Used to load Local, Regional and Global masks
virtual void SetValueAsDouble(Int_t i, Int_t j, Double_t value)
cluster-track residual-Y per DE: mean
TObjArray * GetTrackParamAtCluster() const
Int_t fBPnbins
! number of bus patch bins
TObject * GetRecPointsData(Int_t index) const
virtual void InitESDs()
Initialization for handling ESD.