]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
New checker for SDD (Piergiorgio - Melinda)
authormasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 11 May 2010 15:18:24 +0000 (15:18 +0000)
committermasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 11 May 2010 15:18:24 +0000 (15:18 +0000)
ITS/AliITSQASDDChecker.cxx
ITS/AliITSQASDDChecker.h
ITS/AliITSQASDDDataMakerRec.cxx
ITS/AliITSQASDDDataMakerRec.h

index f00ea351d3b5fbeae677e7f9db68d9620c966886..593553f617869a0cbb9a22cc2cfad1b5759aa801 100644 (file)
 #include "AliLog.h"
 #include "AliCDBEntry.h"
 #include "AliCDBManager.h"
-//#include "AliQAManager.h"
-//#include "AliQACheckerBase.h"
-//#include "TSystem.h"
 #include "AliITSCalibrationSDD.h"
 #include "AliITSgeomTGeo.h"
-//#include "AliITSQAChecker.h"
 
 
 ClassImp(AliITSQASDDChecker)
@@ -83,7 +79,7 @@ Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * l
 
   AliDebug(1,Form("AliITSQASDDChecker called with offset: %d\n", fSubDetOffset));
 
-  Double_t test = 0.;
+  Double_t SDDQACheckerValue = 0.;
   TH1 *hdata=NULL;
   Double_t entries=0.;
   Double_t entries2[2];
@@ -96,7 +92,7 @@ Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * l
       {
        AliError("Calibration object retrieval failed! SDD will not be processed");
        fCalibration = NULL;
-       test= fHighSDDValue[AliQAv1::kWARNING];
+       SDDQACheckerValue= fHighSDDValue[AliQAv1::kWARNING];
       }
     fCalibration = (TObjArray *)calibSDD->GetObject();
     
@@ -108,413 +104,366 @@ Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * l
       }
   }
 
-      AliInfo("Calib SDD Created\n ");
+  AliInfo("Calib SDD Created\n ");
 
-  switch(index)
+  TIter next(list);
+  TH1 *hmodule=NULL;
+  TH2 *hlayer[2];
+
+  switch(index) 
     {
 
     case AliQAv1::kRAW:
       AliInfo(Form("Check on %s\n",AliQAv1::GetAliTaskName(index)));
-      
-      if (list->GetEntries() == 0){ //check if the list is empty
-       //printf("test = %f \t value %f\n",test,fHighSDDValue[AliQAv1::kFATAL]);
-       test=test+fHighSDDValue[AliQAv1::kFATAL];
+      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;
-      }//end if getentries
-      else{
-       TIter next(list);
-       Int_t offset = 0;
-       for(offset =0;offset < fSubDetOffset; offset++){hdata = dynamic_cast<TH1*>(next());}//end for
-       Int_t emptymodules[2];
-       Int_t filledmodules[2];
-       Int_t emptyladders[2];
-       Int_t filledladders[2];
-       for(Int_t i=0;i<2;i++){
-         emptymodules[i]=0;
-         filledmodules[i]=0;
-         emptyladders[i]=0;
-         filledladders[i]=0;
-       }
-       TH1 *hmodule=NULL;
-       TH2 *hlayer[2];
-       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;
-             else{
-               hmodule=hdata;
-               entries= hdata->GetEntries();
-               if(AliITSQADataMakerRec::AreEqual(entries,0.)){
-                 AliWarning(Form("===================>>>>>> No entries in  %s \n",hname.Data()));
-                 //printf("test = %f \t value %f\n",test,fHighSDDValue[AliQAv1::kFATAL]);
-                 test=test+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 if((AliITSQADataMakerRec::AreEqual(content,0.)==kFALSE)){filled++;}
-                 }//end for
-                 AliInfo(Form(" %s : empty modules %i \t filled modules %i",hname.Data(), empty, filled));
-               }//end else pattern entries !=0
-             }//end if norm          
-           }//end if modpattern
-           else if(hname.Contains("SDDphizL3")||hname.Contains("SDDphizL4")){
-             if(hname.Contains("NORM")) continue;
+      }
+      Int_t emptymodules[2];
+      Int_t filledmodules[2];
+      Int_t emptyladders[2];
+      Int_t 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")) {
+                                       
+             hmodule=hdata;
+             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_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()));
-                 //printf("test = %f \t value %f\n",test,fStepBitSDD[AliQAv1::kFATAL]);
-                 test=test+fStepBitSDD[AliQAv1::kFATAL];
-                 if(AliITSQADataMakerRec::AreEqual(entries,0.)){ 
-                   //return test; 
-                   //break;
-                 }
-               }//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;   
-                 //delete htemp;
-                 //htemp=NULL;
-               }//end else entries !=0
-             }//end check on norm            
-           }//end if layer 3
-         }//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
-           //AliITSCalibrationSDD *cal;
-           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]++;
-               //AliInfo(Form("The module %d (layer %i, ladder %i det %i ) is bad, content %f content layer %f  filled modules position %d ",module,lay,lad,det,contentlayer[lay-3],content,lay-3) );
-             }//end if bad
-             else
-               {
-                 Double_t contentgood=0.;
-                 active++;
-                 //printf("lay: %i\t det %i \t lad %i \n",lay,det,lad );
-                 contentgood=hlayer[lay-3]->GetBinContent(det,lad);
-                 if(AliITSQADataMakerRec::AreEqual(contentgood,0.)){emptymodules[lay-3]++;}
-                 else {filledmodules[lay-3]++;}
-               }
-             
-             //delete cal;
-             //cal=NULL;
-           }//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));
-             test=fHighSDDValue[AliQAv1::kINFO];}
-           if(exactive!=0){
-             AliWarning(Form("%i modules excluded from the acquisition took data. Active modules%i \n ",exactive,active));
-             test=fHighSDDValue[AliQAv1::kWARNING];
-           }
-           if(excluded==exactive){
-             AliWarning(Form("All the modules exluded from the acquisition (%d) took data!  Active modules %i\n",excluded,active));
-             test=fHighSDDValue[AliQAv1::kWARNING];
+               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 = fRawModulePattern->GetMean() + 4*fRawModulePattern->GetRMS();
+           if(hname.Contains("L3")) AliInfo(Form("SDD check number 1: L3 mean: %f, rms: ,%f",fRawModulePattern->GetMean(),fRawModulePattern->GetRMS()));
+           if(hname.Contains("L4")) AliInfo(Form("SDD check number 2: L4 mean: %f, rms: ,%f",fRawModulePattern->GetMean(),fRawModulePattern->GetRMS()));
+           Int_t aboveThreshold = 0;
+           for(Int_t k=0; k<= fRawModulePattern->GetNbinsX(); k++) {
+             if(fRawModulePattern->GetBinLowEdge(k) > threshold) aboveThreshold += (int)(fRawModulePattern->GetBinContent(k));
            }
-           if(active==0){
-             AliWarning(Form("No modules took data: excluded %i \t exactive %i \n", excluded, exactive)); 
-             test=fHighSDDValue[AliQAv1::kFATAL];
+           Float_t fractionAboveThreshold = ((Float_t) aboveThreshold)/fRawModulePattern->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)"));
            }
-           for(Int_t i=0;i<2;i++)
-             {
-               delete hlayer[i];
-               hlayer[i]=NULL;
+         }
+                                       
+         if(hname.Contains("SDDphizL3") || hname.Contains("SDDphizL4")){
+           if(!hname.Contains("NORM")) {
+             if(hname.Contains("L3")) {
+               fRawL3Pattern = (TH2F *) hdata;
              }
-         }//end else 
+             if(hname.Contains("L4")) {
+               fRawL4Pattern = (TH2F *) hdata;
+             }
+           } else{
+             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];
+               if(AliITSQADataMakerRec::AreEqual(entries,0.)){ 
+               }
+             }//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 norm              
+         }//end if layer 3
+       }//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];
        }
-      }//end getentries !=0
-      //delete calSDD;
+       if(exactive!=0){
+         AliWarning(Form("%i modules excluded from the acquisition took data. Active modules%i \n ",exactive,active));
+         SDDQACheckerValue=fHighSDDValue[AliQAv1::kWARNING];
+       }
+       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];
+       }
+       for(Int_t i=0;i<2;i++) {
+         delete hlayer[i];
+         hlayer[i]=NULL;
+       }
+      }//end else 
+      //}
       
-      //delete calibSDD;
-      //delete calSDD;
-   
       break;
+
     case AliQAv1::kNULLTASK:
       AliInfo(Form("No Check on %s\n",AliQAv1::GetAliTaskName(index))); 
-      test=1.;
+      SDDQACheckerValue=1.;
       break;
+               
     case AliQAv1::kREC:
-      /*
       AliInfo(Form("Check on %s\n",AliQAv1::GetAliTaskName(index))); 
-      //TH1*hdata=NULL;
-      if(list->GetUniqueID()==40){
-       if (list->GetEntries() == 0){ //check if the list is empty
-         //printf("test = %f \t value %f\n",test,fHighSDDValue[AliQAv1::kFATAL]);
-         test=fHighSDDValue[AliQAv1::kFATAL];
-         
-       }//end if getentries
-       else{
+      if(fRecModulePattern) { delete fRecModulePattern; fRecModulePattern = 0; }
+      if(fRecL3Pattern) { delete fRecL3Pattern; fRecL3Pattern = 0; }
+      if(fRecL4Pattern) { delete fRecL4Pattern; fRecL4Pattern = 0; }
+      if(fModulePatternRatio) { delete fModulePatternRatio; fModulePatternRatio = 0; }
+      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];
+                               
+      }//end if getentries
          
-         TIter next(list);
-       
-         while( hdata = dynamic_cast<TH1* >(next()) ){
-           if (hdata){
-             if(AliITSQADataMakerRec::AreEqual(hdata->GetEntries(),0.))test=test+fStepBitSDD[AliQAv1::kFATAL];
-             else
-               {
-                 TString hname=hdata->GetName();
-                 if(hname.Contains("FSE"))continue;
-                 else if(hname.Contains("SDDLay3TotCh")||hname.Contains("SDDLay4TotCh")){
-                   Double_t meancharge=hdata->GetMean();
-                   Double_t rmscharge=hdata->GetRMS();
-                   AliInfo(Form("%s : Mean value:%f RMS value%f \n ",hname.Data(),meancharge,rmscharge));
-                   test=test+fStepBitSDD[AliQAv1::kINFO];    
-                 }//end if name charge
-                 else if(hname.Contains("SDDGlobalCoordDistribYX" ))
-                   {
-                     test=test+fStepBitSDD[AliQAv1::kINFO];    
-                   }//end xy
-                 else if(hname.Contains("SDDGlobalCoordDistribRZ"))
-                   {
-                     
-                     test=test+fStepBitSDD[AliQAv1::kINFO];    
-                   } //end rz
-                 else if(hname.Contains("SDDGlobalCoordDistribL3PHIZ" )||hname.Contains("SDDGlobalCoordDistribL3PHIZ"))
-                   {    
-
-                   }//end phiz
-                 else if(hname.Contains("SDDModPatternRP"))
-                   {
-                     
-                     //to do :se raws
-
-                   }//modpattern
-                 else if(hname.Contains("SDDModPatternL3RP")||hname.Contains("SDDModPatternL4RP") )
-                   {
-                     //to do: see raws
-                   }//end ladpattern
-                 else if(hname.Contains("SDDLocalCoordDistrib"))
-                   {
-                     test=test+fStepBitSDD[AliQAv1::kINFO];    
-                   }//end local coord
-                 else if(hname.Contains("SDDrdistrib_Layer3")||hname.Contains("SDDrdistrib_Layer4"))
-                   {
-                     
-                   }//end r distribution
-                 else if(hname.Contains("SDDphidistrib_Layer3")||hname.Contains("SDDphidistrib_Layer4"))
-                   {
-                     
-                   }//end phi distribution
-                 else if(hname.Contains("SDDdrifttime_Layer3")||hname.Contains("SDDdrifttime_Layer4"))
-                   {
-                     
-                   }//end drift time
-               }
-           }//end if hdata
-           
-         }//end while
-       }//end else geentries
-      }//end uniqueid
-      */
-      test=1.;
+      while((hdata=dynamic_cast<TH1* >(next()))){
+       if (hdata){
+         TString hname=hdata->GetName();
+         if(hname.Contains("_RelativeOccupancy")) {
+           fRecModulePattern = (TH1F *) hdata;
+           Float_t threshold = fRecModulePattern->GetMean() + 4*fRecModulePattern->GetRMS();
+           if(hname.Contains("L3")) AliInfo(Form("SDD check number 3: L3 mean: %f, rms: ,%f",fRecModulePattern->GetMean(),fRecModulePattern->GetRMS()));
+           if(hname.Contains("L4")) AliInfo(Form("SDD check number 4: L4 mean: %f, rms: ,%f",fRecModulePattern->GetMean(),fRecModulePattern->GetRMS()));
+           Int_t aboveThreshold = 0;
+           for(Int_t k=0; k<= ((Int_t)fRecModulePattern->GetNbinsX()); k++) {
+             if(fRecModulePattern->GetBinLowEdge(k) > threshold) aboveThreshold += (Int_t)(fRecModulePattern->GetBinContent(k));
+           }
+           Float_t fractionAboveThreshold = ((Float_t) aboveThreshold)/fRecModulePattern->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 entries=((TH1F *)hdata)->GetEntries();
+           if(entries!=0.)fractionBelowThreshold = ((Double_t)(belowThreshold))/entries;
+           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)));
-      test=1.; 
+      SDDQACheckerValue=1.; 
       break;
     case AliQAv1::kESD:
       AliInfo(Form("==================>  No Check on %s\n",AliQAv1::GetAliTaskName(index)));
-      test=1.; 
+      SDDQACheckerValue=1.; 
       break;
     case AliQAv1::kNTASK:
       AliInfo(Form("==================>  No Check on %s\n",AliQAv1::GetAliTaskName(index))); 
-      test=1.;
+      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){ //check if the list is empty
-           //printf("test = %f \t value %f\n",test,fHighSDDValue[AliQAv1::kFATAL]);
-           test=fHighSDDValue[AliQAv1::kFATAL];
-           
-         }//end if getentries
-         else{
+      if(uid==60) {
+       //digits
+       if (list->GetEntries() == 0){ 
+         SDDQACheckerValue=fHighSDDValue[AliQAv1::kFATAL];
            
-           TIter next(list);
+       } else{
            
-           while( (hdata = dynamic_cast<TH1* >(next())) ){
-             if (hdata){
-               if(hdata->GetEntries()==0)test=test+fStepBitSDD[AliQAv1::kFATAL];
-               else
-                 {
-                   TString hname=hdata->GetName();
-                   if(hname.Contains("SDDDIGITSModulePattern"))
-                     {
-                       //see raws
-
-                       test=test+fStepBitSDD[AliQAv1::kINFO];    
-                     }//end modpattern
-                   else if(hname.Contains("SDDAnodeDistribution"))
-                     {
-                      
-                       test=test+fStepBitSDD[AliQAv1::kINFO];    
-                     }//end anode distribution
-                   else if(hname.Contains("SDDTbinDistribution"))
-                     {
+         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
 
-                       //to do as rp
-                       test=test+fStepBitSDD[AliQAv1::kINFO];    
-                     }//end timebindistribution
-                   else if(hname.Contains("SDDADCCountsDistribution"))
-                     {
-                       test=test+fStepBitSDD[AliQAv1::kINFO];    
-                     }//end adc counts
+                 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
-       }//end digits
-      else if(uid==50)
+             }//end entries !=0
+           }//end hdata
+         }//end while
+       }//end else
+      } else if(uid==50) 
        {
          //hits
-         if (list->GetEntries() == 0){ //check if the list is empty
-           //printf("test = %f \t value %f\n",test,fHighSDDValue[AliQAv1::kFATAL]);
-           test=fHighSDDValue[AliQAv1::kFATAL];
-           
-         }//end if getentries
+         if (list->GetEntries() == 0){ 
+           SDDQACheckerValue=fHighSDDValue[AliQAv1::kFATAL];
+         } 
          else{
            
-           TIter next(list);
-           
            while( (hdata = dynamic_cast<TH1* >(next())) ){
              if (hdata){
-               if(hdata->GetEntries()==0)test=test+fStepBitSDD[AliQAv1::kFATAL];
-               else
-                 {
-                   TString hname=hdata->GetName();
-                   if(hname.Contains("SDDHITSModulePattern"))
-                     {
-                       //to do as raws
-                       test=test+fStepBitSDD[AliQAv1::kINFO];    
-                     }//end modpattern
-                   else if(hname.Contains("SDDHITlenghtalonglocalYCoord"))
-                     {
-                       test=test+fStepBitSDD[AliQAv1::kINFO];    
-                     }//end hit lenght
-                   else if(hname.Contains("SDDHITlenghtalonglocalYCoordZoom"))
-                     {
-                       test=test+fStepBitSDD[AliQAv1::kINFO];    
-                     }//end hit lenght
-                   else if(hname.Contains("SDDDepositedEnergyDistribution"))
-                     {
-                       test=test+fStepBitSDD[AliQAv1::kINFO];    
-                     }//end deposited energy
+               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 entries !=0
              }//end hdata
            }//end while
          }//end else
-       }//end hits
-      else if(uid==70)
+       } else if(uid==70) 
        {
          //sdigits
-         if (list->GetEntries() == 0){ //check if the list is empty
-           //printf("test = %f \t value %f\n",test,fHighSDDValue[AliQAv1::kFATAL]);
-           test=fHighSDDValue[AliQAv1::kFATAL];
-           
-         }//end if getentries
-         else{
-           
-           TIter next(list);
+         if (list->GetEntries() == 0){ 
+           SDDQACheckerValue=fHighSDDValue[AliQAv1::kFATAL];
+         } else{
            
            while( (hdata = dynamic_cast<TH1* >(next())) ){
              if (hdata){
-               if(hdata->GetEntries()==0)test=test+fStepBitSDD[AliQAv1::kFATAL];
-               else
-                 {
-                   TString hname=hdata->GetName();
-                   if(hname.Contains("SDDSDIGITSModulePattern"))
-                     {
-                       //to do as raws
-                       test=test+fStepBitSDD[AliQAv1::kINFO];    
-                     }//end modpattern
-                   else if(hname.Contains("SDDAnodeDistribution"))
-                     {
-                       test=test+fStepBitSDD[AliQAv1::kINFO];    
-                     }//end anode bindistribution
-                   else if(hname.Contains("SDDTbinDistribution"))
-                     {
-                       //to do as rp
-                       test=test+fStepBitSDD[AliQAv1::kINFO];    
-                     }//end timebindistribution
-                   else if(hname.Contains("SDDADCCountsDistribution"))
-                     {
-                       test=test+fStepBitSDD[AliQAv1::kINFO];    
-                     }//end adc counts bindistribution
-
-                 }//end entries !=0
+               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
-      test=1.;
+      SDDQACheckerValue=1.;
       break;
       
     }//end switch
 
   fCalibration=NULL;
   delete hdata;
-  return test; 
+  return SDDQACheckerValue;    
 }
  
 //__________________________________________________________________
@@ -551,4 +500,3 @@ void  AliITSQASDDChecker::SetSDDLimits(const Float_t *lowvalue, const Float_t *
 
 }
 
-
index c0e79c9a4ed6496b2e70d26340adbfb8e2a022e3..0c6cb2f6ad098b115d84639a44ca2238f50e16b3 100644 (file)
@@ -33,25 +33,65 @@ class TCanvas;
 class AliITSQASDDChecker: public TObject {
 
 public:
-  AliITSQASDDChecker():fSubDetOffset(0),fStepBitSDD(NULL),fLowSDDValue(NULL),fHighSDDValue(NULL),fCalibration(NULL) {;}          // ctor
+  AliITSQASDDChecker():
+       fSubDetOffset(0),
+       fStepBitSDD(NULL),
+       fLowSDDValue(NULL),
+       fHighSDDValue(NULL),
+       fCalibration(NULL),
+       fRawL3Pattern(NULL),
+       fRawL4Pattern(NULL),
+       fRecL3Pattern(NULL),
+       fRecL4Pattern(NULL),
+       fThresholdForRelativeOccupancy(0.01),
+       fRawModulePattern(NULL),
+       fRecModulePattern(NULL),
+       fModulePatternRatio(NULL),
+       fThresholdForRecToRawRatio(0.04) 
+       {;}          // ctor
   AliITSQASDDChecker& operator = (const AliITSQASDDChecker& qac) ; //operator =
-  virtual ~AliITSQASDDChecker(); /*{if(fStepBitSDD) delete[] fStepBitSDD ;if(fLowSDDValue)delete[]fLowSDDValue;if(fHighSDDValue) delete[]fHighSDDValue;if(fCalibration)delete fCalibration;} */// dtor
+  virtual ~AliITSQASDDChecker(); // dtor
   virtual Double_t Check(AliQAv1::ALITASK_t index, const TObjArray * list, const AliDetectorRecoParam * recoParam);
   virtual void SetTaskOffset(Int_t taskoffset);
   virtual void SetStepBit(const Double_t *steprange);
   virtual Double_t *GetStepBit(){return fStepBitSDD;};
   virtual void SetSDDLimits(const Float_t *lowvalue, const Float_t * highvalue);
 private:
-  AliITSQASDDChecker(const AliITSQASDDChecker& qac):TObject(),fSubDetOffset(qac.fSubDetOffset),fStepBitSDD(qac.fStepBitSDD),fLowSDDValue(qac.fLowSDDValue),fHighSDDValue(qac.fHighSDDValue),fCalibration(qac.fCalibration) {;} // cpy ctor   
+  AliITSQASDDChecker(const AliITSQASDDChecker& qac):TObject(),
+       fSubDetOffset(qac.fSubDetOffset),
+       fStepBitSDD(qac.fStepBitSDD),
+       fLowSDDValue(qac.fLowSDDValue),
+       fHighSDDValue(qac.fHighSDDValue),
+       fCalibration(qac.fCalibration),
+       fRawL3Pattern(qac.fRawL3Pattern),
+       fRawL4Pattern(qac.fRawL4Pattern),
+       fRecL3Pattern(qac.fRecL3Pattern),
+       fRecL4Pattern(qac.fRecL4Pattern),
+       fThresholdForRelativeOccupancy(qac.fThresholdForRelativeOccupancy),
+       fRawModulePattern(qac.fRawModulePattern),
+       fRecModulePattern(qac.fRecModulePattern),
+       fModulePatternRatio(qac.fModulePatternRatio),
+       fThresholdForRecToRawRatio(qac.fThresholdForRecToRawRatio) 
+       {;} // cpy ctor   
   Int_t fSubDetOffset;            // checking operation starting point
   Double_t *fStepBitSDD;          //step size for each QAbit(kINFO, kWARNING,kERROR,kFATAL)
   Float_t *fLowSDDValue;          //low value of each QA bit range 
   Float_t *fHighSDDValue;         //High value of each QA bit range
   TObjArray *fCalibration;        //TObjArray with Calibration SDD Objects
+       
+       TH2F *fRawL3Pattern;            // distribution of Raw Module Counts for L3
+       TH2F *fRawL4Pattern;            // distribution of Raw Module Counts for L4
+       TH2F *fRecL3Pattern;            // distribution of Rec Module Counts for L3
+       TH2F *fRecL4Pattern;            // distribution of Rec Module Counts for L4
+       Float_t fThresholdForRelativeOccupancy;  // ThresholdForRelativeOccupancy (by module)
+       TH1F *fRawModulePattern;        // distribution of Raw Module Counts
+       TH1F *fRecModulePattern;        // distribution of Rec Module Counts
+       TH1F *fModulePatternRatio;      // distribution of Rec/Raw Module Counts
+       Float_t fThresholdForRecToRawRatio; // ThresholdForRecToRawRatio (by module)
 
   static const Int_t fgknSDDmodules = 260; // number of SDD modules
   static const Int_t fgkmodoffset = 240;   // number of SPD modules
-  ClassDef(AliITSQASDDChecker,2)  // description 
+  ClassDef(AliITSQASDDChecker,3)  // description 
 
 };
 
index 289a640f6ff09a99899e4d4599e7595485332801..65999c5d2438776d1ce831eb4a0fa18ce78cf2c7 100644 (file)
@@ -77,6 +77,8 @@ fLDC(ldc),
 fSDDhRawsTask(0),
 fSDDhDigitsTask(0),
 fSDDhRecPointsTask(0),
+fOnlineOffsetRaws(0),
+fOnlineOffsetRecPoints(0),
 fGenRawsOffset(0),
 fGenDigitsOffset(0),
 fGenRecPointsOffset(0),
@@ -112,6 +114,8 @@ fLDC(qadm.fLDC),
 fSDDhRawsTask(qadm.fSDDhRawsTask),
 fSDDhDigitsTask(qadm.fSDDhDigitsTask),
 fSDDhRecPointsTask(qadm.fSDDhRecPointsTask),
+fOnlineOffsetRaws(qadm.fOnlineOffsetRaws),
+fOnlineOffsetRecPoints(qadm.fOnlineOffsetRecPoints),
 fGenRawsOffset(qadm.fGenRawsOffset),
 fGenDigitsOffset(qadm.fGenDigitsOffset),
 fGenRecPointsOffset(qadm.fGenRecPointsOffset),
@@ -190,6 +194,25 @@ void AliITSQASDDDataMakerRec::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObj
            
            ((TH2D*)fAliITSQADataMakerRec->GetRawsData(5 + fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->Divide((TH2D*)fAliITSQADataMakerRec->GetRawsData(2 + fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()]),((TH2D*)(fHistoCalibration->At(2))),1.,(Double_t)fNEvent);
          }       
+
+               Int_t xbin3 = ((TH1D*)fAliITSQADataMakerRec->GetRawsData(4 + fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->GetNbinsX();
+               Int_t ybin3 = ((TH1D*)fAliITSQADataMakerRec->GetRawsData(4 + fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->GetNbinsY();
+               
+               for(Int_t i=0; i<xbin3; i++) {
+                       for(Int_t j=0; j<ybin3; j++) {
+                               ((TH1D*)fAliITSQADataMakerRec->GetRawsData(6 + fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->Fill(((TH1D*)fAliITSQADataMakerRec->GetRawsData(4 + fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->GetBinContent(i,j));
+                       }
+               }
+               
+               Int_t xbin4 = ((TH1D*)fAliITSQADataMakerRec->GetRawsData(5 + fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->GetNbinsX();
+               Int_t ybin4 = ((TH1D*)fAliITSQADataMakerRec->GetRawsData(5 + fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->GetNbinsY();
+               
+               for(Int_t i=0; i<xbin4; i++) {
+                       for(Int_t j=0; j<ybin4; j++) {
+                               ((TH1D*)fAliITSQADataMakerRec->GetRawsData(7 + fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->Fill(((TH1D*)fAliITSQADataMakerRec->GetRawsData(5 + fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->GetBinContent(i,j));
+                       }
+               }
+                       
        }//end raws
        
        if(task==AliQAv1::kRECPOINTS){
@@ -197,10 +220,64 @@ void AliITSQASDDDataMakerRec::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObj
          if(fNEventRP!=0){
            ((TH1D*)fAliITSQADataMakerRec->GetRecPointsData(9 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->Divide((TH1D*)fAliITSQADataMakerRec->GetRecPointsData(6 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]),((TH1D*) (fHistoCalibration->At(0))),1.,(Double_t)fNEventRP);
            
-           ((TH2D*)fAliITSQADataMakerRec->GetRecPointsData(10+ fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->Divide((TH2D*)fAliITSQADataMakerRec->GetRecPointsData(7 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]),((TH2D*)(fHistoCalibration->At(1))),1.,(Double_t)fNEventRP);
-           
-           ((TH2D*)fAliITSQADataMakerRec->GetRecPointsData(11+ fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->Divide((TH2D*)fAliITSQADataMakerRec->GetRecPointsData(8 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]),((TH2D*)(fHistoCalibration->At(2))),1.,(Double_t)fNEventRP);
+                 ((TH2D*)fAliITSQADataMakerRec->GetRecPointsData(10+ fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->Divide((TH2D*)fAliITSQADataMakerRec->GetRecPointsData(7 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]),((TH2D*)(fHistoCalibration->At(1))),1.,(Double_t)fNEventRP);
+                 
+                 ((TH2D*)fAliITSQADataMakerRec->GetRecPointsData(11+ fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->Divide((TH2D*)fAliITSQADataMakerRec->GetRecPointsData(8 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]),((TH2D*)(fHistoCalibration->At(2))),1.,(Double_t)fNEventRP);
+
+                 ((TH2D*)fAliITSQADataMakerRec->GetRecPointsData(21+ fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->Divide((TH2D*)fAliITSQADataMakerRec->GetRecPointsData(7 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]),((TH2D*)(fHistoCalibration->At(1))),1.,(Double_t)fNEventRP);
+                 
+                 ((TH2D*)fAliITSQADataMakerRec->GetRecPointsData(22+ fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->Divide((TH2D*)fAliITSQADataMakerRec->GetRecPointsData(8 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]),((TH2D*)(fHistoCalibration->At(2))),1.,(Double_t)fNEventRP);
          }
+               Int_t xbin3 = ((TH1D*)fAliITSQADataMakerRec->GetRecPointsData(10 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->GetNbinsX();
+               Int_t ybin3 = ((TH1D*)fAliITSQADataMakerRec->GetRecPointsData(10 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->GetNbinsY();
+               
+               for(Int_t i=0; i<xbin3; i++) {
+                       for(Int_t j=0; j<ybin3; j++) {
+                               ((TH1D*)fAliITSQADataMakerRec->GetRecPointsData(19 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->Fill(((TH1D*)fAliITSQADataMakerRec->GetRecPointsData(10 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->GetBinContent(i,j));
+                       }
+               }
+               
+               Int_t xbin4 = ((TH1D*)fAliITSQADataMakerRec->GetRecPointsData(11 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->GetNbinsX();
+               Int_t ybin4 = ((TH1D*)fAliITSQADataMakerRec->GetRecPointsData(11 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->GetNbinsY();
+               
+               for(Int_t i=0; i<xbin4; i++) {
+                       for(Int_t j=0; j<ybin4; j++) {
+                               ((TH1D*)fAliITSQADataMakerRec->GetRecPointsData(20 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->Fill(((TH1D*)fAliITSQADataMakerRec->GetRecPointsData(11 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->GetBinContent(i,j));
+                       }
+               }
+
+               // RecPoints 2 Raws Ratio
+               if(fAliITSQADataMakerRec->ListExists(AliQAv1::kRAWS)==kTRUE)
+                 {
+                   Int_t xbin3RP = ((TH1D*)fAliITSQADataMakerRec->GetRecPointsData(21 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->GetNbinsX();
+                   Int_t ybin3RP = ((TH1D*)fAliITSQADataMakerRec->GetRecPointsData(21 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->GetNbinsY();
+                   Int_t xbin3R  = ((TH1D*)fAliITSQADataMakerRec->GetRawsData(4 + fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->GetNbinsX();
+                   Int_t ybin3R  = ((TH1D*)fAliITSQADataMakerRec->GetRawsData(4 + fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->GetNbinsY();
+                   if((xbin3RP == xbin3R) && (ybin3RP == ybin3R)) {
+                     ((TH2D*)fAliITSQADataMakerRec->GetRecPointsData(21 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->Divide(((TH2D*)fAliITSQADataMakerRec->GetRawsData(4 + fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()])));
+                     for(Int_t i=0; i<xbin3R; i++) {
+                       for(Int_t j=0; j<ybin3R; j++) {
+                         ((TH1D*)fAliITSQADataMakerRec->GetRecPointsData(23 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->Fill(((TH2D*)fAliITSQADataMakerRec->GetRecPointsData(21 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->GetBinContent(i,j));
+                       }
+                     }
+                   } else 
+                     AliWarning("Number of bins for Raws and RecPoints (Layer 3) do not match\n");
+                   
+                   Int_t xbin4RP = ((TH1D*)fAliITSQADataMakerRec->GetRecPointsData(22 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->GetNbinsX();
+                   Int_t ybin4RP = ((TH1D*)fAliITSQADataMakerRec->GetRecPointsData(22 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->GetNbinsY();
+                   Int_t xbin4R = ((TH1D*)fAliITSQADataMakerRec->GetRawsData(5 + fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->GetNbinsX();
+                   Int_t ybin4R = ((TH1D*)fAliITSQADataMakerRec->GetRawsData(5 + fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->GetNbinsY();
+                   if((xbin4RP == xbin4R) && (ybin4RP == ybin4R)) {
+                     ((TH2D*)fAliITSQADataMakerRec->GetRecPointsData(22 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->Divide(((TH2D*)fAliITSQADataMakerRec->GetRawsData(5 + fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()])));
+                     for(Int_t i=0; i<xbin4R; i++) {
+                       for(Int_t j=0; j<ybin4R; j++) {
+                         ((TH1D*)fAliITSQADataMakerRec->GetRecPointsData(24 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->Fill(((TH2D*)fAliITSQADataMakerRec->GetRecPointsData(22 + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]))->GetBinContent(i,j));
+                       }
+                     }
+                   } else 
+                     AliWarning("Number of bins for Raws and RecPoints (Layer 4) do not match\n");
+                 }
+               else{AliWarning("Ratio between RecPoints and Raws not executed because the raw list has not been created\n");}
        }//end recpoints
        
 }
@@ -219,7 +296,8 @@ Int_t AliITSQASDDDataMakerRec::InitRaws()
   Int_t indexlast = 0;
   Int_t index1 = 0;
 
-  if(fkOnline){AliInfo("Book Online Histograms for SDD\n");}
+       fSDDhRawsTask = 0;
+       if(fkOnline){AliInfo("Book Online Histograms for SDD\n");}
   else {AliInfo("Book Offline Histograms for SDD\n ");}
   TH1D *h0 = new TH1D("SDDModPattern","HW Modules pattern",fgknSDDmodules,239.5,499.5); //0
   h0->GetXaxis()->SetTitle("Module Number");
@@ -260,12 +338,24 @@ Int_t AliITSQASDDDataMakerRec::InitRaws()
    rv = fAliITSQADataMakerRec->Add2RawsList(hphil4norm,5+fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image, !saveCorr); 
   fSDDhRawsTask++;
 
-  if(fkOnline){
+       
+       Float_t hMax = 0.2;
+       
+       TH1F *oL3 = new TH1F("SDDL3_RelativeOccupancy","Layer 3 Relative Occupancy",200,0.,hMax);
+       rv = fAliITSQADataMakerRec->Add2RawsList(oL3,6+fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image, !saveCorr); //6 
+       fSDDhRawsTask++;
+       
+       TH1F *oL4 = new TH1F("SDDL4_RelativeOccupancy","Layer 4 Relative Occupancy",200,0.,hMax);
+       rv = fAliITSQADataMakerRec->Add2RawsList(oL4,7+fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image, !saveCorr); //7
+       fSDDhRawsTask++;
+       
+       fOnlineOffsetRaws = fSDDhRawsTask;
+       if(fkOnline){
       //DDL Pattern 
-      TH2D *hddl = new TH2D("SDDDDLPattern","SDD DDL Pattern ",24,-0.5,11.5,24,-0.5,23.5); //6
+      TH2D *hddl = new TH2D("SDDDDLPattern","SDD DDL Pattern ",24,-0.5,11.5,24,-0.5,23.5); //8
       hddl->GetXaxis()->SetTitle("Channel");
       hddl->GetYaxis()->SetTitle("DDL Number");
-      rv = fAliITSQADataMakerRec->Add2RawsList(hddl,6+fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image, !saveCorr);
+      rv = fAliITSQADataMakerRec->Add2RawsList(hddl,fOnlineOffsetRaws+fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image, !saveCorr);
       fSDDhRawsTask++;
       Int_t indexlast1 = 0;
   
@@ -276,32 +366,32 @@ Int_t AliITSQASDDDataMakerRec::InitRaws()
       char *hname[3];
       for(Int_t i=0; i<3; i++) hname[i]= new char[50];
       for(Int_t moduleSDD =0; moduleSDD<fgknSDDmodules; moduleSDD++){
-       for(Int_t iside=0;iside<fgknSide;iside++){
-         AliITSgeomTGeo::GetModuleId(moduleSDD+fgkmodoffset, lay, lad, det);
-         sprintf(hname[0],"SDDchargeMapFSE_L%d_%d_%d_%d",lay,lad,det,iside);
-         sprintf(hname[1],"SDDChargeMapForSingleEvent_L%d_%d_%d_%d",lay,lad,det,iside);
+                 for(Int_t iside=0;iside<fgknSide;iside++){
+                         AliITSgeomTGeo::GetModuleId(moduleSDD+fgkmodoffset, lay, lad, det);
+                         sprintf(hname[0],"SDDchargeMapFSE_L%d_%d_%d_%d",lay,lad,det,iside);
+                         sprintf(hname[1],"SDDChargeMapForSingleEvent_L%d_%d_%d_%d",lay,lad,det,iside);
          //      sprintf(hname[2],"SDDhmonoDMap_L%d_%d_%d_%d",lay,lad,det,iside);
-         TProfile2D *fModuleChargeMapFSE = new TProfile2D(hname[0],hname[1],256/fTimeBinSize,-0.5,255.5,256,-0.5,255.5);
-         fModuleChargeMapFSE->GetXaxis()->SetTitle("Time Bin");
-         fModuleChargeMapFSE->GetYaxis()->SetTitle("Anode");
-          rv = fAliITSQADataMakerRec->Add2RawsList(fModuleChargeMapFSE,indexlast1 + index1 + fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image, !saveCorr);        
-         fSDDhRawsTask++;
-         index1++;      
-       }
+                         TProfile2D *fModuleChargeMapFSE = new TProfile2D(hname[0],hname[1],256/fTimeBinSize,-0.5,255.5,256,-0.5,255.5);
+                         fModuleChargeMapFSE->GetXaxis()->SetTitle("Time Bin");
+                         fModuleChargeMapFSE->GetYaxis()->SetTitle("Anode");
+                         rv = fAliITSQADataMakerRec->Add2RawsList(fModuleChargeMapFSE,indexlast1 + index1 + fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image, !saveCorr);         
+                         fSDDhRawsTask++;
+                         index1++;      
+                 }
       }
       
       for(Int_t moduleSDD =0; moduleSDD<fgknSDDmodules; moduleSDD++){
-       for(Int_t iside=0;iside<fgknSide;iside++){
-         AliITSgeomTGeo::GetModuleId(moduleSDD+fgkmodoffset, lay, lad, det);
-         sprintf(hname[0],"SDDchargeMap_L%d_%d_%d_%d",lay,lad,det,iside);
-         sprintf(hname[1],"SDDChargeMap_L%d_%d_%d_%d",lay,lad,det,iside);
-         TProfile2D *fModuleChargeMap = new TProfile2D(hname[0],hname[1],256/fTimeBinSize,-0.5,255.5,256,-0.5,255.5);
-         fModuleChargeMap->GetXaxis()->SetTitle("Time Bin");
-         fModuleChargeMap->GetYaxis()->SetTitle("Anode Number");
-          rv = fAliITSQADataMakerRec->Add2RawsList(fModuleChargeMap,indexlast1 + index1 + fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image, !saveCorr);
-         fSDDhRawsTask++;
-         index1++;      
-       }
+                 for(Int_t iside=0;iside<fgknSide;iside++){
+                         AliITSgeomTGeo::GetModuleId(moduleSDD+fgkmodoffset, lay, lad, det);
+                         sprintf(hname[0],"SDDchargeMap_L%d_%d_%d_%d",lay,lad,det,iside);
+                         sprintf(hname[1],"SDDChargeMap_L%d_%d_%d_%d",lay,lad,det,iside);
+                         TProfile2D *fModuleChargeMap = new TProfile2D(hname[0],hname[1],256/fTimeBinSize,-0.5,255.5,256,-0.5,255.5);
+                         fModuleChargeMap->GetXaxis()->SetTitle("Time Bin");
+                         fModuleChargeMap->GetYaxis()->SetTitle("Anode Number");
+                         rv = fAliITSQADataMakerRec->Add2RawsList(fModuleChargeMap,indexlast1 + index1 + fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image, !saveCorr);
+                         fSDDhRawsTask++;
+                         index1++;      
+                 }
       }
       
       //Event Size 
@@ -313,8 +403,11 @@ Int_t AliITSQASDDDataMakerRec::InitRaws()
       fSDDhRawsTask++;
          
     }  // kONLINE
-  AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SDD Raws histograms booked\n",fSDDhRawsTask));
-  return rv ; 
+       
+       cout << fSDDhRawsTask << " SDD Raws histograms booked" << endl;
+       
+       AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SDD Raws histograms booked\n",fSDDhRawsTask));
+       return rv ; 
 }
 
 
@@ -339,7 +432,7 @@ Int_t AliITSQASDDDataMakerRec::MakeRaws(AliRawReader* rawReader)
   if(fkOnline) {
     for(Int_t moduleSDD =0; moduleSDD<fgknSDDmodules; moduleSDD++){
       for(Int_t iside=0;iside<fgknSide;iside++) {
-               if(fSDDhRawsTask > 7 + index) fAliITSQADataMakerRec->GetRawsData(7 + index +fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Reset();   
+               if(fSDDhRawsTask > fOnlineOffsetRaws + 1 + index) fAliITSQADataMakerRec->GetRawsData(fOnlineOffsetRaws + 1 + index +fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Reset();   
        // 4  because the 2D histos for single events start after the fourth position
        index++;
       }
@@ -401,12 +494,12 @@ Int_t AliITSQASDDDataMakerRec::MakeRaws(AliRawReader* rawReader)
 
     //printf(" \n%i %i %i %i \n ",lay, lad, det,iside );
     fAliITSQADataMakerRec->GetRawsData( 0 + fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()] )->Fill(isddmod);   
-    if(lay==3)    fAliITSQADataMakerRec->GetRawsData(1+fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(det+0.5*iside-0.5,lad); 
-    if(lay==4) {fAliITSQADataMakerRec->GetRawsData(2+fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(det+0.5*iside-0.5,lad);}  
+    if(lay==3) fAliITSQADataMakerRec->GetRawsData(1+fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(det+0.5*iside-0.25,lad); 
+    if(lay==4) fAliITSQADataMakerRec->GetRawsData(2+fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(det+0.5*iside-0.25,lad);
  
     if(fkOnline) {
 
-      fAliITSQADataMakerRec->GetRawsData(6+fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill((stream->GetCarlosId())+0.5*iside -0.5,iddl);
+      fAliITSQADataMakerRec->GetRawsData(fOnlineOffsetRaws+fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill((stream->GetCarlosId())+0.5*iside -0.5,iddl);
       //  printf("content ddlmap %d, %d = %f \n",(stream->GetCarlosId()+0.5*iside -0.5),iddl,fAliITSQADataMakerRec->GetRawsData(3+fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->GetBinContent(1+(det-1)*2;lad));
       //printf("content ddlmap %d, %d = %f \n",(stream->GetCarlosId())+0.5*iside -0.5,iddl,fAliITSQADataMakerRec->GetRawsData(3+fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->GetBinContent(1+(stream->GetCarlosId()-1)*2,iddl));
       activeModule = moduleSDD;
@@ -414,19 +507,20 @@ Int_t AliITSQASDDDataMakerRec::MakeRaws(AliRawReader* rawReader)
       
       if(index1<0){
         AliDebug(AliQAv1::GetQADebugLevel(),Form("Wrong index number %d - patched to 0\n",index1));
-       index1 = 0;
+                 index1 = 0;
       }      
 
-      if(fSDDhRawsTask > 7 + index1) {                                  
-        ((TProfile2D *)(fAliITSQADataMakerRec->GetRawsData(7 + index1 +fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()])))->Fill(coord2, coord1, signal);     
-        ((TProfile2D *)(fAliITSQADataMakerRec->GetRawsData(7 + index1 + 260*2 +fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()])))->Fill(coord2, coord1, signal); 
+      if(fSDDhRawsTask > fOnlineOffsetRaws +1 + index1) {                                  
+        ((TProfile2D *)(fAliITSQADataMakerRec->GetRawsData(fOnlineOffsetRaws +1 + index1 +fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()])))->Fill(coord2, coord1, signal);     
+        ((TProfile2D *)(fAliITSQADataMakerRec->GetRawsData(fOnlineOffsetRaws +1 + index1 + 260*2 +fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()])))->Fill(coord2, coord1, signal); 
       }
     }//online
     cnt++;
     if(!(cnt%10000)) AliDebug(AliQAv1::GetQADebugLevel(),Form(" %d raw digits read",cnt));
   }//end next()
-  if(fkOnline){((TH1F*)(fAliITSQADataMakerRec->GetRawsData(7 + 260*4 +fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()])))->Fill(size/1024.);//KB
+  if(fkOnline){((TH1F*)(fAliITSQADataMakerRec->GetRawsData(fOnlineOffsetRaws +1 + 260*4 +fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()])))->Fill(size/1024.);//KB
   }
+       
   AliDebug(AliQAv1::GetQADebugLevel(),Form("Event completed, %d raw digits read",cnt)); 
   delete stream;
   stream = NULL; 
@@ -564,13 +658,13 @@ Int_t AliITSQASDDDataMakerRec::InitRecPoints()
   rv = fAliITSQADataMakerRec->Add2RecPointsList(h3,3+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], !expert, image);// NON expert image
   fSDDhRecPointsTask++;
   
-  TH2F *h4 = new TH2F("SDDGlobalCoordDistribL3PHIZ","#varphi Z Global Coord Distrib L3",46,-23,23,90,-TMath::Pi(),TMath::Pi());//position number 4
+  TH2F *h4 = new TH2F("SDDGlobalCoordDistribL3PHIZ","#varphi Z Global Coord Distrib L3",96,-23,23,112,-TMath::Pi(),TMath::Pi());//position number 4
   h4->GetYaxis()->SetTitle("#phi[rad]");
   h4->GetXaxis()->SetTitle("Z[cm]");
   rv = fAliITSQADataMakerRec->Add2RecPointsList(h4,4+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], !expert, image);//NON expert image
   fSDDhRecPointsTask++;
 
-  TH2F *h5 = new TH2F("SDDGlobalCoordDistribL4PHIZ","#varphi Z Global Coord Distrib L4",62,-31,31,90,-TMath::Pi(),TMath::Pi());//position number 5
+  TH2F *h5 = new TH2F("SDDGlobalCoordDistribL4PHIZ","#varphi Z Global Coord Distrib L4",128,-31,31,176,-TMath::Pi(),TMath::Pi());//position number 5
   h5->GetYaxis()->SetTitle("#phi[rad]");
   h5->GetXaxis()->SetTitle("Z[cm]");
   rv = fAliITSQADataMakerRec->Add2RecPointsList(h5,5+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], !expert, image);//NON expert image
@@ -612,7 +706,7 @@ Int_t AliITSQASDDDataMakerRec::InitRecPoints()
   fSDDhRecPointsTask++;
 
   TH2D *h11 = new TH2D("SDDModPatternL4RPNORM","Modules pattern L4 RP NORM",16,0.5,8.5,22,0.5,22.5); //position number 11
-  h11->GetXaxis()->SetTitle("[#Module L3 ]");
+  h11->GetXaxis()->SetTitle("[#Module L4 ]");
   h10->GetYaxis()->SetTitle("#varphi[#Ladder L4]");
   rv = fAliITSQADataMakerRec->Add2RecPointsList(h11,11 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image);//  expert NO image
   fSDDhRecPointsTask++;
@@ -664,17 +758,58 @@ Int_t AliITSQASDDDataMakerRec::InitRecPoints()
     fSDDhRecPointsTask++;
   }
   
-  if(fkOnline){
-      TH2F *h19 = new TH2F("SDDGlobalCoordDistribYXFSE","YX Global Coord Distrib FSE",112,-28,28,112,-28,28);//position number 19
+       Float_t hMax = 0.2;
+       
+       TH1F *oL3 = new TH1F("SDDL3_RelativeOccupancy","Layer 3 Relative Occupancy (RecPoints)",200,0.,hMax);
+       rv = fAliITSQADataMakerRec->Add2RecPointsList(oL3,fSDDhRecPointsTask+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image); // 19
+       fSDDhRecPointsTask++;
+       
+       TH1F *oL4 = new TH1F("SDDL4_RelativeOccupancy","Layer 4 Relative Occupancy (RecPoints)",200,0.,hMax);
+       rv = fAliITSQADataMakerRec->Add2RecPointsList(oL4,fSDDhRecPointsTask+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image); // 20
+       fSDDhRecPointsTask++;
+       
+       
+       TH2D *h21 = new TH2D("SDDL3_Rec2Raw_2D","L3 RecPoints to Raws 2D",12,0.5,6.5,14,0.5,14.5);  //position number 21
+       h21->GetXaxis()->SetTitle("z[#Module L3 ]");
+       h21->GetYaxis()->SetTitle("#varphi[#Ladder L3]");
+       rv = fAliITSQADataMakerRec->Add2RecPointsList(h21,21 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image);// expert NO  image
+       fSDDhRecPointsTask++;
+       
+       TH2D *h22 = new TH2D("SDDL4_Rec2Raw_2D","L4 RecPoints to Raws 2D",16,0.5,8.5,22,0.5,22.5); //position number 22
+       h22->GetXaxis()->SetTitle("[#Module L4 ]");
+       h22->GetYaxis()->SetTitle("#varphi[#Ladder L4]");
+       rv = fAliITSQADataMakerRec->Add2RecPointsList(h22,22 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image);//  expert NO image
+       fSDDhRecPointsTask++;
+
+        hMax = 0.3;    
+       TH1F *R2RL3 = new TH1F("SDDL3_Rec2Raw","L3 RecPoints to Raws ratio",150,0.,hMax);
+       rv = fAliITSQADataMakerRec->Add2RecPointsList(R2RL3,fSDDhRecPointsTask+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image); // 23
+       fSDDhRecPointsTask++;
+       
+       TH1F *R2RL4 = new TH1F("SDDL4_Rec2Raw","L4 RecPoints to Raws ratio",150,0.,hMax);
+       rv = fAliITSQADataMakerRec->Add2RecPointsList(R2RL4,fSDDhRecPointsTask+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image); // 24
+       fSDDhRecPointsTask++;
+
+       TH1F *dedxL3 = new TH1F("SDDL3_dedx","L3 dE/dX",100,0.,1.);
+       rv = fAliITSQADataMakerRec->Add2RecPointsList(dedxL3,fSDDhRecPointsTask+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image); // 25
+       fSDDhRecPointsTask++;
+       
+       TH1F *dedxL4 = new TH1F("SDDL4_dedx","L4 dE/dX",100,0.,1.);
+       rv = fAliITSQADataMakerRec->Add2RecPointsList(dedxL4,fSDDhRecPointsTask+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image); // 26
+       fSDDhRecPointsTask++;
+       
+       fOnlineOffsetRecPoints = fSDDhRecPointsTask;
+       if(fkOnline){
+      TH2F *h19 = new TH2F("SDDGlobalCoordDistribYXFSE","YX Global Coord Distrib FSE",112,-28,28,112,-28,28);//position number 27
       h19->GetYaxis()->SetTitle("Y[cm]");
       h19->GetXaxis()->SetTitle("X[cm]");
-      rv = fAliITSQADataMakerRec->Add2RecPointsList(h19,19+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image);// expert NO image
+      rv = fAliITSQADataMakerRec->Add2RecPointsList(h19,fSDDhRecPointsTask+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image);// expert NO image
       fSDDhRecPointsTask++;
       
-      TH2F *h20 = new TH2F("SDDGlobalCoordDistribRZFSE","RZ Global Coord Distrib FSE",128,-32,32,56,12,26);//position number 20
+      TH2F *h20 = new TH2F("SDDGlobalCoordDistribRZFSE","RZ Global Coord Distrib FSE",128,-32,32,56,12,26);//position number 28
       h20->GetYaxis()->SetTitle("R[cm]");
       h20->GetXaxis()->SetTitle("Z[cm]");
-      rv = fAliITSQADataMakerRec->Add2RecPointsList(h20,20+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image);// expert NO image
+      rv = fAliITSQADataMakerRec->Add2RecPointsList(h20,fSDDhRecPointsTask+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image);// expert NO image
       fSDDhRecPointsTask++;      
     }//online
   
@@ -703,7 +838,7 @@ Int_t AliITSQASDDDataMakerRec::MakeRecPoints(TTree * clustersTree)
   Int_t npoints = 0;      
   Float_t cluglo[3]={0.,0.,0.}; 
   if(fkOnline){
-      for(Int_t i=19;i<21;i++){
+      for(Int_t i=27;i<29;i++){
          fAliITSQADataMakerRec->GetRecPointsData(i+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Reset();
        }
     }
@@ -713,51 +848,44 @@ Int_t AliITSQASDDDataMakerRec::MakeRecPoints(TTree * clustersTree)
     //AliInfo(Form("Module %d\n",module));
     recpoints = rpcont->UncheckedGetClusters(module);
     npoints += recpoints->GetEntries();
-    //AliInfo(Form("modnumb %d, npoints %d, total points %d\n",module, recpoints->GetEntries(),npoints));
-    //AliITSgeomTGeo::GetModuleId(module, lay, lad, det);
-    //AliInfo(Form("modnumb %d, lay %d, lad %d, det %d \n",module, lay, lad, det));
-    
-    //AliInfo(Form("modnumb %d, entries %d\n",module, recpoints->GetEntries()));
     for(Int_t j=0;j<recpoints->GetEntries();j++){
-      //AliInfo(Form("modnumb %d, entry %d \n",module, j));
       AliITSRecPoint *recp = (AliITSRecPoint*)recpoints->At(j); 
       Int_t index = recp->GetDetectorIndex();
       lay=recp->GetLayer();
-      Int_t modnumb=index+AliITSgeomTGeo::GetModuleIndex(lay+1,1,1);
-      //printf("modnumb  %i\n",modnumb);  
-      AliITSgeomTGeo::GetModuleId(modnumb, lay, lad, det);  
+               if(lay < 2 || lay > 3) continue;
+               Int_t modnumb=index+AliITSgeomTGeo::GetModuleIndex(lay+1,1,1);
+               AliITSgeomTGeo::GetModuleId(modnumb, lay, lad, det);  
+//             AliInfo(Form("modnumb %d, lay %d, lad %d, det %d \n",module, lay, lad, det));
       fAliITSQADataMakerRec->GetRecPointsData(6 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(modnumb);//modpatternrp
       recp->GetGlobalXYZ(cluglo);
       Float_t rad=TMath::Sqrt(cluglo[0]*cluglo[0]+cluglo[1]*cluglo[1]); 
       Float_t phi=TMath::ATan2(cluglo[1],cluglo[0]);
       Float_t drifttime=recp->GetDriftTime();
-      fAliITSQADataMakerRec->GetRecPointsData(12 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(recp->GetDetLocalX(),recp->GetDetLocalZ());//local distribution
-      if(lay==3||lay==4)fAliITSQADataMakerRec->GetRecPointsData(2 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluglo[0],cluglo[1]);//global distribution YX
-      fAliITSQADataMakerRec->GetRecPointsData(3 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluglo[2],rad);//global distribution rz
-      if(fkOnline) {
-       fAliITSQADataMakerRec->GetRecPointsData(19 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluglo[0],cluglo[1]);//global distribution YX FSE
-       fAliITSQADataMakerRec->GetRecPointsData(20 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluglo[2],rad);//global distribution rz FSE
-      }
-      if(recp->GetLayer() == 2) {
-       fAliITSQADataMakerRec->GetRecPointsData(0  +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(recp->GetQ()) ;//total charge of layer 3
-       //fAliITSQADataMakerRec->GetRecPointsData(7  +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(lad);//lad pattern layer 3
-       Int_t iside=recp->GetDriftSide();
-       //printf("iside =%d\n",iside);
-       fAliITSQADataMakerRec->GetRecPointsData(7  +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(det+0.5*iside-0.5,lad);//mod pattern layer 3
-       fAliITSQADataMakerRec->GetRecPointsData(13 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(rad);//r distribution layer 3
-       fAliITSQADataMakerRec->GetRecPointsData(15 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(phi);// phi distribution layer 3
-       fAliITSQADataMakerRec->GetRecPointsData(4  +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluglo[2],phi);// zphi distribution layer
-       fAliITSQADataMakerRec->GetRecPointsData(17  +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(drifttime);// time distribution layer 3
-      } else if(recp->GetLayer() == 3) {
-       fAliITSQADataMakerRec->GetRecPointsData(1  +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(recp->GetQ()) ;//total charge layer 4
-       //fAliITSQADataMakerRec->GetRecPointsData(8  +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(lad);//ladpatternlayer4
-       Int_t iside=recp->GetDriftSide();
-       //printf("iside =%d\n",iside);
-       fAliITSQADataMakerRec->GetRecPointsData(8  +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(det+0.5*iside-0.5,lad);//mod pattern layer 4
-       fAliITSQADataMakerRec->GetRecPointsData(14 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(rad);//r distribution
-       fAliITSQADataMakerRec->GetRecPointsData(16 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(phi);//phi distribution
-       fAliITSQADataMakerRec->GetRecPointsData(5  +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluglo[2],phi);// zphi distribution layer 4
-       fAliITSQADataMakerRec->GetRecPointsData(18  +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(drifttime);// time distribution layer 4
+               fAliITSQADataMakerRec->GetRecPointsData(12 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(recp->GetDetLocalX(),recp->GetDetLocalZ());//local distribution
+               fAliITSQADataMakerRec->GetRecPointsData(2 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluglo[0],cluglo[1]);//global distribution YX
+               fAliITSQADataMakerRec->GetRecPointsData(3 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluglo[2],rad);//global distribution rz
+               if(fkOnline) {
+                       fAliITSQADataMakerRec->GetRecPointsData(27 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluglo[0],cluglo[1]);//global distribution YX FSE
+                       fAliITSQADataMakerRec->GetRecPointsData(28 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluglo[2],rad);//global distribution rz FSE
+               }
+               Int_t iside=recp->GetDriftSide();
+                lay=recp->GetLayer();
+               if(lay == 2) {
+                       fAliITSQADataMakerRec->GetRecPointsData(0  +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(recp->GetQ()) ;//total charge of layer 3
+                       fAliITSQADataMakerRec->GetRecPointsData(7  +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(det+0.5*iside-0.5,lad);//mod pattern layer 3
+                       fAliITSQADataMakerRec->GetRecPointsData(13 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(rad);//r distribution layer 3
+                       fAliITSQADataMakerRec->GetRecPointsData(15 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(phi);// phi distribution layer 3
+                       fAliITSQADataMakerRec->GetRecPointsData(4  +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluglo[2],phi);// zphi distribution layer
+                       fAliITSQADataMakerRec->GetRecPointsData(17  +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(drifttime);// time distribution layer 3
+                       fAliITSQADataMakerRec->GetRecPointsData(25  +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(recp->GetdEdX());// charge distribution layer 3
+               } else if(lay == 3) {
+                       fAliITSQADataMakerRec->GetRecPointsData(1  +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(recp->GetQ()) ;//total charge layer 4
+                       fAliITSQADataMakerRec->GetRecPointsData(8  +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(det+0.5*iside-0.5,lad);//mod pattern layer 4
+                       fAliITSQADataMakerRec->GetRecPointsData(14 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(rad);//r distribution
+                       fAliITSQADataMakerRec->GetRecPointsData(16 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(phi);//phi distribution
+                       fAliITSQADataMakerRec->GetRecPointsData(5  +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluglo[2],phi);// zphi distribution layer 4
+                       fAliITSQADataMakerRec->GetRecPointsData(18  +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(drifttime);// time distribution layer 4
+                       fAliITSQADataMakerRec->GetRecPointsData(26  +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(recp->GetdEdX());// charge distribution layer 4
       }
     }
   }
index 90fadd2387ac4b7e07ebdfafb931df724c8d8056..48eaee76d58e228c5d9d224bb733a076b614a9cd 100644 (file)
@@ -64,6 +64,8 @@ private:
   Int_t   fSDDhRawsTask;                       // number of histo booked for each the Raws Task SDD
   Int_t   fSDDhDigitsTask;                     // number of histo booked for each the RecPoints Task SDD
   Int_t   fSDDhRecPointsTask;                  // number of histo booked for each the RecPoints Task SDD
+  Int_t   fOnlineOffsetRaws;                                   // index for starting online histograms for Raws
+  Int_t   fOnlineOffsetRecPoints;                                      // index for starting online histograms for RecPoints
   Int_t   *fGenRawsOffset;                     // QAchecking Raws offset       
   Int_t   *fGenDigitsOffset;                   // QAchecking RecPoints offset       
   Int_t   *fGenRecPointsOffset;                // QAchecking RecPoints offset       
@@ -74,7 +76,7 @@ private:
   TObjArray *fCalibration;                     //Array of Calibration Object
   TObjArray *fHistoCalibration;                //Array of the Calibration histograms for the normalization
 
-  ClassDef(AliITSQASDDDataMakerRec,12)         // description 
+  ClassDef(AliITSQASDDDataMakerRec,13)         // description 
 
 };