]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSQASDDChecker.cxx
In v1 geometry cluster should be attached to sensor according to sensor VIDs, rather...
[u/mrichter/AliRoot.git] / ITS / AliITSQASDDChecker.cxx
index ce01fb4de7acc8f22143f4623ed0bfdcef7d035e..0f1bdc1b944ccb68a2e36734bf5fecc46f089f74 100644 (file)
 
 
 ClassImp(AliITSQASDDChecker)
-//__________________________________________________________________
-AliITSQASDDChecker& AliITSQASDDChecker::operator = (const AliITSQASDDChecker& qac ) 
+
+
+
+//_____________________________________________________________________
+
+AliITSQASDDChecker::AliITSQASDDChecker():
+fSubDetOffset(0),
+  fStepBitSDD(NULL),
+  fLowSDDValue(NULL),
+  fHighSDDValue(NULL),
+  fCalibration(NULL),
+  fThresholdForRelativeOccupancy(0.01),
+  fThresholdForRecToRawRatio(0.04),
+fImage(NULL),
+  fESforCheck(0)
 {
-  // Equal operator.
-  this->~AliITSQASDDChecker();
-  new(this) AliITSQASDDChecker(qac);
-  return *this;
-}
+// Default constructor
+       fStepBitSDD=new Double_t[AliQAv1::kNBIT];
+       fLowSDDValue=new Float_t[AliQAv1::kNBIT];
+       fHighSDDValue=new Float_t[AliQAv1::kNBIT];
+
+       for(Int_t ibit=0;ibit<AliQAv1::kNBIT;ibit++)
+         {
+           fStepBitSDD[ibit]=0.;
+           fLowSDDValue[ibit]=0.;
+           fHighSDDValue[ibit]=0.;
+         }
+       for(Int_t i=0;i<AliRecoParam::kNSpecies;i++) fPaveText[i] = NULL;
+}          // ctor
+
+
 
 AliITSQASDDChecker::~AliITSQASDDChecker() 
 {
@@ -77,18 +100,25 @@ AliITSQASDDChecker::~AliITSQASDDChecker()
       delete fCalibration;
       fCalibration=NULL;
     }
-  if(fImage)
+       if(fImage)
     {
-      delete []fImage; 
-      fImage=NULL;
+               delete []fImage; 
+               fImage=NULL;
     }
+       for(Int_t i=0;i<AliRecoParam::kNSpecies;i++) {
+               if(fPaveText[i])
+               {
+                       delete fPaveText[i]; 
+                       fPaveText[i]=NULL;
+               }
+       }
 } // dtor
 
 //__________________________________________________________________
 Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * list, const AliDetectorRecoParam * /*recoparam*/) 
 {
   //check histograms of the different lists  
-  AliInfo(Form("AliITSQASDDChecker called with offset: %d\n", fSubDetOffset) );
+  AliInfo(Form("AliITSQASDDChecker called with offset: %d \t and specie %d\n", fSubDetOffset,fESforCheck));
 
   AliDebug(1,Form("AliITSQASDDChecker called with offset: %d\n", fSubDetOffset));
 
@@ -124,7 +154,8 @@ Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * l
   TIter next(list);
   TString results1;
   TString results2;
-  Int_t color=1;
+       Int_t color=kBlack;
+       Int_t textcolor=kBlack;
 
   switch(index) {
     case AliQAv1::kRAW:{
@@ -196,7 +227,8 @@ Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * l
 
       next.Begin();
       while( (hdata = dynamic_cast<TH1* >(next())) ){
-       if (hdata){TString hname=hdata->GetName();
+       if (hdata){
+               TString hname=hdata->GetName();
          if(hname.Contains("SDDchargeMap"))continue;
          if(hname.Contains("SDDDDLPattern"))continue;
          if(hname.Contains("SDDEventSize"))continue;
@@ -259,26 +291,27 @@ Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * l
              Int_t layer1=0;
              if(hname.Contains("3"))layer1=0;
              else  if(hname.Contains("4"))layer1=1;
-             TH2* htemp=dynamic_cast<TH2*>(hdata);
-             if(htemp){
-               hlayer[layer1]=(TH2*)htemp->Clone();
-               hlayer[layer1]->SetName(Form("%s_copy",hname.Data()));
-               //hlayer[layer1]->RebinX(2);
-               int modmay=hlayer[layer1]->GetNbinsY();
-               TH1D* hproj= hlayer[layer1]->ProjectionY();
-               Double_t ladcontent=0;
-               for(Int_t i=1;i<=modmay;i++) {//loop on the ladders
-                 ladcontent=hproj->GetBinContent(i);
-                 if(AliITSQADataMakerRec::AreEqual(ladcontent,0.)) emptyladders[layer1]++;
-                 else filledladders[layer1]++;}//end for
-               AliInfo(Form(" %s : empty ladders %i \t filled ladders %i\n",hname.Data(), emptyladders[layer1], filledladders[layer1]));//end else layer 3
-               delete hproj;
-               hproj=NULL;
-             }//end if htemp
+                       TH2* htemp=dynamic_cast<TH2*>(hdata);
+                       if(htemp){
+                         hlayer[layer1]=(TH2*)htemp->Clone();
+                               hlayer[layer1]->SetName(Form("%s_copy",hname.Data()));
+                               int modmay=hlayer[layer1]->GetNbinsY();
+                               TH1D* hproj= hlayer[layer1]->ProjectionY();
+                               Double_t ladcontent=0;
+                               for(Int_t i=1;i<=modmay;i++) {//loop on the ladders
+                                       ladcontent=hproj->GetBinContent(i);
+                                       if(AliITSQADataMakerRec::AreEqual(ladcontent,0.)) emptyladders[layer1]++;
+                                       else filledladders[layer1]++;}//end for
+                                       AliInfo(Form(" %s : empty ladders %i \t filled ladders %i\n",hname.Data(), emptyladders[layer1], filledladders[layer1]));//end else layer 3
+                                       delete hproj;
+                                       hproj=NULL;
+                       }//end if htemp
            }//end else entries !=0
          }//end check on phiz        
+               
        }//end if hdata 
-      }//end while
+      
+         }//end while
       for(Int_t ii=0;ii<2;ii++)
        {
          filledmodules[ii]=0;
@@ -302,8 +335,8 @@ Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * l
            excluded++;
            excludedmoduleperlayer[lay-3]++;
            Double_t content=0.;
-           Double_t contentlayer[2];
-           for(Int_t i=0;i<2;i++)contentlayer[i]=0.;
+           //Double_t contentlayer[2];
+           //for(Int_t i=0;i<2;i++)contentlayer[i]=0.;
            if(hmodule)content=hmodule->GetBinContent(imod+1);//if expert bit is active the histogram will be stored in the QA file otherwise the histogram will not be written on the logbook
            //      if(hlayer[lay-3]) contentlayer[lay-3]=hlayer[lay-3]->GetBinContent(det,lad);
            if(AliITSQADataMakerRec::AreEqual(content,0.)== kFALSE) {
@@ -406,39 +439,42 @@ Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * l
          AliWarning(Form(" Layer 3: %i good module(s) and %i good single drift regions didn't take data! \n",emptyactivemoduleperlayer[0] ,emptyactivedrperlayer[0] ));
          AliWarning(Form(" Layer 4: %i good module(s) and %i good single drift regions didn't take data! \n",emptyactivemoduleperlayer[1] ,emptyactivedrperlayer[1] ));
          //printf("========================= %d",AliQAv1::Instance(AliQAv1::GetDetIndex(GetName()))->IsEventSpecieSet(AliRecoParam::kCosmic));
-         if((AliQAv1::Instance(AliQAv1::GetDetIndex("ITS")))->IsEventSpecieSet(AliRecoParam::kCosmic)==kFALSE){     
+         //      if((AliQAv1::Instance(AliQAv1::GetDetIndex("ITS")))->IsEventSpecieSet(AliRecoParam::kCosmic)==kFALSE){     
+         if(AliRecoParam::ConvertIndex(GetEventSpecieForCheck())!=AliRecoParam::kCosmic){     
            
            results1.Form("%i good module(s) and %i good drift regions didn't take data!",emptydiff,emptydrdiff);
-           if(neventsraw<numlimit)
-             {
-               results2.Form(" Events %d .Too few events.DO NOT CALL the Expert ",neventsraw);
-               color=5;
-               sddQACheckerValue=fHighSDDValue[AliQAv1::kWARNING];
-             }
-           else
-             {
-               results2.Form(" Events %d .Follow the TWiki instruction and call the Expert ",neventsraw);
-               color=2;
-               sddQACheckerValue=fHighSDDValue[AliQAv1::kERROR];
-             }
+           if(neventsraw<numlimit) {
+                       results2.Form(" Events %d .Too few events.DO NOT CALL the Expert ",neventsraw);
+                       color=kYellow;
+                       textcolor=kBlack;
+                       sddQACheckerValue=fHighSDDValue[AliQAv1::kWARNING];
+               } else {
+                       results2.Form(" Events %d. If PHYSICS, follow the TWiki instruction and call the Expert ",neventsraw);
+                       color=kRed;
+                       textcolor=kWhite;
+                       sddQACheckerValue=fHighSDDValue[AliQAv1::kERROR];
+               }
          }
          else
-           if((AliQAv1::Instance(AliQAv1::GetDetIndex("ITS")))->IsEventSpecieSet(AliRecoParam::kCosmic)==kTRUE)
-             {
+           //      if((AliQAv1::Instance(AliQAv1::GetDetIndex("ITS")))->IsEventSpecieSet(AliRecoParam::kCosmic)==kTRUE)
+           if(AliRecoParam::ConvertIndex(GetEventSpecieForCheck())==AliRecoParam::kCosmic)
+             {     
                numlimit=10000;
                if(neventsraw<numlimit)
                  {
                    AliWarning(Form("This is a cosmic run. Some module and drift region are empty but all is OK. "));
-                   results1.Form("OK. Thi is a cosmic run. you need a lot of events");
+                   results1.Form("OK. This is a cosmic run. you need a lot of events. Events %i",neventsraw);
                    results2.Form("%i good module(s) and %i good drift are empty! DO NOT CALL THE EXPERT",emptydiff,emptydrdiff);
-                   color=5;
+                         color=kYellow;
+                         textcolor=kBlack;
                    sddQACheckerValue=fHighSDDValue[AliQAv1::kWARNING];
                  }
                else
                  {
-                   results1.Form("%i good module(s) and %i good drift region(s) have not recpoints!",emptydiff,emptydrdiff);
-                   results2.Form(" Events %d .Follow the TWiki instruction and call the Expert ",neventsraw);
-                   color=2;
+                   results1.Form("%i good module(s) and %i good drift region(s) have no data!",emptydiff,emptydrdiff);
+                   results2.Form(" Cosmic Events %d .Follow the TWiki instruction and call the Expert ",neventsraw);
+                         color=kRed;
+                         textcolor=kWhite;
                    sddQACheckerValue=fHighSDDValue[AliQAv1::kERROR];
                  }
              }
@@ -448,7 +484,8 @@ Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * l
          AliInfo(Form("All the active modules (%i) and single drift regions (%i) are in acquisition. The number of excluded modules are %i and the excluded single drift regions are %i\n",active,activedriftregion,excluded,excludeddriftregion));
          results1.Form("OK.");
          results2.Form(" All active modules and drift regions in acquisition");
-         color=3;
+         color=kGreen;
+               textcolor=kBlack;
          sddQACheckerValue=fHighSDDValue[AliQAv1::kINFO];
        }
        if(exactive!=0||exactivedriftregion!=0){
@@ -457,95 +494,92 @@ Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * l
          AliError(Form("Layer 3: %i modules and %i single  drift regions excluded from the acquisition took data. Active modules%i single drift region %i \n ",exactivemoduleperlayer[1],exactivedrperlayer[1],activemoduleperlayer[1],activedrperlayer[1]));
          results1.Form("%i modules and %i drift region excluded from the acquisition took data",exactive,exactivedriftregion);
          results2.Form("Follow the TWiki instructions and Call the SDD expert ");
-         color=2;      
+               color=kRed;
+               textcolor=kWhite;
          sddQACheckerValue=fHighSDDValue[AliQAv1::kERROR];
        }
        if(excluded==exactive||excludeddriftregion==exactivedriftregion){
          AliError(Form("All the modules (%d) or single drift regions (%d) excluded from the acquisition  took data!\n  Active modules %i \t Active drfift regions %i\n",excluded,excludeddriftregion,active,activedriftregion));
          results1.Form("All the modules (%d) or drift regions (%d) excluded from the acquisition took data!",excluded,excludeddriftregion );
          results2.Form("Follow the TWiki instructions and Call the SDD expert ");
-         color=6;
+               color=kRed;
+               textcolor=kWhite;
          sddQACheckerValue=fHighSDDValue[AliQAv1::kFATAL];
        }
        if(active==0||activedriftregion==0){
          AliError(Form("No modules or single drift regions took data: excluded %i \t excluded active %i \n\t\t excluded single drift regions %i \t excluded active drift regions %i \n", excluded, exactive, excludeddriftregion, exactivedriftregion)); 
          results1.Form("No modules or drift region took data: excluded modules %i  excluded drift regions %i ", excluded, excludeddriftregion );
          results2.Form("Follow the TWiki instructions and Call the SDD expert ");
-         color=6;
+               color=kRed;
+               textcolor=kWhite;
          sddQACheckerValue=fHighSDDValue[AliQAv1::kFATAL];
        }
 
-       TPaveText *pave[2];
+       //TPaveText *pave[2]={0,0};
        next.Begin();
 
-       while( (hdata=dynamic_cast<TH1* >(next())) )
-         {
+       while( (hdata=dynamic_cast<TH1* >(next())) ) {
            if (hdata){
-             TString hname=hdata->GetName();
-             if(hname.Contains("SDDphizL3") || hname.Contains("SDDphizL4")){
-               if(hname.Contains("NORM"))continue;
-               //AliInfo("========================================Found histo 11\n");
-               Int_t lay=0;
-               if(hname.Contains("3"))lay=0;
-               else if(hname.Contains("4"))lay=1;
-               pave[lay]=new TPaveText(0.3,0.88,0.9,0.99,"NDC");
-               pave[lay]->AddText(results1.Data());
-               pave[lay]->AddText(results2.Data());
-               pave[lay]->SetFillColor(color);
-               pave[lay]->SetBorderSize(1);
-               pave[lay]->SetLineWidth(1);
-               hdata->GetListOfFunctions()->Add(pave[lay]);
-             }
-             else
-               if(hname.Contains("SDDRawDataCheck"))
-                 {
+                       TString hname=hdata->GetName();
+                       if(hname.Contains("SDDphizL3") || hname.Contains("SDDphizL4")){
+                         if(hname.Contains("NORM"))continue;
+                         //AliInfo("========================================Found histo 11\n");
+                               TPaveText *ptext = ((TPaveText *)hdata->GetListOfFunctions()->FindObject("TPave"));
+                               if(ptext) {
+                                       ptext->Clear();
+                                       ptext->AddText(results1.Data());
+                                       ptext->AddText(results2.Data());
+                                       ptext->SetFillColor(color);
+                                       ptext->SetTextColor(textcolor);
+                               }
+             } else if(hname.Contains("SDDRawDataCheck")) {
                    
-                   //AliInfo("========================================Found histo\n");
-                   ((TH1F*)hdata)->SetBinContent(5,active);
-                   ((TH1F*)hdata)->SetBinContent(6,filled);
-                   ((TH1F*)hdata)->SetBinContent(7,activedriftregion);
-                   ((TH1F*)hdata)->SetBinContent(8,filleddr);
-                   ((TH1F*)hdata)->SetBinContent(9,excluded);
-                   ((TH1F*)hdata)->SetBinContent(10,empty);
-                   ((TH1F*)hdata)->SetBinContent(11,excludeddriftregion);
-                   ((TH1F*)hdata)->SetBinContent(12,emptydr);
-                   ((TH1F*)hdata)->SetBinContent(13,exactive);
-                   ((TH1F*)hdata)->SetBinContent(14,emptydiff);
-                   ((TH1F*)hdata)->SetBinContent(15,exactivedriftregion);
-                   ((TH1F*)hdata)->SetBinContent(16,emptydr);
+                         //AliInfo("========================================Found histo\n");
+                         ((TH1F*)hdata)->SetBinContent(5,active);
+                         ((TH1F*)hdata)->SetBinContent(6,filled);
+                         ((TH1F*)hdata)->SetBinContent(7,activedriftregion);
+                         ((TH1F*)hdata)->SetBinContent(8,filleddr);
+                         ((TH1F*)hdata)->SetBinContent(9,excluded);
+                         ((TH1F*)hdata)->SetBinContent(10,empty);
+                         ((TH1F*)hdata)->SetBinContent(11,excludeddriftregion);
+                         ((TH1F*)hdata)->SetBinContent(12,emptydr);
+                         ((TH1F*)hdata)->SetBinContent(13,exactive);
+                         ((TH1F*)hdata)->SetBinContent(14,emptydiff);
+                         ((TH1F*)hdata)->SetBinContent(15,exactivedriftregion);
+                         ((TH1F*)hdata)->SetBinContent(16,emptydrdiff);
                    
-                   //layer 3
-                   ((TH1F*)hdata)->SetBinContent(19,activemoduleperlayer[0]);
-                   ((TH1F*)hdata)->SetBinContent(20,filledmodules[0]);
-                   ((TH1F*)hdata)->SetBinContent(21,activedrperlayer[0]);
-                   ((TH1F*)hdata)->SetBinContent(22,filleddriftregion[0]);
-                   ((TH1F*)hdata)->SetBinContent(23,excludedmoduleperlayer[0]);
-                   ((TH1F*)hdata)->SetBinContent(24,emptymodules[0]);
-                   ((TH1F*)hdata)->SetBinContent(25,excludeddrperlayer[0]);
-                   ((TH1F*)hdata)->SetBinContent(26,emptydriftregion[0]);
-                   ((TH1F*)hdata)->SetBinContent(27,exactivemoduleperlayer[0]);
-                   ((TH1F*)hdata)->SetBinContent(28,emptyactivemoduleperlayer[0]);
-                   ((TH1F*)hdata)->SetBinContent(29,activedrperlayer[0]);
-                   ((TH1F*)hdata)->SetBinContent(30,emptyactivedrperlayer[0]);
+                         //layer 3
+                         ((TH1F*)hdata)->SetBinContent(19,activemoduleperlayer[0]);
+                         ((TH1F*)hdata)->SetBinContent(20,filledmodules[0]);
+                         ((TH1F*)hdata)->SetBinContent(21,activedrperlayer[0]);
+                         ((TH1F*)hdata)->SetBinContent(22,filleddriftregion[0]);
+                         ((TH1F*)hdata)->SetBinContent(23,excludedmoduleperlayer[0]);
+                         ((TH1F*)hdata)->SetBinContent(24,emptymodules[0]);
+                         ((TH1F*)hdata)->SetBinContent(25,excludeddrperlayer[0]);
+                         ((TH1F*)hdata)->SetBinContent(26,emptydriftregion[0]);
+                         ((TH1F*)hdata)->SetBinContent(27,exactivemoduleperlayer[0]);
+                         ((TH1F*)hdata)->SetBinContent(28,emptyactivemoduleperlayer[0]);
+                         ((TH1F*)hdata)->SetBinContent(29,exactivedrperlayer[0]);
+                         ((TH1F*)hdata)->SetBinContent(30,emptyactivedrperlayer[0]);
                    
-                   //layer 4
-                   ((TH1F*)hdata)->SetBinContent(33,activemoduleperlayer[1]);
-                   ((TH1F*)hdata)->SetBinContent(34,filledmodules[1]);
-                   ((TH1F*)hdata)->SetBinContent(35,activedrperlayer[1]);
-                   ((TH1F*)hdata)->SetBinContent(36,filleddriftregion[1]);
-                   ((TH1F*)hdata)->SetBinContent(37,excludedmoduleperlayer[1]);
-                   ((TH1F*)hdata)->SetBinContent(38,emptymodules[1]);
-                   ((TH1F*)hdata)->SetBinContent(39,excludeddrperlayer[1]);
-                   ((TH1F*)hdata)->SetBinContent(40,emptydriftregion[1]);
-                   ((TH1F*)hdata)->SetBinContent(41,exactivemoduleperlayer[1]);
-                   ((TH1F*)hdata)->SetBinContent(42,emptyactivemoduleperlayer[1]);
-                   ((TH1F*)hdata)->SetBinContent(43,activedrperlayer[1]);
-                   ((TH1F*)hdata)->SetBinContent(44,emptyactivedrperlayer[1]);
-                   //break; 
-                 }
-           }//if hdata
+                         //layer 4
+                         ((TH1F*)hdata)->SetBinContent(33,activemoduleperlayer[1]);
+                         ((TH1F*)hdata)->SetBinContent(34,filledmodules[1]);
+                         ((TH1F*)hdata)->SetBinContent(35,activedrperlayer[1]);
+                         ((TH1F*)hdata)->SetBinContent(36,filleddriftregion[1]);
+                         ((TH1F*)hdata)->SetBinContent(37,excludedmoduleperlayer[1]);
+                         ((TH1F*)hdata)->SetBinContent(38,emptymodules[1]);
+                         ((TH1F*)hdata)->SetBinContent(39,excludeddrperlayer[1]);
+                         ((TH1F*)hdata)->SetBinContent(40,emptydriftregion[1]);
+                         ((TH1F*)hdata)->SetBinContent(41,exactivemoduleperlayer[1]);
+                         ((TH1F*)hdata)->SetBinContent(42,emptyactivemoduleperlayer[1]);
+                         ((TH1F*)hdata)->SetBinContent(43,exactivedrperlayer[1]);
+                         ((TH1F*)hdata)->SetBinContent(44,emptyactivedrperlayer[1]);
+                         //break; 
+                       }
+               }//if hdata
            
-         }//end while 
+       }//end while 
        
       }//end else 
       delete hmodule;
@@ -771,8 +805,8 @@ Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * l
            excluded++;
            excludedmoduleperlayer[lay-3]++;
            Double_t content=0.;
-           Double_t contentlayer[2];
-           for(Int_t i=0;i<2;i++)contentlayer[i]=0.;
+           //Double_t contentlayer[2];
+           //for(Int_t i=0;i<2;i++)contentlayer[i]=0.;
            if(hmodule)content=hmodule->GetBinContent(imod+1);//if expert bit is active the histogram will be stored in the QA file otherwise the histogram will not be written on the logbook
            //      if(hlayer[lay-3]) contentlayer[lay-3]=hlayer[lay-3]->GetBinContent(det,lad);
            if(AliITSQADataMakerRec::AreEqual(content,0.)== kFALSE) {
@@ -878,38 +912,43 @@ Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * l
          Int_t numlimits=1000;   
 
          results1.Form("%i good module(s) and %i good drift region(s) have not recpoints!",emptydiff,emptydrdiff);
-         if((AliQAv1::Instance(AliQAv1::GetDetIndex("ITS")))->IsEventSpecieSet(AliRecoParam::kCosmic)==kFALSE)
-           {
+         //      if((AliQAv1::Instance(AliQAv1::GetDetIndex("ITS")))->IsEventSpecieSet(AliRecoParam::kCosmic)==kFALSE)
+         if(AliRecoParam::ConvertIndex(GetEventSpecieForCheck())!=AliRecoParam::kCosmic){     
+           
              if(neventsrecpoints<numlimits)
                {
                  results2.Form(" Events %d .Too few events.DO NOT CALL the Expert ",neventsrecpoints);
-                 color=5;
+                       color=kYellow;
+                       textcolor=kBlack;
                  sddQACheckerValue=fHighSDDValue[AliQAv1::kWARNING];
                }
              else
                {
-                 results2.Form(" Events %d .Follow the TWiki instruction and call the Expert ",neventsrecpoints);
-                 color=2;
+                 results2.Form(" Events %d .If PHYSICS, follow the TWiki instruction and call the Expert ",neventsrecpoints);
+                       color=kRed;
+                       textcolor=kWhite;
                  sddQACheckerValue=fHighSDDValue[AliQAv1::kERROR];
                }
            }
          else
-           if((AliQAv1::Instance(AliQAv1::GetDetIndex("ITS")))->IsEventSpecieSet(AliRecoParam::kCosmic)==kTRUE)
-             {
+           //if((AliQAv1::Instance(AliQAv1::GetDetIndex("ITS")))->IsEventSpecieSet(AliRecoParam::kCosmic)==kTRUE)
+           if(AliRecoParam::ConvertIndex(GetEventSpecieForCheck())==AliRecoParam::kCosmic){     
                numlimit=10000;
-               if(neventsrecpoints<numlimit)
+               if( neventsrecpoints<numlimit)
                  {
                    AliWarning(Form("This is a cosmic run. Some module and drift region are empty but all is OK. "));
-                   results1.Form("OK. Thi is a cosmic run. You need a lot of events");
+                   results1.Form("OK. Thi is a cosmic run. You need a lot of events. Events %i",neventsrecpoints);
                    results2.Form("%i good module(s) and %i good drift are empty! DO NOT CALL THE EXPERT",emptydiff,emptydrdiff);
-                   color=5;
+                         color=kYellow;
+                         textcolor=kBlack;
                    sddQACheckerValue=fHighSDDValue[AliQAv1::kWARNING];
                  }
                else
                  {
                    results1.Form("%i good module(s) and %i good drift region(s) have not recpoints!",emptydiff,emptydrdiff);
-                   results2.Form(" Events %d .Follow the TWiki instruction and call the Expert ",neventsrecpoints);
-                   color=2;
+                   results2.Form("Cosmic Events %d .Follow the TWiki instruction and call the Expert ",neventsrecpoints);
+                         color=kRed;
+                         textcolor=kWhite;
                    sddQACheckerValue=fHighSDDValue[AliQAv1::kERROR];
                  }
              }
@@ -921,7 +960,8 @@ Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * l
          AliInfo(Form("All the active modules (%i) and single drift regions (%i) are in acquisition. The number of excluded modules are %i and the excluded single drift regions are %i\n",active,activedriftregion,excluded,excludeddriftregion));
          results1.Form("OK.");
          results2.Form(" All active modules have recpoints");
-         color=3;
+               color=kGreen;
+               textcolor=kBlack;
          sddQACheckerValue=fHighSDDValue[AliQAv1::kINFO];
        }
        if(exactive!=0||exactivedriftregion!=0){
@@ -930,25 +970,28 @@ Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * l
          AliError(Form("Layer 3: %i modules and %i single  drift regions excluded from the acquisition have recpoints. Active modules %i single drift region %i \n ",exactivemoduleperlayer[1],exactivedrperlayer[1],activemoduleperlayer[1],activedrperlayer[1]));
          results1.Form("%i modules and %i drift region excluded from the acquisition have recpoints",exactive,exactivedriftregion);
          results2.Form("Follow the TWiki instructions and Call the SDD expert ");
-         color=2;      
+               color=kRed;
+               textcolor=kWhite;
          sddQACheckerValue=fHighSDDValue[AliQAv1::kERROR];
        }
        if(excluded==exactive||excludeddriftregion==exactivedriftregion){
          AliError(Form("All the modules (%d) or single drift regions (%d) excluded from the acquisition have recpoints!\n  Active modules %i \t Active drfift regions %i\n",excluded,excludeddriftregion,active,activedriftregion));
          results1.Form("All the modules (%d) or drift regions (%d) excluded from the acquisition have recpoints!",excluded,excludeddriftregion );
          results2.Form("Follow the TWiki instructions and Call the SDD expert ");
-         color=6;
+               color=kRed;
+               textcolor=kWhite;
          sddQACheckerValue=fHighSDDValue[AliQAv1::kFATAL];
        }
        if(active==0||activedriftregion==0){
          AliError(Form("No modules or single drift regions have recpoints: excluded %i \t excluded active %i \n\t\t excluded single drift regions %i \t excluded active drift regions %i \n", excluded, exactive, excludeddriftregion, exactivedriftregion)); 
          results1.Form("No modules or drift region have recpoints: excluded modules %i  excluded drift regions %i ", excluded, excludeddriftregion );
          results2.Form("Follow the TWiki instructions and Call the SDD expert ");
-         color=6;
+               color=kRed;
+               textcolor=kWhite;
          sddQACheckerValue=fHighSDDValue[AliQAv1::kFATAL];
        }
 
-       TPaveText *pave[2];
+       //TPaveText *pave[2]={0,0};
        next.Begin();
 
        while( (hdata=dynamic_cast<TH1* >(next())) )
@@ -958,17 +1001,15 @@ Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * l
              if(hname.Contains("SDDModPatternL3RP") || hname.Contains("SDDModPatternL4RP")){
                if(hname.Contains("NORM"))continue;
                //AliInfo("========================================Found histo 11\n");
-               Int_t lay=0;
-               if(hname.Contains("3"))lay=0;
-               else if(hname.Contains("4"))lay=1;
-               pave[lay]=new TPaveText(0.3,0.88,0.9,0.99,"NDC");
-               pave[lay]->AddText(results1.Data());
-               pave[lay]->AddText(results2.Data());
-               pave[lay]->SetFillColor(color);
-               pave[lay]->SetBorderSize(1);
-               pave[lay]->SetLineWidth(1);
-               hdata->GetListOfFunctions()->Add(pave[lay]);
-             }
+                         TPaveText *ptext = ((TPaveText *)hdata->GetListOfFunctions()->FindObject("TPave"));
+                         if(ptext) {
+                                 ptext->Clear();
+                                 ptext->AddText(results1.Data());
+                                 ptext->AddText(results2.Data());
+                                 ptext->SetFillColor(color);
+                                 ptext->SetTextColor(textcolor);
+                         }
+                 }
              else
                if(hname.Contains("SDDRecPointCheck"))
                  {
@@ -985,7 +1026,7 @@ Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * l
                    ((TH1F*)hdata)->SetBinContent(13,exactive);
                    ((TH1F*)hdata)->SetBinContent(14,emptydiff);
                    ((TH1F*)hdata)->SetBinContent(15,exactivedriftregion);
-                   ((TH1F*)hdata)->SetBinContent(16,emptydr);
+                   ((TH1F*)hdata)->SetBinContent(16,emptydrdiff);
                    
                    //layer 3
                    ((TH1F*)hdata)->SetBinContent(19,activemoduleperlayer[0]);
@@ -998,7 +1039,7 @@ Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * l
                    ((TH1F*)hdata)->SetBinContent(26,emptydriftregion[0]);
                    ((TH1F*)hdata)->SetBinContent(27,exactivemoduleperlayer[0]);
                    ((TH1F*)hdata)->SetBinContent(28,emptyactivemoduleperlayer[0]);
-                   ((TH1F*)hdata)->SetBinContent(29,activedrperlayer[0]);
+                   ((TH1F*)hdata)->SetBinContent(29,exactivedrperlayer[0]);
                    ((TH1F*)hdata)->SetBinContent(30,emptyactivedrperlayer[0]);
                    
                    //layer 4
@@ -1012,8 +1053,9 @@ Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * l
                    ((TH1F*)hdata)->SetBinContent(42,emptydriftregion[1]);
                    ((TH1F*)hdata)->SetBinContent(43,exactivemoduleperlayer[1]);
                    ((TH1F*)hdata)->SetBinContent(44,emptyactivemoduleperlayer[1]);
-                   ((TH1F*)hdata)->SetBinContent(45,activedrperlayer[1]);
+                   ((TH1F*)hdata)->SetBinContent(45,exactivedrperlayer[1]);
                    ((TH1F*)hdata)->SetBinContent(46,emptyactivedrperlayer[1]);
+                   //hdata->GetListOfFunctions()->Add(pave[0]);
                    
                  }
            }//if hadata
@@ -1031,7 +1073,7 @@ Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * l
 
       //sddQACheckerValue=1.;
       }//end recpoint list uid = 20
-      else if(uidrec==40)
+      if(uidrec==40)
        {
          //digitsr
          if (list->GetEntries() == 0){ 
@@ -1169,6 +1211,7 @@ Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * l
                  sddQACheckerValue += fStepBitSDD[AliQAv1::kINFO];    
                }//end adc counts bindistribution
              }//end entries !=0
+                       
            }//end hdata
          }//end while
        }//end else
@@ -1180,9 +1223,6 @@ Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * l
   }//end switch
   
   fCalibration=NULL;
-  if(hdata) delete hdata;
-
-
   return sddQACheckerValue;    
 }
 
@@ -1198,7 +1238,8 @@ void AliITSQASDDChecker::SetTaskOffset(Int_t taskoffset)
 void AliITSQASDDChecker::SetStepBit(const Double_t *steprange)
 {
   //set the values of the step bit for each QA bit range calculated in the AliITSQAChecker class
-  fStepBitSDD = new Double_t[AliQAv1::kNBIT];
+  //if(fStepBitSDD){/*delete fStepBitSDD;*/ fStepBitSDD=NULL;}
+  //fStepBitSDD = new Double_t[AliQAv1::kNBIT];
   for(Int_t bit=0;bit<AliQAv1::kNBIT;bit++)
     {
       fStepBitSDD[bit]=steprange[bit];
@@ -1209,8 +1250,8 @@ void AliITSQASDDChecker::SetStepBit(const Double_t *steprange)
 void  AliITSQASDDChecker::SetSDDLimits(const Float_t *lowvalue, const Float_t * highvalue)
 {
   //set the low and high values in for each QA bit range calculated in the AliITSQAChecker class
-  fLowSDDValue = new Float_t[AliQAv1::kNBIT];
-  fHighSDDValue= new Float_t[AliQAv1::kNBIT];
+  //  fLowSDDValue = new Float_t[AliQAv1::kNBIT];
+  //  fHighSDDValue= new Float_t[AliQAv1::kNBIT];
 
   for(Int_t bit=0;bit<AliQAv1::kNBIT;bit++)
     {
@@ -1224,9 +1265,8 @@ Bool_t  AliITSQASDDChecker::MakeSDDImage( TObjArray ** list, AliQAv1::TASKINDEX_
 {
   //create the image for raws and recpoints. In the other case, the default methodof CheckerBase class will be used
   //
-  Bool_t rval=kFALSE;
-  fImage=(TCanvas**)AliQAChecker::Instance()->GetDetQAChecker(0)->GetImage();
-
+       Bool_t rval=kFALSE;
+    fImage=(TCanvas**)AliQAChecker::Instance()->GetDetQAChecker(0)->GetImage();
   switch(task)
     {
     case AliQAv1::kRAWS:{
@@ -1242,7 +1282,11 @@ Bool_t  AliITSQASDDChecker::MakeSDDImage( TObjArray ** list, AliQAv1::TASKINDEX_
     }
     break;
     case AliQAv1::kNULLTASKINDEX:; case  AliQAv1::kNTASKINDEX: 
-      {AliWarning(Form("No histograms for this task ( %s ) \n", AliQAv1::GetTaskName(task).Data())); rval=kFALSE;}
+      {
+       Int_t ts=(Int_t)task;
+       AliWarning(Form("No histograms for this task number %d  \n", ts)); 
+       rval=kFALSE;
+      }
       break;
     }
 return rval;  
@@ -1254,66 +1298,68 @@ Bool_t AliITSQASDDChecker::MakeSDDRawsImage(TObjArray ** list, AliQAv1::TASKINDE
 {
   // MakeSDDRawsImage: raw data QA plots
 
-    for (Int_t esIndex = 0 ; esIndex < AliRecoParam::kNSpecies ; esIndex++) {
-      //printf("-------------------------> %i \n", esIndex);
-      if (! AliQAv1::Instance(AliQAv1::GetDetIndex(GetName()))->IsEventSpecieSet(AliRecoParam::ConvertIndex(esIndex)) || list[esIndex]->GetEntries() == 0) 
-          {//printf ("Nothing for %s \n", AliRecoParam::GetEventSpecieName(esIndex));
-        continue;
-       }
-      else{
-       const Char_t * title = Form("QA_%s_%s_%s", GetName(), AliQAv1::GetTaskName(task).Data(), AliRecoParam::GetEventSpecieName(esIndex)) ; 
-       if ( !fImage[esIndex] ) {
-         fImage[esIndex] = new TCanvas(title, title,1280,980) ;
-       }
-       
-       fImage[esIndex]->Clear() ; 
-       fImage[esIndex]->SetTitle(title) ; 
-       fImage[esIndex]->cd();
-       TPaveText someText(0.015, 0.015, 0.98, 0.98);
-       someText.AddText(title);
-       someText.Draw(); 
-       fImage[esIndex]->Print(Form("%s%s%d.%s", AliQAv1::GetImageFileName(), AliQAv1::GetModeName(mode), AliQAChecker::Instance()->GetRunNumber(), AliQAv1::GetImageFileFormat()), "ps") ; 
-       fImage[esIndex]->Clear() ; 
-       Int_t nx =2; //TMath::Nint(TMath::Sqrt(nImages));
-       Int_t ny =2; // nx  ; 
-       //if (nx < TMath::Sqrt(nImages))
-       //ny++ ;  
-       fImage[esIndex]->Divide(nx, ny) ; 
-       TIter nexthist(list[esIndex]) ; 
-       TH1* hist = NULL ;
-       Int_t npad = 1 ; 
-       fImage[esIndex]->cd(npad); 
-       fImage[esIndex]->cd(npad)->SetBorderMode(0) ;
-       while ( (hist=static_cast<TH1*>(nexthist())) ) {
-         //gPad=fImage[esIndex]->cd(npad)->GetPad(npad);
-         TString cln(hist->ClassName()) ; 
-         if ( ! cln.Contains("TH") )
-           continue ;
+       for (Int_t esIndex = 0 ; esIndex < AliRecoParam::kNSpecies ; esIndex++) {
+               //printf("-------------------------> %i \n", esIndex);
+               if (! AliQAv1::Instance(AliQAv1::GetDetIndex(GetName()))->IsEventSpecieSet(AliRecoParam::ConvertIndex(esIndex)) || list[esIndex]->GetEntries() == 0)  {
+                       //printf ("Nothing for %s \n", AliRecoParam::GetEventSpecieName(esIndex));
+                       continue;
+               } else {
+                       const Char_t * title = Form("QA_%s_%s_%s", GetName(), AliQAv1::GetTaskName(task).Data(), AliRecoParam::GetEventSpecieName(esIndex)) ; 
+                       if ( !fImage[esIndex] ) {
+                               fImage[esIndex] = new TCanvas(title, title,1280,980) ;
+                       }
+                       fImage[esIndex]->Clear() ; 
+                       fImage[esIndex]->SetTitle(title) ; 
+                       fImage[esIndex]->cd();
+                       fPaveText[esIndex] = new TPaveText(0.015, 0.015, 0.98, 0.98);
+                       fPaveText[esIndex]->AddText(title);
+                       fPaveText[esIndex]->Draw(); 
+                       fImage[esIndex]->Print(Form("%s%s%d.%s", AliQAv1::GetImageFileName(), AliQAv1::GetModeName(mode), AliQAChecker::Instance()->GetRunNumber(), AliQAv1::GetImageFileFormat()), "ps") ; 
+                       fImage[esIndex]->Clear() ; 
+                       Int_t nx =2;//TMath::Nint(TMath::Sqrt(nImages));//2
+                       Int_t ny =3;//nx  ; //2
+                       // if (nx < TMath::Sqrt(nImages))
+                       // ny++ ;  
+                       fImage[esIndex]->Divide(nx, ny) ; 
+                       TIter nexthist(list[esIndex]) ; 
+                       Int_t npad = 1 ; 
+                       fImage[esIndex]->cd(npad); 
+                       fImage[esIndex]->cd(npad)->SetBorderMode(0) ;
+                       Int_t nhist = 0;
+                       while ( 1 ) {
+                               TH1* hist = static_cast<TH1*>(nexthist());
+                               if(hist == NULL) break;
+                               nhist++;
+                               TString hname(hist->GetName());
+
+                               //gPad=fImage[esIndex]->cd(npad)->GetPad(npad);
+                               TString cln(hist->ClassName()) ; 
+                               if ( ! cln.Contains("TH") )
+                                       continue ;
          
-         if(hist->TestBit(AliQAv1::GetImageBit())) {
-           hist->GetXaxis()->SetTitleSize(0.02);
-           hist->GetYaxis()->SetTitleSize(0.02);
-           hist->GetXaxis()->SetLabelSize(0.02);
-           hist->GetYaxis()->SetLabelSize(0.02);
-           if(cln.Contains("TH2"))
-             {
-               gPad->SetRightMargin(0.15);
-               gPad->SetLeftMargin(0.05);
-               hist->SetStats(0);
-               hist->SetOption("colz") ;
-               //hist->GetListOfFunctions()->FindObject("palette")->SetLabelSize(0.025);
-               //gPad->Update();
-             }
-           hist->DrawCopy() ; 
-           fImage[esIndex]->cd(++npad) ; 
-           fImage[esIndex]->cd(npad)->SetBorderMode(0) ; 
-         }
+                               if(hist->TestBit(AliQAv1::GetImageBit())) {
+                                       hist->GetXaxis()->SetTitleSize(0.04);
+                                       hist->GetYaxis()->SetTitleSize(0.04);
+                                       hist->GetXaxis()->SetLabelSize(0.02);
+                                       hist->GetYaxis()->SetLabelSize(0.02);
+                                       if(cln.Contains("TH2")) {
+                                               gPad->SetRightMargin(0.15);
+                                               gPad->SetLeftMargin(0.05);
+                                               hist->SetStats(0);
+                                               hist->SetOption("colz") ;
+
+                                               ////hist->GetListOfFunctions()->FindObject("palette")->SetLabelSize(0.025);
+                                               //gPad->Update();
+                                       }
+                                       hist->DrawCopy(); 
+                                       fImage[esIndex]->cd(++npad) ; 
+                                       fImage[esIndex]->cd(npad)->SetBorderMode(0) ; 
+                               } 
+                       }
+                       fImage[esIndex]->Print(Form("%s%s%d.%s", AliQAv1::GetImageFileName(), AliQAv1::GetModeName(mode), AliQAChecker::Instance()->GetRunNumber(), AliQAv1::GetImageFileFormat()), "ps") ; 
+               }
        }
-       fImage[esIndex]->Print(Form("%s%s%d.%s", AliQAv1::GetImageFileName(), AliQAv1::GetModeName(mode), AliQAChecker::Instance()->GetRunNumber(), AliQAv1::GetImageFileFormat()), "ps") ; 
-      }
-    }
-   return kTRUE;
+       return kTRUE;
 }
 
 
@@ -1344,7 +1390,7 @@ Bool_t AliITSQASDDChecker::MakeSDDRecPointsImage(TObjArray ** list, AliQAv1::TAS
       fImage[esIndex]->Print(Form("%s%s%d.%s", AliQAv1::GetImageFileName(), AliQAv1::GetModeName(mode), AliQAChecker::Instance()->GetRunNumber(), AliQAv1::GetImageFileFormat()), "ps") ; 
       fImage[esIndex]->Clear() ; 
       Int_t nx =2; //TMath::Nint(TMath::Sqrt(nImages));
-      Int_t ny =4; // nx  ; 
+      Int_t ny =6; // nx  ; 
       //if (nx < TMath::Sqrt(nImages))
       //ny++ ;  
       fImage[esIndex]->Divide(nx, ny) ; 
@@ -1356,17 +1402,20 @@ Bool_t AliITSQASDDChecker::MakeSDDRecPointsImage(TObjArray ** list, AliQAv1::TAS
       while ( (hist=static_cast<TH1*>(nexthist())) ) {
        //gPad=fImage[esIndex]->cd(npad)->GetPad(npad);
         TString cln(hist->ClassName()) ;
-       //printf("=====================> Class name %s \n",cln.Data()); 
+
+       TString hname(hist->GetName());
+                 
+                 //printf("=====================> Class name %s \n",cln.Data()); 
         if ( ! cln.Contains("TH") )
           continue ;
         if(hist->TestBit(AliQAv1::GetImageBit())) {
-           hist->GetXaxis()->SetTitleSize(0.02);
-           hist->GetYaxis()->SetTitleSize(0.02);
+           hist->GetXaxis()->SetTitleSize(0.04);
+           hist->GetYaxis()->SetTitleSize(0.04);
            hist->GetXaxis()->SetLabelSize(0.02);
            hist->GetYaxis()->SetLabelSize(0.02);
          if(cln.Contains("TH1"))
            {
-             hist->SetFillColor(kOrange+7);
+             if(!hname.Contains("Check")) hist->SetFillColor(kOrange+7);
              //SetFrameFillColor(kAzure-9);
              //hist->DrawCopy() ; 
            }
@@ -1376,17 +1425,18 @@ Bool_t AliITSQASDDChecker::MakeSDDRecPointsImage(TObjArray ** list, AliQAv1::TAS
              gPad->SetLeftMargin(0.05);
              hist->SetStats(0);
              hist->SetOption("colz") ;
-             //              TPaletteAxis *paletta =(TPaletteAxis*)hist->GetListOfFunctions()->FindObject("palette");
+             ////            TPaletteAxis *paletta =(TPaletteAxis*)hist->GetListOfFunctions()->FindObject("palette");
              //paletta->SetLabelSize(0.025);
              //gPad->Update(); 
            }
-         hist->DrawCopy();
-          fImage[esIndex]->cd(++npad) ; 
-         fImage[esIndex]->cd(npad)->SetBorderMode(0) ; 
-        }
+
+                       hist->DrawCopy(); 
+                       fImage[esIndex]->cd(++npad) ; 
+                       fImage[esIndex]->cd(npad)->SetBorderMode(0) ; 
+               }
       }
       fImage[esIndex]->Print(Form("%s%s%d.%s", AliQAv1::GetImageFileName(), AliQAv1::GetModeName(mode), AliQAChecker::Instance()->GetRunNumber(), AliQAv1::GetImageFileFormat()), "ps") ; 
     }
-    // }  
    return kTRUE;
 }
+