]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSQASDDChecker.cxx
Fixing coding conventions violations + updates in AliITSRawStreamSPDErrorLog (Annalisa)
[u/mrichter/AliRoot.git] / ITS / AliITSQASDDChecker.cxx
index a58a88d8db63dcd01f7cbe85dd58d7a2ad6ec749..368810f1d108dbc02f900091aa8ec704b04a56cd 100644 (file)
@@ -1,4 +1,3 @@
-
 /**************************************************************************
  * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
  *                                                                        *
 
 // --- ROOT system ---
 #include "TH1.h"
-#include <TCanvas.h>
-
+#include <TH1D.h>
+#include <TH2.h>
 // --- AliRoot header files ---
+#include "AliITSQADataMakerRec.h"
 #include "AliITSQASDDChecker.h"
 #include "AliLog.h"
 #include "AliCDBEntry.h"
 #include "AliCDBManager.h"
-#include "AliQACheckerBase.h"
-#include "TSystem.h"
+#include "AliITSCalibrationSDD.h"
+#include "AliITSgeomTGeo.h"
 
 
 ClassImp(AliITSQASDDChecker)
@@ -45,87 +45,427 @@ AliITSQASDDChecker& AliITSQASDDChecker::operator = (const AliITSQASDDChecker& qa
   return *this;
 }
 
+AliITSQASDDChecker::~AliITSQASDDChecker() 
+{
+
+  //destructor
+  if(fStepBitSDD) 
+    {
+      delete[] fStepBitSDD ;
+      fStepBitSDD = NULL;
+    }
+  if(fLowSDDValue)
+    {
+      delete[]fLowSDDValue;
+      fLowSDDValue=NULL;
+    }
+  if(fHighSDDValue)
+    { 
+      delete[]fHighSDDValue;
+      fHighSDDValue=NULL;
+    }
+  if(fCalibration)
+    {
+      delete fCalibration;
+      fCalibration=NULL;
+    }
+} // dtor
+
 //__________________________________________________________________
-Double_t AliITSQASDDChecker::Check(AliQA::ALITASK_t index, TObjArray * list) 
-{  
+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) );
+
   AliDebug(1,Form("AliITSQASDDChecker called with offset: %d\n", fSubDetOffset));
-  AliCDBEntry *QARefObj = AliCDBManager::Instance()->Get("ITS/QARef/SDD");
-  if( !QARefObj){
-    AliError("Calibration object retrieval failed! SDD will not be processed");
-    return 1.;
-  }
 
-  Double_t test = 0.0;
-  Int_t offset = 0;
+  Double_t SDDQACheckerValue = 0.;
+  TH1 *hdata=NULL;
+  Double_t entries=0.;
+  Double_t entries2[2];
+  for(Int_t i=0;i<2;i++)entries2[i]=0.;
 
-  if(index==AliQA::kRAW){  //analizing RAWS
-    TH1F *ModPattern = (TH1F*)QARefObj->GetObject();
-    if (list->GetEntries() == 0){
-      test = 1. ; // nothing to check
-    }
-    else {
-      TIter next(list) ;
-      TH1 * hdata ;
-      for(offset =0;offset < fSubDetOffset; offset++){
-       hdata = dynamic_cast<TH1 *>(next());  
+  if(!fCalibration){
+    AliCDBEntry *calibSDD = AliCDBManager::Instance()->Get("ITS/Calib/CalibSDD");
+    Bool_t cacheStatus = AliCDBManager::Instance()->GetCacheFlag();
+    if(!calibSDD)
+      {
+       AliError("Calibration object retrieval failed! SDD will not be processed");
+       fCalibration = NULL;
+       SDDQACheckerValue= fHighSDDValue[AliQAv1::kWARNING];
+      }
+    fCalibration = (TObjArray *)calibSDD->GetObject();
+    
+    if(!cacheStatus)calibSDD->SetObject(NULL);
+    calibSDD->SetOwner(kTRUE);
+    if(!cacheStatus)
+      {
+       delete calibSDD;
       }
+  }
 
-      while ( (hdata = dynamic_cast<TH1 *>(next())) && offset >= fSubDetOffset){
-       if (hdata) {
-         if(offset == fSubDetOffset){ //ModPattern check
-           if ( hdata->Integral() == 0 ) {
-             AliWarning(Form("Spectrum %s is empty", hdata->GetName())) ; 
-             return 0.5 ;
-           }
-           test = hdata->Chi2Test(ModPattern,"UU,p");
-         }  // ModPattern check
+  AliInfo("Calib SDD Created\n ");
+
+  TIter next(list);
+
+  switch(index) {
+    case AliQAv1::kRAW:{
+      AliInfo(Form("Check on %s\n",AliQAv1::GetAliTaskName(index)));
+//       if(fRawModulePattern) { delete fRawModulePattern; fRawModulePattern = 0; }
+//       if(fRawL3Pattern) { delete fRawL3Pattern; fRawL3Pattern = 0; }
+//       if(fRawL4Pattern) { delete fRawL4Pattern; fRawL4Pattern = 0; }
+      if (list->GetEntries() == 0){SDDQACheckerValue += fHighSDDValue[AliQAv1::kFATAL];        break;}
+      TH1 *hmodule=NULL;
+      TH2 *hlayer[2]; 
+      Int_t emptymodules[2], filledmodules[2],emptyladders[2],filledladders[2];
+      for(Int_t i=0;i<2;i++){emptymodules[i]=0; filledmodules[i]=0; emptyladders[i]=0; filledladders[i]=0; }
+      for(Int_t i=0;i<2;i++)hlayer[i]=NULL;   
+      while( (hdata = dynamic_cast<TH1* >(next())) ){
+       if (hdata){TString hname=hdata->GetName();
+         if(hname.Contains("SDDchargeMap"))continue;
+         if(hname.Contains("SDDModPattern")){
+           if(hname.Contains("NORM")) continue;
+           hmodule=(TH1*)hdata->Clone();
+           entries= hdata->GetEntries();
+           if(AliITSQADataMakerRec::AreEqual(entries,0.)){AliWarning(Form("===================>>>>>> No entries in  %s \n",hname.Data()));SDDQACheckerValue += fStepBitSDD[AliQAv1::kFATAL];}//endif entries
+           else{int modmax=hdata->GetNbinsX();
+             Int_t empty=0;
+             Int_t filled=0;
+             Double_t content=0;
+             for(Int_t i=1;i<=modmax;i++){content=hdata->GetBinContent(i);if(AliITSQADataMakerRec::AreEqual(content,0.)) empty++; else filled++; }//end for
+             AliInfo(Form(" %s : empty modules %i \t filled modules %i",hname.Data(), empty, filled));}//end else pattern entries !=0
+         }             
+         if(hname.Contains("_RelativeOccupancy")) {
+           //fRawModulePattern = (TH1F *) hdata;
+           Float_t threshold = hdata->GetMean() + 4*hdata->GetRMS();
+           if(hname.Contains("L3")) AliInfo(Form("SDD check number 1: L3 mean: %f, rms: ,%f",hdata->GetMean(),hdata->GetRMS()));
+           if(hname.Contains("L4")) AliInfo(Form("SDD check number 2: L4 mean: %f, rms: ,%f",hdata->GetMean(),hdata->GetRMS()));
+           Int_t aboveThreshold = 0;
+           for(Int_t k=0; k<= hdata->GetNbinsX(); k++) {if(hdata->GetBinLowEdge(k) > threshold) aboveThreshold += (int)(hdata->GetBinContent(k));}
+           Float_t fractionAboveThreshold = ((Float_t) aboveThreshold)/hdata->GetEntries();
+           if(hname.Contains("L3")) AliInfo(Form("SDD check number 1, L3: Raw fractionAboveThreshold: %f",fractionAboveThreshold));
+           if(hname.Contains("L4")) AliInfo(Form("SDD check number 2, L4: Raw fractionAboveThreshold: %f",fractionAboveThreshold));
+           if(fractionAboveThreshold > fThresholdForRelativeOccupancy) {SDDQACheckerValue=fHighSDDValue[AliQAv1::kWARNING];
+             if(hname.Contains("L3")) AliInfo(Form("SDD check number 1: Set Warning (L3 Raw)"));
+             if(hname.Contains("L4")) AliInfo(Form("SDD check number 2: Set Warning (L4 Raw)")); } }
+         if(hname.Contains("SDDphizL3") || hname.Contains("SDDphizL4")){if(hname.Contains("NORM"))continue;
+           //if(hname.Contains("L3")) {fRawL3Pattern = (TH2F *) hdata;}
+           //if(hname.Contains("L4")) {fRawL4Pattern = (TH2F *) hdata;}
+           Int_t layer=0;
+           if(hname.Contains("3"))layer=0;
+           else  if(hname.Contains("4"))layer=1;
+           entries2[layer]=hdata->GetEntries();
+           if(entries2[layer]==0){AliWarning(Form("===================>>>>>> No entries in  %s \n",hname.Data()));
+             SDDQACheckerValue += fStepBitSDD[AliQAv1::kFATAL];}//end if getentries
+           else{
+             Int_t layer1=0;
+             if(hname.Contains("3"))layer1=0;
+             else  if(hname.Contains("4"))layer1=1;
+             TH2* htemp=dynamic_cast<TH2*>(hdata);
+             hlayer[layer1]=(TH2*)htemp->Clone();
+             char newname[50];
+             sprintf(newname,"%s_copy",hname.Data());
+             hlayer[layer1]->SetName(newname);
+             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[layer], filledladders[layer]));//end else layer 3
+             delete hproj;
+             hproj=NULL;}//end else entries !=0
+         }//end check on phiz        
+       }//end if hdata 
+      }//end while
+      if(AliITSQADataMakerRec::AreEqual(entries,0.)&&AliITSQADataMakerRec::AreEqual(entries2[0],0.)&&AliITSQADataMakerRec::AreEqual(entries2[1],0.)) break;
+      //else{
+      if(hmodule || (hlayer[0] && hlayer[1])){
+       Int_t excluded=0;
+       Int_t active=0;
+       Int_t exactive=0;//excluded but taking data
+       for(Int_t imod=0;imod<fgknSDDmodules;imod++){
+         Int_t lay=0;
+         Int_t lad=0;
+         Int_t det=0;
+         Int_t module=0;
+         module=imod+fgkmodoffset;
+         AliITSCalibrationSDD * cal=(AliITSCalibrationSDD*)fCalibration->At(imod);
+         if(cal==0) { delete cal; continue;}
+         AliITSgeomTGeo::GetModuleId(module,lay,lad,det);
+         if (cal->IsBad()){
+           excluded++;
+           Double_t content=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 has been created 
+           contentlayer[lay-3]=hlayer[lay-3]->GetBinContent(det,lad);
+           if(AliITSQADataMakerRec::AreEqual(content,0.)== kFALSE || AliITSQADataMakerRec::AreEqual(contentlayer[lay-3],0.)==kFALSE) {
+             filledmodules[lay-3]++;
+             AliWarning(Form("The module %d (layer %i, ladder %i det %i ) excluded from the acquisition, took data \n ",module,lay,lad,det));
+             exactive++;
+           } else if(AliITSQADataMakerRec::AreEqual(content,0.) && AliITSQADataMakerRec::AreEqual(contentlayer[lay-3],0.)) 
+             emptymodules[lay-3]++;
+         } else {
+           Double_t contentgood=0.;
+           active++;
+           contentgood=hlayer[lay-3]->GetBinContent(det,lad);
+           if(AliITSQADataMakerRec::AreEqual(contentgood,0.)) 
+             emptymodules[lay-3]++;
+           else 
+             filledmodules[lay-3]++;
+         }
+       }//end for
+       for(Int_t i=0;i<2;i++){AliInfo(Form("Layer %i \tempty modules %i \t filled modules %i\n", i+3,emptymodules[i], filledmodules[i]));}//end else layers
+       if(exactive==0){
+         AliInfo(Form("All the active modules (%i) are in acquisition. The number of excluded modules are %i \n",active,excluded));
+         SDDQACheckerValue=fHighSDDValue[AliQAv1::kINFO];
        }
-       else{
-         AliError("Data type cannot be processed") ;
+       if(exactive!=0){
+         AliWarning(Form("%i modules excluded from the acquisition took data. Active modules%i \n ",exactive,active));
+         SDDQACheckerValue=fHighSDDValue[AliQAv1::kWARNING];
        }
-       offset++;
-      }  //SDD histo
-
-      while ( (hdata = dynamic_cast<TH1 *>(next()))) {
-       offset++;
+       if(excluded==exactive){
+         AliWarning(Form("All the modules excluded from the acquisition (%d) took data!  Active modules %i\n",excluded,active));
+         SDDQACheckerValue=fHighSDDValue[AliQAv1::kWARNING];
+       }
+       if(active==0){
+         AliWarning(Form("No modules took data: excluded %i \t exactive %i \n", excluded, exactive)); 
+         SDDQACheckerValue=fHighSDDValue[AliQAv1::kFATAL];
+       }
+       
+      }//end else 
+      delete hmodule;
+      hmodule=NULL;
+      for(Int_t i=0;i<2;i++) {
+       delete hlayer[i];
+       hlayer[i]=NULL;
       }
-    } //else entries !=0
-  AliInfo(Form("Test Result for RAWS = %f", test)) ;
-  } // if(index==0)
 
-  
-  if( index==AliQA::kREC){ //analizing RECP
-    //printf("analizing recp, offset %d \n",fSubDetOffset);
-    if (list->GetEntries() == 0){
-      test = 1. ; // nothing to check
     }
-    else {
-      TIter next(list) ;
-      TH1 * hdata ;
-      for(offset =0;offset < fSubDetOffset; offset++){
-       hdata = dynamic_cast<TH1 *>(next());    // magari TIter++ ?? 
-       //printf("Skipping histo %s, offset %d \n",hdata->GetName(),fSubDetOffset);
-      }
-        
-      while ( (hdata = dynamic_cast<TH1 *>(next())) && offset >= fSubDetOffset ){
-       if (hdata) { // offset=9 ModPatternRP
-         //printf("Treating histo %s, offset %d \n",hdata->GetName(),fSubDetOffset);
-         if( offset == 9 && hdata->GetEntries()>0)test = 0.1;    
+      
+      break;
+      
+  case AliQAv1::kNULLTASK:{
+    AliInfo(Form("No Check on %s\n",AliQAv1::GetAliTaskName(index))); 
+    SDDQACheckerValue=1.;
+  }
+    break;
+    
+  case AliQAv1::kREC:
+    {
+      
+      AliInfo(Form("Check on %s\n",AliQAv1::GetAliTaskName(index))); 
+
+      if (list->GetEntries() == 0){ //check if the list is empty
+       //printf("SDDQACheckerValue = %f \t value %f\n",SDDQACheckerValue,fHighSDDValue[AliQAv1::kFATAL]);
+       SDDQACheckerValue=fHighSDDValue[AliQAv1::kFATAL]; 
+       break;                  
+      }//end if getentries
+      
+      while((hdata=dynamic_cast<TH1* >(next()))){
+       if (hdata){
+         TString hname=hdata->GetName();
+         if(hname.Contains("_RelativeOccupancy")) {
+           Float_t threshold = hdata->GetMean() + 4*hdata->GetRMS();
+           if(hname.Contains("L3")) AliInfo(Form("SDD check number 3: L3 mean: %f, rms: ,%f",hdata->GetMean(),hdata->GetRMS()));
+           if(hname.Contains("L4")) AliInfo(Form("SDD check number 4: L4 mean: %f, rms: ,%f",hdata->GetMean(),hdata->GetRMS()));
+           Int_t aboveThreshold = 0;
+           for(Int_t k=0; k<= ((Int_t)hdata->GetNbinsX()); k++) {
+             if(hdata->GetBinLowEdge(k) > threshold) aboveThreshold += (Int_t)(hdata->GetBinContent(k));
+           }
+           Float_t fractionAboveThreshold = ((Float_t) aboveThreshold)/hdata->GetEntries();
+           if(hname.Contains("L3")) AliInfo(Form("SDD check number 3, L3: RecPoints fractionAboveThreshold: %f",fractionAboveThreshold));
+           if(hname.Contains("L4")) AliInfo(Form("SDD check number 4, L4: RecPoints fractionAboveThreshold: %f",fractionAboveThreshold));
+           if(fractionAboveThreshold > fThresholdForRelativeOccupancy) { 
+             SDDQACheckerValue=fHighSDDValue[AliQAv1::kWARNING];
+             if(hname.Contains("L3")) AliInfo(Form("SDD check number 3: Set Warning (L3 RecPoints)"));
+             if(hname.Contains("L4")) AliInfo(Form("SDD check number 4: Set Warning (L4 RecPoints)"));
+           }
+         }
+         if(hname.Contains("Rec2Raw") && !hname.Contains("2D")) {
+           //Float_t threshold = 0.;
+           if(hname.Contains("L3")) AliInfo(Form("SDD check number 5: L3 R2R mean: %f, rms: ,%f",((TH1F *) hdata)->GetMean(),((TH1F *) hdata)->GetRMS()));
+           if(hname.Contains("L4")) AliInfo(Form("SDD check number 6: L4 R2R mean: %f, rms: ,%f",((TH1F *) hdata)->GetMean(),((TH1F *) hdata)->GetRMS()));
+           Int_t belowThreshold = 0;
+           for(Int_t k=0; k<=((TH1F *)hdata)->GetNbinsX(); k++) {
+             if(((TH1F *) hdata)->GetBinLowEdge(k) < fThresholdForRecToRawRatio) belowThreshold += ((Int_t)((TH1F *) hdata)->GetBinContent(k));
+           }
+           Double_t fractionBelowThreshold =0.;
+           Double_t entries3=((TH1F *)hdata)->GetEntries();
+           if(entries3>0.001)fractionBelowThreshold = ((Double_t)(belowThreshold))/entries3;
+           else{ AliWarning(Form("No entries on %s. The check will retuns zero.\n",hdata->GetName() )); }
+           if(hname.Contains("L3")) AliInfo(Form("SDD check number 5, L3: RecPoints2Raws fractionBelowThreshold: %f",fractionBelowThreshold));
+           if(hname.Contains("L4")) AliInfo(Form("SDD check number 6, L4: RecPoints2Raws fractionBelowThreshold: %f",fractionBelowThreshold));
+           if(fractionBelowThreshold > fThresholdForRelativeOccupancy) { 
+             SDDQACheckerValue=fHighSDDValue[AliQAv1::kWARNING];
+             if(hname.Contains("L3")) AliInfo(Form("SDD check number 5: Set Warning (L3 RecPoints2Raws)"));
+             if(hname.Contains("L4")) AliInfo(Form("SDD check number 6: Set Warning (L4 RecPoints2Raws)"));
+           }
+         }
+         if(hname.Contains("dedx")) {
+           if(hname.Contains("L3")) AliInfo(Form("SDD check number 7: L3 average charge: %f, rms: ,%f",hdata->GetMean(),hdata->GetRMS()));
+           if(hname.Contains("L4")) AliInfo(Form("SDD check number 8: L4 average charge: %f, rms: ,%f",hdata->GetMean(),hdata->GetRMS()));
+         }
        }
+      }                                
+      
+      SDDQACheckerValue=1.;
+    }
+    break;
+  case AliQAv1::kANA:
+    {
+      AliInfo(Form("===================> No Check on %s\n",AliQAv1::GetAliTaskName(index)));
+      SDDQACheckerValue=1.; 
+    }
+    break;
+  case AliQAv1::kESD:
+    {
+      AliInfo(Form("==================>  No Check on %s\n",AliQAv1::GetAliTaskName(index)));
+      SDDQACheckerValue=1.;
+    } 
+    break;
+  case AliQAv1::kNTASK:{
+    AliInfo(Form("==================>  No Check on %s\n",AliQAv1::GetAliTaskName(index))); 
+    SDDQACheckerValue=1.;
+  }
+    break;
+  case AliQAv1::kSIM:{
+    AliInfo(Form("Check on %s\n",AliQAv1::GetAliTaskName(index))); 
+    Int_t uid=list->GetUniqueID();
+    if(uid==60) {
+      //digits
+      if (list->GetEntries() == 0){ 
+       SDDQACheckerValue=fHighSDDValue[AliQAv1::kFATAL];
+       break;
+      } else{
+       
+       while( (hdata = dynamic_cast<TH1* >(next())) ){
+         if (hdata){
+           if(hdata->GetEntries()==0)SDDQACheckerValue += fStepBitSDD[AliQAv1::kFATAL];
+           else {
+             TString hname=hdata->GetName();
+             if(hname.Contains("SDDDIGITSModulePattern")) {
+               //see raws
+               
+               SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];    
+             } else if(hname.Contains("SDDAnodeDistribution")) {
+               SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];    
+             } else if(hname.Contains("SDDTbinDistribution")) {
+               //to do as rp
+               SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];    
+             } else if(hname.Contains("SDDADCCountsDistribution")) {
+               SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];    
+             }//end adc counts
+             
+           }//end entries !=0
+         }//end hdata
+       }//end while
+      }//end else
+    } else if(uid==50) 
+      {
+       //hits
+       if (list->GetEntries() == 0){ 
+         SDDQACheckerValue=fHighSDDValue[AliQAv1::kFATAL];
+         break;
+       } 
        else{
-         AliError("Data type cannot be processed") ;
-       }
-       offset++;
-      }
-    } // GetEntries loop
-  AliInfo(Form("Test Result for RECP = %f", test)) ; 
-  } // if(index==2) loop
+         
+         while( (hdata = dynamic_cast<TH1* >(next())) ){
+           if (hdata){
+             if(hdata->GetEntries()==0)SDDQACheckerValue += fStepBitSDD[AliQAv1::kFATAL];
+             else {
+               TString hname=hdata->GetName();
+               if(hname.Contains("SDDHITSModulePattern")) {
+                 //to do as raws
+                 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];    
+               } else if(hname.Contains("SDDHITlenghtalonglocalYCoord")) {
+                 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];    
+               } else if(hname.Contains("SDDHITlenghtalonglocalYCoordZoom")) {
+                 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];    
+               } else if(hname.Contains("SDDDepositedEnergyDistribution")) {
+                 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];    
+               }//end deposited energy
+               
+             }//end entries !=0
+           }//end hdata
+         }//end while
+       }//end else
+      } else if(uid==70) 
+      {
+       //sdigits
+       if (list->GetEntries() == 0){ 
+         SDDQACheckerValue=fHighSDDValue[AliQAv1::kFATAL];
+         break;
+       } else{
+         
+         while( (hdata = dynamic_cast<TH1* >(next())) ){
+           if (hdata){
+             if(hdata->GetEntries()==0)SDDQACheckerValue += fStepBitSDD[AliQAv1::kFATAL];
+             else {
+               TString hname=hdata->GetName();
+               if(hname.Contains("SDDSDIGITSModulePattern")) {
+                 //to do as raws
+                 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];    
+               } else if(hname.Contains("SDDAnodeDistribution")) {
+                 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];    
+               } else if(hname.Contains("SDDTbinDistribution")) {
+                 //to do as rp
+                 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];    
+               } else if(hname.Contains("SDDADCCountsDistribution")) {
+                 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];    
+               }//end adc counts bindistribution
+             }//end entries !=0
+           }//end hdata
+         }//end while
+       }//end else
+      }//end sdigits
+    SDDQACheckerValue=1.;
+  }
+    break;
+    
+  }//end switch
+  
+  fCalibration=NULL;
+  delete hdata;
+
+
+  return SDDQACheckerValue;    
+}
 
-  return test; 
+//__________________________________________________________________
+void AliITSQASDDChecker::SetTaskOffset(Int_t taskoffset)
+{
+  //set the number of the histograms already present in the list before the SDD histograms
+  fSubDetOffset = taskoffset;
 }
+
+
 //__________________________________________________________________
-void AliITSQASDDChecker::SetTaskOffset(Int_t TaskOffset)
+void AliITSQASDDChecker::SetStepBit(const Double_t *steprange)
 {
-  fSubDetOffset = TaskOffset;
+  //set the values of the step bit for each QA bit range calculated in the AliITSQAChecker class
+  fStepBitSDD = new Double_t[AliQAv1::kNBIT];
+  for(Int_t bit=0;bit<AliQAv1::kNBIT;bit++)
+    {
+      fStepBitSDD[bit]=steprange[bit];
+    }
 }
+
+//__________________________________________________________________
+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];
+
+  for(Int_t bit=0;bit<AliQAv1::kNBIT;bit++)
+    {
+      fLowSDDValue[bit]=lowvalue[bit];
+      fHighSDDValue[bit]= highvalue[bit];
+    }
+
+}
+