ClassImp(AliACORDEQADataMakerRec)\r
\r
//____________________________________________________________________________ \r
- AliACORDEQADataMakerRec::AliACORDEQADataMakerRec():AliQADataMakerRec(AliQAv1::GetDetName(AliQAv1::kACORDE), "ACORDE Quality Assurance Data Maker"),\r
- fhACOMean(new TLine(0.,4.,60.,4.)),\r
- fhACOMin(new TLine(0.,4.,60.,4.)),\r
- fhACOMax(new TLine(0.,4.,60.,4.)),\r
- fhACOMulti(new TLine(0.,4.,60.,4.)),\r
- fhACOMeanAMU(new TLine(0.,4.,60.,4.)),\r
- fhACOMinAMU(new TLine(0.,4.,60.,4.)),\r
- fhACOMaxAMU(new TLine(0.,4.,60.,4.)),\r
- fhACOMultiAMU(new TLine(0.,4.,60.,4.))\r
+ AliACORDEQADataMakerRec::AliACORDEQADataMakerRec():AliQADataMakerRec(AliQAv1::GetDetName(AliQAv1::kACORDE), "ACORDE Quality Assurance Data Maker")\r
{\r
\r
}\r
//____________________________________________________________________________ \r
AliACORDEQADataMakerRec::AliACORDEQADataMakerRec(const AliACORDEQADataMakerRec& qadm):\r
- AliQADataMakerRec(),\r
- fhACOMean(qadm.fhACOMean),\r
- fhACOMin(qadm.fhACOMin),\r
- fhACOMax(qadm.fhACOMax),\r
- fhACOMulti(qadm.fhACOMulti),\r
- fhACOMeanAMU(qadm.fhACOMeanAMU),\r
- fhACOMinAMU(qadm.fhACOMinAMU),\r
- fhACOMaxAMU(qadm.fhACOMaxAMU),\r
- fhACOMultiAMU(qadm.fhACOMultiAMU)\r
+ AliQADataMakerRec()\r
{\r
SetName((const char*)qadm.GetName()) ; \r
SetTitle((const char*)qadm.GetTitle()); \r
//__________________________________________________________________\r
AliACORDEQADataMakerRec::~AliACORDEQADataMakerRec()\r
{\r
- delete fhACOMean;\r
- delete fhACOMin;\r
- delete fhACOMax;\r
- delete fhACOMulti;\r
- delete fhACOMeanAMU;\r
- delete fhACOMinAMU;\r
- delete fhACOMaxAMU;\r
- delete fhACOMultiAMU;\r
}\r
\r
//__________________________________________________________________\r
// Update for DQM GUI\r
//\r
\r
- // Thresholds and alarms definitions\r
- /*******************************************************************************************\r
-\r
- We check the performance of the ACORDE's modules respect to the mean\r
- value over the integral for hits for all the modules (in SL0 and AMU), then\r
- for the threshold lines we don't use a fixed threshold value.\r
-\r
- For the alarms, we need two fixed values (one for each configuration, SL0 and AMU):\r
-\r
- -) SL0_ThresholdAlarm: minimum number of ACORDE's modules woriking properly\r
- -) AMU_ThresholdAlarm: minimum number of ACORDE's modules woriking properly\r
-\r
- This should work for p-p*, HI* and cosmic** data taking.\r
-\r
- * only as readout detector (if ACORDE is triggering, in some rare trigger cluster, \r
- an improvement should be done)\r
- ** as readout and trigger detector.\r
-\r
- *********************************************************************************************/\r
-\r
for (Int_t specie = 0; specie < AliRecoParam::kNSpecies ; specie++) {\r
if ( !AliQAv1::Instance()->IsEventSpecieSet(specie) ) continue ;\r
// \r
if (!parr) continue;\r
TObjArray &harr = *parr;\r
TH1* h0 = (TH1*)harr[0];\r
- TH1* h1 = (TH1*)harr[1];\r
- if (!h0 || !h1) continue;\r
TH1* h2 = (TH1*)harr[2];\r
- TH1* h3 = (TH1*)harr[3];\r
- if (!h2 || !h3) continue;\r
+ if (!h0 || !h2) continue;\r
\r
Double_t integralSL0 = 0;\r
Double_t integralAMU = 0;\r
\r
- // maximimum and minimum for Pads\r
-\r
- Double_t maxPad = h0->GetMaximum();\r
- \r
- if ((itc==-1 && !(integralAMU=h2->Integral()) || h2->GetMaximum()==0)||(itc==-1 && !(integralSL0=h0->Integral()) || h0->GetMaximum()==0)) { // default clone\r
- printf("No entries in ACORDE Hits histograms for trigger class %d, fatal error, please check !!!\n",itc);\r
- Float_t maxPadAMU = h3->GetMaximum();\r
- TPaveText *acoBoxFatalAMU = new TPaveText(35,0,55,1,"b");\r
- acoBoxFatalAMU->SetFillColor(kRed);\r
- acoBoxFatalAMU->SetLineColor(kRed);\r
- acoBoxFatalAMU->SetLineWidth(2);\r
- acoBoxFatalAMU->AddText("ACO: Not O.K.");\r
- acoBoxFatalAMU->AddText("Call the experts");\r
-\r
- TPaveText *acoBoxFatalMultiAMU = new TPaveText(35,0,55,maxPadAMU,"b");\r
- acoBoxFatalMultiAMU->SetFillColor(kRed);\r
- acoBoxFatalMultiAMU->SetLineColor(kRed);\r
- acoBoxFatalMultiAMU->SetLineWidth(2);\r
- acoBoxFatalMultiAMU->AddText("ACO: Not O.K.");\r
- acoBoxFatalMultiAMU->AddText("Call the experts");\r
-\r
- h2->GetListOfFunctions()->Add(acoBoxFatalAMU);\r
- h3->GetListOfFunctions()->Add(acoBoxFatalMultiAMU);\r
-\r
- Float_t maxPadSL0 = h1->GetMaximum();\r
-\r
- printf("No entries in ACORDE Hits histograms for trigger class %d, fatal error, please check !!!\n",itc);\r
- TPaveText *acoBoxFatal = new TPaveText(35,0,55,1,"b");\r
- acoBoxFatal->SetFillColor(kRed);\r
- acoBoxFatal->SetLineColor(kRed);\r
- acoBoxFatal->SetLineWidth(2);\r
- acoBoxFatal->AddText("ACO: Not O.K.");\r
- acoBoxFatal->AddText("Call the experts");\r
-\r
- TPaveText *acoBoxFatalMulti = new TPaveText(35,0,55,maxPadSL0,"b");\r
- acoBoxFatalMulti->SetFillColor(kRed);\r
- acoBoxFatalMulti->SetLineColor(kRed);\r
- acoBoxFatalMulti->SetLineWidth(2);\r
- acoBoxFatalMulti->AddText("ACO: Not O.K.");\r
- acoBoxFatalMulti->AddText("Call the experts");\r
-\r
- h0->GetListOfFunctions()->Add(acoBoxFatal);\r
- h1->GetListOfFunctions()->Add(acoBoxFatalMulti);\r
- continue;\r
- }\r
- \r
- // Check DQM\r
-\r
- // setting the thresholds\r
+ if ((itc==-1) && ( (integralAMU=h2->Integral()==0) || (integralSL0=h0->Integral()==0) ) ) continue;\r
\r
- Int_t SL0_ThresholdAlarm = 45; // default value until the creation of AliACORDEThreshold class\r
- Int_t AMU_ThresholdAlarm = 45; // default value until the creation of AliACORDEThreshold class\r
+ Float_t maxSL0 = 1.1*h0->GetMaximum();\r
+ Float_t scaleSL0 = 0.;\r
+ if (maxSL0!=0) scaleSL0 = 1./maxSL0;\r
+ else scaleSL0 = 1.;\r
+ h0->Scale(scaleSL0);\r
\r
- // SL0 - histograms\r
\r
+ Float_t maxAMU = 1.1*h2->GetMaximum();\r
+ Float_t scaleAMU = 0.;\r
+ if (maxAMU!=0) scaleAMU = 1./maxAMU;\r
+ else scaleAMU = 1.;\r
+ h2->Scale(scaleAMU);\r
+ \r
Int_t indexActiveModuleSL0 = 0;\r
- for(Int_t iModule=0;iModule<60;iModule++){ \r
- if (h0->GetBinContent(iModule)>0) indexActiveModuleSL0++;\r
+ Int_t indexActiveModuleAMU = 0;\r
+\r
+ for(Int_t iModule = 0; iModule < 60; iModule++){\r
+ if (h0->GetBinContent(iModule) > 0) indexActiveModuleSL0++;\r
+ if (h2->GetBinContent(iModule) > 0) indexActiveModuleAMU++;\r
}\r
\r
Float_t meanHitsSL0 = 0.;\r
- if (indexActiveModuleSL0!=0) meanHitsSL0=h0->Integral()/indexActiveModuleSL0;\r
-\r
- Int_t indexSL0 = 0;\r
- \r
- // set the threshold lines: minimum, maximum and mean\r
-\r
- fhACOMean->SetX1(0);\r
- fhACOMean->SetY1(meanHitsSL0);\r
- fhACOMean->SetX2(59);\r
- fhACOMean->SetY2(meanHitsSL0);\r
- \r
- fhACOMin->SetX1(0);\r
- fhACOMin->SetX2(59);\r
- fhACOMin->SetY1(meanHitsSL0-0.80*meanHitsSL0);\r
- fhACOMin->SetY2(meanHitsSL0-0.80*meanHitsSL0);\r
-\r
- fhACOMax->SetX1(0);\r
- fhACOMax->SetX2(59);\r
- fhACOMax->SetY1(meanHitsSL0+0.80*meanHitsSL0);\r
- fhACOMax->SetY2(meanHitsSL0+0.80*meanHitsSL0);\r
-\r
- fhACOMulti->SetX1(0);\r
- fhACOMulti->SetY1(0);\r
- fhACOMulti->SetX2(0);\r
- Float_t maxMulti = 0;\r
- if (h1->GetMaximum()>0) maxMulti = h1->GetMaximum();\r
- fhACOMulti->SetY2(maxMulti);\r
-\r
- TPaveText *acoBoxOkHitsSL0 = new TPaveText(35,meanHitsSL0+0.5*meanHitsSL0,55,maxPad,"b");\r
- acoBoxOkHitsSL0->SetFillColor(kGreen);\r
- acoBoxOkHitsSL0->SetLineColor(kGreen);\r
- acoBoxOkHitsSL0->SetLineWidth(2);\r
- acoBoxOkHitsSL0->AddText("ACO: O.K.");\r
-\r
- TPaveText *acoBoxErrorHitsSL0 = new TPaveText(35,meanHitsSL0+0.5*meanHitsSL0,55,maxPad,"b");\r
- acoBoxErrorHitsSL0->SetFillColor(kRed);\r
- acoBoxErrorHitsSL0->SetLineColor(kRed);\r
- acoBoxErrorHitsSL0->SetLineWidth(2);\r
- acoBoxErrorHitsSL0->AddText("ACO: Not O.K.");\r
-\r
- Float_t maxPadMulti = h1->GetMaximum();\r
-\r
- TPaveText *acoBoxOkMultiSL0 = new TPaveText(35,maxPadMulti-0.3*maxPadMulti,55,maxPadMulti,"b");\r
- acoBoxOkMultiSL0->SetFillColor(kGreen);\r
- acoBoxOkMultiSL0->SetLineColor(kGreen);\r
- acoBoxOkMultiSL0->SetLineWidth(2);\r
- acoBoxOkMultiSL0->AddText("ACO: O.K.");\r
-\r
- TPaveText *acoBoxErrorMultiSL0 = new TPaveText(35,maxPadMulti-0.3*maxPadMulti,55,maxPadMulti,"b");\r
- acoBoxErrorMultiSL0->SetFillColor(kRed);\r
- acoBoxErrorMultiSL0->SetLineColor(kRed);\r
- acoBoxErrorMultiSL0->SetLineWidth(2);\r
- acoBoxErrorMultiSL0->AddText("ACO: Not O.K.");\r
- TH1* h4 = (TH1*)harr[4];\r
-\r
- for (Int_t iModule = 0; iModule < 60; iModule++){\r
- if (meanHitsSL0!=0){\r
- if (TMath::Abs(h0->GetBinContent(iModule)/meanHitsSL0-1) < 1) indexSL0++;\r
- if (h4){\r
- h4->Fill(h0->GetBinContent(iModule)/meanHitsSL0-1);\r
- }\r
- }\r
- }\r
-\r
- if (indexSL0>=SL0_ThresholdAlarm){\r
- h0->GetListOfFunctions()->Add(acoBoxOkHitsSL0);\r
- h1->GetListOfFunctions()->Add(acoBoxOkMultiSL0);\r
- }\r
- else{\r
- h0->GetListOfFunctions()->Add(acoBoxErrorHitsSL0);\r
- h1->GetListOfFunctions()->Add(acoBoxErrorMultiSL0);\r
- }\r
-\r
-\r
- // AMU - histograms \r
-\r
- Int_t indexActiveModuleAMU = 0;\r
- for(Int_t iModule=0;iModule<60;iModule++){\r
- if (h2->GetBinContent(iModule)>0) indexActiveModuleAMU++;\r
- }\r
-\r
Float_t meanHitsAMU = 0.;\r
- if (indexActiveModuleAMU!=0) meanHitsAMU=h2->Integral()/indexActiveModuleAMU;\r
-\r
- // setting the line's thresholds: min, max and mean of hits\r
+ if ((indexActiveModuleSL0==0) || (indexActiveModuleAMU == 0)) continue;\r
\r
- fhACOMeanAMU->SetX1(0);\r
- fhACOMeanAMU->SetY1(meanHitsAMU);\r
- fhACOMeanAMU->SetX2(59);\r
- fhACOMeanAMU->SetY2(meanHitsAMU);\r
+ meanHitsSL0 = h0->Integral()/indexActiveModuleSL0;\r
+ meanHitsAMU = h2->Integral()/indexActiveModuleAMU;\r
\r
- fhACOMinAMU->SetX1(0);\r
- fhACOMinAMU->SetX2(59);\r
- fhACOMinAMU->SetY1(meanHitsAMU-0.80*meanHitsAMU);\r
- fhACOMinAMU->SetY2(meanHitsAMU-0.80*meanHitsAMU);\r
-\r
-\r
- fhACOMaxAMU->SetX1(0);\r
- fhACOMaxAMU->SetX2(59);\r
- fhACOMaxAMU->SetY1(meanHitsAMU+0.80*meanHitsAMU);\r
- fhACOMaxAMU->SetY2(meanHitsAMU+0.80*meanHitsAMU);\r
-\r
-\r
- fhACOMultiAMU->SetX1(0);\r
- fhACOMultiAMU->SetY1(0);\r
- fhACOMultiAMU->SetX2(0);\r
- Float_t maxMultiAMU = 0;\r
- if (h3->GetMaximum()>0) maxMultiAMU = h3->GetMaximum();\r
- fhACOMultiAMU->SetY2(maxMultiAMU);\r
- \r
- // setting the alarms\r
-\r
- TPaveText *acoBoxOkHitsAMU = new TPaveText(35,meanHitsAMU+0.5*meanHitsAMU,55,maxPad,"b");\r
- acoBoxOkHitsAMU->SetFillColor(kGreen);\r
- acoBoxOkHitsAMU->SetLineColor(kGreen);\r
- acoBoxOkHitsAMU->SetLineWidth(2);\r
- acoBoxOkHitsAMU->AddText("ACO: O.K.");\r
-\r
- TPaveText *acoBoxErrorHitsAMU = new TPaveText(35,meanHitsAMU+0.5*meanHitsAMU,55,maxPad,"b");\r
- acoBoxErrorHitsAMU->SetFillColor(kRed);\r
- acoBoxErrorHitsAMU->SetLineColor(kRed);\r
- acoBoxErrorHitsAMU->SetLineWidth(2);\r
- acoBoxErrorHitsAMU->AddText("ACO: Not O.K.");\r
-\r
- Float_t maxPadMultiAMU = h3->GetMaximum();\r
-\r
- TPaveText *acoBoxOkMultiAMU = new TPaveText(35,maxPadMultiAMU-0.3*maxPadMultiAMU,55,maxPadMultiAMU,"b");\r
- acoBoxOkMultiAMU->SetFillColor(kGreen);\r
- acoBoxOkMultiAMU->SetLineColor(kGreen);\r
- acoBoxOkMultiAMU->SetLineWidth(2);\r
- acoBoxOkMultiAMU->AddText("ACO: O.K.");\r
-\r
- TPaveText *acoBoxErrorMultiAMU = new TPaveText(35,maxPadMultiAMU-0.3*maxPadMultiAMU,55,maxPadMultiAMU,"b");\r
- acoBoxErrorMultiAMU->SetFillColor(kRed);\r
- acoBoxErrorMultiAMU->SetLineColor(kRed);\r
- acoBoxErrorMultiAMU->SetLineWidth(2);\r
- acoBoxErrorMultiAMU->AddText("ACO: Not O.K.");\r
+ TH1* h4 = (TH1*)harr[4];\r
TH1* h5 = (TH1*)harr[5];\r
\r
- Int_t indexAMU=0;\r
-\r
- for (Int_t iModule = 0; iModule < 60; iModule++){\r
- if (meanHitsAMU!=0){\r
- if (TMath::Abs(h2->GetBinContent(iModule)/meanHitsAMU-1) < 1) indexAMU++;\r
- if (h5){\r
- h5->Fill(h2->GetBinContent(iModule)/meanHitsAMU-1);\r
- }\r
+ if (h4 && h5 && meanHitsAMU!=0 && meanHitsSL0!=0){\r
+ for (Int_t iModule = 0; iModule < 60; iModule++){\r
+ h4->Fill(h0->GetBinContent(iModule)/meanHitsSL0-1);\r
+ h5->Fill(h2->GetBinContent(iModule)/meanHitsAMU-1);\r
}\r
}\r
\r
- if (indexAMU>=AMU_ThresholdAlarm) {\r
- h2->GetListOfFunctions()->Add(acoBoxOkHitsAMU);\r
- h3->GetListOfFunctions()->Add(acoBoxOkMultiAMU);\r
- }\r
- else{\r
- h2->GetListOfFunctions()->Add(acoBoxErrorHitsAMU);\r
- h3->GetListOfFunctions()->Add(acoBoxErrorMultiAMU);\r
- }\r
- \r
} // end of trigger classes loop\r
} // end specie loop\r
// QA Checker standar (to be updated)\r
TH1F * fhACORDEMultiplicitySL0DQM = new TH1F("ACOMultiSL0_DQM_Shifter","Multiplicity of ACORDE fired modules for DQM shifter; No. of fired modules; No. of events",62,-1,60); // Multiplicity histo. for QA-shifter ACO-SL0 trigger mode\r
TH1F * fhACORDEBitPatternAMUDQM = new TH1F("ACOHitsAMU_DQM_Shifter","Distribution of ACORDE fired modules for DQM shifter; No. of module; Counts",60,-0.5,59.5);// Hits histogram for QA-shifter ACO-SL0 trigger mode\r
TH1F * fhACORDEMultiplicityAMUDQM = new TH1F("ACOMultiAMU_DQM_Shifter","Multiplicity of ACORDE fired modules for DQM shifter; No. of fired modules; No. of events",62,-1,60); // Multiplicity histo. for QA-shifter ACO-SL0 trigger mode\r
- TH1F * fhACORDEBitPatternCheckDQMSL0 = new TH1F("ACOHitsTriggerCheck_DQMExpertSL0","Check the activity of ACORDE's modules; |Hits per module/mean of Hits - 1|; Counts",100,-3,5); // Check the trigger status of ACORDE (SL0 vs AMU)\r
- TH1F * fhACORDEBitPatternCheckDQMAMU = new TH1F("ACOHitsTriggerCheck_DQMExpertAMU","Check the activity of ACORDE's modules; |Hits per module/mean of Hits - 1|; Counts",100,-3,5); // Check the trigger status of ACORDE (SL0 vs AMU)\r
+ TH1F * fhACORDEBitPatternCheckDQMSL0 = new TH1F("ACOHitsTriggerCheck_DQMExpertSL0","Check the activity of ACORDE's modules; Hits per module/mean of Hits; Counts",100,-3,5); // Check the trigger status of ACORDE (SL0 vs AMU)\r
+ TH1F * fhACORDEBitPatternCheckDQMAMU = new TH1F("ACOHitsTriggerCheck_DQMExpertAMU","Check the activity of ACORDE's modules; Hits per module/mean of Hits; Counts",100,-3,5); // Check the trigger status of ACORDE (SL0 vs AMU)\r
// Expert histograms\r
// Check the hits multiplicity from trigger configuration\r
Add2RawsList(fhACORDEBitPatternCheckDQMSL0,4,expert,image,!saveCorr);\r
// For Hits distribution on ACORDE\r
\r
fhACORDEBitPatternDQM->SetFillColor(kMagenta+2);\r
- fhACOMean->SetLineColor(kBlue);\r
- fhACOMean->SetLineStyle(2);\r
- fhACOMean->SetLineWidth(4);\r
- fhACORDEBitPatternDQM->GetListOfFunctions()->Add(fhACOMean);\r
- fhACOMin->SetLineColor(kGreen);\r
- fhACOMin->SetLineStyle(2);\r
- fhACOMin->SetLineWidth(4);\r
- fhACORDEBitPatternDQM->GetListOfFunctions()->Add(fhACOMin);\r
- fhACOMax->SetLineColor(kGreen);\r
- fhACOMax->SetLineStyle(2);\r
- fhACOMax->SetLineWidth(4);\r
- fhACORDEBitPatternDQM->GetListOfFunctions()->Add(fhACOMax);\r
\r
// For ACORDE Multiplicity distribution of fired modules\r
\r
fhACORDEMultiplicitySL0DQM->SetFillColor(kMagenta);\r
- fhACOMulti->SetLineColor(kMagenta);\r
- fhACOMulti->SetLineStyle(2);\r
- fhACOMulti->SetLineWidth(4);\r
- fhACORDEMultiplicitySL0DQM->GetListOfFunctions()->Add(fhACOMulti);\r
\r
// For AMU ACO trigger mode\r
\r
// For Hits distribution on ACORDE\r
\r
fhACORDEBitPatternAMUDQM->SetFillColor(kViolet+7);\r
- fhACOMeanAMU->SetLineColor(kBlue);\r
- fhACOMeanAMU->SetLineStyle(2);\r
- fhACOMeanAMU->SetLineWidth(4);\r
- fhACORDEBitPatternAMUDQM->GetListOfFunctions()->Add(fhACOMeanAMU);\r
- fhACOMinAMU->SetLineColor(kGreen);\r
- fhACOMinAMU->SetLineStyle(2);\r
- fhACOMinAMU->SetLineWidth(4);\r
- fhACORDEBitPatternAMUDQM->GetListOfFunctions()->Add(fhACOMinAMU);\r
- fhACOMaxAMU->SetLineColor(kGreen);\r
- fhACOMaxAMU->SetLineStyle(2);\r
- fhACOMaxAMU->SetLineWidth(4);\r
- fhACORDEBitPatternAMUDQM->GetListOfFunctions()->Add(fhACOMaxAMU);\r
\r
// For ACORDE Multiplicity distribution of fired modules\r
\r
fhACORDEMultiplicityAMUDQM->SetFillColor(kViolet+6);\r
- fhACOMultiAMU->SetLineColor(kAzure-2);\r
- fhACOMultiAMU->SetLineStyle(2);\r
- fhACOMultiAMU->SetLineWidth(4);\r
- fhACORDEMultiplicityAMUDQM->GetListOfFunctions()->Add(fhACOMultiAMU);\r
\r
//\r
ClonePerTrigClass(AliQAv1::kRAWS); // this should be the last line\r