DQM histograms for shifters updated
authormrodrigu <mrodrigu@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 29 Sep 2011 13:39:06 +0000 (13:39 +0000)
committermrodrigu <mrodrigu@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 29 Sep 2011 13:39:06 +0000 (13:39 +0000)
ACORDE/AliACORDEQADataMakerRec.cxx
ACORDE/AliACORDEQADataMakerRec.h

index ae986f4..07cacf8 100755 (executable)
 //\r
 //  Created: June 13th 2008\r
 //---\r
+// Last update: Sept. 29th. 2011 (by Mario RC: mrodrigu@mail.cern.ch) \r
+//     --> ACOMultiSL0_DQM_Shifter filling histogram fixed\r
+//     --> Expert histogram updated: 2 histograms (Checks the hits for SL0 and AMU mode)\r
+//     --> To be include in the next update: threshold settings from AliACORDEQAThreshold class (not yet)\r
 // Last update: May 5th. 2011 (by Mario RC: mrodrigu@mail.cern.ch) -->Creates QA expert histograms \r
 // and QA-shifter histograms also with threshold lines and visual alarm\r
 // Last Update: Aug. 27th 2008 --> Implementation to declare QA expert histogram\r
@@ -61,8 +65,7 @@ ClassImp(AliACORDEQADataMakerRec)
   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
-  fhACOTriggerCheck(new TLine(0.,4.,60.,4.))\r
+  fhACOMultiAMU(new TLine(0.,4.,60.,4.))\r
 {\r
 \r
 }\r
@@ -76,8 +79,7 @@ AliACORDEQADataMakerRec::AliACORDEQADataMakerRec(const AliACORDEQADataMakerRec&
   fhACOMeanAMU(qadm.fhACOMeanAMU),\r
   fhACOMinAMU(qadm.fhACOMinAMU),\r
   fhACOMaxAMU(qadm.fhACOMaxAMU),\r
-  fhACOMultiAMU(qadm.fhACOMultiAMU),\r
-  fhACOTriggerCheck(qadm.fhACOTriggerCheck)\r
+  fhACOMultiAMU(qadm.fhACOMultiAMU)\r
 {\r
   SetName((const char*)qadm.GetName()) ; \r
   SetTitle((const char*)qadm.GetTitle()); \r
@@ -94,7 +96,6 @@ AliACORDEQADataMakerRec::~AliACORDEQADataMakerRec()
   delete fhACOMinAMU;\r
   delete fhACOMaxAMU;\r
   delete fhACOMultiAMU;\r
-  delete fhACOTriggerCheck;\r
 }\r
 \r
 //__________________________________________________________________\r
@@ -113,6 +114,27 @@ void AliACORDEQADataMakerRec::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObj
   ResetEventTrigClasses(); // reset triggers list to select all histos\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
@@ -121,311 +143,239 @@ void AliACORDEQADataMakerRec::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObj
     //\r
     for (int itc=-1;itc<GetNTrigClasses();itc++) { // RS Loop over the trigger classes\r
       //\r
-      TObjArray * parr = GetRawsDataOfTrigClass(itc);\r
-      if (!parr) continue;\r
-      TObjArray &harr = *parr;\r
-      //\r
-      TH1* h0 = (TH1*)harr[0];\r
-      TH1* h1 = (TH1*)harr[1];\r
-      if (!h0 || !h1) continue;\r
-      double integral = 0;\r
-      if (itc==-1 && !(integral=h0->Integral())) { // default clone\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.5,55,1,"b");\r
-       acoBoxFatal->SetFillColor(kRed);\r
-       acoBoxFatal->SetLineColor(kRed);\r
-       acoBoxFatal->SetLineWidth(2);\r
-       //acoBox2->SetTextSize(3);\r
-       //acoBox2->SetTextColor(kBlack);\r
-       acoBoxFatal->AddText("FLAG MESSAGE: ACO. Not Ok, Call the expert !!!");\r
-       acoBoxFatal->AddText("Blue line: mean of hits");\r
-       acoBoxFatal->AddText("Between GREEN lines: ACO. O.K.");\r
-       h0->GetListOfFunctions()->Add(acoBoxFatal);\r
+       TObjArray * parr = GetRawsDataOfTrigClass(itc);\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
+\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
-       TPaveText *acoMultiBoxFatal = new TPaveText(20,0.5,40,1,"b");\r
-       acoMultiBoxFatal->SetFillColor(kRed);\r
-       acoMultiBoxFatal->SetLineColor(kRed);\r
-       acoMultiBoxFatal->SetLineWidth(2);\r
-       acoMultiBoxFatal->AddText("ACO. Not O.K., Call the experts");\r
-       h1->GetListOfFunctions()->Add(acoMultiBoxFatal);\r
-       continue;\r
-      }\r
-      Double_t mean = integral/60;\r
-      fhACOMean->SetY1(mean);\r
-      fhACOMean->SetY2(mean);\r
-      fhACOMin->SetY1(0.05*mean);\r
-      fhACOMin->SetY2(0.05*mean);\r
-      fhACOMax->SetY1(2.25*mean);\r
-      fhACOMax->SetY2(2.25*mean);\r
-      \r
-      // alarms\r
-      Double_t max = h0->GetMaximum();\r
-      if (max == 0) {\r
-       printf("Maximum of hits equal to ZERO, please check the status of ACORDE !!\n");\r
-       continue;\r
-      }\r
-      // Multiplicity histogram threshold\r
-      Double_t maxMulti = h1->GetMaximum();\r
-      if (maxMulti == 0) {\r
-       printf("Maximum of entries equal to ZERO, please check the status of ACORDE !!\n");\r
-       continue;\r
-      }\r
-      fhACOMulti->SetX1(1);\r
-      fhACOMulti->SetY1(1);\r
-      fhACOMulti->SetX2(1);\r
-      fhACOMulti->SetY2(maxMulti);\r
-      TPaveText *acoBox=new TPaveText(35,max-0.20*max,55,max,"b");\r
-      //acoBox->SetFillStyle(0);\r
-      TPaveText *acoBox1=new TPaveText(35,max-0.20*max,55,max,"b");\r
-      //acoBox1->SetFillStyle(0);\r
-      TPaveText *acoBox2=new TPaveText(35,max-0.20*max,55,max,"b");\r
-      //acoBox2->SetFillStyle(0);\r
-      Int_t flagACO_DQM = 0;\r
-      Bool_t isACOOk = kTRUE;\r
-      Bool_t isACOWarning = kFALSE;\r
-      for(Int_t iModule=0;iModule<60;iModule++)        {\r
-       if ((h0->GetBinContent(iModule))/max < 0.5) flagACO_DQM++;\r
-      }\r
-      if (flagACO_DQM < 15) {\r
-       acoBox->SetFillColor(kGreen);\r
-       acoBox->SetLineColor(kGreen);\r
-       acoBox->SetLineWidth(2);\r
-       //acoBox->SetTextSize(3);\r
-       //acoBox->SetTextColor(kBlack);\r
-       acoBox->AddText("FLAG MESSAGE: O.K. !!!");\r
-       acoBox->AddText("Blue line: mean of hits");\r
-       acoBox->AddText("Between GREEN lines: ACO. O.K.");\r
-       h0->GetListOfFunctions()->Add(acoBox);  \r
-       //\r
-      } \r
-      else if (flagACO_DQM > 15 && flagACO_DQM<30) {\r
-       acoBox1->SetFillColor(kYellow);\r
-       acoBox1->SetLineColor(kYellow);\r
-       acoBox1->SetLineWidth(2);\r
-       //acoBox1->SetTextSize(3);\r
-       //acoBox1->SetTextColor(kBlack);\r
-       acoBox1->AddText("FLAG MESSAGE: Warning, some modules are not working properly !!!");\r
-       acoBox1->AddText("Blue line: mean of hits");\r
-       acoBox1->AddText("Between GREEN lines: ACO. O.K.");\r
-       h0->GetListOfFunctions()->Add(acoBox1);\r
-       isACOWarning=kTRUE;     \r
-      }\r
-      else if (flagACO_DQM > 30) {\r
-       acoBox2->SetFillColor(kRed);\r
-       acoBox2->SetLineColor(kRed);\r
-       acoBox2->SetLineWidth(2);\r
-       //acoBox2->SetTextSize(3);\r
-       //acoBox2->SetTextColor(kBlack);\r
-       acoBox2->AddText("FLAG MESSAGE: ACO. Not Ok, Call the expert !!!");\r
-       acoBox2->AddText("Blue line: mean of hits");\r
-       acoBox2->AddText("Between GREEN lines: ACO. O.K.");\r
-       h0->GetListOfFunctions()->Add(acoBox2);\r
-       isACOOk=kFALSE; \r
-      }\r
-      //\r
-      \r
-      TPaveText *acoMultiBox = new TPaveText(20,maxMulti-0.20*maxMulti,40,maxMulti,"b");\r
-      if (h1->Integral()==0 || isACOOk==kFALSE) {\r
-       acoMultiBox->SetFillColor(kRed);\r
-       acoMultiBox->SetLineColor(kRed);\r
-       acoMultiBox->SetLineWidth(2);\r
-       acoMultiBox->AddText("ACO. Not O.K., Call the experts");\r
-       h1->GetListOfFunctions()->Add(acoMultiBox);\r
-      }\r
-      /*    if (GetRawsData(5)->GetBinContent(1) > 0 || isACOOk && GetRawsData(5)->Integral()!=0 && isACOOk==kTRUE){\r
-           acoMultiBox->SetFillColor(kYellow);\r
-           acoMultiBox->SetLineColor(kYellow);\r
-           acoMultiBox->SetLineWidth(2);\r
-           acoMultiBox->AddText("Warning: possible empy events only IF ACORDE is triggering, else: O.K.");\r
-           GetRawsData(5)->GetListOfFunctions()->Add(acoMultiBox);\r
-           }\r
-      */\r
-      if (isACOOk==kTRUE) {\r
-       acoMultiBox->SetFillColor(kGreen);\r
-       acoMultiBox->SetLineColor(kGreen);\r
-       acoMultiBox->SetLineWidth(2);\r
-       acoMultiBox->AddText("FLAG MESSAGE: ACO. O.K.");\r
-       //acoMultiBox->AddText("NOTE: if entries below the pink line and ACO is triggering, then call the expert (possible empty events)");\r
-       h1->GetListOfFunctions()->Add(acoMultiBox);\r
-      }\r
-      if (isACOWarning==kTRUE) {\r
-       acoMultiBox->SetFillColor(kYellow);\r
-       acoMultiBox->SetLineColor(kYellow);\r
-       acoMultiBox->SetLineWidth(2);\r
-       acoMultiBox->AddText("FLAG MESSAGE: ACO. O.K., warning, some modules are not working properly");\r
-       //acoMultiBox->AddText("NOTE: if entries below the pink line and ACO is triggering, then call the expert (possible empty events)");\r
-       h1->GetListOfFunctions()->Add(acoMultiBox);\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
-      // for AMU ACORDE trigger option\r
-      TH1* h2 = (TH1*)harr[2];\r
-      TH1* h3 = (TH1*)harr[3];\r
-      if (!h2 || !h3) continue;\r
-      Double_t integral1 = h2->Integral();\r
-      if (integral1==0) {\r
-       printf("No entries in ACORDE Hits histograms for trigger class %d --> fatal error, please check !!!\n",itc);\r
-       TPaveText *acoBoxFatalAMU=new TPaveText(35,0.5,55,1,"b");\r
-       acoBoxFatalAMU->SetFillColor(kRed);\r
-       acoBoxFatalAMU->SetLineColor(kRed);\r
-       acoBoxFatalAMU->SetLineWidth(2);\r
-       //acoBox2->SetTextSize(3);\r
-       //acoBox2->SetTextColor(kBlack);\r
-       acoBoxFatalAMU->AddText("FLAG MESSAGE: ACO. Not Ok, Call the expert !!!");\r
-       acoBoxFatalAMU->AddText("Blue line: mean of hits");\r
-       acoBoxFatalAMU->AddText("Between GREEN lines: ACO. O.K.");\r
-       h2->GetListOfFunctions()->Add(acoBoxFatalAMU);\r
+       // Check DQM\r
+\r
+       // setting the thresholds\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
+\r
+       // SL0 - histograms\r
+\r
+       Int_t indexActiveModuleSL0 = 0;\r
+        for(Int_t iModule=0;iModule<60;iModule++){     \r
+               if (h0->GetBinContent(iModule)>0) indexActiveModuleSL0++;\r
+       }\r
        \r
-       TPaveText *acoMultiBoxFatalAMU = new TPaveText(20,0.5,40,1,"b");\r
-       acoMultiBoxFatalAMU->SetFillColor(kRed);\r
-       acoMultiBoxFatalAMU->SetLineColor(kRed);\r
-       acoMultiBoxFatalAMU->SetLineWidth(2);\r
-       acoMultiBoxFatalAMU->AddText("ACO. Not O.K., Call the experts");\r
-       h3->GetListOfFunctions()->Add(acoMultiBoxFatalAMU);\r
+       Float_t meanHitsSL0 = 0.;\r
+       if (indexActiveModuleSL0!=0) meanHitsSL0=h0->Integral()/indexActiveModuleSL0;\r
+\r
+       Int_t indexSL0 = 0;\r
        \r
-       continue;\r
-      }\r
-      Double_t mean1 = integral1/60;\r
-      fhACOMeanAMU->SetY1(mean1);\r
-      fhACOMeanAMU->SetY2(mean1);\r
-      fhACOMinAMU->SetY1(0.05*mean1);\r
-      fhACOMinAMU->SetY2(0.05*mean1);\r
-      fhACOMaxAMU->SetY1(2.25*mean1);\r
-      fhACOMaxAMU->SetY2(2.25*mean1);\r
-      \r
-      // alarms\r
-      Double_t max1 = h2->GetMaximum();\r
-      if (max1 == 0) {\r
-       printf("Maximum of hits equal to ZERO, please check the status of ACORDE !!\n");\r
-       continue;\r
-      }\r
-      // Multiplicity histogram threshold\r
-      Double_t maxMulti1 = h3->GetMaximum();\r
-      if (maxMulti1 == 0) {\r
-       printf("Maximum of entries equal to ZERO, please check the status of ACORDE !!\n");\r
-       continue;\r
-      }\r
-      fhACOMultiAMU->SetX1(1);\r
-      fhACOMultiAMU->SetY1(1);\r
-      fhACOMultiAMU->SetX2(1);\r
-      fhACOMultiAMU->SetY2(maxMulti1);\r
-      TPaveText *acoBoxAMU=new TPaveText(35,max1-0.20*max1,55,max1,"b");\r
-      //acoBox->SetFillStyle(0);\r
-      TPaveText *acoBox1AMU=new TPaveText(35,max1-0.20*max1,55,max1,"b");\r
-      //acoBox1->SetFillStyle(0);\r
-      TPaveText *acoBox2AMU=new TPaveText(35,max1-0.20*max1,55,max1,"b");\r
-      //acoBox2->SetFillStyle(0);\r
-      Int_t flagACO_DQMAMU = 0;\r
-      Bool_t isACOOkAMU = kTRUE;\r
-      Bool_t isACOWarningAMU = kFALSE;\r
-      for(Int_t iModule=0;iModule<60;iModule++) {\r
-       if ((h2->GetBinContent(iModule))/max1 < 0.5) flagACO_DQMAMU++;\r
-      }\r
-      if (flagACO_DQMAMU < 15) {\r
-       acoBoxAMU->SetFillColor(kGreen);\r
-       acoBoxAMU->SetLineColor(kGreen);\r
-       acoBoxAMU->SetLineWidth(2);\r
-       //acoBox->SetTextSize(3);\r
-       //acoBox->SetTextColor(kBlack);\r
-       acoBoxAMU->AddText("FLAG MESSAGE: O.K. !!!");\r
-       acoBoxAMU->AddText("Blue line: mean of hits");\r
-       acoBoxAMU->AddText("Between GREEN lines: ACO. O.K.");\r
-       h2->GetListOfFunctions()->Add(acoBoxAMU);       \r
-       //\r
-      }\r
-      else if (flagACO_DQMAMU > 15 && flagACO_DQMAMU<30) {\r
-       acoBox1AMU->SetFillColor(kYellow);\r
-       acoBox1AMU->SetLineColor(kYellow);\r
-       acoBox1AMU->SetLineWidth(2);\r
-       //acoBox1->SetTextSize(3);\r
-       //acoBox1->SetTextColor(kBlack);\r
-       acoBox1AMU->AddText("FLAG MESSAGE: Warning, some modules are not working properly !!!");\r
-       acoBox1AMU->AddText("Blue line: mean of hits");\r
-       acoBox1AMU->AddText("Between GREEN lines: ACO. O.K.");\r
-       h2->GetListOfFunctions()->Add(acoBox1AMU);\r
-       isACOWarningAMU=kTRUE;\r
-       //\r
-      } \r
-      else if (flagACO_DQMAMU > 30) {\r
-       acoBox2AMU->SetFillColor(kRed);\r
-       acoBox2AMU->SetLineColor(kRed);\r
-       acoBox2AMU->SetLineWidth(2);\r
-       //acoBox2->SetTextSize(3);\r
-       //acoBox2->SetTextColor(kBlack);\r
-       acoBox2AMU->AddText("FLAG MESSAGE: ACO. Not Ok, Call the expert !!!");\r
-       acoBox2AMU->AddText("Blue line: mean of hits");\r
-       acoBox2AMU->AddText("Between GREEN lines: ACO. O.K.");\r
-       h2->GetListOfFunctions()->Add(acoBox2AMU);\r
-       isACOOkAMU=kFALSE;\r
-      }\r
-      //\r
-      TPaveText *acoMultiBoxAMU = new TPaveText(20,maxMulti1-0.20*maxMulti1,40,maxMulti1,"b");\r
-      if (h3->Integral()==0 || isACOOkAMU==kFALSE) {\r
-       acoMultiBoxAMU->SetFillColor(kRed);\r
-       acoMultiBoxAMU->SetLineColor(kRed);\r
-       acoMultiBoxAMU->SetLineWidth(2);\r
-       acoMultiBoxAMU->AddText("ACO. Not O.K., Call the experts");\r
-       h3->GetListOfFunctions()->Add(acoMultiBoxAMU);\r
-      }\r
-      /*              if (GetRawsData(5)->GetBinContent(1) > 0 || isACOOk && GetRawsData(5)->Integral()!=0 && isACOOk==kTRUE){\r
-                     acoMultiBox->SetFillColor(kYellow);\r
-                     acoMultiBox->SetLineColor(kYellow);\r
-                     acoMultiBox->SetLineWidth(2);\r
-                     acoMultiBox->AddText("Warning: possible empy events only IF ACORDE is triggering, else: O.K.");\r
-                     GetRawsData(5)->GetListOfFunctions()->Add(acoMultiBox);\r
-                     }\r
-      */\r
-      if (isACOOkAMU==kTRUE) {\r
-       acoMultiBoxAMU->SetFillColor(kGreen);\r
-       acoMultiBoxAMU->SetLineColor(kGreen);\r
-       acoMultiBoxAMU->SetLineWidth(2);\r
-       acoMultiBoxAMU->AddText("FLAG MESSAGE: ACO. O.K.");\r
-       //acoMultiBox->AddText("NOTE: if entries below the pink line and ACO is triggering, then call the expert (possible empty events)");\r
-       h3->GetListOfFunctions()->Add(acoMultiBoxAMU);\r
-      }\r
-      if (isACOWarningAMU==kTRUE) {\r
-       acoMultiBoxAMU->SetFillColor(kYellow);\r
-       acoMultiBoxAMU->SetLineColor(kYellow);\r
-       acoMultiBoxAMU->SetLineWidth(2);\r
-       acoMultiBoxAMU->AddText("FLAG MESSAGE: ACO. O.K., warning, some modules are not working properly");\r
-       //acoMultiBox->AddText("NOTE: if entries below the pink line and ACO is triggering, then call the expert (possible empty events)");\r
-       h3->GetListOfFunctions()->Add(acoMultiBoxAMU);\r
-      }\r
-      \r
-      // Checks if hits distribution from SL0 and AMU are equal\r
-      Float_t eff = 0.0;\r
-      Int_t effFlag = 0;\r
-      //\r
-      TH1* h4 = (TH1*)harr[4];\r
-      if (h4) {\r
-       for (Int_t iModule = 0; iModule < 60; iModule++) {\r
-         if (h2->GetBinContent(iModule)==0) {\r
-           eff = 0.0;\r
-           continue;\r
-         }\r
-         else {\r
-           eff = h0->GetBinContent(iModule)/h2->GetBinContent(iModule);\r
-           h4->Fill(iModule,eff);\r
-           if (eff!=1) effFlag++;\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
+\r
+       fhACOMeanAMU->SetX1(0);\r
+       fhACOMeanAMU->SetY1(meanHitsAMU);\r
+       fhACOMeanAMU->SetX2(59);\r
+       fhACOMeanAMU->SetY2(meanHitsAMU);\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
-       if (effFlag == 0)       {\r
-         TPaveText *checkTriggerBox = new TPaveText(20,0.6,40,0.8,"b");\r
-         checkTriggerBox->SetFillColor(kGreen);\r
-         checkTriggerBox->SetLineColor(kGreen);\r
-         checkTriggerBox->SetLineWidth(2);\r
-         checkTriggerBox->AddText("FLAG MESSAGE: ACO. trigger O.K.");\r
-         h4->GetListOfFunctions()->Add(checkTriggerBox);\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* 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
+               }\r
+       }\r
+\r
+       if (indexAMU>=AMU_ThresholdAlarm) {\r
+               h2->GetListOfFunctions()->Add(acoBoxOkHitsAMU);\r
+               h3->GetListOfFunctions()->Add(acoBoxOkMultiAMU);\r
        }\r
-       else {\r
-         TPaveText *checkTriggerBox1 = new TPaveText(20,0.6,40,0.8,"b");\r
-         checkTriggerBox1->SetFillColor(kYellow);\r
-         checkTriggerBox1->SetLineColor(kYellow);\r
-         checkTriggerBox1->SetLineWidth(2);\r
-         checkTriggerBox1->AddText("FLAG MESSAGE: Warning, please check the ACO trigger configuration");\r
-         h4->GetListOfFunctions()->Add(checkTriggerBox1);\r
+       else{\r
+               h2->GetListOfFunctions()->Add(acoBoxErrorHitsAMU);\r
+               h3->GetListOfFunctions()->Add(acoBoxErrorMultiAMU);\r
        }\r
-      } // h4\r
+      \r
     } // end of trigger classes loop\r
   } // end specie loop\r
   // QA Checker standar (to be updated)\r
@@ -445,45 +395,35 @@ void AliACORDEQADataMakerRec::InitRaws()
 {\r
   // create Raw histograms in Raw subdir\r
 \r
-  const Bool_t expert   = kTRUE ; \r
-  const Bool_t saveCorr = kTRUE ; \r
-  const Bool_t image    = kTRUE ; \r
-  /*\r
-  const char *acoModule[60]={"0_0","0_1","0_2","0_3","0_4","0_5","0_6","0_7","0_8","0_9",\r
-                        "1_0","1_1","1_2","1_3","1_4","1_5","1_6","1_7","1_8","1_9",\r
-                        "2_0","2_1","2_2","2_3","2_4","2_5","2_6","2_7","2_8","2_9",\r
-                        "3_0","3_1","3_2","3_3","3_4","3_5","3_6","3_7","3_8","3_9",\r
-                        "4_0","4_1","4_2","4_3","4_4","4_5","4_6","4_7","4_8","4_9",\r
-                        "5_0","5_1","5_2","5_3","5_4","5_5","5_6","5_7","5_8","5_9"};\r
-  */\r
-  // TH1F *fhACORDEBitPattern[4];\r
-         //TH1F *fhACORDEBitPatternDQM;\r
- //  fhACORDEBitPattern[0] = new TH1F("ACORDEBitPatternfromRAWSingle","Distribution of ACORDE fired modules from RAW-Single;Modules;Counts",60,-0.5,59.5);//AcordeSingleMuon BitPattern\r
- //  fhACORDEBitPattern[1] = new TH1F("ACORDEBitPatternfromRAWMulti","Distribution of ACORDE fired modules from RAW-Multi;Modules;Counts",60,-0.5,59.5);//AcordeMultiMuon BitPattern\r
- //  fhACORDEBitPattern[2] = new TH1F("ACORDEMultiplicityfromRAWSingle","Number of fired ACORDE modules;No. of fired ACORDE modules;No. of events in ACORDE",61,-1,60);//AcordeSingleMuon Multiplicity\r
- //  fhACORDEBitPattern[3] = new TH1F("ACORDEMultiplicityfromRAWMulti","Number of fired ACORDE modules; No. of fired ACORDE modules;No. of events in ACORDE",61,-1,60);//AcordeMultiMuon Multiplicity\r
-         TH1F * fhACORDEBitPatternDQM = new TH1F("ACOHitsSL0_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 * 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 * fhACORDEBitPatternCheckDQM = new TH1F("ACOHitsTriggerCheck_DQMExpert","Check distribution for ACORDE trigger configuration; No. of module; Trigger hits difference",60,-0.5,59.5); // Check the trigger status of ACORDE (SL0 vs AMU)\r
+       const Bool_t expert   = kTRUE ; \r
+       const Bool_t saveCorr = kTRUE ; \r
+       const Bool_t image    = kTRUE ; \r
+       TH1F * fhACORDEBitPatternDQM = new TH1F("ACOHitsSL0_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 * 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
          // Expert histograms\r
- //      for(Int_t i=0;i<4;i++)\r
- //    Add2RawsList(fhACORDEBitPattern[i],i,expert, !image, !saveCorr);\r
          // Check the hits multiplicity from trigger configuration\r
-         Add2RawsList(fhACORDEBitPatternCheckDQM,4,expert,image,!saveCorr);\r
-         fhACORDEBitPatternCheckDQM->SetFillColor(kOrange);\r
-         // AMORE diplay settings for shifter on GUI\r
+         Add2RawsList(fhACORDEBitPatternCheckDQMSL0,4,expert,image,!saveCorr);\r
+         fhACORDEBitPatternCheckDQMSL0->SetFillColor(kOrange);\r
+        Add2RawsList(fhACORDEBitPatternCheckDQMAMU,5,expert,image,!saveCorr);\r
+         fhACORDEBitPatternCheckDQMAMU->SetFillColor(kRed+2);\r
+\r
+       \r
+       // AMORE diplay settings for shifter on GUI\r
  \r
-         // For SL0 ACO trigger mode\r
+        // For SL0 ACO trigger mode\r
  \r
          Add2RawsList(fhACORDEBitPatternDQM,0,!expert,image,!saveCorr);\r
         ForbidCloning(fhACORDEBitPatternDQM);\r
          Add2RawsList(fhACORDEMultiplicitySL0DQM,1,!expert,image,!saveCorr);\r
         ForbidCloning(fhACORDEMultiplicitySL0DQM);\r
+\r
          // For Hits distribution on ACORDE\r
  \r
-         fhACORDEBitPatternDQM->SetFillColor(kCyan-7);\r
+         fhACORDEBitPatternDQM->SetFillColor(kMagenta+2);\r
          fhACOMean->SetLineColor(kBlue);\r
          fhACOMean->SetLineStyle(2);\r
          fhACOMean->SetLineWidth(4);\r
@@ -499,7 +439,7 @@ void AliACORDEQADataMakerRec::InitRaws()
  \r
          // For ACORDE Multiplicity distribution of fired modules\r
  \r
-         fhACORDEMultiplicitySL0DQM->SetFillColor(kBlue+1);\r
+         fhACORDEMultiplicitySL0DQM->SetFillColor(kMagenta);\r
          fhACOMulti->SetLineColor(kMagenta);\r
          fhACOMulti->SetLineStyle(2);\r
          fhACOMulti->SetLineWidth(4);\r
@@ -512,7 +452,7 @@ void AliACORDEQADataMakerRec::InitRaws()
  \r
          // For Hits distribution on ACORDE\r
  \r
-         fhACORDEBitPatternAMUDQM->SetFillColor(kCyan-7);\r
+         fhACORDEBitPatternAMUDQM->SetFillColor(kViolet+7);\r
          fhACOMeanAMU->SetLineColor(kBlue);\r
          fhACOMeanAMU->SetLineStyle(2);\r
          fhACOMeanAMU->SetLineWidth(4);\r
@@ -528,19 +468,12 @@ void AliACORDEQADataMakerRec::InitRaws()
  \r
          // For ACORDE Multiplicity distribution of fired modules\r
  \r
-         fhACORDEMultiplicityAMUDQM->SetFillColor(kBlue+1);\r
-         fhACOMultiAMU->SetLineColor(kMagenta);\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
-  for (Int_t iModule = 0; iModule<60; iModule++)\r
-  {\r
-    fhACORDEBitPattern[0]->GetXaxis()->SetBinLabel(iModule+1,acoModule[iModule]);\r
-    fhACORDEBitPattern[1]->GetXaxis()->SetBinLabel(iModule+1,acoModule[iModule]);\r
-  }\r
-        */\r
   //\r
   ClonePerTrigClass(AliQAv1::kRAWS); // this should be the last line\r
 }\r
index 3e51643..14778cc 100755 (executable)
@@ -60,8 +60,6 @@ private:
   TLine* fhACOMinAMU;
   TLine* fhACOMaxAMU;
   TLine* fhACOMultiAMU;
-  // Trigger check (4 words from hits multiplicity)
-  TLine* fhACOTriggerCheck;
   //
   ClassDef(AliACORDEQADataMakerRec,1)  // description