* about the suitability of this software for any purpose. It is *
* provided "as is" without express or implied warranty. *
**************************************************************************/
-
-
-
-
//...
// Checks the quality assurance.
// By comparing with reference data
#include <Riostream.h>
#include <TClass.h>
#include <TH1F.h>
-#include <TH1I.h>
+#include <TH2.h>
#include <TIterator.h>
#include <TKey.h>
#include <TFile.h>
#include <TMath.h>
+#include <TString.h>
// --- Standard library ---
// --- AliRoot header files ---
#include "AliLog.h"
-#include "AliQA.h"
+#include "AliQAv1.h"
#include "AliQAChecker.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 ;
+}
+
//__________________________________________________________________
-const Double_t AliT0QAChecker::Check(AliQA::ALITASK_t index,TObjArray * list)
+Double_t * AliT0QAChecker::Check(AliQAv1::ALITASK_t index,TObjArray ** list)
{
// Super-basic check on the QA histograms on the input list:
// look whether they are empty!
+ Double_t * test = new Double_t[AliRecoParam::kNSpecies] ;
+ for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++)
+ test[specie] = 10.0 ;
- Double_t test = 10.0 ;
-
- Int_t count = 0 ;
- Double_t nent[200], nentraw[200];
- TString hname[200];
+ Double_t nent[250];
+ TString hname[250];
const char *cname;
- memset(nent,0,200*sizeof(Double_t));
- Double_t w[200];
- memset(w,1,200*sizeof(Double_t));
- TH1 *fhRecLEDAmp[24]; TH1 * fhRecQTC[24];
- TH1 *fhOnlineMean = 0x0;
- TH1 * fhRecMean = 0x0;
- TH1 *fhESDMean = 0x0;
- TH1 *fhESDVertex = 0x0;
- TString dataType = AliQA::GetAliTaskName(index);
-
- if (list->GetEntries() == 0){
- test = 1. ; // nothing to check
- }
- else {
-
- TIter next(list) ;
+ memset(nent,0,250*sizeof(Double_t));
+ Double_t w[250];
+ memset(w,1,250*sizeof(Double_t));
+ TH2 *fhRecDiff[3];
+ TH2 *fhRawEff[250];
+ TH1 *fhESD[2];
+
+ for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
+ // TString dataType = AliQAv1::GetAliTaskName(index);
+ if (list[specie]->GetEntries() == 0){
+ test[specie] = 1. ; // nothing to check
+ }
+ else {
+ TIter next(list[specie]) ;
TH1 * hdata ;
-
- count = 0 ;
- while ( (hdata = dynamic_cast<TH1 *>(next())) ) {
- if (hdata) {
- nent[count] = hdata->GetEntries();
- cname = hdata->GetName();
- hname[count] = cname;
- AliDebug(10,Form("count %i %s -> %f",count, hname[count].Data(),nent[count])) ;
- if(index==2){
- if(count>23 && count<48)fhRecLEDAmp[count-24] = hdata;
- if(count>47 && count<72)fhRecQTC[count-48] = hdata;
- if(count == 72) fhOnlineMean = hdata;
- if(count == 73) fhRecMean = hdata;
- }
-
-
- if(index==3){
- if(count==0) fhESDMean = hdata;
- if(count==1) fhESDVertex = hdata;
- if(count>1){
- AliWarning("Unknowm ESD QA histograms");
- return 0;
- }
- }
- count++ ;
-
- Double_t rv = 0.;
- if(hdata->GetEntries()>0) rv = 1;
- // AliInfo(Form("%s -> %f", hdata->GetName(), rv)) ;
- test += rv ;
-
- }
- else{
- AliError("Data type cannot be processed") ;
+ TH2 * h ;
+ // AliInfo(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(10,Form("count %i %s \n",ir, hname[ir].Data())) ;
+ fhRaw[ir] = hdata;
+ }
+ }*/
+ if(ir > 204) {
+ // else{
+ h = (TH2*) list[specie]->UncheckedAt(ir);
+ AliInfo(Form(" index %i ir %i \n", index,ir));
+ if(h) {
+ cname = h->GetName();
+ hname[ir] = cname;
+ AliDebug(1,Form("count %i %s \n",ir, hname[ir].Data())) ;
+ fhRawEff[ir] = h;
+ }
+ }
}
-
- }
-
- if (count != 0) {
- if (test==0) {
- AliWarning("Histograms are there, but they are all empty: setting flag to kWARNING");
- test = 0.5; //upper limit value to set kWARNING flag for a task
+
+ //rec
+ if(index==2){
+ h = (TH2*) list[specie]->UncheckedAt(ir);
+ if(h) {
+ cname = h->GetName();
+ hname[ir] = cname;
+ AliDebug(1,Form("count %i %s \n",ir, hname[ir].Data())) ;
+ fhRecDiff[ir] = h;
+ }
}
- else {
- if(index == 2){
- //rec points
- if ( TMath::Abs(fhRecMean->GetMean() - fhOnlineMean->GetMean()) > 5)
- AliWarning(Form("rec mean %f -> online mean %f",fhRecMean->GetMean(), fhOnlineMean->GetMean())) ;
- Double_t meanLED, meanQTC;
- for (Int_t idet=0; idet<24; idet++) {
- meanLED = fhRecLEDAmp[idet]->GetMean();
- meanQTC = fhRecQTC[idet]->GetMean();
- if (TMath::Abs(meanLED-meanQTC)> 1.)
- AliWarning(Form("Amplitude measurements are different in channel %i : Amp LED %f -> Amp QTC %f",idet,meanLED, meanQTC)) ;
- }
- }
-
-
- if (index == 0) {
- //raw data
- Float_t realNumber = Float_t(nent[0]);
- for (Int_t i=77; i<count; i++)
- {
- Double_t diff = TMath::Abs(nent[i]-realNumber);
- if (diff > 0.1*realNumber )
- AliWarning(Form("Problem in Number of entried in hist %s is %f number of RefPoints %f\n",hname[i].Data() , nent[i],realNumber )) ;
- }
- }
- if (index == 3) {
- //ESD
- Double_t rmsMeanTime = fhESDMean->GetRMS();
- if (rmsMeanTime>3)
- AliWarning(Form("Mean time with bad resolution, RMS= %f",rmsMeanTime)) ;
- Double_t rmsVertex = fhESDVertex->GetRMS();
- if (rmsVertex>3)
- AliWarning(Form("Vertex with bad resolution, RMS= %f",rmsVertex)) ;
- }
-
+ //esd
+ if(index==3){
+ cout<<" ir "<<ir<<endl;
+ hdata = (TH1*) list[specie]->UncheckedAt(ir);
+ if(hdata){
+ fhESD[ir] = hdata;
+ AliDebug(1,Form("count %i %s ",ir, hname[ir].Data()) );
+ }
}
-
}
-
-
- } // if (list->GetEntries() != 0
-
- AliInfo(Form("Test Result = %f", test)) ;
-
+ 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();
+ AliInfo(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(1,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(1,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(1,Form("%s big problem in channel %i efficieny %f test %f",
+ fhRawEff[icase]->GetName(), idet, mean, test[specie])) ;
+ }
+ }
+ }
+ }
+ if(index == 2){
+ //rec points
+ for (Int_t icase=0; icase<2; icase++) {
+ for (Int_t idet=0; idet<24; idet++) {
+ Double_t mean = fhRecDiff[icase]->
+ ProjectionY(Form("%s_py", fhRecDiff[icase]->GetName()),
+ idet,idet+1)->GetMean();
+ Double_t rms= fhRecDiff[icase]->
+ ProjectionY(Form("%s_py", fhRecDiff[icase]->GetName()),
+ idet,idet+1)->GetRMS();
+ AliInfo(Form("name %s icase %i idet %i mean %f, rms %f\n",
+ fhRecDiff[icase]->GetName(), icase, idet, mean,rms));
+
+ if(TMath::Abs(mean) >1.5 || rms >1){
+ AliDebug(1,Form(" calibration is nor perfect; test=%f", test)) ;
+ test[specie]=0.25;
+ }
+ if(mean>3 || rms >5) {
+ test[specie] = 0.1;
+ AliDebug(1,Form(" wrong calibration test=%f", test[specie])) ;
+ }
+ }
+ }
+ }
+ if (index == 3) {
+ //ESD
+ for (Int_t icase=0; icase<2; icase++) {
+ Double_t rmsVertex = fhESD[icase]->GetRMS();
+ Double_t meanVertex = fhESD[icase]->GetMean();
+ test[specie]=1;
+ AliInfo(Form("numentries %d meanVertex %f rmsVertex %f", fhESD[icase]->GetEntries(), meanVertex, rmsVertex));
+ if (TMath::Abs(rmsVertex)>3) {
+ test[specie]=0.25;
+ AliDebug(1,Form("Vertex position resolution not good , rms= %f test=%f",
+ rmsVertex, test[specie])) ;
+ }
+ if (TMath::Abs(meanVertex)>3) {
+ test[specie]=0.25;
+ AliDebug(1,Form("Vertex position bad calibrated , Mean= %f test=%f",
+ meanVertex, test[specie])) ;
+ }
+ }
+ }
+ } // if (list->GetEntries() != 0
+ AliInfo(Form("Test Result = %f", test[specie])) ;
+ }
return test ;
}