32 #include "AliCodeTimer.h"
39 #include "AliRecoParam.h"
48 #include "AliRawReader.h"
54 #include "AliDCSValue.h"
58 #include "AliCDBManager.h"
71 Double_t ProtectedSqrt(Double_t x)
73 return ( x > 0.0 ? TMath::Sqrt(x) : 0.0 );
80 fCalibrationData(0x0),
81 fTriggerProcessor(0x0),
83 fDigitStoreFromRaw(0x0),
84 fTriggerStoreFromRaw(0x0),
85 fTriggerStoreReprocessRaw(0x0),
124 Int_t histoRawsIndex[] = {
130 Int_t histoRawsScaledIndex[] = {
137 const Int_t kNrawsHistos =
sizeof(histoRawsIndex)/
sizeof(histoRawsIndex[0]);
138 Float_t scaleFactor[kNrawsHistos] = {100., 100., 100., 1.};
140 for ( Int_t itc=-1; itc<AliQADataMakerRec::GetNTrigClasses(); itc++) {
149 if ( ! histo1D )
continue;
151 for(Int_t ihisto=0; ihisto<kNrawsHistos; ihisto++){
153 TH1* inputHisto =
GetRawsData(histoRawsIndex[ihisto],itc);
154 TH1* scaledHisto =
GetRawsData(histoRawsScaledIndex[ihisto],itc);
156 if ( scaledHisto && inputHisto && nbevent > 0 ) {
157 scaledHisto->Reset();
158 scaledHisto->Add(inputHisto);
159 scaledHisto->Scale(scaleFactor[ihisto]/nbevent);
171 hYCopyNorm->Divide(hYCopy, hYCopyTests, 100., 1.);
173 Float_t mean = hYCopyNorm->Integral();
179 if ( hTriggerRatio ){
197 scaledHisto->Reset();
198 scaledHisto->Add(inputHisto);
200 if ( scaleValue > 0. ) scaledHisto->Scale(1./scaleValue);
212 AliCodeTimerAuto(
"",0);
214 const Bool_t expert = kTRUE ;
215 const Bool_t saveCorr = kTRUE ;
216 const Bool_t image = kTRUE ;
218 TString boardName =
"Local board Id";
227 TString histoName, histoTitle;
229 histo1D =
new TH1F(
"hTriggerScalersTime",
"Acquisition time from trigger scalers", 1, 0.5, 1.5);
230 histo1D->GetXaxis()->SetBinLabel(1,
"One-bin histogram: bin is filled at each scaler event.");
231 histo1D->GetYaxis()->SetTitle(
"Cumulated scaler time (s)");
236 TString cathName = ( iCath==0 ) ?
"BendPlane" :
"NonBendPlane";
238 histoName = Form(
"hTriggerScalers%sChamber%i", cathName.Data(), 11+iChamber);
239 histoTitle = Form(
"Chamber %i - %s: trigger scaler counts", 11+iChamber, cathName.Data());
240 histo2D =
new TH2F(histoName.Data(), histoTitle.Data(),
241 nbLocalBoard, 0.5, (Float_t)nbLocalBoard + 0.5,
243 histo2D->GetXaxis()->SetTitle(boardName.Data());
244 histo2D->GetYaxis()->SetTitle(
"Strip");
245 histo2D->SetOption(
"COLZ");
252 TString cathName = ( iCath==0 ) ?
"BendPlane" :
"NonBendPlane";
254 histoName = Form(
"hTriggerScalersDisplay%sChamber%i", cathName.Data(), 11+iChamber);
255 histoTitle = Form(
"Chamber %i - %s: Hit rate from scalers (Hz/cm^{2})", 11+iChamber, cathName.Data());
257 iCath, iChamber, histoTitle);
258 histo2D->SetOption(
"COLZ");
265 TString axisLabel[
AliMUONQAIndices::kNtrigCalibSummaryBins] = {
"#splitline{Dead}{Channels}",
"#splitline{Dead}{Local Boards}",
"#splitline{Dead}{Regional Boards}",
"#splitline{Dead}{Global Board}",
""};
269 histoCalib->GetXaxis()->SetBinLabel(ibin, axisLabel[ibin-1].Data());
271 histoCalib->SetFillColor(kBlue);
272 histoCalib->GetYaxis()->SetTitle(
"Counts");
274 TH1F* histoCalibNorm = (TH1F*)histoCalib->Clone(
"hTriggerCalibSummary");
275 histoCalibNorm->SetTitle(
"MTR calibration summary");
276 histoCalibNorm->SetOption(
"bartext0");
277 histoCalibNorm->GetYaxis()->SetTitle(
"Percentage per event (%)");
287 const char *globalXaxisName[6] = {
"US HPt",
"US LPt",
"LS HPt",
"LS LPt",
"SGL HPt",
"SGL LPt"};
288 const char *allLevelXaxisName[
AliMUONQAIndices::kNtrigAlgoErrorBins] = {
"Local algo X",
"Local algo Y",
"Local LUT",
"Local Y Copy" ,
"Local2Regional",
"Regional",
"Regional2Global",
"GlobalFromInGlobal",
"GlobalFromInLocal",
"GlobalFromOutLocal"};
291 TString errorAxisTitle =
"Number of errors";
293 histo1D =
new TH1F(
"hTriggerErrorLocalXPos",
"ErrorLocalXPos",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
294 histo1D->GetXaxis()->SetTitle(boardName.Data());
295 histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
298 histo1D =
new TH1F(
"hTriggerErrorLocalYPos",
"ErrorLocalYPos",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
299 histo1D->GetXaxis()->SetTitle(boardName.Data());
300 histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
303 histo1D =
new TH1F(
"hTriggerErrorLocalDev",
"ErrorLocalDev",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
304 histo1D->GetXaxis()->SetTitle(boardName.Data());
305 histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
308 histo1D =
new TH1F(
"hTriggerErrorLocalTriggerDec",
"ErrorLocalTriggerDec",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
309 histo1D->GetXaxis()->SetTitle(boardName.Data());
310 histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
313 histo1D =
new TH1F(
"hTriggerErrorLocalLPtLSB",
"ErrorLocalLPtLSB",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
314 histo1D->GetXaxis()->SetTitle(boardName.Data());
315 histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
318 histo1D =
new TH1F(
"hTriggerErrorLocalLPtMSB",
"ErrorLocalLPtMSB",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
319 histo1D->GetXaxis()->SetTitle(boardName.Data());
320 histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
323 histo1D =
new TH1F(
"hTriggerErrorLocalHPtLSB",
"ErrorLocalHPtLSB",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
324 histo1D->GetXaxis()->SetTitle(boardName.Data());
325 histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
328 histo1D =
new TH1F(
"hTriggerErrorLocalHPtMSB",
"ErrorLocalHPtMSB",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
329 histo1D->GetXaxis()->SetTitle(boardName.Data());
330 histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
333 histo1D =
new TH1F(
"hTriggerErrorLocalTrigY",
"ErrorLocalTrigY",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
334 histo1D->GetXaxis()->SetTitle(boardName.Data());
335 histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
339 histo1D =
new TH1F(
"hTriggerRatio4434Local",
"Ratio4434Local",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
340 histo1D->GetXaxis()->SetTitle(boardName.Data());
341 histo1D->GetYaxis()->SetTitle(
"ratio 44/34");
343 histo1D =
new TH1F(
"hTriggerRatio4434AllEvents",
"Ratio4434AllEvents",1,0,1);
344 histo1D->GetXaxis()->SetTitle(
"Event number");
345 histo1D->GetYaxis()->SetTitle(
"ratio 44/34");
346 histo1D->SetLineColor(4);
348 histo1D =
new TH1F(
"hTriggerRatio4434SinceLastUpdate",
"Ratio4434SinceLastUpdate",1,0,1);
349 histo1D->GetXaxis()->SetTitle(
"Event number");
350 histo1D->GetYaxis()->SetTitle(
"ratio 44/34");
354 histo1D =
new TH1F(
"hTriggerErrorLocal2RegionalLPtLSB",
"ErrorLocal2RegionalLPtLSB",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
355 histo1D->GetXaxis()->SetTitle(boardName.Data());
356 histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
359 histo1D =
new TH1F(
"hTriggerErrorLocal2RegionalLPtMSB",
"ErrorLocal2RegionalLPtMSB",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
360 histo1D->GetXaxis()->SetTitle(boardName.Data());
361 histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
364 histo1D =
new TH1F(
"hTriggerErrorLocal2RegionalHPtLSB",
"ErrorLocal2RegionalHPtLSB",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
365 histo1D->GetXaxis()->SetTitle(boardName.Data());
366 histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
369 histo1D =
new TH1F(
"hTriggerErrorLocal2RegionalHPtMSB",
"ErrorLocal2RegionalHPtMSB",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
370 histo1D->GetXaxis()->SetTitle(boardName.Data());
371 histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
374 histo1D =
new TH1F(
"hTriggerErrorOutGlobalFromInGlobal",
"ErrorOutGlobalFromInGlobal",6,-0.5,6-0.5);
375 histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
376 for (
int ibin=0;ibin<6;ibin++){
377 histo1D->GetXaxis()->SetBinLabel(ibin+1,globalXaxisName[ibin]);
381 histo1D =
new TH1F(
"hTriggerErrorOutGlobalFromInLocal",
"ErrorOutGlobalFromInLocal",6,-0.5,6-0.5);
382 histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
383 for (
int ibin=0;ibin<6;ibin++){
384 histo1D->GetXaxis()->SetBinLabel(ibin+1,globalXaxisName[ibin]);
389 histoAlgoErr->GetYaxis()->SetTitle(
"Number of events with errors");
391 histoAlgoErr->GetXaxis()->SetBinLabel(ibin+1,allLevelXaxisName[ibin]);
393 histoAlgoErr->SetFillColor(kBlue);
395 TH1F* histoAlgoErrNorm = (TH1F*)histoAlgoErr->Clone(
"hTriggerAlgoErrors");
396 histoAlgoErrNorm->SetOption(
"bartext0");
397 histoAlgoErrNorm->SetTitle(
"Trigger algorithm errors");
398 histoAlgoErrNorm->GetYaxis()->SetTitle(
"% of events with errors");
403 histo1D =
new TH1F(
"hTriggerTriggeredBoards",
"Triggered boards", nbLocalBoard, 0.5, (Float_t)nbLocalBoard + 0.5);
407 0, 0,
"Local board triggers / event");
408 histo2D->SetOption(
"COLZ");
411 TH1F* histoYCopyErr =
new TH1F(
"hTriggerErrorLocalYCopy",
"Number of YCopy errors",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
412 histoYCopyErr->GetXaxis()->SetTitle(boardName.Data());
413 histoYCopyErr->GetYaxis()->SetTitle(errorAxisTitle.Data());
415 TH1F* histoYCopyErrTest = (TH1F*)histoYCopyErr->Clone(
"hTriggerErrorLocalYCopyTest");
416 histoYCopyErrTest->SetTitle(
"Number of YCopy tested");
418 TH1F* histoYCopyErrNorm = (TH1F*)histoYCopyErr->Clone(
"hTriggerErrorLocalYCopyNorm");
419 histoYCopyErrNorm->SetTitle(
"% of YCopy errors");
426 histoROerr->GetYaxis()->SetTitle(
"Fraction of errors");
427 histoROerr->SetFillColor(kBlue);
429 histoROerr->GetXaxis()->SetBinLabel(ibin+1,readoutErrNames[ibin]);
432 TH1F* histoROerrNorm = (TH1F*)histoROerr->Clone(
"hTriggerReadoutErrors");
433 histoROerrNorm->SetTitle(
"Trigger Read-Out errors");
434 histoROerrNorm->SetOption(
"bartext0");
435 histoROerrNorm->GetYaxis()->SetTitle(
"% of errors per event");
440 TH1F* histoGlobalMult =
new TH1F(
"hTriggerGlobalOutMultiplicity",
"Trigger global outputs multiplicity", 6, -0.5, 6.-0.5);
441 histoGlobalMult->GetYaxis()->SetTitle(
"Number of triggers");
442 histoGlobalMult->GetXaxis()->SetTitle(
"Global output");
443 for (
int ibin=0;ibin<6;ibin++){
444 histoGlobalMult->GetXaxis()->SetBinLabel(ibin+1,globalXaxisName[ibin]);
446 histoGlobalMult->SetFillColor(kBlue);
448 TH1F* histoGlobalMultNorm = (TH1F*)histoGlobalMult->Clone(
"hTriggerGlobalOutMultiplicityPerEvt");
449 histoGlobalMultNorm->SetTitle(
"Trigger global outputs multiplicity per event");
450 histoGlobalMultNorm->SetOption(
"bartext0");
453 histoGlobalMultNorm->GetYaxis()->SetTitle(
"Triggers per event");
458 histo1D =
new TH1F(
"hTriggerRawNAnalyzedEvents",
"Number of analyzed events per specie", 2, 0.5, 2.5);
460 histo1D->GetXaxis()->SetBinLabel(1,
"All");
461 histo1D->GetXaxis()->SetBinLabel(2,
"w/o Readout errors");
462 histo1D->GetYaxis()->SetTitle(
"Number of analyzed events");
466 histo1D =
new TH1F(
"hTriggerNumberOf34Dec",
"Number of 3/4",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
467 histo1D->GetXaxis()->SetTitle(boardName.Data());
468 histo1D->GetYaxis()->SetTitle(
"Number of 3/4");
471 histo1D =
new TH1F(
"hTriggerNumberOf44Dec",
"Number of 4/4",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
472 histo1D->GetXaxis()->SetTitle(boardName.Data());
473 histo1D->GetYaxis()->SetTitle(
"Number of 4/4");
477 histo1D =
new TH1F(
"hTriggerIsThere",
"trigger is there",1,0,1);
481 TH1F* histoGlobalScalers =
new TH1F(
"hTriggerGlobalScalers",
"Trigger global scalers", 6, -0.5, 6.-0.5);
482 histoGlobalScalers->GetYaxis()->SetTitle(
"L0 counts");
483 histoGlobalScalers->GetXaxis()->SetTitle(
"Global output");
484 for (
int ibin=0;ibin<6;ibin++){
485 histoGlobalScalers->GetXaxis()->SetBinLabel(ibin+1,globalXaxisName[ibin]);
488 TH1F* histoGlobalScalersNorm = (TH1F*)histoGlobalScalers->Clone(
"hTriggerGlobalScalersRate");
489 histoGlobalScalersNorm->SetTitle(
"Trigger global L0 scalers rate");
490 histoGlobalScalersNorm->SetOption(
"etext0");
491 histoGlobalScalersNorm->GetYaxis()->SetTitle(
"L0 scalers rate (Hz)");
507 const Bool_t expert = kTRUE ;
508 const Bool_t image = kTRUE ;
510 TH1I* h0 =
new TH1I(
"hTriggerDigitsDetElem",
"Detection element distribution in Digits;Detection element Id;Counts", 400, 1100, 1500);
524 const Bool_t expert = kTRUE ;
525 const Bool_t image = kTRUE ;
529 histo1D =
new TH1F(
"hTriggerNAnalyzedEvents",
"Number of analyzed events per specie", 1, 0.5, 1.5);
530 histo1D->GetXaxis()->SetBinLabel(1, AliRecoParam::GetEventSpecieName(
CurrentEventSpecie()));
531 histo1D->GetYaxis()->SetTitle(
"Number of analyzed events");
535 histo1D =
new TH1F(
"hTriggerTrippedChambers",
"Trigger RPCs in trip", 418, 1100-0.5, 1417+0.5);
536 histo1D->GetXaxis()->SetTitle(
"DetElemId");
537 histo1D->GetYaxis()->SetTitle(
"# of trips");
538 histo1D->SetFillColor(kRed);
539 histo1D->SetLineColor(kRed);
561 AliCodeTimerAuto(
"",0);
566 UInt_t globalInput[4];
567 for (Int_t bit=0; bit<4; bit++){
598 Int_t nDeadLocal = 0, nDeadRegional = 0, nDeadGlobal = 0, nNoisyStrips = 0;
599 Int_t nFiredStrips = 0, nStripsTot = 0;
603 Int_t countAllBoards = 0;
605 Bool_t containTriggerData = kFALSE;
606 Bool_t hasReadoutErrors = kFALSE;
608 while (rawStreamTrig.
NextDDL())
610 containTriggerData = kTRUE;
612 const AliRawDataHeader * cdh = rawReader->GetDataHeader();
613 const AliRawDataHeaderV3 * cdh3 = rawReader->GetDataHeaderV3();
615 if (!cdh && !cdh3)
continue;
617 Bool_t scalerEvent = ((cdh ? cdh->GetL1TriggerMessage() : cdh3->GetL1TriggerMessage()) & 0x1) == 0x1;
619 if ( scalerEvent ) AliDebug(1,Form(
"Scaler event: evtSpecie recoParam %s QA %s\n",
620 AliRecoParam::GetEventSpecieName(AliRecoParam::Convert(
GetRecoParam()->GetEventSpecie())),
623 Bool_t fillScalerHistos = ( scalerEvent &&
626 if ( scalerEvent != fillScalerHistos ) {
627 AliWarning(Form(
"Scaler event found but event specie is %s. Scaler histos will not be filled", AliRecoParam::GetEventSpecieName(
CurrentEventSpecie())));
633 if ( fillScalerHistos ) {
635 Double_t nOfSeconds = ((Double_t) nOfClocks) / 40e6;
638 Int_t bitCorr[6] = {2,0,3,1,4,5};
639 for (Int_t bit=0; bit<6; bit++){
649 for (Int_t bit=0; bit<6; bit++){
650 if ( resp[bit] == 0 ){
651 if ( fillScalerHistos )
665 for (Int_t i=0; i<4; i++){
672 for(Int_t iReg = 0; iReg < nReg ;iReg++)
686 Int_t nBoardsInReg = 0;
691 for(Int_t iLocal = 0; iLocal < nLocal; iLocal++)
697 if (!localStruct)
continue;
701 if ( !loCircuit )
continue;
712 TArrayS xyPattern[2];
726 if (Int_t(localStruct->
GetDec())!=0){
729 else if ( fillScalerHistos && !
TriggerUtilities()->IsMaskedBoard(loCircuit) ) nDeadLocal++;
732 if ( fillScalerHistos ) {
738 for (Int_t ibitxy = 0; ibitxy < 16; ++ibitxy) {
740 AliDebug(AliQAv1::GetQADebugLevel(),
"Filling trigger scalers");
743 UShort_t scalerVal[4] = {
744 localStruct->
GetXY1(ibitxy),
745 localStruct->
GetXY2(ibitxy),
746 localStruct->
GetXY3(ibitxy),
747 localStruct->
GetXY4(ibitxy)
759 Int_t istrip = ibitxy + offset;
768 if ( scalerVal[ich] > 0 ) {
770 loCircuit, istrip, 2*(Float_t)scalerVal[ich]);
779 if ( nBoardsInReg == 0 ) {
781 Int_t nMaskedInReg = 0;
791 countAllBoards>0?((Float_t)rawStreamTrig.
GetLocalEoWErrors())/((Float_t)countAllBoards):0,
798 if ( readoutErrors[ibin] > 0 ) {
799 hasReadoutErrors = kTRUE;
805 if ( ! containTriggerData )
return;
810 if ( hasReadoutErrors )
return;
813 if ( nStripsTot > 0 ) {
814 AliDebug(AliQAv1::GetQADebugLevel(), Form(
"nStripsFired %i nStripsTot %i", nFiredStrips, nStripsTot));
816 ((Float_t)(nStripsTot - nFiredStrips)) / ((Float_t)nStripsTot),
818 static_cast<Float_t>((Float_t)nDeadRegional / 16.),
819 static_cast<Float_t
>((Float_t)nDeadGlobal / 6.),
820 (Float_t)nNoisyStrips / ((Float_t)nStripsTot),
824 if ( fraction[ibin] > 0. )
864 digitsTree->GetEvent(0);
870 while ( ( dig = static_cast<AliMUONVDigit*>(next()) ) )
904 TH2* histoStrips=0x0;
905 TH2* histoDisplayStrips=0x0;
914 if(histoStrips->GetEntries()==0)
continue;
922 if(scaleValue>0.) histoDisplayStrips->Scale(1./scaleValue);
932 if(scaleValue>0.) histoDisplayBoards->Scale(1./scaleValue);
945 AliCodeTimerAuto(
"",0);
949 if ( !triggerDcsMap )
951 AliError(
"Cannot fill DCS histos, as triggerDcsMap is NULL");
955 const Double_t kMaxDelay = 3.;
956 const Double_t kMaxVariation = 25.;
957 const Int_t kDefaultNpoints = 200;
958 Double_t scaleFactor = 1./1000.;
960 Bool_t error = kFALSE;
961 Bool_t expert = kTRUE;
962 Bool_t image = kTRUE;
968 TH2F* currHisto = 0x0;
969 Int_t histoIndex = 0;
970 TString histoName, histoTitle;
972 TArrayD axisSlat(18+1);
973 for(Int_t islat=0; islat<=18; islat++){
974 axisSlat[islat] = -0.5 + (Float_t)islat;
977 TArrayD axisTimeAux[4], axisTime[4], axisTimeDE(kDefaultNpoints);
982 for(Int_t ich=0; ich<4; ich++){
983 axisTimeAux[ich].Set(kDefaultNpoints);
984 axisTimeAux[ich].Reset(-1.);
995 AliDebug(AliQAv1::GetQADebugLevel(), Form(
"DetElemId %i", detElemId));
997 axisTimeDE.Reset(-1.);
1000 AliDCSValue* val = 0x0;
1001 Double_t previousVal = -999.;
1002 Int_t npointsde = 0;
1003 while ( ( val = static_cast<AliDCSValue*>(next()) ) )
1005 if ( npointsde + 1 > kDefaultNpoints ) {
1006 axisTimeDE.Set(npointsde + 1);
1009 Double_t currVal = val->GetFloat();
1010 Double_t currTime = (Double_t)val->GetTimeStamp();
1011 if (npointsde > 0 ){
1012 if ( TMath::Abs( currVal - previousVal ) < kMaxVariation &&
1013 TMath::Abs( currTime - axisTimeDE[npointsde-1] ) < 40 )
continue;
1016 axisTimeDE[npointsde] = currTime;
1017 previousVal = currVal;
1026 for(Int_t ipde=0; ipde<npointsde; ipde++){
1028 if ( npoints[ich] + 1 > kDefaultNpoints ) {
1029 axisTimeAux[ich].Set(npoints[ich] + 1);
1032 for(Int_t ipoint = 0; ipoint < axisTimeAux[ich].GetSize(); ipoint++){
1033 if (axisTimeAux[ich][ipoint] < 0.) {
1034 axisTimeAux[ich][ipoint] = axisTimeDE[ipde];
1036 AliDebug(AliQAv1::GetQADebugLevel(), Form(
"Adding point %2i %.0f\n", ipoint, axisTimeAux[ich][ipoint]));
1039 if ( TMath::Abs( axisTimeDE[ipde] - axisTimeAux[ich][ipoint]) < kMaxDelay ) {
1040 axisTimeAux[ich][ipoint] = TMath::Min(axisTimeAux[ich][ipoint], axisTimeDE[ipde]);
1050 for(Int_t ich=0; ich<4; ich++){
1051 axisTimeAux[ich].Set(npoints[ich]);
1052 index[ich].Set(npoints[ich]);
1053 TMath::Sort(npoints[ich], axisTimeAux[ich].GetArray(), index[ich].GetArray(), kFALSE);
1055 axisTime[ich].Set(npoints[ich]+1);
1056 for(Int_t ipoint = 0; ipoint < axisTimeAux[ich].GetSize(); ipoint++){
1057 axisTime[ich][ipoint] = axisTimeAux[ich][index[ich][ipoint]];
1059 Double_t minStartEndWidth = 0.1 * (axisTime[ich][npoints[ich]-1] - axisTime[ich][0]);
1060 axisTime[ich][npoints[ich]] = axisTime[ich][npoints[ich]-1] + minStartEndWidth;
1061 if ( npoints[ich] >= 1)
1062 if ( axisTime[ich][1] - axisTime[ich][0] < minStartEndWidth )
1063 axisTime[ich][0] = axisTime[ich][1] - minStartEndWidth;
1079 histoName = Form(
"hTriggerRPCHVChamber%i", 11+ich);
1080 histoTitle = Form(
"Chamber %i: RPC HV (kV)", 11+ich);
1085 currHisto =
new TH2F(histoName.Data(), histoTitle.Data(),
1086 npoints[ich], axisTime[ich].GetArray(),
1087 18, axisSlat.GetArray());
1088 currHisto->GetXaxis()->SetTitle(
"Time");
1089 currHisto->GetXaxis()->SetTimeDisplay(1);
1091 currHisto->GetXaxis()->SetLabelSize(0.03);
1092 currHisto->GetYaxis()->SetTitle(
"RPC");
1093 currHisto->SetOption(
"TEXT45COLZ");
1098 Int_t slat = detElemId%100;
1099 Int_t slatBin = currHisto->GetYaxis()->FindBin(slat);
1102 AliDCSValue* val = 0x0;
1103 Double_t sumValuesPerBin = 0.;
1104 Int_t nValuesPerBin = 0;
1105 Int_t previousBin = -1;
1106 Double_t previousTime = -1., previousVal = -999., sumVal = 0., sumTime = 0.;
1107 Bool_t isTrip = kFALSE;
1108 Int_t nPointsForSlope = 0;
1109 while ( ( val = static_cast<AliDCSValue*>(next()) ) )
1111 Double_t currTime = (Double_t)val->GetTimeStamp();
1112 Int_t currentBin = currHisto->GetXaxis()->FindBin(currTime+0.5);
1113 Double_t currVal = val->GetFloat();
1114 Double_t deltaVal = currVal - previousVal;
1115 Bool_t isRepeated = kFALSE;
1116 if ( previousTime > 0 ){
1117 isRepeated = ( TMath::Abs( currVal - previousVal ) < kMaxVariation &&
1118 TMath::Abs( currTime - previousTime ) < 40 );
1121 sumTime += currTime - previousTime;
1125 if ( sumTime > 0. && nPointsForSlope >= 3 ){
1126 Double_t slope = sumVal / sumTime;
1131 if ( deltaVal * sumVal < 0. ) {
1134 nPointsForSlope = 0;
1138 if ( ! isRepeated ) {
1139 if ( currentBin != previousBin ) {
1140 if ( previousBin >= 0 ) {
1141 currHisto->SetBinContent(previousBin, slatBin, scaleFactor*sumValuesPerBin/((Double_t)nValuesPerBin));
1142 sumValuesPerBin = 0.;
1145 previousBin = currentBin;
1149 sumValuesPerBin += currVal;
1151 previousTime = currTime;
1152 previousVal = currVal;
1154 currHisto->SetBinContent(previousBin, slatBin, scaleFactor*sumValuesPerBin/((Double_t)nValuesPerBin));
1174 TString currAlias = triggerDcsNamer.
DCSAliasName(detElemId, 0, iMeas);
1176 TPair* triggerDcsPair =
static_cast<TPair*
>(triggerDcsMap->FindObject(currAlias.Data()));
1178 if (!triggerDcsPair)
1180 AliError(Form(
"Did not find expected alias (%s) for DE %d\n",
1181 currAlias.Data(),detElemId));
1188 AliError(Form(
"Could not get values for alias %s\n",currAlias.Data()));
1203 AliCodeTimerAuto(
"",0);
1208 globalTriggerBoard.
Reset();
1209 for (Int_t i = 0; i < 4; i++) {
1225 AliCodeTimerAuto(
"",0);
1227 Bool_t skipBoard[234];
1230 Bool_t errorInYCopy = kFALSE;
1233 Int_t loCircuit = -1;
1236 while ( ( recoLocalTrigger = static_cast<AliMUONLocalTrigger*>(next()) ) )
1238 loCircuit = recoLocalTrigger->
LoCircuit();
1241 Int_t iboard = loCircuit - 1;
1247 Int_t recoTrigPattern[4] = {recoLocalTrigger->
GetY1Pattern(), recoLocalTrigger->GetY2Pattern(), recoLocalTrigger->GetY3Pattern(), recoLocalTrigger->GetY4Pattern()};
1252 Bool_t errorInCopyBoard = kFALSE;
1253 for(Int_t ich=0; ich<4; ich++){
1254 if ( recoTrigPattern[ich] != inputTrigPattern[ich] ){
1255 skipBoard[iboard] = kTRUE;
1258 skipBoard[iboard+1] = kTRUE;
1260 skipBoard[iboard-1] = kTRUE;
1262 errorInCopyBoard = kTRUE;
1263 errorInYCopy = kTRUE;
1266 if ( errorInCopyBoard )
1273 Bool_t errorInXPosDev = kFALSE;
1274 Bool_t errorInYPosTrigY = kFALSE;
1275 Bool_t errorInLUT = kFALSE;
1278 Bool_t respBendPlane, respNonBendPlane;
1279 while ( ( recoLocalTrigger = static_cast<AliMUONLocalTrigger*>(next()) ) )
1281 loCircuit = recoLocalTrigger->LoCircuit();
1284 Int_t iboard = loCircuit - 1;
1288 TString debugString = Form(
"Local board %i", loCircuit);
1292 Bool_t is34 = ( recoLocalTrigger->IsTrigX() && recoLocalTrigger->IsTrigY() );
1297 if ( is44 && ! is34 ) {
1298 AliWarning(Form(
"Local board %i satisfies the 4/4 conditions but not the 3/4", loCircuit));
1299 debugString += Form(
" is34 %i is44 %i is34_recalc %i", is34, is44,
TriggerElectronics()->ModifiedLocalResponse(loCircuit, respBendPlane, respNonBendPlane, kFALSE));
1300 debugString += Form(
" isTrigX %i %i isTrigY %i %i Lpt %i %i Hpt %i %i", recoLocalTrigger->IsTrigX(), inputLocalTrigger->
IsTrigX(),
1301 recoLocalTrigger->IsTrigY(), inputLocalTrigger->
IsTrigY(),
1302 recoLocalTrigger->LoLpt(), inputLocalTrigger->
LoLpt(),
1303 recoLocalTrigger->LoHpt(), inputLocalTrigger->
LoHpt());
1307 if ( recoLocalTrigger->LoStripX() != inputLocalTrigger->
LoStripX() ) {
1309 errorInXPosDev = kTRUE;
1310 debugString += Form(
" errXpos (%i, %i)", recoLocalTrigger->LoStripX(), inputLocalTrigger->
LoStripX());
1313 if ( recoLocalTrigger->GetDeviation() != inputLocalTrigger->
GetDeviation() ) {
1315 errorInXPosDev = kTRUE;
1316 debugString += Form(
" errXdev (%i, %i)", recoLocalTrigger->GetDeviation(), inputLocalTrigger->
GetDeviation());
1320 if ( (!skipBoard[iboard]) || ( (recoLocalTrigger->LoStripY() == inputLocalTrigger->
LoStripY()) && (recoLocalTrigger->LoTrigY() == inputLocalTrigger->
LoTrigY())) ) {
1322 if ( recoLocalTrigger->GetLoDecision() != inputLocalTrigger->
GetLoDecision() ) {
1324 debugString += Form(
" errDecision (%i, %i)", recoLocalTrigger->GetLoDecision(), inputLocalTrigger->
GetLoDecision());
1328 Int_t recoLut[2] = { recoLocalTrigger->LoLpt(), recoLocalTrigger->LoHpt() };
1329 Int_t inputLut[2] = {inputLocalTrigger->
LoLpt(), inputLocalTrigger->
LoHpt() };
1332 for (Int_t ilut=0; ilut<2; ilut++){
1333 Int_t bitDiff = recoLut[ilut]^inputLut[ilut];
1334 if ( bitDiff == 0 )
continue;
1335 debugString += Form(
" errLUT[%i] (%i, %i)", ilut, recoLut[ilut], inputLut[ilut]);
1336 for (Int_t ibit=0; ibit<2; ibit++){
1337 Bool_t isBitDifferent = (bitDiff>>ibit)&1;
1338 if ( isBitDifferent ){
1348 if ( ! skipBoard[iboard] ) {
1350 if ( recoLocalTrigger->LoStripY() != inputLocalTrigger->
LoStripY() ) {
1352 errorInYPosTrigY = kTRUE;
1353 debugString += Form(
" errYpos (%i, %i)", recoLocalTrigger->LoStripY(), inputLocalTrigger->
LoStripY());
1356 if ( recoLocalTrigger->LoTrigY() != inputLocalTrigger->
LoTrigY() ) {
1358 errorInYPosTrigY = kTRUE;
1359 debugString += Form(
" errYtrig (%i, %i)", recoLocalTrigger->LoTrigY(), inputLocalTrigger->
LoTrigY());
1362 if ( debugString.Length() > 15 ) AliDebug(1,debugString.Data());
1372 if (errorInYPosTrigY)
1426 AliWarning(Form(
"Global histos not filled, 3rd argument must be 'G' or 'L'"));
1441 for (
int bit=0;bit<6;bit++){
1442 if ( recoResp[bit] != inputResp[bit] )
1452 if ( ! histoEvents )
return;
1453 Int_t numEvent = Int_t(histoEvents->GetBinContent(2));
1456 if (numEvent % evtInterval != 0)
1462 if ( ! histo44dec || ! histo34dec )
return;
1464 Float_t totalNumberOf44 = histo44dec->GetSumOfWeights();
1465 Float_t totalNumberOf34 = histo34dec->GetSumOfWeights();
1467 if ( totalNumberOf34 == 0 )
1472 if ( ! histoAllEvents )
return;
1473 Int_t nbins = histoAllEvents->GetNbinsX();
1474 Float_t maxBin = histoAllEvents->GetXaxis()->GetBinLowEdge(nbins+1);
1476 if ( numEvent - maxBin < 1)
return;
1480 Float_t previousNumOf34 = histoAllEvents->GetBinContent(0);
1481 Float_t previousNumOf44 = histoAllEvents->GetBinContent(nbins+1);
1483 Float_t numOf34Update = totalNumberOf34 - previousNumOf34;
1484 Float_t numOf44Update = totalNumberOf44 - previousNumOf44;
1488 if ( numOf34Update < evtInterval - 1 )
1496 TH1* histos[2] = {histoAllEvents, histoRatioSinceLastUpdate};
1498 for (Int_t ihisto=0; ihisto<2; ihisto++){
1499 TH1* currHisto = histos[ihisto];
1500 cloneName = Form(
"%sClone", currHisto->GetName());
1501 TArrayD newAxis(newNbins+1);
1502 for (Int_t ibin=0; ibin<newNbins; ibin++){
1503 newAxis[ibin] = currHisto->GetXaxis()->GetBinLowEdge(ibin+1);
1505 newAxis[newNbins] = numEvent;
1506 TH1F* copyHisto = (TH1F*)currHisto->Clone(cloneName.Data());
1508 currHisto->SetBins(newNbins, newAxis.GetArray());
1509 for (Int_t ibin=1; ibin<newNbins; ibin++){
1510 currHisto->SetBinContent(ibin, copyHisto->GetBinContent(ibin));
1511 currHisto->SetBinError(ibin, copyHisto->GetBinError(ibin));
1516 Float_t ratio4434 = totalNumberOf44/totalNumberOf34;
1517 Float_t errorRatio4434 = ProtectedSqrt(totalNumberOf44*(1-ratio4434))/totalNumberOf34;
1519 histoAllEvents->SetBinContent(newNbins,ratio4434);
1520 histoAllEvents->SetBinError(newNbins,errorRatio4434);
1522 Float_t ratio4434Update = 0.;
1523 Float_t errorRatio4434Update = 0.;
1525 if(numOf34Update!=0){
1526 ratio4434Update = numOf44Update/numOf34Update;
1527 if ( numOf44Update > numOf34Update ){
1528 AliWarning(Form(
"Number of 4/4 (%f) is higher than number of 3/4 (%f)", numOf44Update, numOf34Update));
1530 errorRatio4434Update = ProtectedSqrt(numOf44Update*(1-ratio4434Update))/numOf34Update;
1533 histoRatioSinceLastUpdate->SetBinContent(newNbins,ratio4434Update);
1534 histoRatioSinceLastUpdate->SetBinError(newNbins,errorRatio4434Update);
1536 histoAllEvents->SetBinContent(0,totalNumberOf34);
1537 histoAllEvents->SetBinContent(newNbins+1,totalNumberOf44);
virtual ~AliMUONTriggerQADataMakerRec()
Number of read-out errors.
void GetXPattern(TArrayS &array) const
return X pattern array
Local board: Number of YPos Error vs Local Board Id.
const AliHeader * GetHeaders() const
Returns the DARC and global headers plus scalars if they exist.
Local to Regional: Number of LPt LSB error vs Local Board Id.
TMap * TriggerDCS() const
Get the Trigger HV and current values.
Light weight interface class to the local trigger card data.
Local board: Number of MSB High Pt Error vs Local Board Id.
void FillRatio4434Histos(Int_t evtInterval, Int_t itc, Bool_t isEndOfCycle)
UInt_t GetGlobalEoWErrors() const
Get number of end of Global word errors in the DDL last decoded.
Reading Raw data class for trigger and tracker chambers.
The iterator over detection elements.
Number of responding strips/boards and noisy strips.
The class defines the configuration of global crate.
const AliMpVSegmentation * GetMpSegmentation(Int_t detElemId, AliMp::CathodType cath, Bool_t warn=true) const
Bin for % of local board X pos errors.
virtual TIterator * CreateLocalIterator() const =0
Create iterator on local trigger.
AliRecoParam::EventSpecie_t CurrentEventSpecie() const
Local board: Number of XPos Error vs Local Board Id.
void SetFromGlobalResponse(UShort_t globalResponse)
Bool_t IsNotified() const
Return notified flag (not copy card)
UInt_t GetGlobalMask(Int_t index) const
Get mask for the global input.
AliMpLocalBoard * GetLocalBoard(Int_t localBoardId, Bool_t warn=true) const
Number of Decision in coincidence 3/4 vs Local Board.
Implementation of AliMUONVTriggerStore.
Bool_t FillDisplayHistogram(TH1 *inputHisto, TH2 *displayHisto, EDisplayType displayType, Int_t cathode, Int_t chamber=11, EDisplayOption displayOpt=kDefaultDisplay)
AliMUONTriggerElectronics * TriggerElectronics()
Int_t GetDEfromLocalBoard(Int_t localBoardId, Int_t chamberId) const
The class defines the properties of trigger crate.
static AliMpSegmentation * Instance(Bool_t warn=true)
Bool_t IsTrigY() const
Trigger response Y strips.
Concrete implementation of AliMUONVDigitStore for real digits.
Percentage of Global outputs and Global algo errors.
Trigger chamber HV index.
UChar_t GetId() const
Return Id.
void SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct &localStruct)
whether we're making QA of trigger or not
Int_t Add2RecPointsList(TH1 *hist, const Int_t index, const Bool_t expert=kFALSE, const Bool_t image=kFALSE)
virtual void MakeRaws(AliRawReader *rawReader)
Produces QA data for Raws.
Int_t TriggerDigits(Int_t nBoard, const TArrayS *xyPattern, AliMUONVDigitStore &digitStore, Bool_t warn=kTRUE) const
virtual Bool_t NextDDL()
DDL iterator.
virtual void InitRecPoints()
Initialization for handling RecPoints.
Int_t GetLocalBoardId(Int_t index) const
void DisplayTriggerInfo(Int_t itc)
UInt_t GetLocalEoWErrors() const
Get number of end of local word errors in the DDL last decoded.
void EndOfDetectorCycleRecPoints(Int_t specie, TObjArray **list)
Wrap up things at each cycle for RecPoints.
Bool_t FillTriggerDCSHistos()
const AliRegionalHeader * GetRegionalHeader(UInt_t i) const
Return the i'th regional header or NULL if not found.
Collection of methods usefull to DCS handling for MUON TRK and TRG.
Int_t LoLpt() const
Return Low pt.
Local board: Number of MSB Low Pt Error vs Local Board Id.
Local Board: Number of Y Copy Error vs Local Board Id Normalized to the number of tests...
Trigger scalers histogram per plane index.
static Bool_t LoadDDLStore(Bool_t warn=false)
Int_t GetSwitch(Int_t index) const
Get switch bit wise (return a inteter for backware compatibility)
Higher performance decoder stream class for reading MUON raw trigger data.
Global board: Number of error vs output bit with a re-reconstruction from Global inputs.
UChar_t RawTriggerInGlobal2OutGlobal(UInt_t globalInput[4])
Ratio 44/34 since the beginning of the run vs Event Number.
Int_t CurrentDEId() const
(1) reset the LSB for special configuration of board RC2L5B4 & RC2L6B1
Local board: Number of LSB High Pt Error vs Local Board Id.
virtual void MakeESDs(AliESDEvent *esd)
Produces QA data for ESD.
Trigger scalers display histogram per plane index.
Class that manages the properties of the local board.
void RawTriggerMatchOutLocal()
Utilities for trigger (check if pad is masked)
Local board: Number of Trigger Decision (All Pt) Error vs Local Board Id.
Local board: Number of LSB Low Pt Error vs Local Board Id.
Bin for % of local board Y copy errors.
void ResetDetector(const TObjArray *list)
Bin for % of global from global board errors.
TH1 * GetMatchingRawsHisto(Int_t index, Int_t trigId) const
static const Int_t fgkUpdateRatio4434
Event interval between 2 update of the Ratio4434 histos.
Int_t Add2DigitsList(TH1 *hist, const Int_t index, const Bool_t expert=kFALSE, const Bool_t image=kFALSE)
Int_t LoHpt() const
Return High p.
Int_t LoStripY() const
Return Y strip in MT11.
Number of Decision in coincidence 4/4 vs Local Board.
virtual TIterator * CreateIterator() const =0
Create an iterator to loop over all our digits.
virtual void InitDigits()
Initialization for handling Digits.
Local board: Number of TrigY Error vs Local Board Id.
MUON Quality assurance data maker for MTR.
UShort_t GetY4Pattern() const
Return Y strip pattern for chamber 22.
Total number of bins for trigger error summary.
UShort_t GetXY1(Int_t n) const
Return XY1.
Int_t SingleLpt() const
Return number of Single Low pt.
virtual void InitESDs()
Initialization for handling ESD.
Manager class for muon trigger electronics.
Int_t GetNofLocalBoards() const
UShort_t GetXY2(Int_t n) const
Return XY2.
AliMUONVTriggerStore * fTriggerStoreReprocessRaw
! pointer to trigger store from re-computed RAW data
virtual void Response()
virtual method for derivated classes
static AliMpDDLStore * Instance(Bool_t warn=true)
static Int_t GetChamberId(Int_t detElemId, Bool_t warn=true)
Int_t LoStripX() const
Return X strip in MT11.
AliMUONVDigitStore * fDigitStore
! pointer to digits store
TObjArray * GetDCSValues(Int_t iMeas, Int_t detElemId, TMap *triggerDcsMap, AliMpDCSNamer &triggerDcsNamer)
AliMUONTriggerUtilities * TriggerUtilities()
Local Board: Number of Y copy error tests (for normalization)
Converts histograms as a function of strip/board/slat number in human readable histograms.
Reconstructed Local Trigger object.
Triggered boards display histogram index.
Total number of bins for trigger calibration summary.
virtual AliMUONVDigitStore * Create() const =0
Create an (empty) object of the same concrete class as *this.
Number of analyzed events per event specie.
static Int_t NofCathodes()
Return number of cathodes.
void RecomputeRegional(UInt_t globalInput[4])
UShort_t GetXY4(Int_t n) const
Return XY4.
Interface for a MUON QADataMakerRec.
Bool_t IsMasked(const AliMUONVDigit &digit) const
UShort_t GetY1Pattern() const
Return Y strip pattern for chamber 11.
TH2 * GetEmptyDisplayHisto(TString displayHistoName, EDisplayType displayType, Int_t cathode, Int_t chamber=11, TString displayHistoTitle="")
AliMUONGlobalCrateConfig * GlobalTriggerCrateConfig() const
Get the configuration for the global trigger board.
virtual UShort_t GetResponse() const
Return response.
UShort_t GetY3Pattern() const
Return Y strip pattern for chamber 21.
Local to Regional: Number of HPt LSB error vs Local Board Id.
static AliMp::StationType GetStationType(Int_t detElemId)
virtual void Reset()
Reset regional board responses.
Number of Global outputs and Global algo errors.
UShort_t GetY2Pattern() const
Return Y strip pattern for chamber 12.
virtual AliMUONGlobalTrigger * Global() const =0
Return global trigger.
virtual void MakeDigits(TTree *dig)
Produces QA data for Digits.
Percentage of read-out errors.
AliMp::CathodType GetCathodType(Int_t cathodNumber)
Convert integer number in enum;.
Bin for % of local board Y pos errors.
Ratio 44/34 vs Local Board Id.
Local board: Number of Deviation Error vs Local Board.
Number of analyzed events per event specie.
Int_t GetDeviation() const
void RawTriggerMatchOutGlobal(AliMUONGlobalTrigger &inputLocalTrigger, AliMUONGlobalTrigger &recoGlobalTrigger, Char_t histo)
Percentage of errors for each trigger decision level.
Total number of bins for struct error summary.
AliMUONVDigitStore * fDigitStoreFromRaw
! pointer to digit store from RAW data
virtual void InitRaws()
Initialization for handling Raws.
Bool_t IsValid() const
Return validity.
Trips in trigger chambers.
Char_t GetLoDecision() const
Global board: Number of error vs output bit with a re-reconstruction from Local inputs.
UShort_t GetXY3(Int_t n) const
Return XY3.
virtual Int_t GetDDL() const
Return number of the current DDL being handled in the range [0..1] and -1 if no DDL set...
void GetYPattern(TArrayS &array) const
return Y pattern array
void EndOfDetectorCycleESDs(Int_t specie, TObjArray **list)
Wrap up things at each cycle for ESD.
Single entry point to access MUON calibration data.
virtual void MakeRecPoints(TTree *recpo)
Produces QA data for RecPoints.
Int_t PairLikeHpt() const
Return number of Like sign pair High pt.
TObject * GetRawsData(Int_t index) const
Bin for % of local board deviation errors.
Local to Regional: Number of LPt MSB error vs Local Board Id.
AliMpTriggerCrate * GetTriggerCrate(TString crateName, Bool_t warn=true) const
The abstract base class for the segmentation.
Bool_t IsTrigX() const
Trigger response X strips.
AliMUONDigitMaker * fDigitMaker
! pointer to digit maker
virtual Bool_t ModifiedLocalResponse(Int_t loCircuit, Bool_t &bendingPlaneResp, Bool_t &nonBendingPlaneResp, Bool_t isCoinc44=kFALSE, Int_t removeChamber=-1)
UChar_t GetGlobalResponse() const
Local board: Number of Y Copy Error vs Local Board Id.
Ratio 44/34 for the last kUpdateRatio4434 events vs Event Number.
void EndOfDetectorCycleRaws(Int_t specie, TObjArray **list)
Wrap up things at each cycle for Raws.
void ForbidCloning(TH1 *h, Bool_t v=kTRUE)
Draw input histo divided by element area.
Int_t LoTrigY() const
Return Trig Y.
AliMUONTriggerUtilities * fTriggerUtils
Class which encapsuate all information about a pad.
Number of errors for each trigger decision level (Local, Reg->Local, Reg, Reg->Glob, Global)
AliMUONTriggerQADataMakerRec(AliQADataMakerRec *master)
AliMUONCalibrationData * fCalibrationData
! Used to load Local, Regional and Global masks
Int_t FillRecPointsData(Int_t index, double x)
UInt_t GetRegionalHeaderCount() const
Return the number of regional structures in the DDL payload.
virtual Bool_t Add(TObject *object)
Add an object, if of the right type.
Int_t FillRawsData(Int_t index, double x)
virtual void Clear(Option_t *opt="")=0
Clear ourselves (i.e. Reset)
AliMUONVTriggerStore * fTriggerStoreFromRaw
! pointer to trigger store from input RAW data
AliMUONTriggerElectronics * fTriggerProcessor
! trigger processore to re-compute response
taking into account the different segmentation in Y from MT1 to MT2
virtual AliMpPad PadByLocation(Int_t manuId, Int_t manuChannel, Bool_t warning=true) const =0
Find pad by location.
const AliMUONRecoParam * GetRecoParam() const
virtual void Digits2Trigger(const AliMUONVDigitStore &digitStore, AliMUONVTriggerStore &triggerStore)
Int_t Add2RawsList(TH1 *hist, const Int_t index, const Bool_t expert=kFALSE, const Bool_t image=kFALSE, const Bool_t saveForCorr=kFALSE)
Bin for % of global from local board errors.
Int_t PairLikeLpt() const
Return number of Like sign pair Low pt.
TString DCSAliasName(Int_t detElemId, Int_t sector=0, Int_t dcsMeasure=0) const
Trigger scalers acquisition time index.
static Int_t NTriggerCircuit()
Return number of trigger circuits.
UChar_t GetComptXY() const
Return ComptXY.
UChar_t GetDec() const
Return Dec.
UInt_t GetDarcEoWErrors() const
Get number of end of DARC word errors in the DDL last decoded.
virtual Bool_t Connect(TTree &tree, Bool_t alone=kTRUE) const
Connect us to a TTree (only valid if CanConnect()==kTRUE)
Int_t SingleHpt() const
Return number of Single High pt.
virtual AliMUONLocalTrigger * FindLocal(Int_t boardNumber) const =0
Find a local trigger by the board number (not an index, it is a number really)
static Int_t NofTrackingChambers()
Return number of tracking chambers.
Int_t LoCircuit() const
Return Circuit number.
void ResetDetectorRaws(TObjArray *list)
Reset anything that must be reset for Raws.
Int_t FillDigitsData(Int_t index, double x)
EDisplayOption
Display options inidices.
AliMUONCalibrationData * CalibrationData()
Local to Regional: Number of HPt MSB error vs Local Board Id.
AliMUONGlobalCrateConfig * globalConfig
UInt_t GetRegEoWErrors() const
Get number of end of regional word errors in the DDL last decoded.
Int_t PairUnlikeLpt() const
Return number of Unlike sign pair Low pt.
Triggered boards histogram index.
static Int_t NofTriggerChambers()
void Mask(Int_t index, UInt_t mask)
Set mask for global input (from regional boards)
TObject * GetRecPointsData(Int_t index) const
Int_t PairUnlikeHpt() const
Return number of Unlike sign pair High pt.
Percentage of responding strips/boards and noisy strips.