From 3647765c8d7b9e1c78071f1dc4a983f1d6e9e9f5 Mon Sep 17 00:00:00 2001 From: masera Date: Wed, 28 May 2008 13:08:24 +0000 Subject: [PATCH] Added method SetTaskOffset in ITS checkers. Updated data members containing the number of booked histograms. Static TClonesArray added. Reference histogram for SDD-RAWS (W. Ferrarese) --- ITS/AliITSQAChecker.cxx | 35 +- ITS/AliITSQAChecker.h | 6 +- ITS/AliITSQADataMakerRec.cxx | 4 +- ITS/AliITSQADataMakerSim.cxx | 3 +- ITS/AliITSQASDDChecker.cxx | 115 +++-- ITS/AliITSQASDDChecker.h | 9 +- ITS/AliITSQASDDDataMakerRec.cxx | 81 ++-- ITS/AliITSQASDDDataMakerRec.h | 6 +- ITS/AliITSQASDDDataMakerSim.cxx | 46 +- ITS/AliITSQASDDDataMakerSim.h | 10 +- ITS/AliITSQASPDChecker.cxx | 13 +- ITS/AliITSQASPDChecker.h | 8 +- ITS/AliITSQASPDDataMakerRec.cxx | 171 ++++---- ITS/AliITSQASPDDataMakerRec.h | 10 +- ITS/AliITSQASPDDataMakerSim.cxx | 44 +- ITS/AliITSQASPDDataMakerSim.h | 10 +- ITS/AliITSQASSDChecker.cxx | 11 +- ITS/AliITSQASSDChecker.h | 9 +- ITS/AliITSQASSDDataMakerRec.cxx | 436 +++++++++---------- ITS/AliITSQASSDDataMakerRec.h | 12 +- ITS/AliITSQASSDDataMakerSim.cxx | 548 ++++++++++++------------ ITS/AliITSQASSDDataMakerSim.h | 8 +- ITS/QARef/SDD/Run0_999999999_v0_s0.root | Bin 0 -> 7629 bytes 23 files changed, 805 insertions(+), 790 deletions(-) create mode 100755 ITS/QARef/SDD/Run0_999999999_v0_s0.root diff --git a/ITS/AliITSQAChecker.cxx b/ITS/AliITSQAChecker.cxx index 47b95d7f620..12f0de1f6a7 100644 --- a/ITS/AliITSQAChecker.cxx +++ b/ITS/AliITSQAChecker.cxx @@ -18,11 +18,12 @@ // ***************************************** // Checks the quality assurance // by comparing with reference data -// W. Ferrarese Oct 2007 +// W.Ferrarese P.Cerello Mag 2008 // INFN Torino // --- ROOT system --- #include "TH1.h" +#include // --- AliRoot header files --- #include "AliITSQAChecker.h" @@ -70,33 +71,43 @@ AliITSQAChecker& AliITSQAChecker::operator = (const AliITSQAChecker& qac ) //____________________________________________________________________________ const Double_t AliITSQAChecker::Check(AliQA::ALITASK_t index, TObjArray * list) { - + // Super-basic check on the QA histograms on the input list: // look whether they are empty! Double_t spdCheck, sddCheck, ssdCheck; Double_t retval = 0.; if(fDet == 0 || fDet == 1) { AliDebug(1,"AliITSQAChecker::Create SPD Checker\n"); - if(!fSPDChecker) fSPDChecker = new AliITSQASPDChecker(); - spdCheck = fSPDChecker->Check(index, list, fSPDOffset); + if(!fSPDChecker) { + fSPDChecker = new AliITSQASPDChecker(); + } + fSPDChecker->SetTaskOffset(fSPDOffset); + spdCheck = fSPDChecker->Check(index, list); if(spdCheck>retval)retval = spdCheck; } if(fDet == 0 || fDet == 2) { AliDebug(1,"AliITSQAChecker::Create SDD Checker\n"); - if(!fSDDChecker) fSDDChecker = new AliITSQASDDChecker(); - sddCheck = fSDDChecker->Check(index, list, fSDDOffset); + if(!fSDDChecker) { + fSDDChecker = new AliITSQASDDChecker(); + } + fSDDChecker->SetTaskOffset(fSDDOffset); + sddCheck = fSDDChecker->Check(index, list); if(sddCheck>retval)retval = sddCheck; - } + } if(fDet == 0 || fDet == 3) { AliDebug(1,"AliITSQAChecker::Create SSD Checker\n"); - if(!fSSDChecker) fSSDChecker = new AliITSQASSDChecker(); - //AliInfo(Form("Number of monitored objects SSD: %d", list->GetEntries())); - ssdCheck = fSSDChecker->Check(index, list, fSSDOffset); - if(ssdCheck>retval)retval = ssdCheck; - } + if(!fSSDChecker) { + fSSDChecker = new AliITSQASSDChecker(); + AliInfo(Form("Number of monitored objects SSD: %d", list->GetEntries())); + } + fSSDChecker->SetTaskOffset(fSSDOffset); + ssdCheck = fSSDChecker->Check(index, list); + if(ssdCheck>retval)retval = ssdCheck; } // here merging part for common ITS QA result // + AliDebug(1,Form("AliITSQAChecker::QAChecker returned value is %f \n",retval)); return retval; + } diff --git a/ITS/AliITSQAChecker.h b/ITS/AliITSQAChecker.h index 58a2140052f..2731caaa6ac 100644 --- a/ITS/AliITSQAChecker.h +++ b/ITS/AliITSQAChecker.h @@ -10,7 +10,7 @@ // Checks the quality assurance. // By comparing with reference data // INFN Torino -// W. Ferrarese Oct 2007 +// W.Ferrarese P.Cerello Mag 2008 // @@ -35,7 +35,6 @@ friend class AliITSQASSDChecker; public: AliITSQAChecker(Bool_t kMode = kFALSE, Short_t subDet = 0, Short_t ldc = 0) ; // ctor - //AliITSQAChecker(Int_t SPDoffset, Int_t SDDoffset, Int_t SSDoffset, Bool_t kMode = kFALSE, Short_t subDet = 0, Short_t ldc = 0) ; AliITSQAChecker(const AliITSQAChecker& qac) : AliQACheckerBase(qac.GetName(), qac.GetTitle()), fkOnline(kFALSE), fDet(0), fLDC(0), fSPDOffset(0), fSDDOffset(0), fSSDOffset(0), fSPDChecker(0), fSDDChecker(0), fSSDChecker(0) {;} // cpy ctor AliITSQAChecker& operator = (const AliITSQAChecker& qac) ; //operator = virtual ~AliITSQAChecker() {;} // dtor @@ -48,9 +47,8 @@ public: virtual void SetTaskOffset(Int_t SPDOffset, Int_t SDDOffset, Int_t SSDOffset); protected: - + virtual const Double_t Check(AliQA::ALITASK_t /*index*/){return 0.5;} virtual const Double_t Check(AliQA::ALITASK_t index, TObjArray * list ) ; - virtual const Double_t Check(AliQA::ALITASK_t /*index*/, TObjArray * /*list*/, Int_t /*SubDetOffset*/) {return 0.;}; private: diff --git a/ITS/AliITSQADataMakerRec.cxx b/ITS/AliITSQADataMakerRec.cxx index 91a7d2f6400..13b271f9024 100644 --- a/ITS/AliITSQADataMakerRec.cxx +++ b/ITS/AliITSQADataMakerRec.cxx @@ -123,7 +123,9 @@ void AliITSQADataMakerRec::EndOfDetectorCycle(AliQA::TASKINDEX_t task, TObjArray AliQAChecker *qac = AliQAChecker::Instance(); AliITSQAChecker *qacb = (AliITSQAChecker *) qac->GetDetQAChecker(0); - qacb->SetTaskOffset(fSPDDataMaker->GetOffset(), fSDDDataMaker->GetOffset(), fSSDDataMaker->GetOffset()); //Setting the offset for the QAChecker list + if(fSubDetector == 0 ){ + qacb->SetTaskOffset(fSPDDataMaker->GetOffset(), fSDDDataMaker->GetOffset(), fSSDDataMaker->GetOffset()); //Setting the offset for the QAChecker list + } qac->Run( AliQA::kITS , task, list); //temporary skipping the checking } diff --git a/ITS/AliITSQADataMakerSim.cxx b/ITS/AliITSQADataMakerSim.cxx index 081d9e30c7b..93e7f0e6d1f 100644 --- a/ITS/AliITSQADataMakerSim.cxx +++ b/ITS/AliITSQADataMakerSim.cxx @@ -121,7 +121,8 @@ void AliITSQADataMakerSim::EndOfDetectorCycle(AliQA::TASKINDEX_t task, TObjArray AliQAChecker *qac = AliQAChecker::Instance(); AliITSQAChecker *qacb = (AliITSQAChecker *) qac->GetDetQAChecker(0); - qacb->SetTaskOffset(fSPDDataMaker->GetOffset(), fSDDDataMaker->GetOffset(), fSSDDataMaker->GetOffset()); //Setting the offset for the QAChecker list + if(fSubDetector == 0 ) + qacb->SetTaskOffset(fSPDDataMaker->GetOffset(), fSDDDataMaker->GetOffset(), fSSDDataMaker->GetOffset()); //Setting the offset for the QAChecker list qac->Run( AliQA::kITS , task, list); //temporary skipping the checking } diff --git a/ITS/AliITSQASDDChecker.cxx b/ITS/AliITSQASDDChecker.cxx index 7a839905a87..c49b7b54070 100644 --- a/ITS/AliITSQASDDChecker.cxx +++ b/ITS/AliITSQASDDChecker.cxx @@ -1,3 +1,4 @@ + /************************************************************************** * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * * * @@ -22,13 +23,19 @@ // INFN Torino // --- ROOT system --- +#include "TH1.h" +#include // --- AliRoot header files --- #include "AliITSQASDDChecker.h" #include "AliLog.h" +#include "AliCDBEntry.h" +#include "AliCDBManager.h" +#include "AliQACheckerBase.h" +#include "TSystem.h" -ClassImp(AliITSQASDDChecker) +ClassImp(AliITSQASDDChecker) //__________________________________________________________________ AliITSQASDDChecker& AliITSQASDDChecker::operator = (const AliITSQASDDChecker& qac ) { @@ -39,48 +46,86 @@ AliITSQASDDChecker& AliITSQASDDChecker::operator = (const AliITSQASDDChecker& qa } //__________________________________________________________________ -const Double_t AliITSQASDDChecker::Check(AliQA::ALITASK_t /*index*/, TObjArray * /*list*/, Int_t SubDetOffset) +const Double_t AliITSQASDDChecker::Check(AliQA::ALITASK_t index, TObjArray * list) { - AliDebug(1,Form("AliITSQASDDChecker called with offset: %d\n", SubDetOffset)); - /* - TObjArray * list - Double_t test = 0.0 ; - Int_t count = 0 ; - - if (list->GetEntries() == 0){ - test = 1. ; // nothing to check + AliDebug(1,Form("AliITSQASDDChecker called with offset: %d\n", fSubDetOffset)); + AliCDBEntry *QARefObj = AliCDBManager::Instance()->Get("ITS/QARef/SDD"); + if( !QARefObj){ + AliError("Calibration object retrieval failed! SDD will not be processed"); + return 1.; } - else { - TIter next(list) ; - TH1 * hdata ; - count = 0 ; - while ( (hdata = dynamic_cast(next())) ) { - if (hdata) { - Double_t rv = 0.; - if(hdata->GetEntries()>0)rv=1; - AliInfo(Form("%s -> %f", hdata->GetName(), rv)) ; - count++ ; - test += rv ; + + Double_t test = 0.0; + Int_t offset = 0; + + if(index==0){ //analizing RAWS + TH1F *ModPattern = (TH1F*)QARefObj->GetObject(); + if (list->GetEntries() == 0){ + test = 1. ; // nothing to check + } + else { + TIter next(list) ; + TH1 * hdata ; + for(offset =0;offset < fSubDetOffset; offset++){ + hdata = dynamic_cast(next()); } - else{ - AliError("Data type cannot be processed") ; + + while ( (hdata = dynamic_cast(next())) && offset >= fSubDetOffset){ + if (hdata) { + if(offset == fSubDetOffset){ //ModPattern check + if ( hdata->Integral() == 0 ) { + AliWarning(Form("Spectrum %s is empty", hdata->GetName())) ; + return 0.5 ; + } + test = hdata->Chi2Test(ModPattern,"UU,p"); + } // ModPattern check + } + else{ + AliError("Data type cannot be processed") ; + } + offset++; + } //SDD histo + + while ( (hdata = dynamic_cast(next()))) { + offset++; } + } //else entries !=0 + AliInfo(Form("Test Result for RAWS = %f", test)) ; + } // if(index==0) + + if( index==2){ //analizing RECP + //printf("analizing recp, offset %d \n",fSubDetOffset); + if (list->GetEntries() == 0){ + test = 1. ; // nothing to check } - 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 + else { + TIter next(list) ; + TH1 * hdata ; + for(offset =0;offset < fSubDetOffset; offset++){ + hdata = dynamic_cast(next()); // magari TIter++ ?? + //printf("Skipping histo %s, offset %d \n",hdata->GetName(),fSubDetOffset); } - else { - test /= count ; + + while ( (hdata = dynamic_cast(next())) && offset >= fSubDetOffset ){ + if (hdata) { // offset=9 ModPatternRP + //printf("Treating histo %s, offset %d \n",hdata->GetName(),fSubDetOffset); + if( offset == 9 && hdata->GetEntries()>0)test = 0.1; + } + else{ + AliError("Data type cannot be processed") ; + } + offset++; } - } - } + } // GetEntries loop + AliInfo(Form("Test Result for RECP = %f", test)) ; + } // if(index==2) loop - AliInfo(Form("Test Result = %f", test)) ; - return test ; - */ - return 0.; + return test; } +//__________________________________________________________________ +void AliITSQASDDChecker::SetTaskOffset(Int_t TaskOffset) +{ + fSubDetOffset = TaskOffset; +} diff --git a/ITS/AliITSQASDDChecker.h b/ITS/AliITSQASDDChecker.h index a1680e116de..81d84cc0582 100644 --- a/ITS/AliITSQASDDChecker.h +++ b/ITS/AliITSQASDDChecker.h @@ -27,14 +27,15 @@ class AliITSLoader ; class AliITSQASDDChecker: public TObject { public: - AliITSQASDDChecker() {;} // ctor + AliITSQASDDChecker():fSubDetOffset(0) {;} // ctor AliITSQASDDChecker& operator = (const AliITSQASDDChecker& qac) ; //operator = virtual ~AliITSQASDDChecker() {;} // dtor - const Double_t Check(AliQA::ALITASK_t /*index*/, TObjArray * /*list*/, Int_t SubDetOffset); + const Double_t Check(AliQA::ALITASK_t index, TObjArray * list); + void SetTaskOffset(Int_t TaskOffset); private: - AliITSQASDDChecker(const AliITSQASDDChecker& /*qac*/):TObject() {;} // cpy ctor - + AliITSQASDDChecker(const AliITSQASDDChecker& /*qac*/):TObject(),fSubDetOffset(0) {;} // cpy ctor + Int_t fSubDetOffset; // checking operation starting point ClassDef(AliITSQASDDChecker,1) // description }; diff --git a/ITS/AliITSQASDDDataMakerRec.cxx b/ITS/AliITSQASDDDataMakerRec.cxx index af18f0ceb80..7b93d2a24a4 100644 --- a/ITS/AliITSQASDDDataMakerRec.cxx +++ b/ITS/AliITSQASDDDataMakerRec.cxx @@ -55,8 +55,7 @@ TObject(), fAliITSQADataMakerRec(aliITSQADataMakerRec), fkOnline(kMode), fLDC(ldc), -fSDDhRaws(0), -fSDDhRecs(0), +fSDDhTask(0), fGenOffset(0), fDDLModuleMap(0) { @@ -72,8 +71,7 @@ TObject(), fAliITSQADataMakerRec(qadm.fAliITSQADataMakerRec), fkOnline(qadm.fkOnline), fLDC(qadm.fLDC), -fSDDhRaws(qadm.fSDDhRaws), -fSDDhRecs(qadm.fSDDhRecs), +fSDDhTask(qadm.fSDDhTask), fGenOffset(qadm.fGenOffset), fDDLModuleMap(0) { @@ -149,14 +147,14 @@ void AliITSQASDDDataMakerRec::InitRaws() h0->GetYaxis()->SetTitle("Counts"); fAliITSQADataMakerRec->Add2RawsList((new TH1D(*h0)),0+fGenOffset); delete h0; - fSDDhRaws++; + fSDDhTask++; if(fLDC==0 || fLDC==1 || fLDC==2){ TH1D *h1 = new TH1D("LadPatternL3","Ladder pattern L3",14,0.5,14.5); h1->GetXaxis()->SetTitle("Ladder Number on Lay3"); h1->GetYaxis()->SetTitle("Counts"); fAliITSQADataMakerRec->Add2RawsList((new TH1D(*h1)),1+fGenOffset); delete h1; - fSDDhRaws++; + fSDDhTask++; } if(fLDC==0 || fLDC==3 || fLDC==4){ TH1D *h2 = new TH1D("LadPatternL4","Ladder pattern L4",22,0.5,22.5); @@ -164,7 +162,7 @@ void AliITSQASDDDataMakerRec::InitRaws() h2->GetYaxis()->SetTitle("Counts"); fAliITSQADataMakerRec->Add2RawsList((new TH1D(*h2)),2+fGenOffset); delete h2; - fSDDhRaws++; + fSDDhTask++; } if(fLDC==0 || fLDC==1 || fLDC==2){ for(Int_t i=1; i<=fgkLADDonLAY3; i++) { @@ -174,7 +172,7 @@ void AliITSQASDDDataMakerRec::InitRaws() h3->GetYaxis()->SetTitle("Counts"); fAliITSQADataMakerRec->Add2RawsList((new TH1D(*h3)),i-1+3+fGenOffset); delete h3; - fSDDhRaws++; + fSDDhTask++; } } if(fLDC==0 || fLDC==3 || fLDC==4){ @@ -185,7 +183,7 @@ void AliITSQASDDDataMakerRec::InitRaws() h4->GetYaxis()->SetTitle("Counts"); fAliITSQADataMakerRec->Add2RawsList((new TH1D(*h4)),i-1+17+fGenOffset); delete h4; - fSDDhRaws++; + fSDDhTask++; } } @@ -195,7 +193,7 @@ void AliITSQASDDDataMakerRec::InitRaws() if(fkOnline) { indexlast = 0; index1 = 0; - indexlast1 = fSDDhRaws; + indexlast1 = fSDDhTask; indexlast2 = 0; char *hname[3]; for(Int_t i=0; i<3; i++) hname[i]= new char[50]; @@ -211,7 +209,7 @@ void AliITSQASDDDataMakerRec::InitRaws() fAliITSQADataMakerRec->Add2RawsList((new TProfile2D(*fModuleChargeMapFSE)),indexlast1 + index1 + fGenOffset); delete fModuleChargeMapFSE; - fSDDhRaws++; + fSDDhTask++; index1++; indexlast2 = indexlast1 + index1; } @@ -228,7 +226,7 @@ void AliITSQASDDDataMakerRec::InitRaws() fAliITSQADataMakerRec->Add2RawsList((new TProfile2D(*fModuleChargeMap)),indexlast1 + index1 + fGenOffset); delete fModuleChargeMap; - fSDDhRaws++; + fSDDhTask++; index1++; indexlast2 = indexlast1 + index1; } @@ -236,8 +234,7 @@ void AliITSQASDDDataMakerRec::InitRaws() } // kONLINE - - AliDebug(1,Form("%d SDD Raws histograms booked\n",fSDDhRaws)); + AliDebug(1,Form("%d SDD Raws histograms booked\n",fSDDhTask)); } @@ -253,22 +250,6 @@ void AliITSQASDDDataMakerRec::MakeRaws(AliRawReader* rawReader) AliDebug(1,"entering MakeRaws\n"); rawReader->SelectEquipment(17,fgkeqOffset,fgkeqOffset + fgkDDLidRange); - /* - if(rawReader->GetEventId()!=fEvtId){ - TFile *DAoutput = new TFile::Open(filename); - TH1F *BLhisto; - for(Int_t imod=0; imodGet("BLhistoname[imod]"); - mean = BLhisto->take mean; - fAliITSQADataMakerRec->GetRawsData(i+1887)->Fill(mean, imod); - Noisehisto....; - Vdrifthisto...; - histo....; - } - } - fEvtId==rawReader->GetEventId(); - */ - rawReader->Reset(); AliITSRawStreamSDD s(rawReader); s.SetDDLModuleMap(fDDLModuleMap); @@ -278,7 +259,7 @@ void AliITSQASDDDataMakerRec::MakeRaws(AliRawReader* rawReader) if(fkOnline) { for(Int_t moduleSDD =0; moduleSDD 39 + index) fAliITSQADataMakerRec->GetRawsData(39 + index +fGenOffset)->Reset(); + if(fSDDhTask > 39 + index) fAliITSQADataMakerRec->GetRawsData(39 + index +fGenOffset)->Reset(); index++; } } @@ -332,7 +313,7 @@ void AliITSQASDDDataMakerRec::MakeRaws(AliRawReader* rawReader) } if(fkOnline) { - if(fSDDhRaws > 39 + index1) { + if(fSDDhTask > 39 + index1) { ((TProfile2D *)(fAliITSQADataMakerRec->GetRawsData(39 + index1 +fGenOffset)))->Fill(coord2, coord1, signal); ((TProfile2D *)(fAliITSQADataMakerRec->GetRawsData(39 + index1 + 260*2 +fGenOffset)))->Fill(coord2, coord1, signal); } @@ -340,9 +321,8 @@ void AliITSQASDDDataMakerRec::MakeRaws(AliRawReader* rawReader) cnt++; if(!(cnt%10000)) AliDebug(1,Form(" %d raw digits read",cnt)); } - AliDebug(1,Form("Event completed, %d raw digits read",cnt)); - -} + AliDebug(1,Form("Event completed, %d raw digits read",cnt)); + } //____________________________________________________________________________ void AliITSQASDDDataMakerRec::InitRecPoints() @@ -355,14 +335,14 @@ void AliITSQASDDDataMakerRec::InitRecPoints() h0->GetYaxis()->SetTitle("Entries"); fAliITSQADataMakerRec->Add2RecPointsList((new TH1F(*h0)), 0 +fGenOffset); delete h0; - fSDDhRecs++; + fSDDhTask++; TH1F *h1 = new TH1F("Lay4TotCh","Layer 4 total charge",1000,-0.5, 499.5); h1->GetXaxis()->SetTitle("ADC value"); h1->GetYaxis()->SetTitle("Entries"); fAliITSQADataMakerRec->Add2RecPointsList((new TH1F(*h1)), 1 +fGenOffset); delete h1; - fSDDhRecs++; + fSDDhTask++; char hisnam[50]; @@ -371,7 +351,7 @@ void AliITSQASDDDataMakerRec::InitRecPoints() TH1F *h2 = new TH1F(hisnam,hisnam,1000,-0.5, 499.5); fAliITSQADataMakerRec->Add2RecPointsList((new TH1F(*h2)),i+1 +fGenOffset); delete h2; - fSDDhRecs++; + fSDDhTask++; } for(Int_t i=1; i<=4; i++){ @@ -379,7 +359,7 @@ void AliITSQASDDDataMakerRec::InitRecPoints() TH1F *h3 = new TH1F(hisnam,hisnam,1000,-0.5, 499.5); fAliITSQADataMakerRec->Add2RecPointsList((new TH1F(*h3)),i+4 +fGenOffset); delete h3; - fSDDhRecs++; + fSDDhTask++; } TH1F *h4 = new TH1F("ModPatternRP","Modules pattern RP",fgknSDDmodules,239.5,499.5); @@ -387,31 +367,31 @@ void AliITSQASDDDataMakerRec::InitRecPoints() h4->GetYaxis()->SetTitle("Entries"); fAliITSQADataMakerRec->Add2RecPointsList((new TH1F(*h4)),9 +fGenOffset); delete h4; - fSDDhRecs++; + fSDDhTask++; TH1F *h5 = new TH1F("ModPatternL3 RP","Ladder pattern L3 RP",14,0.5,14.5); h5->GetXaxis()->SetTitle("Ladder #, Layer 3"); h5->GetYaxis()->SetTitle("Entries"); fAliITSQADataMakerRec->Add2RecPointsList((new TH1F(*h5)),10 +fGenOffset); delete h5; - fSDDhRecs++; + fSDDhTask++; TH1F *h6 = new TH1F("ModPatternL4 RP","Ladder pattern L4 RP",22,0.5,22.5); h6->GetXaxis()->SetTitle("Ladder #, Layer 4"); h6->GetYaxis()->SetTitle("Entries"); fAliITSQADataMakerRec->Add2RecPointsList((new TH1F(*h6)),11 +fGenOffset); delete h6; - fSDDhRecs++; + fSDDhTask++; TH2F *h7 = new TH2F("Local Coord Distrib","Local Coord Distrib",1000,-4,4,1000,-4,4); h7->GetXaxis()->SetTitle("X local coord, drift, cm"); h7->GetYaxis()->SetTitle("Z local coord, anode, cm"); fAliITSQADataMakerRec->Add2RecPointsList((new TH2F(*h7)),12 +fGenOffset); delete h7; - fSDDhRecs++; + fSDDhTask++; TH2F *h8 = new TH2F("Global Coord Distrib","Global Coord Distrib",6000,-30,30,6000,-30,30); h8->GetYaxis()->SetTitle("Y glob coord, cm"); h8->GetXaxis()->SetTitle("X glob coord, cm"); fAliITSQADataMakerRec->Add2RecPointsList((new TH2F(*h8)),13 +fGenOffset); delete h8; - fSDDhRecs++; + fSDDhTask++; for(Int_t iLay=0; iLay<=1; iLay++){ sprintf(hisnam,"hr_Layer%d",iLay+3); @@ -421,7 +401,7 @@ void AliITSQASDDDataMakerRec::InitRecPoints() h9->GetYaxis()->SetTitle("Entries"); fAliITSQADataMakerRec->Add2RecPointsList((new TH1F(*h9)),iLay+14 +fGenOffset); delete h9; - fSDDhRecs++; + fSDDhTask++; } for(Int_t iLay=0; iLay<=1; iLay++){ @@ -432,10 +412,10 @@ void AliITSQASDDDataMakerRec::InitRecPoints() h10->GetYaxis()->SetTitle("Entries"); fAliITSQADataMakerRec->Add2RecPointsList((new TH1F(*h10)),iLay+16 +fGenOffset); delete h10; - fSDDhRecs++; + fSDDhTask++; } - AliDebug(1,Form("%d SDD Recs histograms booked\n",fSDDhRecs)); + AliDebug(1,Form("%d SDD Recs histograms booked\n",fSDDhTask)); } //____________________________________________________________________________ @@ -448,7 +428,8 @@ void AliITSQASDDDataMakerRec::MakeRecPoints(TTree * clustersTree) AliError("can't get the branch with the ITS clusters !"); return; } - TClonesArray * recpoints = new TClonesArray("AliITSRecPoint") ; + static TClonesArray statRecpoints("AliITSRecPoint") ; + TClonesArray *recpoints = &statRecpoints; branchRecP->SetAddress(&recpoints); Int_t npoints = 0; Float_t cluglo[3]={0.,0.,0.}; @@ -484,8 +465,6 @@ void AliITSQASDDDataMakerRec::MakeRecPoints(TTree * clustersTree) } } } - recpoints->Delete(); - delete recpoints; - + statRecpoints.Clear(); } diff --git a/ITS/AliITSQASDDDataMakerRec.h b/ITS/AliITSQASDDDataMakerRec.h index 70b44d602ea..e3078fa4587 100644 --- a/ITS/AliITSQASDDDataMakerRec.h +++ b/ITS/AliITSQASDDDataMakerRec.h @@ -37,9 +37,8 @@ public: virtual void StartOfDetectorCycle(); virtual void EndOfDetectorCycle(AliQA::TASKINDEX_t task, TObjArray * list); virtual ~AliITSQASDDDataMakerRec(); // dtor - Int_t Raws() { return fSDDhRaws; } - Int_t Recs() { return fSDDhRecs; } Int_t GetOffset() { return fGenOffset; } + Int_t GetTaskHisto() { return fSDDhTask; } private: @@ -56,8 +55,7 @@ private: AliITSQADataMakerRec *fAliITSQADataMakerRec;//pointer to the main ctor Bool_t fkOnline; //online (1) or offline (0) use Int_t fLDC; //LDC number (0 for offline, 1 to 4 for online) - Int_t fSDDhRaws; // number of histo booked for Raws SDD - Int_t fSDDhRecs; // number of histo booked for Recs SDD + Int_t fSDDhTask; // number of histo booked for each Task SDD Int_t fGenOffset; // qachecking offset AliITSDDLModuleMapSDD *fDDLModuleMap;// SDD Detector configuration for the decoding /* diff --git a/ITS/AliITSQASDDDataMakerSim.cxx b/ITS/AliITSQASDDDataMakerSim.cxx index 1de0249737d..118f2f88066 100644 --- a/ITS/AliITSQASDDDataMakerSim.cxx +++ b/ITS/AliITSQASDDDataMakerSim.cxx @@ -51,9 +51,7 @@ ClassImp(AliITSQASDDDataMakerSim) AliITSQASDDDataMakerSim::AliITSQASDDDataMakerSim(AliITSQADataMakerSim *aliITSQADataMakerSim) : TObject(), fAliITSQADataMakerSim(aliITSQADataMakerSim), -fSDDhDigits(0), -fSDDhSDigits(0), -fSDDhHits(0), +fSDDhTask(0), fGenOffset(0) { //ctor used to discriminate OnLine-Offline analysis @@ -63,9 +61,7 @@ fGenOffset(0) AliITSQASDDDataMakerSim::AliITSQASDDDataMakerSim(const AliITSQASDDDataMakerSim& qadm) : TObject(), fAliITSQADataMakerSim(qadm.fAliITSQADataMakerSim), -fSDDhDigits(qadm.fSDDhDigits), -fSDDhSDigits(qadm.fSDDhSDigits), -fSDDhHits(qadm.fSDDhHits), +fSDDhTask(qadm.fSDDhTask), fGenOffset(qadm.fGenOffset) { //copy ctor @@ -102,28 +98,28 @@ void AliITSQASDDDataMakerSim::InitDigits() { // Initialization for DIGIT data - SDD - fGenOffset = (fAliITSQADataMakerSim->fDigitsQAList)->GetEntries(); - //fSDDhDigits must be incremented by one unit every time a histogram is ADDED to the QA List + //fSDDhTask must be incremented by one unit every time a histogram is ADDED to the QA List TH1F* h0=new TH1F("SDD DIGITS Module Pattern","SDD DIGITS Module Pattern",260,239.5,499.5); //hmod h0->GetXaxis()->SetTitle("SDD Module Number"); h0->GetYaxis()->SetTitle("# DIGITS"); fAliITSQADataMakerSim->Add2DigitsList(h0,fGenOffset); - fSDDhDigits ++; + fSDDhTask ++; TH1F* h1=new TH1F("SDD Anode Distribution","DIGITS Anode Distribution",512,-0.5,511.5); //hanocc h1->GetXaxis()->SetTitle("Anode Number"); h1->GetYaxis()->SetTitle("# DIGITS"); fAliITSQADataMakerSim->Add2DigitsList(h1,1+fGenOffset); - fSDDhDigits ++; + fSDDhTask ++; TH1F* h2=new TH1F("SDD Tbin Distribution","DIGITS Tbin Distribution",256,-0.5,255.5); //htbocc h2->GetXaxis()->SetTitle("Tbin Number"); h2->GetYaxis()->SetTitle("# DIGITS"); fAliITSQADataMakerSim->Add2DigitsList(h2,2+fGenOffset); - fSDDhDigits ++; + fSDDhTask ++; TH1F* h3=new TH1F("SDD ADC Counts Distribution","DIGITS ADC Counts Distribution",200,0.,1024.); //hsig h3->GetXaxis()->SetTitle("ADC Value"); h3->GetYaxis()->SetTitle("# DIGITS"); fAliITSQADataMakerSim->Add2DigitsList(h3,3+fGenOffset); - fSDDhDigits ++; - AliDebug(1,Form("%d SDD Digits histograms booked\n",fSDDhDigits)); + fSDDhTask ++; + AliDebug(1,Form("%d SDD Digits histograms booked\n",fSDDhTask)); } //____________________________________________________________________________ @@ -156,29 +152,29 @@ void AliITSQASDDDataMakerSim::InitSDigits() { // Initialization for SDIGIT data - SDD - fGenOffset = (fAliITSQADataMakerSim->fSDigitsQAList)->GetEntries(); - //fSDDhSDigits must be incremented by one unit every time a histogram is ADDED to the QA List + //fSDDhTask must be incremented by one unit every time a histogram is ADDED to the QA List TH1F* h0=new TH1F("SDD SDIGITS Module Pattern","SDIGITS SDD Module Pattern",260,239.5,499.5); //hmod h0->GetXaxis()->SetTitle("SDD Module Number"); h0->GetYaxis()->SetTitle("# SDIGITS"); fAliITSQADataMakerSim->Add2SDigitsList(h0,fGenOffset); - fSDDhSDigits ++; + fSDDhTask ++; TH1F* h1=new TH1F("SDD Anode Distribution","SDIGITS Anode Distribution",512,-0.5,511.5); //hanocc h1->GetXaxis()->SetTitle("Anode Number"); h1->GetYaxis()->SetTitle("# SDIGITS"); fAliITSQADataMakerSim->Add2SDigitsList(h1,1+fGenOffset); - fSDDhSDigits ++; + fSDDhTask ++; TH1F* h2=new TH1F("SDD Tbin Distribution","SDIGITS Tbin Distribution",256,-0.5,255.5); //htbocc h2->GetXaxis()->SetTitle("Tbin Number"); h2->GetYaxis()->SetTitle("# SDIGITS"); fAliITSQADataMakerSim->Add2SDigitsList(h2,2+fGenOffset); - fSDDhSDigits ++; + fSDDhTask ++; TH1F* h3=new TH1F("SDD ADC Counts Distribution","SDIGITS ADC Counts Distribution",200,0.,1024.); //hsig h3->GetXaxis()->SetTitle("ADC Value"); h3->GetYaxis()->SetTitle("# SDIGITS"); fAliITSQADataMakerSim->Add2SDigitsList(h3,3+fGenOffset); - fSDDhSDigits ++; + fSDDhTask ++; - AliDebug(1,Form("%d SDD SDigits histograms booked\n",fSDDhSDigits)); + AliDebug(1,Form("%d SDD SDigits histograms booked\n",fSDDhTask)); } //____________________________________________________________________________ @@ -227,30 +223,30 @@ void AliITSQASDDDataMakerSim::InitHits() { // Initialization for HITS data - SDD - fGenOffset = (fAliITSQADataMakerSim->fHitsQAList)->GetEntries(); - //fSDDhHits must be incremented by one unit every time a histogram is ADDED to the QA List + //fSDDhTask must be incremented by one unit every time a histogram is ADDED to the QA List //printf("AliITSQASDDDataMakerSim::InitHits called \n"); TH1F *h0=new TH1F("SDD HITS Module Pattern","SDD HITS Module Pattern",260,239.5,499.5); h0->GetXaxis()->SetTitle("SDD Module Number"); h0->GetYaxis()->SetTitle("# HITS"); fAliITSQADataMakerSim->Add2HitsList(h0,fGenOffset); - fSDDhHits ++; + fSDDhTask ++; TH1F *h1=new TH1F("SDD HIT lenght along local Y Coord","HIT lenght along local Y Coord",200,0.,350.); h1->GetXaxis()->SetTitle("HIT lenght (um)"); h1->GetYaxis()->SetTitle("# HITS"); fAliITSQADataMakerSim->Add2HitsList(h1,1+fGenOffset); - fSDDhHits ++; + fSDDhTask ++; TH1F *h2=new TH1F("SDD HIT lenght along local Y Coord - Zoom","SDD HIT lenght along local Y Coord - Zoom",200,250.,350.); h2->GetXaxis()->SetTitle("HIT lenght (um)"); h2->GetYaxis()->SetTitle("# HITS"); fAliITSQADataMakerSim->Add2HitsList(h2,2+fGenOffset); - fSDDhHits ++; + fSDDhTask ++; TH1F *h3=new TH1F("SDD Deposited Energy Distribution (loc Y > 200um)","SDD HITS Deposited Energy Distribution (loc Y > 200um)",200,0.,350.); h3->GetXaxis()->SetTitle("ADC counts???"); h3->GetYaxis()->SetTitle("# HITS"); fAliITSQADataMakerSim->Add2HitsList(h3,3+fGenOffset); - fSDDhHits ++; - //printf("%d SDD Hits histograms booked\n",fSDDhHits); - AliDebug(1,Form("%d SDD Hits histograms booked\n",fSDDhHits)); + fSDDhTask ++; + //printf("%d SDD Hits histograms booked\n",fSDDhTask); + AliDebug(1,Form("%d SDD Hits histograms booked\n",fSDDhTask)); } //____________________________________________________________________________ diff --git a/ITS/AliITSQASDDDataMakerSim.h b/ITS/AliITSQASDDDataMakerSim.h index d45ff778aca..844b9f3094a 100644 --- a/ITS/AliITSQASDDDataMakerSim.h +++ b/ITS/AliITSQASDDDataMakerSim.h @@ -40,19 +40,15 @@ public: virtual void MakeDigits(TTree * digits); virtual void MakeSDigits(TTree * sdigits); virtual void MakeHits(TTree * hits); - const Int_t Digits() { return fSDDhDigits; } - const Int_t SDigits() { return fSDDhSDigits; } - const Int_t Hits() { return fSDDhHits; } Int_t GetOffset() { return fGenOffset; } + Int_t GetTaskHisto() { return fSDDhTask; } private: AliITSQADataMakerSim *fAliITSQADataMakerSim;//pointer to the main ctor - Int_t fSDDhDigits; //number of booked SDD Digits histograms; - Int_t fSDDhSDigits; //number of booked SDD SDigits histograms; - Int_t fSDDhHits; //number of booked SDD Hits histograms; + Int_t fSDDhTask; //number of booked SDD histograms for each task; Int_t fGenOffset; // qachecking offset - ClassDef(AliITSQASDDDataMakerSim,1) // description + ClassDef(AliITSQASDDDataMakerSim,2) // description }; diff --git a/ITS/AliITSQASPDChecker.cxx b/ITS/AliITSQASPDChecker.cxx index b47f84401d4..9250ae95d77 100644 --- a/ITS/AliITSQASPDChecker.cxx +++ b/ITS/AliITSQASPDChecker.cxx @@ -28,7 +28,6 @@ #include "AliLog.h" ClassImp(AliITSQASPDChecker) - //__________________________________________________________________ AliITSQASPDChecker& AliITSQASPDChecker::operator = (const AliITSQASPDChecker& qac ) { @@ -38,10 +37,11 @@ AliITSQASPDChecker& AliITSQASPDChecker::operator = (const AliITSQASPDChecker& qa return *this; } + //__________________________________________________________________ -const Double_t AliITSQASPDChecker::Check(AliQA::ALITASK_t /*index*/, TObjArray * /*list*/, Int_t SubDetOffset) +const Double_t AliITSQASPDChecker::Check(AliQA::ALITASK_t /*index*/, TObjArray * /*list*/) { - AliDebug(1,Form("AliITSQASPDChecker called with offset: %d\n", SubDetOffset)); + AliDebug(1,Form("AliITSQASPDChecker called with offset: %d\n", fSubDetOffset)); /* TObjArray * list @@ -84,3 +84,10 @@ const Double_t AliITSQASPDChecker::Check(AliQA::ALITASK_t /*index*/, TObjArray * */ return 0.; } + + +//__________________________________________________________________ +void AliITSQASPDChecker::SetTaskOffset(Int_t TaskOffset) +{ + fSubDetOffset = TaskOffset; +} diff --git a/ITS/AliITSQASPDChecker.h b/ITS/AliITSQASPDChecker.h index d1e0268857b..47e1fff73db 100644 --- a/ITS/AliITSQASPDChecker.h +++ b/ITS/AliITSQASPDChecker.h @@ -27,13 +27,15 @@ class AliITSLoader ; class AliITSQASPDChecker: public TObject { public: - AliITSQASPDChecker() {;} // ctor + AliITSQASPDChecker():fSubDetOffset(0) {;} // ctor AliITSQASPDChecker& operator = (const AliITSQASPDChecker& qac) ; //operator = virtual ~AliITSQASPDChecker() {;} // dtor - const Double_t Check(AliQA::ALITASK_t index, TObjArray * list, Int_t SubDetOffset); + const Double_t Check(AliQA::ALITASK_t index, TObjArray * list); + void SetTaskOffset(Int_t TaskOffset); private: - AliITSQASPDChecker(const AliITSQASPDChecker& /*qac*/):TObject(){;} // cpy ctor + AliITSQASPDChecker(const AliITSQASPDChecker& /*qac*/):TObject(),fSubDetOffset(0){;} // cpy ctor + Int_t fSubDetOffset; // checking operation starting point ClassDef(AliITSQASPDChecker,1) // description }; diff --git a/ITS/AliITSQASPDDataMakerRec.cxx b/ITS/AliITSQASPDDataMakerRec.cxx index 709bb35b15f..f0de9a0ab42 100644 --- a/ITS/AliITSQASPDDataMakerRec.cxx +++ b/ITS/AliITSQASPDDataMakerRec.cxx @@ -49,8 +49,7 @@ TObject(), fAliITSQADataMakerRec(aliITSQADataMakerRec), fkOnline(kMode), fLDC(ldc), -fSPDhRaws(0), -fSPDhRecs(0), +fSPDhTask(0), fGenOffset(0), fAdvLogger(aliITSRawStreamSPDErrorLog) { @@ -63,8 +62,7 @@ TObject(), fAliITSQADataMakerRec(qadm.fAliITSQADataMakerRec), fkOnline(qadm.fkOnline), fLDC(qadm.fLDC), -fSPDhRaws(qadm.fSPDhRaws), -fSPDhRecs(qadm.fSPDhRecs), +fSPDhTask(qadm.fSPDhTask), fGenOffset(qadm.fGenOffset), fAdvLogger(qadm.fAdvLogger) { @@ -116,8 +114,8 @@ void AliITSQASPDDataMakerRec::InitRaws() TH1F *hlayer = new TH1F("LayPattern_SPD","Layer map - SPD",6,0.,6.); hlayer->GetXaxis()->SetTitle("Layer number"); hlayer->GetYaxis()->SetTitle("Entries"); - fAliITSQADataMakerRec->Add2RawsList(hlayer,fSPDhRaws+fGenOffset); - fSPDhRaws++; + fAliITSQADataMakerRec->Add2RawsList(hlayer,fSPDhTask+fGenOffset); + fSPDhTask++; TH1F **hmod = new TH1F*[2]; TH2F **hhitMap = new TH2F*[20]; @@ -128,8 +126,8 @@ void AliITSQASPDDataMakerRec::InitRaws() hmod[iLay]=new TH1F(name,title,fgknSPDmodules,0,fgknSPDmodules); hmod[iLay]->GetXaxis()->SetTitle("Module number"); hmod[iLay]->GetYaxis()->SetTitle("Entries"); - fAliITSQADataMakerRec->Add2RawsList(hmod[iLay], fSPDhRaws +fGenOffset); - fSPDhRaws++; + fAliITSQADataMakerRec->Add2RawsList(hmod[iLay], fSPDhTask +fGenOffset); + fSPDhTask++; } fAdvLogger = new AliITSRawStreamSPDErrorLog(); for (Int_t iDDL=0; iDDL<20; iDDL++) { @@ -138,15 +136,15 @@ void AliITSQASPDDataMakerRec::InitRaws() hhitMap[iDDL]=new TH2F(name,title,320,0,10*32,1536,0,6*256); hhitMap[iDDL]->GetXaxis()->SetTitle("Column"); hhitMap[iDDL]->GetYaxis()->SetTitle("Row"); - fAliITSQADataMakerRec->Add2RawsList(hhitMap[iDDL], fSPDhRaws +fGenOffset); - fSPDhRaws++; + fAliITSQADataMakerRec->Add2RawsList(hhitMap[iDDL], fSPDhTask +fGenOffset); + fSPDhTask++; sprintf(name,"Errors_SPD_DDL%d",iDDL+1); sprintf(title,"Error codes - SPD DDL %d",iDDL+1); herrors[iDDL] = new TH1F (name,title,15,0,15); herrors[iDDL]->SetXTitle("Error Code"); herrors[iDDL]->SetYTitle("Nr of errors"); - fAliITSQADataMakerRec->Add2RawsList(herrors[iDDL], fSPDhRaws +fGenOffset); - fSPDhRaws++; + fAliITSQADataMakerRec->Add2RawsList(herrors[iDDL], fSPDhTask +fGenOffset); + fSPDhTask++; } TH1F** hMultSPDhits = new TH1F*[2]; @@ -156,18 +154,17 @@ void AliITSQASPDDataMakerRec::InitRaws() hMultSPDhits[iLay]=new TH1F(name,title,200,0.,200.); hMultSPDhits[iLay]->GetXaxis()->SetTitle("Hit multiplicity"); hMultSPDhits[iLay]->GetYaxis()->SetTitle("Entries"); - fAliITSQADataMakerRec->Add2RawsList(hMultSPDhits[iLay], fSPDhRaws+fGenOffset); - fSPDhRaws++; + fAliITSQADataMakerRec->Add2RawsList(hMultSPDhits[iLay], fSPDhTask+fGenOffset); + fSPDhTask++; } TH2F *hMultSPDhits2MultSPDhits1 = new TH2F("HitMultCorrelation_SPD","Hit multiplicity correlation - SPD",200,0.,200.,200,0.,200.); hMultSPDhits2MultSPDhits1->GetXaxis()->SetTitle("Hit multiplicity (Layer 1)"); hMultSPDhits2MultSPDhits1->GetYaxis()->SetTitle("Hit multiplicity (Layer 2)"); - fAliITSQADataMakerRec->Add2RawsList(hMultSPDhits2MultSPDhits1, fSPDhRaws+fGenOffset); - fSPDhRaws++; + fAliITSQADataMakerRec->Add2RawsList(hMultSPDhits2MultSPDhits1, fSPDhTask+fGenOffset); + fSPDhTask++; - AliDebug(1,Form("%d SPD Raws histograms booked\n",fSPDhRaws)); - + AliDebug(1,Form("%d SPD Raws histograms booked\n",fSPDhTask)); } @@ -236,8 +233,8 @@ void AliITSQASPDDataMakerRec::InitRecPoints() TH1F* hlayer= new TH1F("LayPattern_SPD","Layer map - SPD",6,0.,6.); hlayer->GetXaxis()->SetTitle("Layer number"); hlayer->GetYaxis()->SetTitle("Entries"); - fAliITSQADataMakerRec->Add2RecPointsList(hlayer, fSPDhRecs+fGenOffset); - fSPDhRecs++; + fAliITSQADataMakerRec->Add2RecPointsList(hlayer, fSPDhTask+fGenOffset); + fSPDhTask++; TH1F** hmod = new TH1F*[2]; TH1F** hxl = new TH1F*[2]; @@ -262,94 +259,94 @@ void AliITSQASPDDataMakerRec::InitRecPoints() hmod[iLay]=new TH1F(name,title,fgknSPDmodules,0,fgknSPDmodules); hmod[iLay]->GetXaxis()->SetTitle("Module number"); hmod[iLay]->GetYaxis()->SetTitle("Entries"); - fAliITSQADataMakerRec->Add2RecPointsList(hmod[iLay], fSPDhRecs +fGenOffset); - fSPDhRecs++; + fAliITSQADataMakerRec->Add2RecPointsList(hmod[iLay], fSPDhTask +fGenOffset); + fSPDhTask++; sprintf(name,"xLoc_SPD%d",iLay+1); sprintf(title,"Local x coordinate - SPD Layer %d",iLay+1); hxl[iLay]=new TH1F(name,title,100,-4.,4.); hxl[iLay]->GetXaxis()->SetTitle("Local x [cm]"); hxl[iLay]->GetYaxis()->SetTitle("Entries"); - fAliITSQADataMakerRec->Add2RecPointsList(hxl[iLay], fSPDhRecs +fGenOffset); - fSPDhRecs++; + fAliITSQADataMakerRec->Add2RecPointsList(hxl[iLay], fSPDhTask +fGenOffset); + fSPDhTask++; sprintf(name,"zLoc_SPD%d",iLay+1); sprintf(title,"Local z coordinate - SPD Layer %d",iLay+1); hzl[iLay]=new TH1F(name,title,100,-4.,4.); hzl[iLay]->GetXaxis()->SetTitle("Local z [cm]"); hzl[iLay]->GetYaxis()->SetTitle("Entries"); - fAliITSQADataMakerRec->Add2RecPointsList(hzl[iLay], fSPDhRecs+fGenOffset); - fSPDhRecs++; + fAliITSQADataMakerRec->Add2RecPointsList(hzl[iLay], fSPDhTask+fGenOffset); + fSPDhTask++; sprintf(name,"xGlob_SPD%d",iLay+1); sprintf(title,"Global x coordinate - SPD Layer %d",iLay+1); hxg[iLay]=new TH1F(name,title,100,-xlim[iLay],xlim[iLay]); hxg[iLay]->GetXaxis()->SetTitle("Global x [cm]"); hxg[iLay]->GetYaxis()->SetTitle("Entries"); - fAliITSQADataMakerRec->Add2RecPointsList(hxg[iLay],fSPDhRecs+fGenOffset); - fSPDhRecs++; + fAliITSQADataMakerRec->Add2RecPointsList(hxg[iLay],fSPDhTask+fGenOffset); + fSPDhTask++; sprintf(name,"yGlob_SPD%d",iLay+1); sprintf(title,"Global y coordinate - SPD Layer %d",iLay+1); hyg[iLay]=new TH1F(name,title,100,-xlim[iLay],xlim[iLay]); hyg[iLay]->GetXaxis()->SetTitle("Global y [cm]"); hyg[iLay]->GetYaxis()->SetTitle("Entries"); - fAliITSQADataMakerRec->Add2RecPointsList(hyg[iLay], fSPDhRecs+fGenOffset); - fSPDhRecs++; + fAliITSQADataMakerRec->Add2RecPointsList(hyg[iLay], fSPDhTask+fGenOffset); + fSPDhTask++; sprintf(name,"zGlob_SPD%d",iLay+1); sprintf(title,"Global z coordinate - SPD Layer %d",iLay+1); hzg[iLay]=new TH1F(name,title,150,-zlim[iLay],zlim[iLay]); hzg[iLay]->GetXaxis()->SetTitle("Global z [cm]"); hzg[iLay]->GetYaxis()->SetTitle("Entries"); - fAliITSQADataMakerRec->Add2RecPointsList(hzg[iLay], fSPDhRecs+fGenOffset); - fSPDhRecs++; + fAliITSQADataMakerRec->Add2RecPointsList(hzg[iLay], fSPDhTask+fGenOffset); + fSPDhTask++; sprintf(name,"r_SPD%d",iLay+1); sprintf(title,"Radius - SPD Layer %d",iLay+1); hr[iLay]=new TH1F(name,title,100,0.,10.); hr[iLay]->GetXaxis()->SetTitle("r [cm]"); hr[iLay]->GetYaxis()->SetTitle("Entries"); - fAliITSQADataMakerRec->Add2RecPointsList(hr[iLay], fSPDhRecs+fGenOffset); - fSPDhRecs++; + fAliITSQADataMakerRec->Add2RecPointsList(hr[iLay], fSPDhTask+fGenOffset); + fSPDhTask++; sprintf(name,"phi_SPD%d",iLay+1); sprintf(title,"#varphi - SPD Layer %d",iLay+1); hphi[iLay]=new TH1F(name,title,600,0.,2*TMath::Pi()); hphi[iLay]->GetXaxis()->SetTitle("#varphi [rad]"); hphi[iLay]->GetYaxis()->SetTitle("Entries"); - fAliITSQADataMakerRec->Add2RecPointsList(hphi[iLay], fSPDhRecs+fGenOffset); - fSPDhRecs++; + fAliITSQADataMakerRec->Add2RecPointsList(hphi[iLay], fSPDhTask+fGenOffset); + fSPDhTask++; sprintf(name,"SizeYvsZ_SPD%d",iLay+1); sprintf(title,"Cluster dimension - SPD Layer %d",iLay+1); hNyNz[iLay]=new TH2F(name,title,100,0.,100.,100,0.,100.); hNyNz[iLay]->GetXaxis()->SetTitle("z length"); hNyNz[iLay]->GetYaxis()->SetTitle("y length"); - fAliITSQADataMakerRec->Add2RecPointsList(hNyNz[iLay], fSPDhRecs+fGenOffset); - fSPDhRecs++; + fAliITSQADataMakerRec->Add2RecPointsList(hNyNz[iLay], fSPDhTask+fGenOffset); + fSPDhTask++; sprintf(name,"phi_z_SPD%d",iLay+1); sprintf(title,"#varphi vs z - SPD Layer %d",iLay+1); hPhiZ[iLay]=new TH2F(name,title,150,-zlim[iLay],zlim[iLay],100,0.,2*TMath::Pi()); hPhiZ[iLay]->GetXaxis()->SetTitle("Global z [cm]"); hPhiZ[iLay]->GetYaxis()->SetTitle("#varphi [rad]"); - fAliITSQADataMakerRec->Add2RecPointsList(hPhiZ[iLay], fSPDhRecs+fGenOffset); - fSPDhRecs++; + fAliITSQADataMakerRec->Add2RecPointsList(hPhiZ[iLay], fSPDhTask+fGenOffset); + fSPDhTask++; } TH2F *hrPhi=new TH2F("r_phi_SPD","#varphi vs r - SPD",100,0.,10.,100,0.,2*TMath::Pi()); hrPhi->GetXaxis()->SetTitle("r [cm]"); hrPhi->GetYaxis()->SetTitle("#varphi [rad]"); - fAliITSQADataMakerRec->Add2RecPointsList(hrPhi, fSPDhRecs+fGenOffset); - fSPDhRecs++; + fAliITSQADataMakerRec->Add2RecPointsList(hrPhi, fSPDhTask+fGenOffset); + fSPDhTask++; TH2F *hxy=new TH2F("x_y_SPD","Global y vs x - SPD",200,-10.,10.,200,-10.,10.); hxy->GetXaxis()->SetTitle("Global x [cm]"); hxy->GetYaxis()->SetTitle("Global y [cm]"); - fAliITSQADataMakerRec->Add2RecPointsList(hxy, fSPDhRecs+fGenOffset); - fSPDhRecs++; + fAliITSQADataMakerRec->Add2RecPointsList(hxy, fSPDhTask+fGenOffset); + fSPDhTask++; for (Int_t iLay=0;iLay<2;iLay++) { sprintf(name,"Multiplicity_SPD%d",iLay+1); @@ -357,18 +354,18 @@ void AliITSQASPDDataMakerRec::InitRecPoints() hMultSPDcl[iLay]=new TH1F(name,title,200,0.,200.); hMultSPDcl[iLay]->GetXaxis()->SetTitle("Cluster multiplicity"); hMultSPDcl[iLay]->GetYaxis()->SetTitle("Entries"); - fAliITSQADataMakerRec->Add2RecPointsList(hMultSPDcl[iLay], fSPDhRecs+fGenOffset); - fSPDhRecs++; + fAliITSQADataMakerRec->Add2RecPointsList(hMultSPDcl[iLay], fSPDhTask+fGenOffset); + fSPDhTask++; } TH2F *hMultSPDcl2MultSPDcl1 = new TH2F("MultCorrelation_SPD","Cluster multiplicity correlation - SPD",200,0.,200.,200,0.,200.); hMultSPDcl2MultSPDcl1->GetXaxis()->SetTitle("Clusters multiplicity (Layer 1)"); hMultSPDcl2MultSPDcl1->GetYaxis()->SetTitle("Clusters multiplicity (Layer 2)"); - fAliITSQADataMakerRec->Add2RecPointsList(hMultSPDcl2MultSPDcl1, fSPDhRecs+fGenOffset); - fSPDhRecs++; + fAliITSQADataMakerRec->Add2RecPointsList(hMultSPDcl2MultSPDcl1, fSPDhTask+fGenOffset); + fSPDhTask++; - AliDebug(1,Form("%d SPD Recs histograms booked\n",fSPDhRecs)); + AliDebug(1,Form("%d SPD Recs histograms booked\n",fSPDhTask)); } @@ -376,31 +373,32 @@ void AliITSQASPDDataMakerRec::InitRecPoints() void AliITSQASPDDataMakerRec::MakeRecPoints(TTree * clusterTree) { // Fill QA for RecPoints - SPD - - TClonesArray* itsClusters = new TClonesArray("AliITSRecPoint"); - TBranch* itsClusterBranch=clusterTree->GetBranch("ITSRecPoints"); - if (!itsClusterBranch) { - AliError("can't get the branch with the ITS clusters !"); - return; - } - itsClusterBranch->SetAddress(&itsClusters); - Int_t nItsMods = (Int_t)clusterTree->GetEntries(); - - Float_t cluGlo[3] = {0.,0.,0.}; - Int_t nClusters[2] = {0,0}; - - for (Int_t iIts=0; iIts < nItsMods; iIts++) { - - if (!clusterTree->GetEvent(iIts)) continue; - Int_t nCluster = itsClusters->GetEntriesFast(); - // loop over clusters - while(nCluster--) { - AliITSRecPoint* cluster = (AliITSRecPoint*)itsClusters->UncheckedAt(nCluster); - - if (cluster->GetLayer()>1) continue; - Int_t lay=cluster->GetLayer(); - fAliITSQADataMakerRec->GetRecPointsData(0 +fGenOffset)->Fill(lay); - cluster->GetGlobalXYZ(cluGlo); - Float_t rad=TMath::Sqrt(cluGlo[0]*cluGlo[0]+cluGlo[1]*cluGlo[1]); + static TClonesArray statITSCluster("AliITSRecPoint"); + TClonesArray *ITSCluster = &statITSCluster; + TBranch* itsClusterBranch=clusterTree->GetBranch("ITSRecPoints"); + if (!itsClusterBranch) { + AliError("can't get the branch with the ITS clusters !"); + return; + } + itsClusterBranch->SetAddress(&ITSCluster); + Int_t nItsMods = (Int_t)clusterTree->GetEntries(); + + Float_t cluGlo[3] = {0.,0.,0.}; + Int_t nClusters[2] = {0,0}; + + for (Int_t iIts=0; iIts < nItsMods; iIts++) { + + if (!clusterTree->GetEvent(iIts)) continue; + Int_t nCluster = ITSCluster->GetEntriesFast(); + // loop over clusters + while(nCluster--) { + AliITSRecPoint* cluster = (AliITSRecPoint*)ITSCluster->UncheckedAt(nCluster); + + if (cluster->GetLayer()>1) continue; + Int_t lay=cluster->GetLayer(); + fAliITSQADataMakerRec->GetRecPointsData(0 +fGenOffset)->Fill(lay); + cluster->GetGlobalXYZ(cluGlo); + Float_t rad=TMath::Sqrt(cluGlo[0]*cluGlo[0]+cluGlo[1]*cluGlo[1]); Float_t phi= TMath::Pi() + TMath::ATan2(-cluGlo[1],-cluGlo[0]); if (lay==0) { fAliITSQADataMakerRec->GetRecPointsData(1 +fGenOffset)->Fill(iIts); @@ -427,20 +425,15 @@ void AliITSQASPDDataMakerRec::MakeRecPoints(TTree * clusterTree) } fAliITSQADataMakerRec->GetRecPointsData(21 +fGenOffset)->Fill(rad,phi); fAliITSQADataMakerRec->GetRecPointsData(22 +fGenOffset)->Fill(cluGlo[0],cluGlo[1]); - + nClusters[lay]++; - } // end of cluster loop - } // end of its "subdetector" loop - - for (Int_t iLay=0; iLay<2; iLay++) - fAliITSQADataMakerRec->GetRecPointsData(23+iLay +fGenOffset)->Fill(nClusters[iLay]); - - fAliITSQADataMakerRec->GetRecPointsData(25 +fGenOffset)->Fill(nClusters[0],nClusters[1]); - - if (itsClusters) { - itsClusters->Delete(); - delete itsClusters; - itsClusters = 0; - } - + } // end of cluster loop + } // end of its "subdetector" loop + + for (Int_t iLay=0; iLay<2; iLay++) + fAliITSQADataMakerRec->GetRecPointsData(23+iLay +fGenOffset)->Fill(nClusters[iLay]); + + fAliITSQADataMakerRec->GetRecPointsData(25 +fGenOffset)->Fill(nClusters[0],nClusters[1]); + + statITSCluster.Clear(); } diff --git a/ITS/AliITSQASPDDataMakerRec.h b/ITS/AliITSQASPDDataMakerRec.h index 1271a1633fb..005794472ec 100644 --- a/ITS/AliITSQASPDDataMakerRec.h +++ b/ITS/AliITSQASPDDataMakerRec.h @@ -13,7 +13,7 @@ // M. Nicassio D. Elia INFN Bari March 2008 // maria.nicassio@ba.infn.it -/* $Id:$ */ +/* $Id$ */ class TObjArray; class AliRawReader; @@ -35,9 +35,8 @@ public: virtual void StartOfDetectorCycle(); virtual void EndOfDetectorCycle(AliQA::TASKINDEX_t task, TObjArray * list); virtual ~AliITSQASPDDataMakerRec(); // dtor - Int_t Raws() const { return fSPDhRaws; } - Int_t Recs() const { return fSPDhRecs; } Int_t GetOffset() { return fGenOffset; } + Int_t GetTaskHisto() { return fSPDhTask; } private: @@ -48,9 +47,8 @@ private: AliITSQADataMakerRec *fAliITSQADataMakerRec;//pointer to the main ctor Bool_t fkOnline; //online (1) or offline (0) use Int_t fLDC; //LDC number (0 for offline, 1 to 4 for online) - Int_t fSPDhRaws; //number of booked SPD Raws histograms; - Int_t fSPDhRecs; //number of booked SPD Recs histograms; - Int_t fGenOffset; // qachecking offset + Int_t fSPDhTask; //number of booked SPD histograms for each task; + Int_t fGenOffset; // qachecking offset AliITSRawStreamSPDErrorLog *fAdvLogger; // pointer to special error logger object diff --git a/ITS/AliITSQASPDDataMakerSim.cxx b/ITS/AliITSQASPDDataMakerSim.cxx index c1dda0109e7..f14f7716c58 100644 --- a/ITS/AliITSQASPDDataMakerSim.cxx +++ b/ITS/AliITSQASPDDataMakerSim.cxx @@ -49,9 +49,7 @@ ClassImp(AliITSQASPDDataMakerSim) AliITSQASPDDataMakerSim::AliITSQASPDDataMakerSim(AliITSQADataMakerSim *aliITSQADataMakerSim) : TObject(), fAliITSQADataMakerSim(aliITSQADataMakerSim), -fSPDhDigits(0), -fSPDhSDigits(0), -fSPDhHits(0), +fSPDhTask(0), fGenOffset(0) { //ctor used to discriminate OnLine-Offline analysis @@ -61,9 +59,7 @@ fGenOffset(0) AliITSQASPDDataMakerSim::AliITSQASPDDataMakerSim(const AliITSQASPDDataMakerSim& qadm) : TObject(), fAliITSQADataMakerSim(qadm.fAliITSQADataMakerSim), -fSPDhDigits(qadm.fSPDhDigits), -fSPDhSDigits(qadm.fSPDhSDigits), -fSPDhHits(qadm.fSPDhHits), +fSPDhTask(qadm.fSPDhTask), fGenOffset(qadm.fGenOffset) { //copy ctor @@ -101,7 +97,7 @@ void AliITSQASPDDataMakerSim::InitDigits() { // Initialization for DIGIT data - SPD - fGenOffset = (fAliITSQADataMakerSim->fDigitsQAList)->GetEntries(); - //fSPDhDigits must be incremented by one unit every time a histogram is ADDED to the QA List + //fSPDhTask must be incremented by one unit every time a histogram is ADDED to the QA List Char_t name[50]; Char_t title[50]; @@ -110,7 +106,7 @@ void AliITSQASPDDataMakerSim::InitDigits() hlayer->GetXaxis()->SetTitle("Layer number"); hlayer->GetYaxis()->SetTitle("Entries"); fAliITSQADataMakerSim->Add2DigitsList(hlayer,fGenOffset); - fSPDhDigits++; + fSPDhTask++; TH1F **hmod = new TH1F*[2]; for (Int_t iLay=0; iLay<2; iLay++) { @@ -120,20 +116,20 @@ void AliITSQASPDDataMakerSim::InitDigits() hmod[iLay]->GetXaxis()->SetTitle("Module number"); hmod[iLay]->GetYaxis()->SetTitle("Entries"); fAliITSQADataMakerSim->Add2DigitsList(hmod[iLay],1+iLay+fGenOffset); - fSPDhDigits++; + fSPDhTask++; } TH1F *hcolumns = new TH1F("Columns_SPD","Columns - SPD",160,0.,160.); hcolumns->GetXaxis()->SetTitle("Column number"); hcolumns->GetYaxis()->SetTitle("Entries"); fAliITSQADataMakerSim->Add2DigitsList(hcolumns,3+fGenOffset); - fSPDhDigits++; + fSPDhTask++; TH1F *hrows = new TH1F("Rows_SPD","Rows - SPD",256,0.,256.); hrows->GetXaxis()->SetTitle("Row number"); hrows->GetYaxis()->SetTitle("Entries"); fAliITSQADataMakerSim->Add2DigitsList(hrows,4+fGenOffset); - fSPDhDigits++; + fSPDhTask++; TH1F** hMultSPDdigits = new TH1F*[2]; for (Int_t iLay=0; iLay<2; ++iLay) { @@ -143,16 +139,16 @@ void AliITSQASPDDataMakerSim::InitDigits() hMultSPDdigits[iLay]->GetXaxis()->SetTitle("Digit multiplicity"); hMultSPDdigits[iLay]->GetYaxis()->SetTitle("Entries"); fAliITSQADataMakerSim->Add2DigitsList(hMultSPDdigits[iLay], 5+iLay+fGenOffset); - fSPDhDigits++; + fSPDhTask++; } TH2F *hMultSPDdig2MultSPDdig1 = new TH2F("DigitMultCorrelation_SPD","Digit multiplicity correlation - SPD",200,0.,200.,200,0.,200.); hMultSPDdig2MultSPDdig1->GetXaxis()->SetTitle("Digit multiplicity (Layer 1)"); hMultSPDdig2MultSPDdig1->GetYaxis()->SetTitle("Digit multiplicity (Layer 2)"); fAliITSQADataMakerSim->Add2DigitsList(hMultSPDdig2MultSPDdig1,7+fGenOffset); - fSPDhDigits++; + fSPDhTask++; - AliDebug(1,Form("%d SPD Digits histograms booked\n",fSPDhDigits)); + AliDebug(1,Form("%d SPD Digits histograms booked\n",fSPDhTask)); } @@ -199,7 +195,7 @@ void AliITSQASPDDataMakerSim::InitSDigits() // Initialization for SDIGIT data - SPD - fGenOffset = (fAliITSQADataMakerSim->fSDigitsQAList)->GetEntries(); //printf("--W-- AliITSQASPDDataMakerSim::InitSDigits() fGenOffset= %d \n",fGenOffset); - //fSPDhSDigits must be incremented by one unit every time a histogram is ADDED to the QA List + //fSPDhTask must be incremented by one unit every time a histogram is ADDED to the QA List Char_t name[50]; Char_t title[50]; @@ -208,7 +204,7 @@ void AliITSQASPDDataMakerSim::InitSDigits() hlayer->GetXaxis()->SetTitle("Layer number"); hlayer->GetYaxis()->SetTitle("Entries"); fAliITSQADataMakerSim->Add2SDigitsList(hlayer,fGenOffset); - fSPDhSDigits++; + fSPDhTask++; TH1F **hmod = new TH1F*[2]; for (Int_t iLay=0; iLay<2; ++iLay) { @@ -218,11 +214,11 @@ void AliITSQASPDDataMakerSim::InitSDigits() hmod[iLay]->GetXaxis()->SetTitle("Module number"); hmod[iLay]->GetYaxis()->SetTitle("Entries"); fAliITSQADataMakerSim->Add2SDigitsList(hmod[iLay],1+iLay+fGenOffset); - fSPDhSDigits++; + fSPDhTask++; } - AliDebug(1,Form("%d SPD SDigits histograms booked\n",fSPDhSDigits)); + AliDebug(1,Form("%d SPD SDigits histograms booked\n",fSPDhTask)); } @@ -255,7 +251,7 @@ void AliITSQASPDDataMakerSim::InitHits() // Initialization for HITS data - SPD - fGenOffset = (fAliITSQADataMakerSim->fHitsQAList)->GetEntries(); //printf("--W-- AliITSQASPDDataMakerSim::InitHits() fGenOffset= %d \n",fGenOffset); - //fSPDhHits must be incremented by one unit every time a histogram is ADDED to the QA List + //fSPDhTask must be incremented by one unit every time a histogram is ADDED to the QA List Char_t name[50]; Char_t title[50]; @@ -263,7 +259,7 @@ void AliITSQASPDDataMakerSim::InitHits() hlayer->GetXaxis()->SetTitle("Layer number"); hlayer->GetYaxis()->SetTitle("Entries"); fAliITSQADataMakerSim->Add2HitsList(hlayer,fGenOffset); - fSPDhHits++; + fSPDhTask++; TH1F **hmod = new TH1F*[2]; for (Int_t iLay=0; iLay<2; ++iLay) { @@ -273,22 +269,22 @@ void AliITSQASPDDataMakerSim::InitHits() hmod[iLay]->GetXaxis()->SetTitle("Module number"); hmod[iLay]->GetYaxis()->SetTitle("Entries"); fAliITSQADataMakerSim->Add2HitsList(hmod[iLay],1+iLay+fGenOffset); - fSPDhHits++; + fSPDhTask++; } TH1F *hhitlenght = new TH1F("Lenght_SPD","Hit lenght along y_{loc} coord",210,0.,210.); hhitlenght->GetXaxis()->SetTitle("Hit lenght [#mum]"); hhitlenght->GetYaxis()->SetTitle("# hits"); fAliITSQADataMakerSim->Add2HitsList(hhitlenght,3+fGenOffset); - fSPDhHits++; + fSPDhTask++; TH1F *hEdepos = new TH1F("EnergyDeposit_SPD","Deposited energy distribution (y_{loc}>180 #mum)",150,0.,300.); hEdepos->GetXaxis()->SetTitle("Deposited energy [keV]"); hEdepos->GetYaxis()->SetTitle("# hits"); fAliITSQADataMakerSim->Add2HitsList(hEdepos,4+fGenOffset); - fSPDhHits++; + fSPDhTask++; - AliDebug(1,Form("%d SPD Hits histograms booked\n",fSPDhHits)); + AliDebug(1,Form("%d SPD Hits histograms booked\n",fSPDhTask)); } diff --git a/ITS/AliITSQASPDDataMakerSim.h b/ITS/AliITSQASPDDataMakerSim.h index 949f908d2f2..dfa9daa1e10 100644 --- a/ITS/AliITSQASPDDataMakerSim.h +++ b/ITS/AliITSQASPDDataMakerSim.h @@ -40,19 +40,15 @@ public: virtual void MakeDigits(TTree * digits); virtual void MakeSDigits(TTree * sdigits); virtual void MakeHits(TTree * hits); - const Int_t Digits() { return fSPDhDigits; } - const Int_t SDigits() { return fSPDhSDigits; } - const Int_t Hits() { return fSPDhHits; } Int_t GetOffset() { return fGenOffset; } + Int_t GetTaskHisto() { return fSPDhTask; } private: AliITSQADataMakerSim *fAliITSQADataMakerSim;//pointer to the main ctor - Int_t fSPDhDigits; //number of booked SPD Digits histograms; - Int_t fSPDhSDigits; //number of booked SPD SDigits histograms; - Int_t fSPDhHits; //number of booked SPD Hits histograms; + Int_t fSPDhTask; //number of booked SPD histograms for each task; Int_t fGenOffset; // qachecking offset - ClassDef(AliITSQASPDDataMakerSim,1) // description + ClassDef(AliITSQASPDDataMakerSim,2) // description }; diff --git a/ITS/AliITSQASSDChecker.cxx b/ITS/AliITSQASSDChecker.cxx index 5d0c7a2a369..3183dbd1436 100644 --- a/ITS/AliITSQASSDChecker.cxx +++ b/ITS/AliITSQASSDChecker.cxx @@ -31,7 +31,6 @@ #include "AliLog.h" ClassImp(AliITSQASSDChecker) - //__________________________________________________________________ AliITSQASSDChecker& AliITSQASSDChecker::operator = (const AliITSQASSDChecker& qac ) { @@ -42,8 +41,8 @@ AliITSQASSDChecker& AliITSQASSDChecker::operator = (const AliITSQASSDChecker& qa } //__________________________________________________________________ -const Double_t AliITSQASSDChecker::Check(AliQA::ALITASK_t /*index*/, TObjArray * list, Int_t SubDetOffset) { - AliDebug(1,Form("AliITSQASSDChecker called with offset: %d\n", SubDetOffset)); +const Double_t AliITSQASSDChecker::Check(AliQA::ALITASK_t /*index*/, TObjArray * list) { + AliDebug(1,Form("AliITSQASSDChecker called with offset: %d\n", fSubDetOffset)); Double_t test = 0.0 ; Int_t count = 0 ; @@ -89,4 +88,8 @@ const Double_t AliITSQASSDChecker::Check(AliQA::ALITASK_t /*index*/, TObjArray * } - +//__________________________________________________________________ +void AliITSQASSDChecker::SetTaskOffset(Int_t TaskOffset) +{ + fSubDetOffset = TaskOffset; +} diff --git a/ITS/AliITSQASSDChecker.h b/ITS/AliITSQASSDChecker.h index 0a42ef0b721..0c7663bbc4d 100644 --- a/ITS/AliITSQASSDChecker.h +++ b/ITS/AliITSQASSDChecker.h @@ -27,14 +27,17 @@ class AliITSLoader ; class AliITSQASSDChecker: public TObject { public: - AliITSQASSDChecker() {;} // ctor + AliITSQASSDChecker():fSubDetOffset(0) {;} // ctor AliITSQASSDChecker& operator = (const AliITSQASSDChecker& qac) ; //operator = virtual ~AliITSQASSDChecker() {;} // dtor - const Double_t Check(AliQA::ALITASK_t /*index*/, TObjArray * /*list*/, Int_t SubDetOffset); + const Double_t Check(AliQA::ALITASK_t /*index*/, TObjArray * /*list*/); + void SetTaskOffset(Int_t TaskOffset); + private: - AliITSQASSDChecker(const AliITSQASSDChecker& /*qac*/):TObject(){;} // cpy ctor + AliITSQASSDChecker(const AliITSQASSDChecker& /*qac*/):TObject(),fSubDetOffset(0) {;} // cpy ctor + Int_t fSubDetOffset; // checking operation starting point ClassDef(AliITSQASSDChecker,1) // description }; diff --git a/ITS/AliITSQASSDDataMakerRec.cxx b/ITS/AliITSQASSDDataMakerRec.cxx index f80d4405a3a..f88998a7d6d 100644 --- a/ITS/AliITSQASSDDataMakerRec.cxx +++ b/ITS/AliITSQASSDDataMakerRec.cxx @@ -57,9 +57,7 @@ fSSDEvent(0), fkOnline(kMode), fLDC(ldc), fSSDRawsOffset(0), -fSSDhRaws(0), -fSSDhRecs(0), -fSSDhESDs(0), +fSSDhTask(0), fGenOffset(0) { // Default constructor //initilize the raw signal vs strip number histograms @@ -100,9 +98,7 @@ fSSDEvent(qadm.fSSDEvent), fkOnline(qadm.fkOnline), fLDC(qadm.fLDC), fSSDRawsOffset(qadm.fSSDRawsOffset), -fSSDhRaws(qadm.fSSDhRaws), -fSSDhRecs(qadm.fSSDhRecs), -fSSDhESDs(qadm.fSSDhESDs), +fSSDhTask(qadm.fSSDhTask), fGenOffset(qadm.fGenOffset) { //copy ctor fAliITSQADataMakerRec->SetName((const char*)qadm.fAliITSQADataMakerRec->GetName()) ; @@ -133,7 +129,7 @@ void AliITSQASSDDataMakerRec::StartOfDetectorCycle() } //____________________________________________________________________________ -void AliITSQASSDDataMakerRec::EndOfDetectorCycle(AliQA::TASKINDEX_t task, TObjArray* list) +void AliITSQASSDDataMakerRec::EndOfDetectorCycle(AliQA::TASKINDEX_t /*task*/, TObjArray* /*list*/) { // launch the QA checking AliDebug(1,"AliITSDM instantiates checker with Run(AliQA::kITS, task, list)\n"); @@ -158,7 +154,7 @@ void AliITSQASSDDataMakerRec::EndOfDetectorCycle(AliQA::TASKINDEX_t task, TObjAr }//ladder loop }//layer loop }//online flag for SSD - AliQAChecker::Instance()->Run( AliQA::kITS , task, list); + //AliQAChecker::Instance()->Run( AliQA::kITS , task, list); } //____________________________________________________________________________ @@ -236,6 +232,7 @@ void AliITSQASSDDataMakerRec::InitRaws() { fGenOffset+fSSDRawsOffset); fSSDRawsOffset += 1; } + fSSDhTask = fSSDRawsOffset; if(fkOnline) { //top level occupancy plots TH2D *fHistSSDOccupancyLayer5 = new TH2D("fHistSSDOccupancyLayer5", @@ -265,43 +262,44 @@ void AliITSQASSDDataMakerRec::InitRaws() { fSSDRawsOffset += 1; //Occupancy per ladder - fSSDhRaws = fSSDRawsOffset; + fSSDhTask = fSSDRawsOffset; TH1D *fHistOccupancyLadder[2*(fgkSSDLADDERSLAYER5 + fgkSSDLADDERSLAYER6)]; for(Int_t iLayer = 5; iLayer < 7; iLayer++) { for(Int_t iLadder = 1; iLadder < AliITSgeomTGeo::GetNLadders(iLayer) + 1; iLadder++) { //P-side occupancy plots fTitle = "fHistSSD_Occupancy_Layer"; fTitle += iLayer; fTitle += "_Ladder"; fTitle += iLadder; fTitle += "_PSide"; - fHistOccupancyLadder[fSSDhRaws] = + fHistOccupancyLadder[fSSDhTask] = new TH1D(fTitle.Data(), fTitle.Data(), AliITSgeomTGeo::GetNDetectors(iLayer), 0.5,AliITSgeomTGeo::GetNDetectors(iLayer)+0.5); - fHistOccupancyLadder[fSSDhRaws]->GetXaxis()->SetTitleColor(1); - fHistOccupancyLadder[fSSDhRaws]->GetXaxis()->SetTitle("Module number"); - fHistOccupancyLadder[fSSDhRaws]->GetYaxis()->SetTitle("Occupancy [%]"); - fAliITSQADataMakerRec->Add2RawsList(fHistOccupancyLadder[fSSDhRaws], - fGenOffset+fSSDhRaws); - fSSDhRaws++; + fHistOccupancyLadder[fSSDhTask]->GetXaxis()->SetTitleColor(1); + fHistOccupancyLadder[fSSDhTask]->GetXaxis()->SetTitle("Module number"); + fHistOccupancyLadder[fSSDhTask]->GetYaxis()->SetTitle("Occupancy [%]"); + fAliITSQADataMakerRec->Add2RawsList(fHistOccupancyLadder[fSSDhTask], + fGenOffset+fSSDhTask); + fSSDhTask++; //N-side occupancy plots fTitle = "fHistSSD_Occupancy_Layer"; fTitle += iLayer; fTitle += "_Ladder"; fTitle += iLadder; fTitle += "_NSide"; - fHistOccupancyLadder[fSSDhRaws] = + fHistOccupancyLadder[fSSDhTask] = new TH1D(fTitle.Data(), fTitle.Data(), AliITSgeomTGeo::GetNDetectors(iLayer), 0.5,AliITSgeomTGeo::GetNDetectors(iLayer)+0.5); - fHistOccupancyLadder[fSSDhRaws]->GetXaxis()->SetTitleColor(1); - fHistOccupancyLadder[fSSDhRaws]->GetXaxis()->SetTitle("Module number"); - fHistOccupancyLadder[fSSDhRaws]->GetYaxis()->SetTitle("Occupancy [%]"); - fAliITSQADataMakerRec->Add2RawsList(fHistOccupancyLadder[fSSDhRaws], - fGenOffset+fSSDhRaws); - fSSDhRaws++; + fHistOccupancyLadder[fSSDhTask]->GetXaxis()->SetTitleColor(1); + fHistOccupancyLadder[fSSDhTask]->GetXaxis()->SetTitle("Module number"); + fHistOccupancyLadder[fSSDhTask]->GetYaxis()->SetTitle("Occupancy [%]"); + fAliITSQADataMakerRec->Add2RawsList(fHistOccupancyLadder[fSSDhTask], + fGenOffset+fSSDhTask); + fSSDhTask++; }//ladder loop }//layer loop }//online flag - AliDebug(1,Form("%d SSD Raws histograms booked\n",fSSDhRaws)); - AliInfo(Form("Number of histograms (SPD+SDD+SSD): %d\n",fGenOffset+fSSDhRaws)); + AliDebug(1,Form("%d SSD Raws histograms booked\n",fSSDhTask)); + AliInfo(Form("Number of histograms (SPD+SDD+SSD): %d\n",fGenOffset+fSSDhTask)); + AliInfo(Form("Number of histograms (SPD+SDD+SSD): %d\n",fGenOffset+fSSDRawsOffset)); } @@ -359,7 +357,7 @@ void AliITSQASSDDataMakerRec::MakeRaws(AliRawReader* rawReader) { for(Int_t i = 0; i < fgkNumOfLDCs; i++) { if(fSizePerLDC[i] > 0) { (fAliITSQADataMakerRec->GetRawsData(fGenOffset+21))->Fill(i+6); - (fAliITSQADataMakerRec->GetRawsData(fGenOffset+23+i))->Fill(TMath::Log10(fSizePerLDC[i])); + (fAliITSQADataMakerRec->GetRawsData(fGenOffset+23+i))->Fill(TMath::Log10(fSizePerLDC[0])); } (fAliITSQADataMakerRec->GetRawsData(fGenOffset+22))->Fill(i+6,fSizePerLDC[i]/1e+06); } @@ -394,6 +392,9 @@ void AliITSQASSDDataMakerRec::MakeRaws(AliRawReader* rawReader) { }//online flag for SSD } + + + //____________________________________________________________________________ Double_t AliITSQASSDDataMakerRec::GetSSDOccupancyRaws(TH1 *lHisto, Int_t stripside) { // bo: TDC >0 or # of sigmas wrt noise ? @@ -420,189 +421,189 @@ void AliITSQASSDDataMakerRec::InitRecPoints() Int_t nModuleOffset = 500; Int_t nITSTotalModules = AliITSgeomTGeo::GetNModules(); - TH1F *fHistSSDModuleIdLayer5 = new TH1F("fHistSSDModuleIdLayer5", - "Module Id - Layer 5;Module Id;Entries", - fgkSSDMODULESLAYER5, - nModuleOffset - 0.5, - nITSTotalModules-fgkSSDMODULESLAYER6+0.5); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDModuleIdLayer5, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDModuleIdLayer6 = new TH1F("fHistSSDModuleIdLayer6", - "Module Id - Layer 6;Module Id;Entries", - fgkSSDMODULESLAYER6, - nModuleOffset+fgkSSDMODULESLAYER5 - 0.5, - nITSTotalModules + 0.5); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDModuleIdLayer6, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDLocalXLayer5 = new TH1F("fHistSSDLocalXLayer5", - "Local x coord.- Layer 5;x [cm];Entries;", - 100,-4.,4.); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDLocalXLayer5, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDLocalXLayer6 = new TH1F("fHistSSDLocalXLayer6", - "Local x coord.- Layer 6;x [cm];Entries;", - 100,-4.,4.); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDLocalXLayer6, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDLocalZLayer5 = new TH1F("fHistSSDLocalZLayer5", - "Local z coord.- Layer 5;z [cm];Entries;", - 100,-4.,4.); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDLocalZLayer5, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDLocalZLayer6 = new TH1F("fHistSSDLocalZLayer6", - "Local z coord.- Layer 6;z [cm];Entries;", - 100,-4.,4.); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDLocalZLayer6, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDGlobalXLayer5 = new TH1F("fHistSSDGlobalXLayer5", - "Global x - Layer 5;x [cm];Entries;", - 100,-40.,40.); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalXLayer5, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDGlobalXLayer6 = new TH1F("fHistSSDGlobalXLayer6", - "Global x - Layer 6;x [cm];Entries;", - 100,-45.,45.); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalXLayer6, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDGlobalYLayer5 = new TH1F("fHistSSDGlobalYLayer5", - "Global y - Layer 5;y [cm];Entries;", - 100,-40.,40); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalYLayer5, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDGlobalYLayer6 = new TH1F("fHistSSDGlobalYLayer6", - "Global y - Layer 6;y [cm];Entries;", - 100,-45.,45.); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalYLayer6, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDGlobalZLayer5 = new TH1F("fHistSSDGlobalZLayer5", - "Global z - Layer 5;z [cm];Entries;", - 100,-45.,45); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalZLayer5, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDGlobalZLayer6 = new TH1F("fHistSSDGlobalZLayer6", - "Global z - Layer 6;z [cm];Entries;", - 100,-55.,55.); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalZLayer6, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDPhiLayer5 = new TH1F("fHistSSDPhiLayer5", - "#phi - Layer 5;#phi [rad];Entries;", - 100,-TMath::Pi(),TMath::Pi()); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDPhiLayer5, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDPhiLayer6 = new TH1F("fHistSSDPhiLayer6", - "#phi - Layer 6;#phi [rad];Entries;", - 100,-TMath::Pi(),TMath::Pi()); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDPhiLayer6, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDThetaLayer5 = new TH1F("fHistSSDThetaLayer5", - "#theta - Layer 5;#theta [rad];Entries;", - 100,-TMath::Pi(),TMath::Pi()); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDThetaLayer5, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDThetaLayer6 = new TH1F("fHistSSDThetaLayer6", - "#theta - Layer 6;#theta [rad];Entries;", - 100,-TMath::Pi(),TMath::Pi()); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDThetaLayer6, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDRadiusLayer5 = new TH1F("fHistSSDRadiusLayer5", - "r - Layer 5;r [cm];Entries;", - 100,35.,50.); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDRadiusLayer5, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDRadiusLayer6 = new TH1F("fHistSSDRadiusLayer6", - "r - Layer 6;r [cm];Entries;", - 100,35.,50.); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDRadiusLayer6, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDClusterTypeLayer5 = new TH1F("fHistSSDClusterTypeLayer5", - "CL type - Layer 5;Cluster type;Entries;", - 150,0,150); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDClusterTypeLayer5, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDClusterTypeLayer6 = new TH1F("fHistSSDClusterTypeLayer6", - "CL type - Layer 6;Cluster type;Entries;", - 150,0,150); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDClusterTypeLayer6, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDChargeRatioLayer5 = new TH1F("fHistSSDChargeRatioLayer5", - "Charge ratio - Layer 5;q_{ratio};Entries;", - 100,-2.0,2.0); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeRatioLayer5, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDChargeRatioLayer6 = new TH1F("fHistSSDChargeRatioLayer6", - "Charge ratio - Layer 6;q_{ratio};Entries;", - 100,-2.0,2.0); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeRatioLayer6, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDChargekeVLayer5 = new TH1F("fHistSSDChargekeVLayer5", - "Charge - Layer 5;q [keV];Entries;", - 100,0.,300.); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargekeVLayer5, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDChargekeVLayer6 = new TH1F("fHistSSDChargekeVLayer6", - "Charge - Layer 6;q [keV];Entries;", - 100,0.,300.); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargekeVLayer6, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDChargeADCLayer5 = new TH1F("fHistSSDChargeADCLayer5", - "Charge - Layer 5;q [ADC];Entries;", - 100,0.,300.); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeADCLayer5, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH1F *fHistSSDChargeADCLayer6 = new TH1F("fHistSSDChargeADCLayer6", - "Charge - Layer 6;q [ADC];Entries;", - 100,0.,300.); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeADCLayer6, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH2F *fHistSSDChargeMapLayer5 = new TH2F("fHistSSDChargeMapLayer5", - "Charge map;N_{modules};N_{Ladders}", - fgkSSDMODULESPERLADDERLAYER5, - -0.5,fgkSSDMODULESPERLADDERLAYER5+0.5, - 3*fgkSSDLADDERSLAYER5, - -0.5,fgkSSDLADDERSLAYER5+0.5); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeMapLayer5, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; - TH2F *fHistSSDChargeMapLayer6 = new TH2F("fHistSSDChargeMapLayer6", - "Charge map;N_{modules};N_{Ladders}", - fgkSSDMODULESPERLADDERLAYER6, - -0.5,fgkSSDMODULESPERLADDERLAYER6+0.5, - 3*fgkSSDLADDERSLAYER6, - -0.5,fgkSSDLADDERSLAYER6+0.5); - fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeMapLayer6, - fGenOffset + fSSDhRecs); - fSSDhRecs += 1; + TH1F *fHistModuleIdLayer5 = new TH1F("fHistModuleIdLayer5", + "Module Id - Layer 5;Module Id;Entries", + fgkSSDMODULESLAYER5, + nModuleOffset - 0.5, + nITSTotalModules-fgkSSDMODULESLAYER6+0.5); + fAliITSQADataMakerRec->Add2RecPointsList(fHistModuleIdLayer5, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistModuleIdLayer6 = new TH1F("fHistModuleIdLayer6", + "Module Id - Layer 6;Module Id;Entries", + fgkSSDMODULESLAYER6, + nModuleOffset+fgkSSDMODULESLAYER5 - 0.5, + nITSTotalModules + 0.5); + fAliITSQADataMakerRec->Add2RecPointsList(fHistModuleIdLayer6, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistLocalXLayer5 = new TH1F("fHistLocalXLayer5", + "Local x coord.- Layer 5;x [cm];Entries;", + 100,-4.,4.); + fAliITSQADataMakerRec->Add2RecPointsList(fHistLocalXLayer5, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistLocalXLayer6 = new TH1F("fHistLocalXLayer6", + "Local x coord.- Layer 6;x [cm];Entries;", + 100,-4.,4.); + fAliITSQADataMakerRec->Add2RecPointsList(fHistLocalXLayer6, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistLocalZLayer5 = new TH1F("fHistLocalZLayer5", + "Local z coord.- Layer 5;z [cm];Entries;", + 100,-4.,4.); + fAliITSQADataMakerRec->Add2RecPointsList(fHistLocalZLayer5, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistLocalZLayer6 = new TH1F("fHistLocalZLayer6", + "Local z coord.- Layer 6;z [cm];Entries;", + 100,-4.,4.); + fAliITSQADataMakerRec->Add2RecPointsList(fHistLocalZLayer6, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistGlobalXLayer5 = new TH1F("fHistGlobalXLayer5", + "Global x - Layer 5;x [cm];Entries;", + 100,-40.,40.); + fAliITSQADataMakerRec->Add2RecPointsList(fHistGlobalXLayer5, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistGlobalXLayer6 = new TH1F("fHistGlobalXLayer6", + "Global x - Layer 6;x [cm];Entries;", + 100,-45.,45.); + fAliITSQADataMakerRec->Add2RecPointsList(fHistGlobalXLayer6, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistGlobalYLayer5 = new TH1F("fHistGlobalYLayer5", + "Global y - Layer 5;y [cm];Entries;", + 100,-40.,40); + fAliITSQADataMakerRec->Add2RecPointsList(fHistGlobalYLayer5, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistGlobalYLayer6 = new TH1F("fHistGlobalYLayer6", + "Global y - Layer 6;y [cm];Entries;", + 100,-45.,45.); + fAliITSQADataMakerRec->Add2RecPointsList(fHistGlobalYLayer6, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistGlobalZLayer5 = new TH1F("fHistGlobalZLayer5", + "Global z - Layer 5;z [cm];Entries;", + 100,-45.,45); + fAliITSQADataMakerRec->Add2RecPointsList(fHistGlobalZLayer5, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistGlobalZLayer6 = new TH1F("fHistGlobalZLayer6", + "Global z - Layer 6;z [cm];Entries;", + 100,-55.,55.); + fAliITSQADataMakerRec->Add2RecPointsList(fHistGlobalZLayer6, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistPhiLayer5 = new TH1F("fHistPhiLayer5", + "#phi - Layer 5;#phi [rad];Entries;", + 100,-TMath::Pi(),TMath::Pi()); + fAliITSQADataMakerRec->Add2RecPointsList(fHistPhiLayer5, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistPhiLayer6 = new TH1F("fHistPhiLayer6", + "#phi - Layer 6;#phi [rad];Entries;", + 100,-TMath::Pi(),TMath::Pi()); + fAliITSQADataMakerRec->Add2RecPointsList(fHistPhiLayer6, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistThetaLayer5 = new TH1F("fHistThetaLayer5", + "#theta - Layer 5;#theta [rad];Entries;", + 100,-TMath::Pi(),TMath::Pi()); + fAliITSQADataMakerRec->Add2RecPointsList(fHistThetaLayer5, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistThetaLayer6 = new TH1F("fHistThetaLayer6", + "#theta - Layer 6;#theta [rad];Entries;", + 100,-TMath::Pi(),TMath::Pi()); + fAliITSQADataMakerRec->Add2RecPointsList(fHistThetaLayer6, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistRadiusLayer5 = new TH1F("fHistRadiusLayer5", + "r - Layer 5;r [cm];Entries;", + 100,35.,50.); + fAliITSQADataMakerRec->Add2RecPointsList(fHistRadiusLayer5, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistRadiusLayer6 = new TH1F("fHistRadiusLayer6", + "r - Layer 6;r [cm];Entries;", + 100,35.,50.); + fAliITSQADataMakerRec->Add2RecPointsList(fHistRadiusLayer6, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistClusterTypeLayer5 = new TH1F("fHistClusterTypeLayer5", + "CL type - Layer 5;Cluster type;Entries;", + 150,0,150); + fAliITSQADataMakerRec->Add2RecPointsList(fHistClusterTypeLayer5, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistClusterTypeLayer6 = new TH1F("fHistClusterTypeLayer6", + "CL type - Layer 6;Cluster type;Entries;", + 150,0,150); + fAliITSQADataMakerRec->Add2RecPointsList(fHistClusterTypeLayer6, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistChargeRatioLayer5 = new TH1F("fHistChargeRatioLayer5", + "Charge ratio - Layer 5;q_{ratio};Entries;", + 100,-2.0,2.0); + fAliITSQADataMakerRec->Add2RecPointsList(fHistChargeRatioLayer5, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistChargeRatioLayer6 = new TH1F("fHistChargeRatioLayer6", + "Charge ratio - Layer 6;q_{ratio};Entries;", + 100,-2.0,2.0); + fAliITSQADataMakerRec->Add2RecPointsList(fHistChargeRatioLayer6, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistChargekeVLayer5 = new TH1F("fHistChargekeVLayer5", + "Charge - Layer 5;q [keV];Entries;", + 100,0.,300.); + fAliITSQADataMakerRec->Add2RecPointsList(fHistChargekeVLayer5, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistChargekeVLayer6 = new TH1F("fHistChargekeVLayer6", + "Charge - Layer 6;q [keV];Entries;", + 100,0.,300.); + fAliITSQADataMakerRec->Add2RecPointsList(fHistChargekeVLayer6, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistChargeADCLayer5 = new TH1F("fHistChargeADCLayer5", + "Charge - Layer 5;q [ADC];Entries;", + 100,0.,300.); + fAliITSQADataMakerRec->Add2RecPointsList(fHistChargeADCLayer5, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistChargeADCLayer6 = new TH1F("fHistChargeADCLayer6", + "Charge - Layer 6;q [ADC];Entries;", + 100,0.,300.); + fAliITSQADataMakerRec->Add2RecPointsList(fHistChargeADCLayer6, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH2F *fHistChargeMapLayer5 = new TH2F("fHistChargeMapLayer5", + "Charge map;N_{modules};N_{Ladders}", + fgkSSDMODULESPERLADDERLAYER5, + -0.5,fgkSSDMODULESPERLADDERLAYER5+0.5, + 3*fgkSSDLADDERSLAYER5, + -0.5,fgkSSDLADDERSLAYER5+0.5); + fAliITSQADataMakerRec->Add2RecPointsList(fHistChargeMapLayer5, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH2F *fHistChargeMapLayer6 = new TH2F("fHistChargeMapLayer6", + "Charge map;N_{modules};N_{Ladders}", + fgkSSDMODULESPERLADDERLAYER6, + -0.5,fgkSSDMODULESPERLADDERLAYER6+0.5, + 3*fgkSSDLADDERSLAYER6, + -0.5,fgkSSDLADDERSLAYER6+0.5); + fAliITSQADataMakerRec->Add2RecPointsList(fHistChargeMapLayer6, + fGenOffset + fSSDhTask); + fSSDhTask += 1; // custom code here -//fSSDhRecs must be incremented by one unit every time a histogram is ADDED to the QA List +//fSSDhTask must be incremented by one unit every time a histogram is ADDED to the QA List - AliDebug(1,Form("%d SSD Recs histograms booked\n",fSSDhRecs)); + AliDebug(1,Form("%d SSD Recs histograms booked\n",fSSDhTask)); } //____________________________________________________________________________ @@ -616,9 +617,8 @@ void AliITSQASSDDataMakerRec::MakeRecPoints(TTree *clustersTree) AliError("can't get the branch with the ITS clusters !"); return; } - static TClonesArray recEmpty("AliITSRecPoint",1000); - recEmpty.Clear(); - TClonesArray *recpoints = &recEmpty; + static TClonesArray statRecpoints("AliITSRecPoint"); + TClonesArray *recpoints = &statRecpoints; branchRecP->SetAddress(&recpoints); Int_t npoints = 0; Float_t cluglo[3]={0.,0.,0.}; @@ -667,6 +667,8 @@ void AliITSQASSDDataMakerRec::MakeRecPoints(TTree *clustersTree) }//layer 6 histograms }//rec. points loop }//module loop + + statRecpoints.Clear(); } //____________________________________________________________________________ @@ -679,23 +681,23 @@ void AliITSQASSDDataMakerRec::MakeRecPoints(TTree *clustersTree) ";P_{T} [GeV/c];dN/dP_{T}", 100,0.1,10.1); fAliITSQADataMakerRec->Add2ESDPointsList(fHistSSDTrackPt, - fESDsOffset + fSSDhESDs); - fSSDhESDs += 1; + fESDsOffset + fSSDhTask); + fSSDhTask += 1; TH1F *fHistSSDTrackEta = new TH1F("fHistSSDTrackEta", ";#eta;dN/d#eta", 40,-2.,2.); fAliITSQADataMakerRec->Add2ESDPointsList(fHistSSDTrackEta, - fESDsOffset + fSSDhESDs); - fSSDhESDs += 1; + fESDsOffset + fSSDhTask); + fSSDhTask += 1; TH1F *fHistSSDTrackPhi = new TH1F("fHistSSDTrackPhi", ";#phi;dN/d#phi", 100,0,2.*TMath::Pi()); fAliITSQADataMakerRec->Add2ESDPointsList(fHistSSDTrackPhi, - fESDsOffset + fSSDhESDs); - fSSDhESDs += 1; + fESDsOffset + fSSDhTask); + fSSDhTask += 1; - AliDebug(1,Form("%d SSD ESDs histograms booked\n",fSSDhESDs)); - AliInfo(Form("Number of histograms (ITS): %d\n",fESDsOffset+fSSDhESDs)); + AliDebug(1,Form("%d SSD ESDs histograms booked\n",fSSDhTask)); + AliInfo(Form("Number of histograms (ITS): %d\n",fESDsOffset+fSSDhTask)); } //____________________________________________________________________________ diff --git a/ITS/AliITSQASSDDataMakerRec.h b/ITS/AliITSQASSDDataMakerRec.h index 51d4b7b6397..61261a30023 100644 --- a/ITS/AliITSQASSDDataMakerRec.h +++ b/ITS/AliITSQASSDDataMakerRec.h @@ -3,7 +3,7 @@ /* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * * See cxx source for full Copyright notice */ -/* $Id:$ */ +/* $Id$ */ // // Checks the quality assurance. @@ -38,10 +38,8 @@ public: virtual void StartOfDetectorCycle(); virtual void EndOfDetectorCycle(AliQA::TASKINDEX_t task, TObjArray * list); virtual ~AliITSQASSDDataMakerRec(); // dtor - Int_t Raws() { return fSSDhRaws; } - Int_t Recs() { return fSSDhRecs; } - Int_t ESDs() { return fSSDhESDs; } Int_t GetOffset() { return fGenOffset; } + Int_t GetTaskHisto() { return fSSDhTask; } private: @@ -63,10 +61,8 @@ public: Bool_t fkOnline; //online (1) or offline (0) use Int_t fLDC; //LDC number (0 for offline, 1 to 4 for online) Int_t fSSDRawsOffset; // SSD raw data plot offset - Int_t fSSDhRaws; // number of histo booked for Raws SSD - Int_t fSSDhRecs; // number of histo booked for Recs SSD - Int_t fSSDhESDs; // number of histo booked for ESDs SSD - Int_t fGenOffset; // qachecking offset + Int_t fSSDhTask; // number of histo booked for each SSD task + Int_t fGenOffset; // qachecking offset TH1D *fHistSSDRawSignalModule[fgkSSDMODULES]; //raw signal vs strip number - SSD ClassDef(AliITSQASSDDataMakerRec,2) // description diff --git a/ITS/AliITSQASSDDataMakerSim.cxx b/ITS/AliITSQASSDDataMakerSim.cxx index 1a91eb23a9c..33df56b09c7 100644 --- a/ITS/AliITSQASSDDataMakerSim.cxx +++ b/ITS/AliITSQASSDDataMakerSim.cxx @@ -1,276 +1,272 @@ -/************************************************************************** - * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -/* $Id$ */ - -// ************************************************************* -// Checks the quality assurance -// by comparing with reference data -// contained in a DB -// ------------------------------------------------------------- -// W. Ferrarese + P. Cerello Feb 2008 -// INFN Torino -// SSD QA part: P. Christakoglou - NIKHEF/UU - -// --- ROOT system --- -#include -#include -#include -#include -// --- Standard library --- - -// --- AliRoot header files --- -#include "AliITS.h" -#include "AliITSmodule.h" -#include "AliITShit.h" -#include "AliITSdigit.h" -#include "AliITSpListItem.h" -#include "AliRun.h" -#include "AliITSQADataMakerSim.h" -#include "AliITSQASSDDataMakerSim.h" -#include "AliLog.h" -#include "AliQA.h" -#include "AliQAChecker.h" -#include "AliRawReader.h" - -ClassImp(AliITSQASSDDataMakerSim) - -//____________________________________________________________________________ -AliITSQASSDDataMakerSim::AliITSQASSDDataMakerSim(AliITSQADataMakerSim *aliITSQADataMakerSim) : -TObject(), -fAliITSQADataMakerSim(aliITSQADataMakerSim), -fSSDhDigits(0), -fSSDhSDigits(0), -fSSDhHits(0), -fGenOffset(0) { - //ctor used to discriminate OnLine-Offline analysis -} - -//____________________________________________________________________________ -AliITSQASSDDataMakerSim::AliITSQASSDDataMakerSim(const AliITSQASSDDataMakerSim& qadm) : -TObject(), -fAliITSQADataMakerSim(qadm.fAliITSQADataMakerSim), -fSSDhDigits(qadm.fSSDhDigits), -fSSDhSDigits(qadm.fSSDhSDigits), -fSSDhHits(qadm.fSSDhHits), -fGenOffset(qadm.fGenOffset) { - //copy ctor - fAliITSQADataMakerSim->SetName((const char*)qadm.fAliITSQADataMakerSim->GetName()) ; - fAliITSQADataMakerSim->SetTitle((const char*)qadm.fAliITSQADataMakerSim->GetTitle()); - } - -//__________________________________________________________________ -AliITSQASSDDataMakerSim& AliITSQASSDDataMakerSim::operator = (const AliITSQASSDDataMakerSim& qac ) { - // Equal operator. - this->~AliITSQASSDDataMakerSim(); - new(this) AliITSQASSDDataMakerSim(qac); - return *this; -} - -//____________________________________________________________________________ -void AliITSQASSDDataMakerSim::StartOfDetectorCycle() { - //Detector specific actions at start of cycle - AliDebug(1,"AliITSQADM::Start of SSD Cycle\n"); -} - -//____________________________________________________________________________ -void AliITSQASSDDataMakerSim::EndOfDetectorCycle(AliQA::TASKINDEX_t task, TObjArray* list) { - // launch the QA checking - AliDebug(1,"AliITSDM instantiates checker with Run(AliQA::kITS, task, list)\n"); - - AliQAChecker::Instance()->Run( AliQA::kITS , task, list); -} - -//____________________________________________________________________________ -void AliITSQASSDDataMakerSim::InitDigits() { - // Initialization for DIGIT data - SSD - - fGenOffset = (fAliITSQADataMakerSim->fDigitsQAList)->GetEntries(); - - // custom code here - TH1F *fHistSSDModule = new TH1F("fHistSSDDigitsModule", - ";SSD Module Number;N_{DIGITS}", - 1698,499.5,2197.5); - fAliITSQADataMakerSim->Add2DigitsList(fHistSSDModule, - fGenOffset + fSSDhDigits); - fSSDhDigits += 1; - TH2F *fHistSSDModuleStrip = new TH2F("fHistSSDDigitsModuleStrip", - ";N_{Strip};N_{Module}", - 1540,0,1540,1698,499.5,2197.5); - fAliITSQADataMakerSim->Add2DigitsList(fHistSSDModuleStrip, - fGenOffset + fSSDhDigits); - fSSDhDigits += 1; - - AliDebug(1,Form("%d SSD Digits histograms booked\n",fSSDhDigits)); - -} - -//____________________________________________________________________________ -void AliITSQASSDDataMakerSim::MakeDigits(TTree *digits) { - // Fill QA for DIGIT - SSD - - AliITS *fITS = (AliITS*)gAlice->GetModule("ITS"); - fITS->SetTreeAddress(); - TClonesArray *iSSDdigits = fITS->DigitsAddress(2); - for(Int_t iModule = 500; iModule < 2198; iModule++) { - iSSDdigits->Clear(); - digits->GetEvent(iModule); - Int_t ndigits = iSSDdigits->GetEntries(); - fAliITSQADataMakerSim->GetDigitsData(fGenOffset + 0)->Fill(iModule,ndigits); - if(ndigits != 0) - AliDebug(1,Form("Module: %d - Digits: %d",iModule,ndigits)); - - for (Int_t iDigit = 0; iDigit < ndigits; iDigit++) { - AliITSdigit *dig = (AliITSdigit*)iSSDdigits->UncheckedAt(iDigit); - Int_t fStripNumber = (dig->GetCoord1() == 0) ? dig->GetCoord2() : dig->GetCoord2() + fgkNumberOfPSideStrips; - ((TH2F *)fAliITSQADataMakerSim->GetDigitsData(fGenOffset + 1))->Fill(fStripNumber,iModule,dig->GetSignal()); - }//digit loop - }//module loop -} - -//____________________________________________________________________________ -void AliITSQASSDDataMakerSim::InitSDigits() { - // Initialization for SDIGIT data - SSD - - fGenOffset = (fAliITSQADataMakerSim->fSDigitsQAList)->GetEntries(); - - // custom code here - TH1F *fHistSSDModule = new TH1F("fHistSSDSDigitsModule", - ";SSD Module Number;N_{SDIGITS}", - 1698,499.5,2197.5); - fAliITSQADataMakerSim->Add2SDigitsList(fHistSSDModule, - fGenOffset + fSSDhSDigits); - fSSDhSDigits += 1; - - AliDebug(1,Form("%d SSD SDigits histograms booked\n",fSSDhSDigits)); -} - -//____________________________________________________________________________ -void AliITSQASSDDataMakerSim::MakeSDigits(TTree *sdigits) { - // Fill QA for SDIGIT - SSD - - static TClonesArray iSSDEmpty("AliITSpListItem",10000); - iSSDEmpty.Clear(); - TClonesArray *iSSDsdigits = &iSSDEmpty; - - TBranch *brchSDigits = sdigits->GetBranch("ITS"); - brchSDigits->SetAddress(&iSSDsdigits); - for(Int_t iModule = 500; iModule < 2198; iModule++) { - iSSDsdigits->Clear(); - sdigits->GetEvent(iModule); - Int_t ndigits = iSSDsdigits->GetEntries(); - fAliITSQADataMakerSim->GetSDigitsData(fGenOffset + 0)->Fill(iModule,ndigits); - if(ndigits != 0) - AliDebug(1,Form("Module: %d - Digits: %d",iModule,ndigits)); - - for (Int_t iDigit = 0; iDigit < ndigits; iDigit++) { - AliITSpListItem *dig=(AliITSpListItem*)iSSDsdigits->At(iDigit); - dig=0; - }//digit loop - }//module loop -} - -//____________________________________________________________________________ -void AliITSQASSDDataMakerSim::InitHits() { - // Initialization for HITS data - SSD - - fGenOffset = (fAliITSQADataMakerSim->fHitsQAList)->GetEntries(); - - // custom code here - TH1F *fHistSSDModule = new TH1F("fHistSSDHitsModule", - ";SDD Module Number;N_{HITS}", - 1698,499.5,2197.5); - fAliITSQADataMakerSim->Add2HitsList(fHistSSDModule, - fGenOffset + fSSDhHits); - fSSDhHits += 1; - TH1F *fHistSSDGlobalX = new TH1F("fHistSSDHitsGlobalX", - ";x [cm];Entries", - 1000,-50.,50.); - fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalX, - fGenOffset + fSSDhHits); - fSSDhHits += 1; - TH1F *fHistSSDGlobalY = new TH1F("fHistSSDHitsGlobalY", - ";y [cm];Entries", - 1000,-50.,50.); - fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalY, - fGenOffset + fSSDhHits); - fSSDhHits += 1; - TH1F *fHistSSDGlobalZ = new TH1F("fHistSSDHitsGlobalZ", - ";z [cm];Entries", - 1000,-60.,60.); - fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalZ, - fGenOffset + fSSDhHits); - fSSDhHits += 1; - TH1F *fHistSSDLocalX = new TH1F("fHistSSDHitsLocalX", - ";x [cm];Entries", - 1000,-4.,4.); - fAliITSQADataMakerSim->Add2HitsList(fHistSSDLocalX, - fGenOffset + fSSDhHits); - fSSDhHits += 1; - TH1F *fHistSSDLocalY = new TH1F("fHistSSDHitsLocalY", - ";y [cm];Entries", - 1000,-0.1,0.1); - fAliITSQADataMakerSim->Add2HitsList(fHistSSDLocalY, - fGenOffset + fSSDhHits); - fSSDhHits += 1; - TH1F *fHistSSDLocalZ = new TH1F("fHistSSDHitsLocalZ", - ";z [cm];Entries", - 1000,-4.,4.); - fAliITSQADataMakerSim->Add2HitsList(fHistSSDLocalZ, - fGenOffset + fSSDhHits); - fSSDhHits += 1; - TH1F *fHistSSDIonization = new TH1F("fHistSSDHitsIonization", - ";log(dE/dx) [KeV];N_{Hits}", - 100,-7,-2); - fAliITSQADataMakerSim->Add2HitsList(fHistSSDIonization, - fGenOffset + fSSDhHits); - fSSDhHits += 1; - TH2F *fHistSSDGlobalXY = new TH2F("fHistSSDHitsGlobalXY", - ";x [cm];y [cm]", - 1000,-50.,50., - 1000,-50.,50.); - fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalXY, - fGenOffset + fSSDhHits); - fSSDhHits += 1; - - AliDebug(1,Form("%d SSD Hits histograms booked\n",fSSDhHits)); -} - - -//____________________________________________________________________________ -void AliITSQASSDDataMakerSim::MakeHits(TTree *hits) { - // Fill QA for HITS - SSD - - AliITS *fITS = (AliITS*)gAlice->GetModule("ITS"); - fITS->SetTreeAddress(); - Int_t nmodules; - fITS->InitModules(-1,nmodules); - fITS->FillModules(hits,0); - for(Int_t iModule = 500; iModule < 2198; iModule++) { - AliITSmodule *module = fITS->GetModule(iModule); - TObjArray *arrHits = module->GetHits(); - Int_t nhits = arrHits->GetEntriesFast(); - if(nhits != 0) - AliDebug(1,Form("Module: %d - Hits: %d",iModule,nhits)); - for (Int_t iHit = 0; iHit < nhits; iHit++) { - AliITShit *hit = (AliITShit*) arrHits->At(iHit); - - fAliITSQADataMakerSim->GetHitsData(fGenOffset + 0)->Fill(iModule); - fAliITSQADataMakerSim->GetHitsData(fGenOffset + 1)->Fill(hit->GetXG()); - fAliITSQADataMakerSim->GetHitsData(fGenOffset + 2)->Fill(hit->GetYG()); - fAliITSQADataMakerSim->GetHitsData(fGenOffset + 3)->Fill(hit->GetZG()); - fAliITSQADataMakerSim->GetHitsData(fGenOffset + 4)->Fill(hit->GetXL()); - fAliITSQADataMakerSim->GetHitsData(fGenOffset + 5)->Fill(hit->GetYL()); - fAliITSQADataMakerSim->GetHitsData(fGenOffset + 6)->Fill(hit->GetZL()); - if(hit->GetIonization()) - fAliITSQADataMakerSim->GetHitsData(fGenOffset + 7)->Fill(TMath::Log10(hit->GetIonization())); - fAliITSQADataMakerSim->GetHitsData(fGenOffset + 8)->Fill(hit->GetXG(),hit->GetYG()); - }//hit loop - }//module loop -} +/************************************************************************** + * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +/* $Id$ */ + +// ************************************************************* +// Checks the quality assurance +// by comparing with reference data +// contained in a DB +// ------------------------------------------------------------- +// W. Ferrarese + P. Cerello Feb 2008 +// INFN Torino +// SSD QA part: P. Christakoglou - NIKHEF/UU + +// --- ROOT system --- +#include +#include +#include +#include +// --- Standard library --- + +// --- AliRoot header files --- +#include "AliITS.h" +#include "AliITSmodule.h" +#include "AliITShit.h" +#include "AliITSdigit.h" +#include "AliITSpListItem.h" +#include "AliRun.h" +#include "AliITSQADataMakerSim.h" +#include "AliITSQASSDDataMakerSim.h" +#include "AliLog.h" +#include "AliQA.h" +#include "AliQAChecker.h" +#include "AliRawReader.h" + +ClassImp(AliITSQASSDDataMakerSim) + +//____________________________________________________________________________ +AliITSQASSDDataMakerSim::AliITSQASSDDataMakerSim(AliITSQADataMakerSim *aliITSQADataMakerSim) : +TObject(), +fAliITSQADataMakerSim(aliITSQADataMakerSim), +fSSDhTask(0), +fGenOffset(0) { + //ctor used to discriminate OnLine-Offline analysis +} + +//____________________________________________________________________________ +AliITSQASSDDataMakerSim::AliITSQASSDDataMakerSim(const AliITSQASSDDataMakerSim& qadm) : +TObject(), +fAliITSQADataMakerSim(qadm.fAliITSQADataMakerSim), +fSSDhTask(qadm.fSSDhTask), +fGenOffset(qadm.fGenOffset) { + //copy ctor + fAliITSQADataMakerSim->SetName((const char*)qadm.fAliITSQADataMakerSim->GetName()) ; + fAliITSQADataMakerSim->SetTitle((const char*)qadm.fAliITSQADataMakerSim->GetTitle()); + } + +//__________________________________________________________________ +AliITSQASSDDataMakerSim& AliITSQASSDDataMakerSim::operator = (const AliITSQASSDDataMakerSim& qac ) { + // Equal operator. + this->~AliITSQASSDDataMakerSim(); + new(this) AliITSQASSDDataMakerSim(qac); + return *this; +} + +//____________________________________________________________________________ +void AliITSQASSDDataMakerSim::StartOfDetectorCycle() { + //Detector specific actions at start of cycle + AliDebug(1,"AliITSQADM::Start of SSD Cycle\n"); +} + +//____________________________________________________________________________ +void AliITSQASSDDataMakerSim::EndOfDetectorCycle(AliQA::TASKINDEX_t /*task*/, TObjArray* /*list*/) { + // launch the QA checking + AliDebug(1,"AliITSDM instantiates checker with Run(AliQA::kITS, task, list)\n"); + + //AliQAChecker::Instance()->Run( AliQA::kITS , task, list); +} + +//____________________________________________________________________________ +void AliITSQASSDDataMakerSim::InitDigits() { + // Initialization for DIGIT data - SSD - + fGenOffset = (fAliITSQADataMakerSim->fDigitsQAList)->GetEntries(); + + // custom code here + TH1F *fHistSSDModule = new TH1F("fHistSSDDigitsModule", + ";SSD Module Number;N_{DIGITS}", + 1698,499.5,2197.5); + fAliITSQADataMakerSim->Add2DigitsList(fHistSSDModule, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH2F *fHistSSDModuleStrip = new TH2F("fHistSSDDigitsModuleStrip", + ";N_{Strip};N_{Module}", + 1540,0,1540,1698,499.5,2197.5); + fAliITSQADataMakerSim->Add2DigitsList(fHistSSDModuleStrip, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + + AliDebug(1,Form("%d SSD Digits histograms booked\n",fSSDhTask)); + +} + +//____________________________________________________________________________ +void AliITSQASSDDataMakerSim::MakeDigits(TTree *digits) { + // Fill QA for DIGIT - SSD - + AliITS *fITS = (AliITS*)gAlice->GetModule("ITS"); + fITS->SetTreeAddress(); + TClonesArray *iSSDdigits = fITS->DigitsAddress(2); + for(Int_t iModule = 500; iModule < 2198; iModule++) { + iSSDdigits->Clear(); + digits->GetEvent(iModule); + Int_t ndigits = iSSDdigits->GetEntries(); + fAliITSQADataMakerSim->GetDigitsData(fGenOffset + 0)->Fill(iModule,ndigits); + if(ndigits != 0) + AliDebug(1,Form("Module: %d - Digits: %d",iModule,ndigits)); + + for (Int_t iDigit = 0; iDigit < ndigits; iDigit++) { + AliITSdigit *dig = (AliITSdigit*)iSSDdigits->UncheckedAt(iDigit); + Int_t fStripNumber = (dig->GetCoord1() == 0) ? dig->GetCoord2() : dig->GetCoord2() + fgkNumberOfPSideStrips; + ((TH2F *)fAliITSQADataMakerSim->GetDigitsData(fGenOffset + 1))->Fill(fStripNumber,iModule,dig->GetSignal()); + }//digit loop + }//module loop +} + +//____________________________________________________________________________ +void AliITSQASSDDataMakerSim::InitSDigits() { + // Initialization for SDIGIT data - SSD - + fGenOffset = (fAliITSQADataMakerSim->fSDigitsQAList)->GetEntries(); + + // custom code here + TH1F *fHistSSDModule = new TH1F("fHistSSDSDigitsModule", + ";SSD Module Number;N_{SDIGITS}", + 1698,499.5,2197.5); + fAliITSQADataMakerSim->Add2SDigitsList(fHistSSDModule, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + + AliDebug(1,Form("%d SSD SDigits histograms booked\n",fSSDhTask)); +} + +//____________________________________________________________________________ +void AliITSQASSDDataMakerSim::MakeSDigits(TTree *sdigits) { + // Fill QA for SDIGIT - SSD - + static TClonesArray iSSDEmpty("AliITSpListItem",10000); + iSSDEmpty.Clear(); + TClonesArray *iSSDsdigits = &iSSDEmpty; + + TBranch *brchSDigits = sdigits->GetBranch("ITS"); + brchSDigits->SetAddress(&iSSDsdigits); + for(Int_t iModule = 500; iModule < 2198; iModule++) { + iSSDsdigits->Clear(); + sdigits->GetEvent(iModule); + Int_t ndigits = iSSDsdigits->GetEntries(); + fAliITSQADataMakerSim->GetSDigitsData(fGenOffset + 0)->Fill(iModule,ndigits); + if(ndigits != 0) + AliDebug(1,Form("Module: %d - Digits: %d",iModule,ndigits)); + + for (Int_t iDigit = 0; iDigit < ndigits; iDigit++) { + AliITSpListItem *dig=(AliITSpListItem*)iSSDsdigits->At(iDigit); + dig=0; + }//digit loop + }//module loop +} + +//____________________________________________________________________________ +void AliITSQASSDDataMakerSim::InitHits() { + // Initialization for HITS data - SSD - + fGenOffset = (fAliITSQADataMakerSim->fHitsQAList)->GetEntries(); + + // custom code here + TH1F *fHistSSDModule = new TH1F("fHistSSDHitsModule", + ";SDD Module Number;N_{HITS}", + 1698,499.5,2197.5); + fAliITSQADataMakerSim->Add2HitsList(fHistSSDModule, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistSSDGlobalX = new TH1F("fHistSSDHitsGlobalX", + ";x [cm];Entries", + 1000,-50.,50.); + fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalX, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistSSDGlobalY = new TH1F("fHistSSDHitsGlobalY", + ";y [cm];Entries", + 1000,-50.,50.); + fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalY, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistSSDGlobalZ = new TH1F("fHistSSDHitsGlobalZ", + ";z [cm];Entries", + 1000,-60.,60.); + fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalZ, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistSSDLocalX = new TH1F("fHistSSDHitsLocalX", + ";x [cm];Entries", + 1000,-4.,4.); + fAliITSQADataMakerSim->Add2HitsList(fHistSSDLocalX, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistSSDLocalY = new TH1F("fHistSSDHitsLocalY", + ";y [cm];Entries", + 1000,-0.1,0.1); + fAliITSQADataMakerSim->Add2HitsList(fHistSSDLocalY, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistSSDLocalZ = new TH1F("fHistSSDHitsLocalZ", + ";z [cm];Entries", + 1000,-4.,4.); + fAliITSQADataMakerSim->Add2HitsList(fHistSSDLocalZ, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH1F *fHistSSDIonization = new TH1F("fHistSSDHitsIonization", + ";log(dE/dx) [KeV];N_{Hits}", + 100,-7,-2); + fAliITSQADataMakerSim->Add2HitsList(fHistSSDIonization, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + TH2F *fHistSSDGlobalXY = new TH2F("fHistSSDHitsGlobalXY", + ";x [cm];y [cm]", + 1000,-50.,50., + 1000,-50.,50.); + fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalXY, + fGenOffset + fSSDhTask); + fSSDhTask += 1; + + AliDebug(1,Form("%d SSD Hits histograms booked\n",fSSDhTask)); +} + + +//____________________________________________________________________________ +void AliITSQASSDDataMakerSim::MakeHits(TTree *hits) { + // Fill QA for HITS - SSD - + AliITS *fITS = (AliITS*)gAlice->GetModule("ITS"); + fITS->SetTreeAddress(); + Int_t nmodules; + fITS->InitModules(-1,nmodules); + fITS->FillModules(hits,0); + for(Int_t iModule = 500; iModule < 2198; iModule++) { + AliITSmodule *module = fITS->GetModule(iModule); + TObjArray *arrHits = module->GetHits(); + Int_t nhits = arrHits->GetEntriesFast(); + if(nhits != 0) + AliDebug(1,Form("Module: %d - Hits: %d",iModule,nhits)); + for (Int_t iHit = 0; iHit < nhits; iHit++) { + AliITShit *hit = (AliITShit*) arrHits->At(iHit); + + fAliITSQADataMakerSim->GetHitsData(fGenOffset + 0)->Fill(iModule); + fAliITSQADataMakerSim->GetHitsData(fGenOffset + 1)->Fill(hit->GetXG()); + fAliITSQADataMakerSim->GetHitsData(fGenOffset + 2)->Fill(hit->GetYG()); + fAliITSQADataMakerSim->GetHitsData(fGenOffset + 3)->Fill(hit->GetZG()); + fAliITSQADataMakerSim->GetHitsData(fGenOffset + 4)->Fill(hit->GetXL()); + fAliITSQADataMakerSim->GetHitsData(fGenOffset + 5)->Fill(hit->GetYL()); + fAliITSQADataMakerSim->GetHitsData(fGenOffset + 6)->Fill(hit->GetZL()); + if(hit->GetIonization()) + fAliITSQADataMakerSim->GetHitsData(fGenOffset + 7)->Fill(TMath::Log10(hit->GetIonization())); + fAliITSQADataMakerSim->GetHitsData(fGenOffset + 8)->Fill(hit->GetXG(),hit->GetYG()); + }//hit loop + }//module loop +} diff --git a/ITS/AliITSQASSDDataMakerSim.h b/ITS/AliITSQASSDDataMakerSim.h index 0b17cb4275d..35ef86a0660 100644 --- a/ITS/AliITSQASSDDataMakerSim.h +++ b/ITS/AliITSQASSDDataMakerSim.h @@ -38,17 +38,13 @@ public: virtual void MakeDigits(TTree * digits); virtual void MakeSDigits(TTree * sdigits); virtual void MakeHits(TTree * hits); - const Int_t Digits() { return fSSDhDigits; } - const Int_t SDigits() { return fSSDhSDigits; } - const Int_t Hits() { return fSSDhHits; } Int_t GetOffset() { return fGenOffset; } + Int_t GetTaskHisto() { return fSSDhTask; } private: AliITSQADataMakerSim *fAliITSQADataMakerSim; //pointer to the main ctor - Int_t fSSDhDigits; //number of booked SSD Digits histograms; - Int_t fSSDhSDigits; //number of booked SSD SDigits histograms; - Int_t fSSDhHits; //number of booked SSD Hits histograms; + Int_t fSSDhTask; //number of booked SSD histograms for each task; Int_t fGenOffset; // qachecking offset static const Int_t fgkNumberOfPSideStrips = 768; //number of P-side strips diff --git a/ITS/QARef/SDD/Run0_999999999_v0_s0.root b/ITS/QARef/SDD/Run0_999999999_v0_s0.root new file mode 100755 index 0000000000000000000000000000000000000000..8d4963a17f6a5868fdd141cc0d62866531e2b107 GIT binary patch literal 7629 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 literal 0 HcmV?d00001 -- 2.39.3