fDigitMaker(new AliMUONDigitMaker(kFALSE)),
fCalibrationData(0x0),
fTriggerProcessor(0x0),
-fDigitStore(0x0)
+fDigitStore(0x0),
+fDigitStoreFromRaw(0x0),
+fTriggerStoreFromRaw(0x0),
+fTriggerStoreReprocessRaw(0x0)
{
/// ctor
}
{
/// dtor
delete fDigitMaker;
- delete fDigitStore;
delete fTriggerProcessor;
delete fCalibrationData;
+ delete fDigitStore;
+ delete fDigitStoreFromRaw;
+ delete fTriggerStoreFromRaw;
+ delete fTriggerStoreReprocessRaw;
}
//____________________________________________________________________________
void AliMUONTriggerQADataMakerRec::EndOfDetectorCycleRaws(Int_t /*specie*/, TObjArray** /*list*/)
{
/// create Raws histograms in Raws subdir
-
- DisplayTriggerInfo();
-
- int itc = -1; // RS: For the moment assume that only default histo is booked (no cloning)
- // Normalize RawData histos
- TH1* histo1D = GetRawsData(AliMUONQAIndices::kTriggerRawNAnalyzedEvents,itc);
- Float_t nbevent = histo1D ? histo1D->GetBinContent(1) : 0;
+
Int_t histoRawsIndex[] = {
AliMUONQAIndices::kTriggerErrorSummary,
AliMUONQAIndices::kTriggerCalibSummary,
AliMUONQAIndices::kTriggerReadOutErrorsNorm,
AliMUONQAIndices::kTriggerGlobalOutputNorm
};
+
const Int_t kNrawsHistos = sizeof(histoRawsIndex)/sizeof(histoRawsIndex[0]);
Float_t scaleFactor[kNrawsHistos] = {100., 100., 100., 1.};
- for(Int_t ihisto=0; ihisto<kNrawsHistos; ihisto++){
- TH1* inputHisto = GetRawsData(histoRawsIndex[ihisto],itc);
- TH1* scaledHisto = GetRawsData(histoRawsScaledIndex[ihisto],itc);
- if ( scaledHisto && inputHisto && nbevent > 0 ) {
- scaledHisto->Reset();
- scaledHisto->Add(inputHisto);
- scaledHisto->Scale(scaleFactor[ihisto]/nbevent);
- }
- } // loop on histos
- TH1* hYCopy = GetRawsData(AliMUONQAIndices::kTriggerErrorLocalYCopy,itc); //number of YCopy error per board
- TH1* hYCopyTests = GetRawsData(AliMUONQAIndices::kTriggerErrorLocalYCopyTest,itc); //contains the number of YCopy test per board
- TH1* hYCopyNorm = GetRawsData(AliMUONQAIndices::kTriggerErrorLocalYCopyNorm,itc);
- hYCopyNorm->Reset();
- hYCopyNorm->Divide(hYCopy, hYCopyTests, 100., 1.);
+ for ( Int_t itc=-1; itc<AliQADataMakerRec::GetNTrigClasses(); itc++) {
+
+ DisplayTriggerInfo(itc);
+
+ // Normalize RawData histos
+ TH1* histo1D = GetRawsData(AliMUONQAIndices::kTriggerRawNAnalyzedEvents,itc);
+ // This histogram is there for all relevant triggers
+ // if it is not there, it means that the trigger is not taken into account
+ // so we can skip the trigger class for all other histos
+ if ( ! histo1D ) continue;
+ Float_t nbevent = histo1D->GetBinContent(1);
+ for(Int_t ihisto=0; ihisto<kNrawsHistos; ihisto++){
+ TH1* inputHisto = GetRawsData(histoRawsIndex[ihisto],itc);
+ TH1* scaledHisto = GetRawsData(histoRawsScaledIndex[ihisto],itc);
+ // Check here for both since we do not clone Calib-only histograms
+ if ( scaledHisto && inputHisto && nbevent > 0 ) {
+ scaledHisto->Reset();
+ scaledHisto->Add(inputHisto);
+ scaledHisto->Scale(scaleFactor[ihisto]/nbevent);
+ }
+ } // loop on histos
+
+
+ // The following histograms are surely there
+ // if the histogram with analyzed events is there:
+ // test on the existence of each histogram is not necessary
+ TH1* hYCopy = GetRawsData(AliMUONQAIndices::kTriggerErrorLocalYCopy,itc); //number of YCopy error per board
+ TH1* hYCopyTests = GetRawsData(AliMUONQAIndices::kTriggerErrorLocalYCopyTest,itc); //contains the number of YCopy test per board
+ TH1* hYCopyNorm = GetRawsData(AliMUONQAIndices::kTriggerErrorLocalYCopyNorm,itc);
+ hYCopyNorm->Reset();
+ hYCopyNorm->Divide(hYCopy, hYCopyTests, 100., 1.);
- Float_t mean = hYCopyNorm->Integral();
+ Float_t mean = hYCopyNorm->Integral();
- TH1* hSummary = GetRawsData(AliMUONQAIndices::kTriggerErrorSummaryNorm,itc);
- hSummary->SetBinContent(AliMUONQAIndices::kAlgoLocalYCopy+1,mean/192.); //put the mean of the % of YCopy error in the kTriggerError's corresponding bin
+ TH1* hSummary = GetRawsData(AliMUONQAIndices::kTriggerErrorSummaryNorm,itc);
+ hSummary->SetBinContent(AliMUONQAIndices::kAlgoLocalYCopy+1,mean/192.); //put the mean of the % of YCopy error in the kTriggerError's corresponding bin
- TH1F* hTriggerRatio = (TH1F*)GetRawsData(AliMUONQAIndices::kTriggerLocalRatio4434,itc);
- if ( hTriggerRatio ){
- hTriggerRatio->Divide(((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerNumberOf44Dec,itc)),((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerNumberOf34Dec,itc)));
+ TH1F* hTriggerRatio = (TH1F*)GetRawsData(AliMUONQAIndices::kTriggerLocalRatio4434,itc);
+ if ( hTriggerRatio ){
+ hTriggerRatio->Divide(((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerNumberOf44Dec,itc)),((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerNumberOf34Dec,itc)));
- FillRatio4434Histos(1);
+ FillRatio4434Histos(1,itc,kTRUE);
- //reset bins temporary used to store informations
- ((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerRatio4434AllEvents,itc))->SetBinContent(0,0);
- Int_t nbins = ((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerRatio4434AllEvents,itc))->GetNbinsX();
- ((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerRatio4434AllEvents,itc))->SetBinContent(nbins+1,0);
+ //reset bins temporary used to store informations
+ ((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerRatio4434AllEvents,itc))->SetBinContent(0,0);
+ Int_t nbins = ((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerRatio4434AllEvents,itc))->GetNbinsX();
+ ((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerRatio4434AllEvents,itc))->SetBinContent(nbins+1,0);
- ((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerLocalRatio4434,itc))->SetMaximum(1.1);
- ((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerRatio4434AllEvents,itc))->SetMaximum(1.1);
- ((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerRatio4434SinceLastUpdate,itc))->SetMaximum(1.1);
- }
-
- if ( GetRawsData(AliMUONQAIndices::kTriggerGlobalScalersNorm,itc) ) {
- TH1* inputHisto = GetRawsData(AliMUONQAIndices::kTriggerGlobalScalers,itc);
- TH1* scaledHisto = GetRawsData(AliMUONQAIndices::kTriggerGlobalScalersNorm,itc);
- scaledHisto->Reset();
- scaledHisto->Add(inputHisto);
- Float_t scaleValue = ((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerScalersTime,itc))->GetBinContent(1);
- if ( scaleValue > 0. ) scaledHisto->Scale(1./scaleValue);
- }
+ ((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerLocalRatio4434,itc))->SetMaximum(1.1);
+ ((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerRatio4434AllEvents,itc))->SetMaximum(1.1);
+ ((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerRatio4434SinceLastUpdate,itc))->SetMaximum(1.1);
+ }
+ if ( GetRawsData(AliMUONQAIndices::kTriggerGlobalScalersNorm,itc) ) {
+ TH1* inputHisto = GetRawsData(AliMUONQAIndices::kTriggerGlobalScalers,itc);
+ TH1* scaledHisto = GetRawsData(AliMUONQAIndices::kTriggerGlobalScalersNorm,itc);
+ scaledHisto->Reset();
+ scaledHisto->Add(inputHisto);
+ Float_t scaleValue = ((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerScalersTime,itc))->GetBinContent(1);
+ if ( scaleValue > 0. ) scaledHisto->Scale(1./scaleValue);
+ }
+ } // loop on trigger classes
}
//____________________________________________________________________________
// RS: Since there is no sense in cloning trigger scalers per trigger, I am (for the moment) forbidding their cloning
AliCodeTimerAuto("",0);
-
+
const Bool_t expert = kTRUE ;
const Bool_t saveCorr = kTRUE ;
const Bool_t image = kTRUE ;
histo1D->GetXaxis()->SetTitle(boardName.Data());
histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
Add2RawsList(histo1D, AliMUONQAIndices::kTriggerErrorLocalXPos, expert, !image, !saveCorr);
- ForbidCloning(histo1D); // RS
-
histo1D = new TH1F("hTriggerErrorLocalYPos", "ErrorLocalYPos",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
histo1D->GetXaxis()->SetTitle(boardName.Data());
histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
Add2RawsList(histo1D, AliMUONQAIndices::kTriggerErrorLocalYPos, expert, !image, !saveCorr);
- ForbidCloning(histo1D); // RS
histo1D = new TH1F("hTriggerErrorLocalDev", "ErrorLocalDev",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
histo1D->GetXaxis()->SetTitle(boardName.Data());
histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
Add2RawsList(histo1D, AliMUONQAIndices::kTriggerErrorLocalDev, expert, !image, !saveCorr);
- ForbidCloning(histo1D); // RS
histo1D = new TH1F("hTriggerErrorLocalTriggerDec", "ErrorLocalTriggerDec",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
histo1D->GetXaxis()->SetTitle(boardName.Data());
histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
Add2RawsList(histo1D, AliMUONQAIndices::kTriggerErrorLocalTriggerDec, expert, !image, !saveCorr);
- ForbidCloning(histo1D); // RS
histo1D = new TH1F("hTriggerErrorLocalLPtLSB", "ErrorLocalLPtLSB",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
histo1D->GetXaxis()->SetTitle(boardName.Data());
histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
Add2RawsList(histo1D, AliMUONQAIndices::kTriggerErrorLocalLPtLSB, expert, !image, !saveCorr);
- ForbidCloning(histo1D); // RS
histo1D = new TH1F("hTriggerErrorLocalLPtMSB", "ErrorLocalLPtMSB",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
histo1D->GetXaxis()->SetTitle(boardName.Data());
histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
Add2RawsList(histo1D, AliMUONQAIndices::kTriggerErrorLocalLPtMSB, expert, !image, !saveCorr);
- ForbidCloning(histo1D); // RS
histo1D = new TH1F("hTriggerErrorLocalHPtLSB", "ErrorLocalHPtLSB",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
histo1D->GetXaxis()->SetTitle(boardName.Data());
histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
Add2RawsList(histo1D, AliMUONQAIndices::kTriggerErrorLocalHPtLSB, expert, !image, !saveCorr);
- ForbidCloning(histo1D); // RS
histo1D = new TH1F("hTriggerErrorLocalHPtMSB", "ErrorLocalHPtMSB",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
histo1D->GetXaxis()->SetTitle(boardName.Data());
histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
Add2RawsList(histo1D, AliMUONQAIndices::kTriggerErrorLocalHPtMSB, expert, !image, !saveCorr);
- ForbidCloning(histo1D); // RS
histo1D = new TH1F("hTriggerErrorLocalTrigY", "ErrorLocalTrigY",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
histo1D->GetXaxis()->SetTitle(boardName.Data());
histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
Add2RawsList(histo1D, AliMUONQAIndices::kTriggerErrorLocalTrigY, expert, !image, !saveCorr);
- ForbidCloning(histo1D); // RS
if ( GetRecoParam()->GetEventSpecie() != AliRecoParam::kCalib ) {
histo1D = new TH1F("hTriggerRatio4434Local", "Ratio4434Local",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
histo1D->GetXaxis()->SetTitle(boardName.Data());
histo1D->GetYaxis()->SetTitle("ratio 44/34");
Add2RawsList(histo1D, AliMUONQAIndices::kTriggerLocalRatio4434, expert, !image, !saveCorr);
- ForbidCloning(histo1D); // RS
histo1D = new TH1F("hTriggerRatio4434AllEvents", "Ratio4434AllEvents",1,0,1);
histo1D->GetXaxis()->SetTitle("Event number");
histo1D->GetYaxis()->SetTitle("ratio 44/34");
histo1D->SetLineColor(4);
Add2RawsList(histo1D, AliMUONQAIndices::kTriggerRatio4434AllEvents, expert, !image, !saveCorr);
- ForbidCloning(histo1D); // RS
histo1D = new TH1F("hTriggerRatio4434SinceLastUpdate", "Ratio4434SinceLastUpdate",1,0,1);
histo1D->GetXaxis()->SetTitle("Event number");
histo1D->GetYaxis()->SetTitle("ratio 44/34");
Add2RawsList(histo1D, AliMUONQAIndices::kTriggerRatio4434SinceLastUpdate, expert, !image, !saveCorr);
- ForbidCloning(histo1D); // RS
}
histo1D = new TH1F("hTriggerErrorLocal2RegionalLPtLSB", "ErrorLocal2RegionalLPtLSB",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
histo1D->GetXaxis()->SetTitle(boardName.Data());
histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
Add2RawsList(histo1D, AliMUONQAIndices::kTriggerErrorLocal2RegionalLPtLSB, expert, !image, !saveCorr);
- ForbidCloning(histo1D); // RS
histo1D = new TH1F("hTriggerErrorLocal2RegionalLPtMSB", "ErrorLocal2RegionalLPtMSB",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
histo1D->GetXaxis()->SetTitle(boardName.Data());
histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
Add2RawsList(histo1D, AliMUONQAIndices::kTriggerErrorLocal2RegionalLPtMSB, expert, !image, !saveCorr);
- ForbidCloning(histo1D); // RS
histo1D = new TH1F("hTriggerErrorLocal2RegionalHPtLSB", "ErrorLocal2RegionalHPtLSB",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
histo1D->GetXaxis()->SetTitle(boardName.Data());
histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
Add2RawsList(histo1D, AliMUONQAIndices::kTriggerErrorLocal2RegionalHPtLSB, expert, !image, !saveCorr);
- ForbidCloning(histo1D); // RS
histo1D = new TH1F("hTriggerErrorLocal2RegionalHPtMSB", "ErrorLocal2RegionalHPtMSB",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
histo1D->GetXaxis()->SetTitle(boardName.Data());
histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
Add2RawsList(histo1D, AliMUONQAIndices::kTriggerErrorLocal2RegionalHPtMSB, expert, !image, !saveCorr);
- ForbidCloning(histo1D); // RS
histo1D = new TH1F("hTriggerErrorOutGlobalFromInGlobal", "ErrorOutGlobalFromInGlobal",6,-0.5,6-0.5);
histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
histo1D->GetXaxis()->SetBinLabel(ibin+1,globalXaxisName[ibin]);
}
Add2RawsList(histo1D, AliMUONQAIndices::kTriggerErrorOutGlobalFromInGlobal, expert, !image, !saveCorr);
- ForbidCloning(histo1D); // RS
histo1D = new TH1F("hTriggerErrorOutGlobalFromInLocal", "ErrorOutGlobalFromInLocal",6,-0.5,6-0.5);
histo1D->GetYaxis()->SetTitle(errorAxisTitle.Data());
histo1D->GetXaxis()->SetBinLabel(ibin+1,globalXaxisName[ibin]);
}
Add2RawsList(histo1D, AliMUONQAIndices::kTriggerErrorOutGlobalFromInLocal, expert, !image, !saveCorr);
- ForbidCloning(histo1D); // RS
TH1F* histoAlgoErr = new TH1F("hTriggerAlgoNumOfErrors", "Trigger Algorithm total errors",AliMUONQAIndices::kNtrigAlgoErrorBins,-0.5,(Float_t)AliMUONQAIndices::kNtrigAlgoErrorBins-0.5);
histoAlgoErr->GetYaxis()->SetTitle("Number of events with errors");
histoAlgoErrNorm->GetYaxis()->SetTitle("% of events with errors");
// Adding both histos after cloning to avoid problems with the expert bit
Add2RawsList(histoAlgoErr, AliMUONQAIndices::kTriggerErrorSummary, expert, !image, !saveCorr);
- ForbidCloning(histoAlgoErr); // RS
Add2RawsList(histoAlgoErrNorm, AliMUONQAIndices::kTriggerErrorSummaryNorm, !expert, image, !saveCorr);
- ForbidCloning(histoAlgoErrNorm); // RS
histo1D = new TH1F("hTriggerTriggeredBoards", "Triggered boards", nbLocalBoard, 0.5, (Float_t)nbLocalBoard + 0.5);
Add2RawsList(histo1D, AliMUONQAIndices::kTriggeredBoards, expert, !image, !saveCorr);
- ForbidCloning(histo1D); // RS
histo2D = (TH2F*)triggerDisplay.GetEmptyDisplayHisto("hTriggerFiredBoardsDisplay", AliMUONTriggerDisplay::kDisplayBoards,
0, 0, "Local board triggers / event");
histo2D->SetOption("COLZ");
Add2RawsList(histo2D, AliMUONQAIndices::kTriggerBoardsDisplay, expert, !image, !saveCorr);
- ForbidCloning(histo2D); // RS
TH1F* histoYCopyErr = new TH1F("hTriggerErrorLocalYCopy", "Number of YCopy errors",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
histoYCopyErr->GetXaxis()->SetTitle(boardName.Data());
histoYCopyErrNorm->SetTitle("% of YCopy errors");
// Adding both histos after cloning to avoid problems with the expert bit
Add2RawsList(histoYCopyErr, AliMUONQAIndices::kTriggerErrorLocalYCopy, expert, !image, !saveCorr);
- ForbidCloning(histoYCopyErr); // RS
Add2RawsList(histoYCopyErrTest, AliMUONQAIndices::kTriggerErrorLocalYCopyTest, expert, !image, !saveCorr);
- ForbidCloning(histoYCopyErrTest); // RS
Add2RawsList(histoYCopyErrNorm, AliMUONQAIndices::kTriggerErrorLocalYCopyNorm, expert, !image, !saveCorr);
- ForbidCloning(histoYCopyErrNorm); // RS
TH1F* histoROerr = new TH1F("hTriggerReadoutNumOfErrors","Trigger Read-Out total errors", AliMUONQAIndices::kNtrigStructErrorBins, -0.5, (Float_t)AliMUONQAIndices::kNtrigStructErrorBins-0.5);
histoROerr->GetYaxis()->SetTitle("Fraction of errors");
histoROerrNorm->GetYaxis()->SetTitle("% of errors per event");
// Adding both histos after cloning to avoid problems with the expert bit
Add2RawsList(histoROerr, AliMUONQAIndices::kTriggerReadOutErrors, expert, !image, !saveCorr);
- ForbidCloning(histoROerr); // RS
Add2RawsList(histoROerrNorm, AliMUONQAIndices::kTriggerReadOutErrorsNorm, !expert, image, !saveCorr);
- ForbidCloning(histoROerrNorm); // RS
TH1F* histoGlobalMult = new TH1F("hTriggerGlobalOutMultiplicity","Trigger global outputs multiplicity", 6, -0.5, 6.-0.5);
histoGlobalMult->GetYaxis()->SetTitle("Number of triggers");
histoGlobalMultNorm->GetYaxis()->SetTitle("Triggers per event");
// Adding both histos after cloning to avoid problems with the expert bit
Add2RawsList(histoGlobalMult, AliMUONQAIndices::kTriggerGlobalOutput, expert, !image, !saveCorr);
- ForbidCloning(histoGlobalMult); // RS
Add2RawsList(histoGlobalMultNorm, AliMUONQAIndices::kTriggerGlobalOutputNorm, expert, !image, !saveCorr);
- ForbidCloning(histoGlobalMultNorm); // RS
histo1D = new TH1F("hTriggerRawNAnalyzedEvents", "Number of analyzed events per specie", 1, 0.5, 1.5);
Int_t esindex = AliRecoParam::AConvert(CurrentEventSpecie());
histo1D->GetXaxis()->SetBinLabel(1, AliRecoParam::GetEventSpecieName(esindex));
histo1D->GetYaxis()->SetTitle("Number of analyzed events");
Add2RawsList(histo1D, AliMUONQAIndices::kTriggerRawNAnalyzedEvents, expert, !image, !saveCorr);
- ForbidCloning(histo1D); // RS
if ( GetRecoParam()->GetEventSpecie() != AliRecoParam::kCalib ) {
histo1D = new TH1F("hTriggerNumberOf34Dec", "Number of 3/4",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
histo1D->GetXaxis()->SetTitle(boardName.Data());
histo1D->GetYaxis()->SetTitle("Number of 3/4");
Add2RawsList(histo1D, AliMUONQAIndices::kTriggerNumberOf34Dec, expert, !image, !saveCorr);
- ForbidCloning(histo1D); // RS
histo1D = new TH1F("hTriggerNumberOf44Dec", "Number of 4/4",nbLocalBoard,0.5,(Float_t)nbLocalBoard+0.5);
histo1D->GetXaxis()->SetTitle(boardName.Data());
histo1D->GetYaxis()->SetTitle("Number of 4/4");
Add2RawsList(histo1D, AliMUONQAIndices::kTriggerNumberOf44Dec, expert, !image, !saveCorr);
- ForbidCloning(histo1D); // RS
}
histo1D = new TH1F("hTriggerIsThere","trigger is there",1,0,1);
Add2RawsList(histo1D,AliMUONQAIndices::kTriggerIsThere,kTRUE,kFALSE,kFALSE);
- ForbidCloning(histo1D); // RS
if ( GetRecoParam()->GetEventSpecie() == AliRecoParam::kCalib ) {
TH1F* histoGlobalScalers = new TH1F("hTriggerGlobalScalers","Trigger global scalers", 6, -0.5, 6.-0.5);
ForbidCloning(histoGlobalScalersNorm); // RS
}
//
- ClonePerTrigClass(AliQAv1::kRAWS); // RS: this should be the last line
+ //ClonePerTrigClass(AliQAv1::kRAWS); // RS: this should be the last line DONE at parent level
//
}
Add2DigitsList(h0, 0, !expert, image);
ForbidCloning(h0);
//
- ClonePerTrigClass(AliQAv1::kDIGITS); // this should be the last line
+ //ClonePerTrigClass(AliQAv1::kDIGITS); // this should be the last line DONE at parent level
//
}
//
FillTriggerDCSHistos();
//
- ClonePerTrigClass(AliQAv1::kRECPOINTS);
+ //ClonePerTrigClass(AliQAv1::kRECPOINTS); DONE at parent level
//
}
// Init Local/Regional/Global decision with fake values
//
-
- //
UInt_t globalInput[4];
for (Int_t bit=0; bit<4; bit++){
//fTriggerInputGlobalDataHPt[reg][bit]=0;
//}
//}
-
- AliMUONDigitStoreV2R digitStore;
-
- AliMUONTriggerStoreV1 recoTriggerStore;
-
- AliMUONTriggerStoreV1 inputTriggerStore;
+
+ if ( fDigitStoreFromRaw ) fDigitStoreFromRaw->Clear();
+ else fDigitStoreFromRaw = new AliMUONDigitStoreV2R();
+ if ( fTriggerStoreFromRaw ) fTriggerStoreFromRaw->Clear();
+ else fTriggerStoreFromRaw = new AliMUONTriggerStoreV1();
+ if ( fTriggerStoreReprocessRaw ) fTriggerStoreReprocessRaw->Clear();
+ else fTriggerStoreReprocessRaw = new AliMUONTriggerStoreV1();
AliMUONGlobalTrigger inputGlobalTrigger;
AliMUONLocalTrigger inputLocalTrigger;
inputLocalTrigger.SetLocalStruct(loCircuit, *localStruct);
- inputTriggerStore.Add(inputLocalTrigger);
+ fTriggerStoreFromRaw->Add(inputLocalTrigger);
countNotifiedBoards++;
TArrayS xyPattern[2];
localStruct->GetXPattern(xyPattern[0]);
localStruct->GetYPattern(xyPattern[1]);
- fDigitMaker->TriggerDigits(loCircuit, xyPattern, digitStore);
+ fDigitMaker->TriggerDigits(loCircuit, xyPattern, *fDigitStoreFromRaw);
//Get electronic Decisions from data
} // iReg
Float_t readoutErrors[AliMUONQAIndices::kNtrigStructErrorBins] = {
- ((Float_t)rawStreamTrig.GetLocalEoWErrors())/((Float_t)countAllBoards),
+ countAllBoards>0?((Float_t)rawStreamTrig.GetLocalEoWErrors())/((Float_t)countAllBoards):0,
((Float_t)rawStreamTrig.GetRegEoWErrors())/16.,
((Float_t)rawStreamTrig.GetGlobalEoWErrors())/6.,
((Float_t)rawStreamTrig.GetDarcEoWErrors())/2.
}
}
- TriggerElectronics()->Digits2Trigger(digitStore,recoTriggerStore);
+ TriggerElectronics()->Digits2Trigger(*fDigitStoreFromRaw,*fTriggerStoreReprocessRaw);
AliMUONGlobalTrigger* recoGlobalTriggerFromLocal;
- recoGlobalTriggerFromLocal = recoTriggerStore.Global();
+ recoGlobalTriggerFromLocal = fTriggerStoreReprocessRaw->Global();
//Reconstruct Global decision from Global inputs
UChar_t recoResp = RawTriggerInGlobal2OutGlobal(globalInput);
recoGlobalTriggerFromGlobal.SetFromGlobalResponse(recoResp);
// Compare data and reconstructed decisions and fill histos
- RawTriggerMatchOutLocal(inputTriggerStore, recoTriggerStore);
+ RawTriggerMatchOutLocal();
//Fill ratio 44/34 histos
- FillRatio4434Histos(fgkUpdateRatio4434);
+ for ( Int_t itc=-1; itc<AliQADataMakerRec::GetNEventTrigClasses(); ++itc ) FillRatio4434Histos(fgkUpdateRatio4434, itc, kFALSE);
//RawTriggerMatchOutLocalInRegional(); // Not tested, hardware read-out doesn't work
RawTriggerMatchOutGlobal(inputGlobalTrigger, recoGlobalTriggerFromGlobal, 'G');
// Global, reconstruction from Local inputs: compare data and reconstructed decisions and fill histos
//____________________________________________________________________________
-void AliMUONTriggerQADataMakerRec::DisplayTriggerInfo()
+void AliMUONTriggerQADataMakerRec::DisplayTriggerInfo(Int_t itc)
{
//
/// Display trigger information in a user-friendly way:
/// from local board and strip numbers to their position on chambers
//
- // RS: Note: the histos involved in this routin are forbidden to be cloned, -1 in GetRawsData returns the default histos
- int itc = -1;
AliMUONTriggerDisplay triggerDisplay;
}
//____________________________________________________________________________
-void AliMUONTriggerQADataMakerRec::RawTriggerMatchOutLocal(const AliMUONVTriggerStore& inputTriggerStore,
- const AliMUONVTriggerStore& recoTriggerStore)
+void AliMUONTriggerQADataMakerRec::RawTriggerMatchOutLocal()
{
//
/// Match data and reconstructed Local Trigger decision
// First search for YCopy errors.
Int_t loCircuit = -1;
- TIter next(recoTriggerStore.CreateLocalIterator());
+ TIter next(fTriggerStoreReprocessRaw->CreateLocalIterator());
AliMUONLocalTrigger* recoLocalTrigger, *inputLocalTrigger;
while ( ( recoLocalTrigger = static_cast<AliMUONLocalTrigger*>(next()) ) )
{
FillRawsData(AliMUONQAIndices::kTriggerErrorLocalYCopyTest,loCircuit);
- inputLocalTrigger = inputTriggerStore.FindLocal(loCircuit);
+ inputLocalTrigger = fTriggerStoreFromRaw->FindLocal(loCircuit);
Int_t recoTrigPattern[4] = {recoLocalTrigger->GetY1Pattern(), recoLocalTrigger->GetY2Pattern(), recoLocalTrigger->GetY3Pattern(), recoLocalTrigger->GetY4Pattern()};
Int_t inputTrigPattern[4] = {inputLocalTrigger->GetY1Pattern(), inputLocalTrigger->GetY2Pattern(), inputLocalTrigger->GetY3Pattern(), inputLocalTrigger->GetY4Pattern()};
if ( is44 ) FillRawsData(AliMUONQAIndices::kTriggerNumberOf44Dec,loCircuit);
if ( is44 && ! is34 )
- AliWarning("Event satisfies the 4/4 conditions but not the 3/4");
+ AliWarning(Form("Local board %i satisfies the 4/4 conditions but not the 3/4", loCircuit));
}
- inputLocalTrigger = inputTriggerStore.FindLocal(loCircuit);
+ inputLocalTrigger = fTriggerStoreFromRaw->FindLocal(loCircuit);
if ( recoLocalTrigger->LoStripX() != inputLocalTrigger->LoStripX() ) {
FillRawsData(AliMUONQAIndices::kTriggerErrorLocalXPos,loCircuit);
}
//____________________________________________________________________________
-void AliMUONTriggerQADataMakerRec::FillRatio4434Histos(Int_t evtInterval)
+void AliMUONTriggerQADataMakerRec::FillRatio4434Histos(Int_t evtInterval, Int_t itc, Bool_t isEndOfCycle)
{
/// Fill ratio 44/34 histos
- int itc = -1; // RS: For the moment assume that only default histo is booked (no cloning)
- Int_t numEvent = Int_t(((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerRawNAnalyzedEvents,itc))->GetBinContent(1));
+ TH1* histoEvents = ( isEndOfCycle ) ? GetRawsData(AliMUONQAIndices::kTriggerRawNAnalyzedEvents,itc) : GetMatchingRawsHisto(AliMUONQAIndices::kTriggerRawNAnalyzedEvents,itc);
+ if ( ! histoEvents ) return;
+ Int_t numEvent = Int_t(histoEvents->GetBinContent(1));
// Fill every fgkUpdateRatio4434 events
if (numEvent % evtInterval != 0)
return;
-
- Float_t totalNumberOf44 = ((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerNumberOf44Dec,itc))->GetSumOfWeights();
- Float_t totalNumberOf34 = ((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerNumberOf34Dec,itc))->GetSumOfWeights();
+
+ TH1* histo44dec = ( isEndOfCycle ) ? GetRawsData(AliMUONQAIndices::kTriggerNumberOf44Dec,itc) : GetMatchingRawsHisto(AliMUONQAIndices::kTriggerNumberOf44Dec,itc);
+ TH1* histo34dec = ( isEndOfCycle ) ? GetRawsData(AliMUONQAIndices::kTriggerNumberOf34Dec,itc) : GetMatchingRawsHisto(AliMUONQAIndices::kTriggerNumberOf34Dec,itc);
+
+ Float_t totalNumberOf44 = histo44dec->GetSumOfWeights();
+ Float_t totalNumberOf34 = histo34dec->GetSumOfWeights();
if ( totalNumberOf34 == 0 )
return;
- TH1F* histoAllEvents = (TH1F*)GetRawsData(AliMUONQAIndices::kTriggerRatio4434AllEvents,itc);
+ TH1* histoAllEvents = ( isEndOfCycle ) ? GetRawsData(AliMUONQAIndices::kTriggerRatio4434AllEvents,itc) : GetMatchingRawsHisto(AliMUONQAIndices::kTriggerRatio4434AllEvents,itc);
+
if ( ! histoAllEvents ) return;
Int_t nbins = histoAllEvents->GetNbinsX();
Float_t maxBin = histoAllEvents->GetXaxis()->GetBinLowEdge(nbins+1);
Int_t newNbins = ( (Int_t)maxBin % fgkUpdateRatio4434 ) ? nbins : nbins+1;
TString cloneName;
+
+ TH1* histoRatioSinceLastUpdate = ( isEndOfCycle ) ? GetRawsData(AliMUONQAIndices::kTriggerRatio4434SinceLastUpdate,itc) : GetMatchingRawsHisto(AliMUONQAIndices::kTriggerRatio4434SinceLastUpdate,itc);
- Int_t hIndex[2] = {AliMUONQAIndices::kTriggerRatio4434AllEvents, AliMUONQAIndices::kTriggerRatio4434SinceLastUpdate};
+ TH1* histos[2] = {histoAllEvents, histoRatioSinceLastUpdate};
for (Int_t ihisto=0; ihisto<2; ihisto++){
- TH1F* currHisto = (TH1F*)GetRawsData(hIndex[ihisto],itc);
+ TH1* currHisto = histos[ihisto];
cloneName = Form("%sClone", currHisto->GetName());
TArrayD newAxis(newNbins+1);
for (Int_t ibin=0; ibin<newNbins; ibin++){
errorRatio4434Update = ProtectedSqrt(numOf44Update*(1-ratio4434Update))/numOf34Update;
}
- ((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerRatio4434SinceLastUpdate,itc))->SetBinContent(newNbins,ratio4434Update);
- ((TH1F*)GetRawsData(AliMUONQAIndices::kTriggerRatio4434SinceLastUpdate,itc))->SetBinError(newNbins,errorRatio4434Update);
+ histoRatioSinceLastUpdate->SetBinContent(newNbins,ratio4434Update);
+ histoRatioSinceLastUpdate->SetBinError(newNbins,errorRatio4434Update);
histoAllEvents->SetBinContent(0,totalNumberOf34);
histoAllEvents->SetBinContent(newNbins+1,totalNumberOf44);
if ( ! fCalibrationData ) fCalibrationData = new AliMUONCalibrationData(AliCDBManager::Instance()->GetRun());
return fCalibrationData;
}
+
+//____________________________________________________________________________
+void AliMUONTriggerQADataMakerRec::ResetDetectorRaws(TObjArray* list)
+{
+ /// Reset the calibration data
+ ResetDetector(list);
+ delete fTriggerProcessor;
+ fTriggerProcessor = 0x0;
+ delete fCalibrationData;
+ fCalibrationData = 0x0;
+}