-
/**************************************************************************
* 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>
-#include <TF1.h>
-
-
-
// --- AliRoot header files ---
+#include "AliITSQADataMakerRec.h"
#include "AliITSQASDDChecker.h"
#include "AliLog.h"
#include "AliCDBEntry.h"
-#include "AliQAManager.h"
-#include "AliQACheckerBase.h"
-#include "TSystem.h"
+#include "AliCDBManager.h"
+//#include "AliQAManager.h"
+//#include "AliQACheckerBase.h"
+//#include "TSystem.h"
#include "AliITSCalibrationSDD.h"
#include "AliITSgeomTGeo.h"
+//#include "AliITSQAChecker.h"
+
ClassImp(AliITSQASDDChecker)
//__________________________________________________________________
AliITSQASDDChecker::~AliITSQASDDChecker()
{
+
+ //destructor
if(fStepBitSDD)
{
delete[] fStepBitSDD ;
} // dtor
//__________________________________________________________________
-Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, TObjArray * list/*, AliDetectorRecoParam *recoparam*/)
-{
+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));
Double_t entries=0.;
Double_t entries2[2];
for(Int_t i=0;i<2;i++)entries2[i]=0.;
+
+ 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;
+ test= fHighSDDValue[AliQAv1::kWARNING];
+ }
+ fCalibration = (TObjArray *)calibSDD->GetObject();
+
+ if(!cacheStatus)calibSDD->SetObject(NULL);
+ calibSDD->SetOwner(kTRUE);
+ if(!cacheStatus)
+ {
+ delete calibSDD;
+ }
+ }
+
+ AliInfo("Calib SDD Created\n ");
+
switch(index)
{
case AliQAv1::kRAW:
AliInfo(Form("Check on %s\n",AliQAv1::GetAliTaskName(index)));
- 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;
- test= fHighSDDValue[AliQAv1::kWARNING];
- }
- fCalibration = (TObjArray *)calibSDD->GetObject();
-
- if(!cacheStatus)calibSDD->SetObject(NULL);
- calibSDD->SetOwner(kTRUE);
- if(!cacheStatus)
- {
- delete calibSDD;
- }
- }
- AliInfo("Calib SDD Created\n ");
- if (list->GetEntries() == 0.){ //check if the list is empty
+ 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];
break;
TH1 *hmodule=NULL;
TH2 *hlayer[2];
for(Int_t i=0;i<2;i++)hlayer[i]=NULL;
- while( hdata = dynamic_cast<TH1* >(next()) ){
+ while( (hdata = dynamic_cast<TH1* >(next())) ){
if (hdata){
TString hname=hdata->GetName();
if(hname.Contains("SDDchargeMap"))continue;
if(hname.Contains("SDDModPattern")){
- hmodule=hdata;
- entries= hdata->GetEntries();
- if(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
+ if(hname.Contains("NORM")) continue;
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(content==0.){empty++;}
- else if(content!=0.){filled++;}
- }//end for
- AliInfo(Form(" %s : empty modules %i \t filled modules %i",hname.Data(), empty, filled));
- }//end else pattern entries !=0
+ 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")){
- 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(entries==0){
- //return test;
- //break;
- }
- }//end if getentries
+ if(hname.Contains("NORM")) continue;
else{
Int_t layer=0;
if(hname.Contains("3"))layer=0;
else if(hname.Contains("4"))layer=1;
- hlayer[layer]=dynamic_cast<TH2*>(hdata);
- hlayer[layer]->RebinX(2);
- int modmay=hlayer[layer]->GetNbinsY();
- TH1D* hproj= hlayer[layer]->ProjectionY();
- Double_t ladcontent=0;
- for(Int_t i=1;i<=modmay;i++) {//loop on the ladders
- ladcontent=hproj->GetBinContent(i);
- if(ladcontent==0){emptyladders[layer]++;}
- else if(ladcontent!=0){filledladders[layer]++;}
- }//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
+ 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(entries==0.&&entries2[0]==0.&&entries2[1]==0.) break;
+ 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;
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(content!=0.||contentlayer[lay-3]!=0.)
+ 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(content==0.&&contentlayer[lay-3]==0.)emptymodules[lay-3]++;
+ 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
active++;
//printf("lay: %i\t det %i \t lad %i \n",lay,det,lad );
contentgood=hlayer[lay-3]->GetBinContent(det,lad);
- if(contentgood==0.){emptymodules[lay-3]++;}
- else if(contentgood!=0.){filledmodules[lay-3]++;}
+ 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(" %s :Layer %i \tempty modules %i \t filled modules %i\n",hlayer[i]->GetName(), i+3,emptymodules[i], filledmodules[i]));}//end else layers
+ 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];}
AliWarning(Form("No modules took data: excluded %i \t exactive %i \n", excluded, exactive));
test=fHighSDDValue[AliQAv1::kFATAL];
}
- }
+ for(Int_t i=0;i<2;i++)
+ {
+ delete hlayer[i];
+ hlayer[i]=NULL;
+ }
+ }//end else
}
}//end getentries !=0
//delete calSDD;
-
-
//delete calibSDD;
//delete calSDD;
AliInfo(Form("No Check on %s\n",AliQAv1::GetAliTaskName(index)));
test=1.;
break;
- case AliQAv1::kSIM:
- AliInfo(Form("Check on %s\n",AliQAv1::GetAliTaskName(index)));
- test=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{
+
+ 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.;
break;
case AliQAv1::kANA:
- AliInfo(Form("Check on %s\n",AliQAv1::GetAliTaskName(index)));
+ AliInfo(Form("===================> No Check on %s\n",AliQAv1::GetAliTaskName(index)));
test=1.;
break;
case AliQAv1::kESD:
- AliInfo(Form("Check on %s\n",AliQAv1::GetAliTaskName(index)));
+ AliInfo(Form("==================> No Check on %s\n",AliQAv1::GetAliTaskName(index)));
test=1.;
break;
case AliQAv1::kNTASK:
- AliInfo(Form("No Check on %s\n",AliQAv1::GetAliTaskName(index)));
+ AliInfo(Form("==================> No Check on %s\n",AliQAv1::GetAliTaskName(index)));
+ test=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{
+
+ 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("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"))
+ {
+
+ //to do as rp
+ test=test+fStepBitSDD[AliQAv1::kINFO];
+ }//end timebindistribution
+ else if(hname.Contains("SDDADCCountsDistribution"))
+ {
+ test=test+fStepBitSDD[AliQAv1::kINFO];
+ }//end adc counts
+
+ }//end entries !=0
+ }//end hdata
+ }//end while
+ }//end else
+ }//end digits
+ 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
+ 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
+
+ }//end entries !=0
+ }//end hdata
+ }//end while
+ }//end else
+ }//end hits
+ 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);
+
+ 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
+ }//end hdata
+ }//end while
+ }//end else
+ }//end sdigits
test=1.;
break;
}//end switch
+
+ fCalibration=NULL;
delete hdata;
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::SetStepBit(Double_t *steprange)
+void AliITSQASDDChecker::SetStepBit(const Double_t *steprange)
{
-
+ //set the values of the step bit for each QA bit range calculated in the AliITSQAChecker class
fStepBitSDD = new Double_t[AliQAv1::kNBIT];
for(Int_t bit=0;bit<AliQAv1::kNBIT;bit++)
{
}
//__________________________________________________________________
-void AliITSQASDDChecker::SetSDDLimits(Float_t *lowvalue, Float_t * highvalue)
+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];