#include "AliLog.h"
#include "AliQAv1.h"
#include "AliQAChecker.h"
+#include "AliCDBEntry.h"
+#include "AliQAManager.h"
#include "AliT0QAChecker.h"
ClassImp(AliT0QAChecker)
-
-//____________________________________________________________________________
-Double_t * AliT0QAChecker::Check(AliQAv1::ALITASK_t /*index*/)
-{
- Double_t * rv = new Double_t[AliRecoParam::kNSpecies] ;
- for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++)
- rv[specie] = 0.0 ;
- return rv ;
-}
-
//__________________________________________________________________
-Double_t * AliT0QAChecker::Check(AliQAv1::ALITASK_t index,TObjArray ** list)
+void AliT0QAChecker::Check(Double_t * test, AliQAv1::ALITASK_t index, TObjArray ** list, const AliDetectorRecoParam * /*recoParam*/)
{
// Super-basic check on the QA histograms on the input list:
// look whether they are empty!
+
+ char * detOCDBDir = Form("T0/%s/%s", AliQAv1::GetRefOCDBDirName(), AliQAv1::GetRefDataDirName()) ;
- Double_t * test = new Double_t[AliRecoParam::kNSpecies] ;
- for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++)
+ AliCDBEntry *QARefRec = AliQAManager::QAManager()->Get(detOCDBDir);
+ // QARefRec->Dump();
+ if( !QARefRec){
+ AliInfo("QA reference data NOT retrieved for Reconstruction check. No T0 reference distribution");
+ }
+
+ for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++)
test[specie] = 10.0 ;
- Double_t nent[250];
- TString hname[250];
+ Double_t nent[500];
+ TString hname[500];
const char *cname;
- memset(nent,0,250*sizeof(Double_t));
- Double_t w[250];
- memset(w,1,250*sizeof(Double_t));
+ memset(nent,0,500*sizeof(Double_t));
+ Double_t w[500];
+ memset(w,1,500*sizeof(Double_t));
TH2 *fhRecDiff[3];
- TH2 *fhRawEff[250];
+ TH1 *fhRawEff[500];
+ TH2 *fhRawTime[500];
TH1 *fhESD[2];
+ TH2 *fhHits[10];
for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
// TString dataType = AliQAv1::GetAliTaskName(index);
test[specie] = 1. ; // nothing to check
}
else {
- TIter next(list[specie]) ;
- TH1 * hdata ;
- TH2 * h ;
- // AliDebug(AliQAv1::GetQADebugLevel(), Form(" data type %i %s nentries %i\n",
- // index,dataType.Data(),list->GetEntries()));
- for (Int_t ir=0; ir<list[specie]->GetEntries(); ir++) {
- //raw
- if(index==0 ){
- /*
- if(ir < 205) {
- hdata = (TH1*) list[specie]->UncheckedAt(ir);
- if(hdata) {
- cname = hdata->GetName();
- hname[ir] = cname;
- AliDebug(AliQAv1::GetQADebugLevel(),Form("count %i %s \n",ir, hname[ir].Data())) ;
- fhRaw[ir] = hdata;
- }
- }*/
- if(ir > 204) {
- // else{
- h = (TH2*) list[specie]->UncheckedAt(ir);
- AliDebug(AliQAv1::GetQADebugLevel(), Form(" index %i ir %i \n", index,ir));
- if(h) {
- cname = h->GetName();
+ TH1 * hdata ;
+ TH2 * h ;
+ for (Int_t ir=0; ir<list[specie]->GetEntries(); ir++) {
+
+ //hits
+
+ if(index == AliQAv1::kSIM && AliQAv1::GetTaskName(AliQAv1::kHITS)){
+ h = (TH2*) list[specie]->UncheckedAt(ir);
+ cname = h->GetName();
+ hname[ir] = cname;
+ fhHits[ir] = h;
+ }
+
+ //raw
+ if(index == AliQAv1::kRAW ){
+ if(ir > 204 && ir<208 ) {
+ hdata = (TH1*) list[specie]->UncheckedAt(ir);
+ if(hdata) {
+ cname = hdata->GetName();
hname[ir] = cname;
- AliDebug(AliQAv1::GetQADebugLevel(),Form("count %i %s \n",ir, hname[ir].Data())) ;
- fhRawEff[ir] = h;
+ fhRawEff[ir] = hdata;
}
}
+ if((ir>207 && ir<210) && specie == AliRecoParam::kCalib) {
+ h = (TH2*) list[specie]->UncheckedAt(ir);
+ if(h) {
+ cname = h->GetName();
+ hname[ir] = cname;
+ fhRawTime[ir] = h;
+ AliDebug(AliQAv1::GetQADebugLevel(), Form("count %i %s ",ir, hname[ir].Data()) );
+ }
+ }
}
-
//rec
- if(index==2){
+ if(index == AliQAv1::kREC){
h = (TH2*) list[specie]->UncheckedAt(ir);
if(h) {
cname = h->GetName();
hname[ir] = cname;
- AliDebug(AliQAv1::GetQADebugLevel(), Form("count %i %s \n",ir, hname[ir].Data())) ;
- fhRecDiff[ir] = h;
+ fhRecDiff[ir] = h;
}
}
//esd
- if(index==3){
- // cout<<" ir "<<ir<<endl;
+ if(index == AliQAv1::kESD){
hdata = (TH1*) list[specie]->UncheckedAt(ir);
if(hdata){
fhESD[ir] = hdata;
}
}
}
- if (index == 0) {
- //raw data
-
- for (Int_t icase=205; icase<207; icase++) {
- for (Int_t idet=0; idet<24; idet++) {
- Double_t mean = fhRawEff[icase]->ProjectionY(Form("%s_py_%i_%i",
- fhRawEff[icase]->GetName(), idet,icase),
- idet,idet+1)->GetMean();
- Double_t rms= fhRawEff[icase]->ProjectionY(Form("%s_py%i_%i",
- fhRawEff[icase]->GetName(), idet,icase),
- idet,idet+1)->GetRMS();
- AliDebug(AliQAv1::GetQADebugLevel(), Form("name %s icase %i idet %i mean %f, rms %f\n",
- fhRawEff[icase]->GetName(), icase, idet, mean,rms));
- if (mean<1.2 && mean> 0.8 ) {
- test[specie] = 1;
- AliDebug(AliQAv1::GetQADebugLevel(), Form("All channels works meane efficieny %f with rms %f test %f", mean, rms, test[specie])) ;
- }
- if (mean<=0.8 && mean>= 0.5 ){
- test[specie] = 0.5;
- AliDebug(AliQAv1::GetQADebugLevel(), Form("%s problem in channel %i efficieny %f test %f",
- fhRawEff[icase]->GetName(), idet, mean, test[specie])) ;
- }
- if (mean<0.5 ) {
- test[specie] = 0.25;
- AliDebug(AliQAv1::GetQADebugLevel(), Form("%s big problem in channel %i efficieny %f test %f",
- fhRawEff[icase]->GetName(), idet, mean, test[specie])) ;
- }
- }
- }
+
+
+
+ //raw data
+
+ if (index == AliQAv1::kRAW && specie == AliRecoParam::kCalib){
+ test[specie] = CheckRaw(list[specie],dynamic_cast<TObjArray*>(dynamic_cast<TList *>(QARefRec->GetObject())->First()));
}
- if(index == 2){
+
+ if(index == AliQAv1::kREC){
//rec points
for (Int_t icase=0; icase<2; icase++) {
for (Int_t idet=0; idet<24; idet++) {
fhRecDiff[icase]->GetName(), icase, idet, mean,rms));
if(TMath::Abs(mean) >1.5 || rms >1){
- AliDebug(AliQAv1::GetQADebugLevel(), Form(" calibration is nor perfect; test=%f", test)) ;
test[specie]=0.25;
+ AliDebug(AliQAv1::GetQADebugLevel(), Form(" calibration is nor perfect; test=%f", test[specie])) ;
}
if(mean>3 || rms >5) {
test[specie] = 0.1;
}
}
}
- if (index == 3) {
+ if (index == AliQAv1::kESD) {
//ESD
for (Int_t icase=0; icase<2; icase++) {
Double_t rmsVertex = fhESD[icase]->GetRMS();
Double_t meanVertex = fhESD[icase]->GetMean();
test[specie]=1;
- AliDebug(AliQAv1::GetQADebugLevel(), Form("numentries %d meanVertex %f rmsVertex %f", fhESD[icase]->GetEntries(), meanVertex, rmsVertex));
+ AliDebug(AliQAv1::GetQADebugLevel(), Form("numentries %f meanVertex %f rmsVertex %f", fhESD[icase]->GetEntries(), meanVertex, rmsVertex));
if (TMath::Abs(rmsVertex)>3) {
test[specie]=0.25;
AliDebug(AliQAv1::GetQADebugLevel(), Form("Vertex position resolution not good , rms= %f test=%f",
} // if (list->GetEntries() != 0
AliDebug(AliQAv1::GetQADebugLevel(), Form("Test Result = %f", test[specie])) ;
}
- return test ;
+}
+
+//--------------------------------------------------------------------------
+Double_t AliT0QAChecker::CheckRaw(TObjArray *listrec , TObjArray *listref) const
+{
+
+ //TH1 *fhRawEff;
+ //TH1 *fhRawRef;
+ TH2 *fhRawRec2d;
+ TH2 *fhTime;
+
+ TIter next(listref) ;
+ //Int_t counter=0;
+ Float_t refmean[50][25];
+ Float_t refrms[50][25];
+ Float_t checkr = 0;
+
+ //Int_t nref = listref->GetEntries();
+ //Int_t nrec = listrec->GetEntries();
+
+ for (Int_t iii=4; iii<6; iii++){
+ fhRawRec2d =(TH2*) listref->At(iii);
+ for (Int_t idet=1; idet<25; idet++) {
+
+ refmean[iii-4][idet] = fhRawRec2d->
+ ProjectionY(Form("%s_py_%i_%i", fhRawRec2d ->GetName(), idet,iii-4),
+ idet,idet+1)->GetMean();
+
+ refrms[iii-4][idet] = fhRawRec2d->
+ ProjectionY(Form("%s_py%i_%i",
+ fhRawRec2d ->GetName(), idet,iii-4),
+ idet,idet+1)->GetRMS();
+
+ }
+ }
+
+
+ TString nameDev[2] = {"CDF", "LED"};
+ for (Int_t icase=208; icase<210; icase++) {
+ fhTime = (TH2*) listrec->At(icase);
+ for (Int_t idet=1; idet<25; idet++) {
+ Double_t binmean = fhTime->
+ ProjectionY(Form("%s_py_%i_%i", fhTime ->GetName(), idet,icase),
+ idet,idet+1)->GetMean();
+// Double_t rms= fhTime ->ProjectionY(Form("%s_py%i_%i",
+// fhTime ->GetName(), idet,icase),
+// idet,idet+1)->GetRMS();
+ Double_t diffmean = binmean-refmean[icase-208][idet];
+
+ if (TMath::Abs(diffmean) < 2 ) {
+ checkr = 1;
+ // printf(" Laser calibration signal sits on its place %f for PMT %s %i : check = %f\n", diffmean, nameDev[icase-208].Data() ,idet, checkr);
+ AliDebug(AliQAv1::GetQADebugLevel(),
+ Form(" Laser calibration signal sits on its place %f for PMT %s %i : check = %f\n", diffmean, nameDev[icase-208].Data(),idet, checkr)) ;
+ }
+ if (TMath::Abs(diffmean) <= 5 && TMath::Abs(diffmean) >= 2 ){
+ checkr = 0.5;
+ // printf(" Laser calibration signal shifted by %f ps for PMT %s %i : check = %f\n", diffmean*24.4, nameDev[icase-208].Data(),idet, checkr);
+ AliDebug(AliQAv1::GetQADebugLevel(),
+ Form(" Laser calibration signal shifted by %f ps (%f channels) for PMT %s %i : check = %f\n", diffmean*24.4 ,diffmean , nameDev[icase-208].Data(),idet, checkr)) ;
+ }
+ if (TMath::Abs(diffmean) > 5) {
+ checkr = 0.25;
+ // printf(" Big problems :laser calibration signal shifted by %f ps (%f channels) for PMT %s %i : check = %f\n", diffmean*24.4, diffmean, nameDev[icase-208].Data(),idet, checkr);
+ AliDebug(AliQAv1::GetQADebugLevel(),
+ Form(" Big problems :laser calibration signal shifted by %f ps (%f channels) for PMT %s %i : check = %f\n", diffmean*24.4, diffmean, nameDev[icase-208].Data(),idet, checkr)) ;
+
+ }
+
+ }
+ }
+
+ return checkr;
}