From: masera Date: Wed, 23 Apr 2008 16:00:00 +0000 (+0000) Subject: QA for pixels: completed DataMakerRec with Raws. Implemented Digits and Hits QA for... X-Git-Url: http://git.uio.no/git/?a=commitdiff_plain;h=379510c25f30ac9edf935d773c3ecf5a916441b9;p=u%2Fmrichter%2FAliRoot.git QA for pixels: completed DataMakerRec with Raws. Implemented Digits and Hits QA for DataMakerSim (D. Elia and M. Nicassio) --- diff --git a/ITS/AliITSQASPDDataMakerRec.cxx b/ITS/AliITSQASPDDataMakerRec.cxx index 2df2439fb6e..eff19188fd2 100644 --- a/ITS/AliITSQASPDDataMakerRec.cxx +++ b/ITS/AliITSQASPDDataMakerRec.cxx @@ -37,11 +37,14 @@ #include "AliLog.h" #include "AliQA.h" #include "AliRawReader.h" +#include "AliITSRawStreamSPD.h" +#include "AliITSRawStreamSPDErrorLog.h" #include "AliITSRecPoint.h" + ClassImp(AliITSQASPDDataMakerRec) //____________________________________________________________________________ -AliITSQASPDDataMakerRec::AliITSQASPDDataMakerRec(AliITSQADataMakerRec *aliITSQADataMakerRec, Bool_t kMode, Short_t ldc) : +AliITSQASPDDataMakerRec::AliITSQASPDDataMakerRec(AliITSQADataMakerRec *aliITSQADataMakerRec, Bool_t kMode, Short_t ldc, AliITSRawStreamSPDErrorLog *aliITSRawStreamSPDErrorLog) : TObject(), fAliITSQADataMakerRec(aliITSQADataMakerRec), fkOnline(kMode), @@ -49,7 +52,8 @@ fLDC(ldc), fSPDhRaws(0), fSPDhRecs(0), fRawsOffset(0), -fRecsOffset(0) +fRecsOffset(0), +fAdvLogger(aliITSRawStreamSPDErrorLog) { //ctor used to discriminate OnLine-Offline analysis } @@ -63,7 +67,8 @@ fLDC(qadm.fLDC), fSPDhRaws(qadm.fSPDhRaws), fSPDhRecs(qadm.fSPDhRecs), fRawsOffset(qadm.fRawsOffset), -fRecsOffset(qadm.fRecsOffset) +fRecsOffset(qadm.fRecsOffset), +fAdvLogger(qadm.fAdvLogger) { //copy ctor fAliITSQADataMakerRec->SetName((const char*)qadm.fAliITSQADataMakerRec->GetName()) ; @@ -73,7 +78,7 @@ fRecsOffset(qadm.fRecsOffset) //__________________________________________________________________ AliITSQASPDDataMakerRec::~AliITSQASPDDataMakerRec(){ // destructor - +// delete fAdvLogger; } //__________________________________________________________________ @@ -107,19 +112,121 @@ void AliITSQASPDDataMakerRec::InitRaws() // Initialization for RAW data - SPD - fRawsOffset = (fAliITSQADataMakerRec->fRawsQAList)->GetEntries(); - // custom code here + Char_t name[50]; + Char_t title[50]; - //fSPDhRaws must be incremented by one unit every time a histogram is ADDED to the QA List + 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+fRawsOffset); + fSPDhRaws++; + TH1F **hmod = new TH1F*[2]; + TH2F **hhitMap = new TH2F*[20]; + TH1F **herrors = new TH1F*[20]; + for (Int_t iLay=0; iLay<2; iLay++) { + sprintf(name,"ModPattern_SPD%d",iLay+1); + sprintf(title,"Module map - SPD Layer %d",iLay+1); + 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 +fRawsOffset); + fSPDhRaws++; + } + fAdvLogger = new AliITSRawStreamSPDErrorLog(); + for (Int_t iDDL=0; iDDL<20; iDDL++) { + sprintf(name,"HitMap_SPD_DDL%d",iDDL+1); + sprintf(title,"Hit map - SPD DDL %d",iDDL+1); + 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 +fRawsOffset); + fSPDhRaws++; + 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 +fRawsOffset); + fSPDhRaws++; + } + + TH1F** hMultSPDhits = new TH1F*[2]; + for (Int_t iLay=0; iLay<2; iLay++) { + sprintf(name,"HitsMultiplicity_SPD%d",iLay+1); + sprintf(title,"Hit multiplicity - SPD Layer %d",iLay+1); + 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+fRawsOffset); + fSPDhRaws++; + } + + 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+fRawsOffset); + fSPDhRaws++; + AliDebug(1,Form("%d SPD Raws histograms booked\n",fSPDhRaws)); } //____________________________________________________________________________ -void AliITSQASPDDataMakerRec::MakeRaws(AliRawReader* /*rawReader*/) +void AliITSQASPDDataMakerRec::MakeRaws(AliRawReader* rawReader) { // Fill QA for RAW - SPD - + rawReader->Reset(); + AliITSRawStreamSPD *rawStreamSPD = new AliITSRawStreamSPD(rawReader); + rawStreamSPD->ActivateAdvancedErrorLog(kTRUE,fAdvLogger); + + Int_t nDigitsL1 = 0; + Int_t nDigitsL2 = 0; + Int_t iEq; + Int_t iLayer; + Int_t iHalfStave, iChip; + Int_t col, row; + UInt_t module, colM, rowM; + while(rawStreamSPD->Next()) { + + iEq = rawReader->GetDDLID(); + if (iEq>=0 && iEq<20) { + iHalfStave = rawStreamSPD->GetHalfStaveNr(); + iChip = rawStreamSPD->GetChipAddr(); + col = rawStreamSPD->GetChipCol(); + row = rawStreamSPD->GetChipRow(); + + rawStreamSPD->OnlineToOffline(iEq, iHalfStave, iChip, col, row, module, colM, rowM); + + if (iHalfStave>=0 && iHalfStave<2) iLayer=0; + else iLayer=1; + + fAliITSQADataMakerRec->GetRawsData(0+fRawsOffset)->Fill(iLayer); + if (iLayer==0) { + fAliITSQADataMakerRec->GetRawsData(1+fRawsOffset)->Fill(module); + nDigitsL1++; + } else { + fAliITSQADataMakerRec->GetRawsData(2+fRawsOffset)->Fill(module); + nDigitsL2++; + } + + fAliITSQADataMakerRec->GetRawsData((2*iEq)+3+fRawsOffset)->Fill(colM+(module%2)*160,rowM+iHalfStave*256); + } + + } + for (Int_t ieq=0; ieq<20; ieq++) + for (Int_t ierr=0; ierrGetNrErrorCodes(); ierr++) + fAliITSQADataMakerRec->GetRawsData((2*ieq)+4+fRawsOffset)->Fill(ierr,fAdvLogger->GetNrErrors(ierr,ieq)); + + fAdvLogger->Reset(); + + fAliITSQADataMakerRec->GetRawsData(43+fRawsOffset)->Fill(nDigitsL1); + fAliITSQADataMakerRec->GetRawsData(44+fRawsOffset)->Fill(nDigitsL2); + fAliITSQADataMakerRec->GetRawsData(45+fRawsOffset)->Fill(nDigitsL1,nDigitsL2); + + delete rawStreamSPD; + AliDebug(1,Form("Event completed, %d raw digits read",nDigitsL1+nDigitsL2)); } //____________________________________________________________________________ diff --git a/ITS/AliITSQASPDDataMakerRec.h b/ITS/AliITSQASPDDataMakerRec.h index 1956a0d9e18..7570186145b 100644 --- a/ITS/AliITSQASPDDataMakerRec.h +++ b/ITS/AliITSQASPDDataMakerRec.h @@ -17,13 +17,15 @@ class TObjArray; class AliRawReader; +class AliITSRawStreamSPDErrorLog; class AliITSQADataMakerRec; class AliQA; class AliITSQASPDDataMakerRec : public TObject { public: - AliITSQASPDDataMakerRec(AliITSQADataMakerRec *aliITSQADataMakerRec, Bool_t kMode = kFALSE, Short_t ldc = 0); //ctor + AliITSQASPDDataMakerRec(AliITSQADataMakerRec *aliITSQADataMakerRec, Bool_t kMode = kFALSE, Short_t ldc = 0, + AliITSRawStreamSPDErrorLog *aliITSRawStreamSPDErrorLog = NULL); //ctor AliITSQASPDDataMakerRec(const AliITSQASPDDataMakerRec& qadm); AliITSQASPDDataMakerRec& operator = (const AliITSQASPDDataMakerRec& qac); virtual void InitRaws(); @@ -42,7 +44,6 @@ private: static const Int_t fgkLADDonLay1 = 80; //number of modules on layer 1 static const Int_t fgkLADDonLay2 = 160; //number of modules on layer 2 - 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) @@ -51,10 +52,10 @@ private: Int_t fRawsOffset; // number of histo booked when SPD start Int_t fRecsOffset; // number of histo booked when SPD start + AliITSRawStreamSPDErrorLog *fAdvLogger; // pointer to special error logger object ClassDef(AliITSQASPDDataMakerRec,2) // description }; #endif - diff --git a/ITS/AliITSQASPDDataMakerSim.cxx b/ITS/AliITSQASPDDataMakerSim.cxx index 2fc0824a289..80a858a25f9 100644 --- a/ITS/AliITSQASPDDataMakerSim.cxx +++ b/ITS/AliITSQASPDDataMakerSim.cxx @@ -1,162 +1,337 @@ -/************************************************************************** - * 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 - -// --- ROOT system --- -#include -// --- Standard library --- - -// --- AliRoot header files --- -#include "AliITSQADataMakerSim.h" -#include "AliITSQASPDDataMakerSim.h" -#include "AliLog.h" -#include "AliQA.h" -#include "AliQAChecker.h" -#include "AliRawReader.h" - -ClassImp(AliITSQASPDDataMakerSim) - -//____________________________________________________________________________ -AliITSQASPDDataMakerSim::AliITSQASPDDataMakerSim(AliITSQADataMakerSim *aliITSQADataMakerSim) : -TObject(), -fAliITSQADataMakerSim(aliITSQADataMakerSim), -fSPDhDigits(0), -fSPDhSDigits(0), -fSPDhHits(0), -fDigitsOffset(0), -fSDigitsOffset(0), -fHitsOffset(0) -{ - //ctor used to discriminate OnLine-Offline analysis -} - -//____________________________________________________________________________ -AliITSQASPDDataMakerSim::AliITSQASPDDataMakerSim(const AliITSQASPDDataMakerSim& qadm) : -TObject(), -fAliITSQADataMakerSim(qadm.fAliITSQADataMakerSim), -fSPDhDigits(qadm.fSPDhDigits), -fSPDhSDigits(qadm.fSPDhSDigits), -fSPDhHits(qadm.fSPDhHits), -fDigitsOffset(qadm.fDigitsOffset), -fSDigitsOffset(qadm.fSDigitsOffset), -fHitsOffset(qadm.fHitsOffset) -{ - //copy ctor - fAliITSQADataMakerSim->SetName((const char*)qadm.fAliITSQADataMakerSim->GetName()) ; - fAliITSQADataMakerSim->SetTitle((const char*)qadm.fAliITSQADataMakerSim->GetTitle()); - } - -//__________________________________________________________________ -AliITSQASPDDataMakerSim& AliITSQASPDDataMakerSim::operator = (const AliITSQASPDDataMakerSim& qac ) -{ - // Equal operator. - this->~AliITSQASPDDataMakerSim(); - new(this) AliITSQASPDDataMakerSim(qac); - return *this; -} - -//____________________________________________________________________________ -void AliITSQASPDDataMakerSim::StartOfDetectorCycle() -{ - //Detector specific actions at start of cycle - AliDebug(1,"AliITSQADM::Start of SPD Cycle\n"); -} - -//____________________________________________________________________________ -void AliITSQASPDDataMakerSim::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 AliITSQASPDDataMakerSim::InitDigits() -{ - // Initialization for DIGIT data - SPD - - fDigitsOffset = (fAliITSQADataMakerSim->fDigitsQAList)->GetEntries(); - - // custom code here - - //fSPDhDigits must be incremented by one unit every time a histogram is ADDED to the QA List - - AliDebug(1,Form("%d SPD Digits histograms booked\n",fSPDhDigits)); - -} - - -//____________________________________________________________________________ -void AliITSQASPDDataMakerSim::MakeDigits(TTree * /*digits*/) -{ - // Fill QA for DIGIT - SPD - -} - - - - -//____________________________________________________________________________ -void AliITSQASPDDataMakerSim::InitSDigits() -{ - // Initialization for SDIGIT data - SPD - - fSDigitsOffset = (fAliITSQADataMakerSim->fSDigitsQAList)->GetEntries(); - - // custom code here - - //fSPDhSDigits must be incremented by one unit every time a histogram is ADDED to the QA List - - AliDebug(1,Form("%d SPD SDigits histograms booked\n",fSPDhSDigits)); - -} - - -//____________________________________________________________________________ -void AliITSQASPDDataMakerSim::MakeSDigits(TTree * /*sdigits*/) -{ - // Fill QA for SDIGIT - SPD - -} - - - - - -//____________________________________________________________________________ -void AliITSQASPDDataMakerSim::InitHits() -{ - // Initialization for HITS data - SPD - - fHitsOffset = (fAliITSQADataMakerSim->fHitsQAList)->GetEntries(); - - // custom code here - - //fSPDhHits must be incremented by one unit every time a histogram is ADDED to the QA List - - AliDebug(1,Form("%d SPD Hits histograms booked\n",fSPDhHits)); - -} - - -//____________________________________________________________________________ -void AliITSQASPDDataMakerSim::MakeHits(TTree * /*hits*/) -{ - // Fill QA for HITS - SPD - -} +/************************************************************************** + * 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 INFN Torino Feb 2008 +// M. Nicassio D. Elia INFN Bari April 2008 +// maria.nicassio@ba.infn.it + +// --- ROOT system --- +#include +#include +#include +// --- Standard library --- + +// --- AliRoot header files --- +#include "AliRun.h" +#include "AliITSQADataMakerSim.h" +#include "AliITSQASPDDataMakerSim.h" +#include "AliQA.h" +#include "AliQAChecker.h" +#include "AliITSdigit.h" +#include "AliITSdigitSPD.h" +#include "AliITS.h" +#include "AliITSmodule.h" +#include "AliITShit.h" +#include "AliITSLoader.h" +#include "AliRunLoader.h" + +ClassImp(AliITSQASPDDataMakerSim) + +//____________________________________________________________________________ +AliITSQASPDDataMakerSim::AliITSQASPDDataMakerSim(AliITSQADataMakerSim *aliITSQADataMakerSim) : +TObject(), +fAliITSQADataMakerSim(aliITSQADataMakerSim), +fSPDhDigits(0), +fSPDhSDigits(0), +fSPDhHits(0), +fDigitsOffset(0), +fSDigitsOffset(0), +fHitsOffset(0) +{ + //ctor used to discriminate OnLine-Offline analysis +} + +//____________________________________________________________________________ +AliITSQASPDDataMakerSim::AliITSQASPDDataMakerSim(const AliITSQASPDDataMakerSim& qadm) : +TObject(), +fAliITSQADataMakerSim(qadm.fAliITSQADataMakerSim), +fSPDhDigits(qadm.fSPDhDigits), +fSPDhSDigits(qadm.fSPDhSDigits), +fSPDhHits(qadm.fSPDhHits), +fDigitsOffset(qadm.fDigitsOffset), +fSDigitsOffset(qadm.fSDigitsOffset), +fHitsOffset(qadm.fHitsOffset) +{ + //copy ctor + fAliITSQADataMakerSim->SetName((const char*)qadm.fAliITSQADataMakerSim->GetName()) ; + fAliITSQADataMakerSim->SetTitle((const char*)qadm.fAliITSQADataMakerSim->GetTitle()); + } + +//__________________________________________________________________ +AliITSQASPDDataMakerSim& AliITSQASPDDataMakerSim::operator = (const AliITSQASPDDataMakerSim& qac ) +{ + // Equal operator. + this->~AliITSQASPDDataMakerSim(); + new(this) AliITSQASPDDataMakerSim(qac); + return *this; +} + +//____________________________________________________________________________ +void AliITSQASPDDataMakerSim::StartOfDetectorCycle() +{ + //Detector specific actions at start of cycle + AliDebug(1,"AliITSQADM::Start of SPD Cycle\n"); +} + +//____________________________________________________________________________ +void AliITSQASPDDataMakerSim::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 AliITSQASPDDataMakerSim::InitDigits() +{ + // Initialization for DIGIT data - SPD - + + fDigitsOffset = (fAliITSQADataMakerSim->fDigitsQAList)->GetEntries(); + //fSPDhDigits must be incremented by one unit every time a histogram is ADDED to the QA List + + Char_t name[50]; + Char_t title[50]; + + TH1F *hlayer = new TH1F("LayPattern_SPD","Layer map - SPD",6,0.,6.); + hlayer->GetXaxis()->SetTitle("Layer number"); + hlayer->GetYaxis()->SetTitle("Entries"); + fAliITSQADataMakerSim->Add2DigitsList(hlayer,1+fDigitsOffset); + fSPDhDigits++; + + TH1F **hmod = new TH1F*[2]; + for (Int_t iLay=0; iLay<2; iLay++) { + sprintf(name,"ModPattern_SPD%d",iLay+1); + sprintf(title,"Module map - SPD Layer %d",iLay+1); + hmod[iLay]=new TH1F(name,title,240,0,240); + hmod[iLay]->GetXaxis()->SetTitle("Module number"); + hmod[iLay]->GetYaxis()->SetTitle("Entries"); + fAliITSQADataMakerSim->Add2DigitsList(hmod[iLay],2+iLay+fDigitsOffset); + fSPDhDigits++; + } + + TH1F *hcolumns = new TH1F("Columns_SPD","Columns - SPD",160,0.,160.); + hcolumns->GetXaxis()->SetTitle("Column number"); + hcolumns->GetYaxis()->SetTitle("Entries"); + fAliITSQADataMakerSim->Add2DigitsList(hcolumns,4+fDigitsOffset); + fSPDhDigits++; + + TH1F *hrows = new TH1F("Rows_SPD","Rows - SPD",256,0.,256.); + hrows->GetXaxis()->SetTitle("Row number"); + hrows->GetYaxis()->SetTitle("Entries"); + fAliITSQADataMakerSim->Add2DigitsList(hrows,5+fDigitsOffset); + fSPDhDigits++; + + TH1F** hMultSPDdigits = new TH1F*[2]; + for (Int_t iLay=0; iLay<2; ++iLay) { + sprintf(name,"DigitMultiplicity_SPD%d",iLay+1); + sprintf(title,"Digit multiplicity - SPD Layer %d",iLay+1); + hMultSPDdigits[iLay]=new TH1F(name,title,200,0.,200.); + hMultSPDdigits[iLay]->GetXaxis()->SetTitle("Digit multiplicity"); + hMultSPDdigits[iLay]->GetYaxis()->SetTitle("Entries"); + fAliITSQADataMakerSim->Add2DigitsList(hMultSPDdigits[iLay], 6+iLay+fDigitsOffset); + fSPDhDigits++; + } + + 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,8+fDigitsOffset); + fSPDhDigits++; + + AliDebug(1,Form("%d SPD Digits histograms booked\n",fSPDhDigits)); + +} + +//____________________________________________________________________________ +void AliITSQASPDDataMakerSim::MakeDigits(TTree *digits) +{ + // Fill QA for DIGIT - SPD - + AliITS *fITS = (AliITS*)gAlice->GetModule("ITS"); + fITS->SetTreeAddress(); + TClonesArray *iITSdigits = fITS->DigitsAddress(0); // 0->SPD + + Int_t nDigitsL1=0; + Int_t nDigitsL2=0; + + for (Int_t imod=0; imod<240; ++imod){ + digits->GetEvent(imod); + Int_t ndigits = iITSdigits->GetEntries(); + if (imod<80) { + fAliITSQADataMakerSim->GetDigitsData(1+fDigitsOffset)->Fill(0.5,ndigits); + fAliITSQADataMakerSim->GetDigitsData(2+fDigitsOffset)->Fill(imod,ndigits); + nDigitsL1+=ndigits; + } + else { + fAliITSQADataMakerSim->GetDigitsData(1+fDigitsOffset)->Fill(1,ndigits); + fAliITSQADataMakerSim->GetDigitsData(3+fDigitsOffset)->Fill(imod,ndigits); + nDigitsL2+=ndigits; + } + for (Int_t idig=0; idigUncheckedAt(idig); + Int_t col=dig->GetCoord1(); // cell number z + Int_t row=dig->GetCoord2(); // cell number x + fAliITSQADataMakerSim->GetDigitsData(4+fDigitsOffset)->Fill(col); + fAliITSQADataMakerSim->GetDigitsData(5+fDigitsOffset)->Fill(row); + } + } + fAliITSQADataMakerSim->GetDigitsData(6+fDigitsOffset)->Fill(nDigitsL1); + fAliITSQADataMakerSim->GetDigitsData(7+fDigitsOffset)->Fill(nDigitsL2); + fAliITSQADataMakerSim->GetDigitsData(8+fDigitsOffset)->Fill(nDigitsL1,nDigitsL2); +} + +//____________________________________________________________________________ +void AliITSQASPDDataMakerSim::InitSDigits() +{ + // Initialization for SDIGIT data - SPD - + fSDigitsOffset = (fAliITSQADataMakerSim->fSDigitsQAList)->GetEntries(); + + //fSPDhSDigits must be incremented by one unit every time a histogram is ADDED to the QA List + Char_t name[50]; + Char_t title[50]; + + TH1F *hlayer = new TH1F("LayPattern_SPD","Layer map - SPD",6,0.,6.); + hlayer->GetXaxis()->SetTitle("Layer number"); + hlayer->GetYaxis()->SetTitle("Entries"); + fAliITSQADataMakerSim->Add2SDigitsList(hlayer,1+fSDigitsOffset); + fSPDhSDigits++; + + TH1F **hmod = new TH1F*[2]; + for (Int_t iLay=0; iLay<2; ++iLay) { + sprintf(name,"ModPattern_SPD%d",iLay+1); + sprintf(title,"Module map - SPD Layer %d",iLay+1); + hmod[iLay]=new TH1F(name,title,240,0,240); + hmod[iLay]->GetXaxis()->SetTitle("Module number"); + hmod[iLay]->GetYaxis()->SetTitle("Entries"); + fAliITSQADataMakerSim->Add2SDigitsList(hmod[iLay],2+iLay+fSDigitsOffset); + fSPDhSDigits++; + } + + + AliDebug(1,Form("%d SPD SDigits histograms booked\n",fSPDhSDigits)); + +} + +//____________________________________________________________________________ +void AliITSQASPDDataMakerSim::MakeSDigits(TTree *sdigits) +{ + // Fill QA for SDIGIT - SPD - + TBranch *brchSDigits = sdigits->GetBranch("ITS"); + for (Int_t imod=0; imod<240; ++imod){ + TClonesArray * sdig = new TClonesArray( "AliITSpListItem",1000 ); + brchSDigits->SetAddress( &sdig ); + brchSDigits->GetEvent(imod); + Int_t nsdig=sdig->GetEntries(); + if (imod<80) { + fAliITSQADataMakerSim->GetSDigitsData(1+fSDigitsOffset)->Fill(0.5,nsdig); + fAliITSQADataMakerSim->GetSDigitsData(2+fSDigitsOffset)->Fill(imod,nsdig); + } + else { + fAliITSQADataMakerSim->GetSDigitsData(1+fSDigitsOffset)->Fill(1,nsdig); + fAliITSQADataMakerSim->GetSDigitsData(3+fSDigitsOffset)->Fill(imod,nsdig); + } + delete sdig; + } + +} + +//____________________________________________________________________________ +void AliITSQASPDDataMakerSim::InitHits() +{ + // Initialization for HITS data - SPD - + fHitsOffset = (fAliITSQADataMakerSim->fHitsQAList)->GetEntries(); + + //fSPDhHits must be incremented by one unit every time a histogram is ADDED to the QA List + Char_t name[50]; + Char_t title[50]; + + TH1F *hlayer = new TH1F("LayPattern_SPD","Layer map - SPD",6,0.,6.); + hlayer->GetXaxis()->SetTitle("Layer number"); + hlayer->GetYaxis()->SetTitle("Entries"); + fAliITSQADataMakerSim->Add2HitsList(hlayer,1+fHitsOffset); + fSPDhHits++; + + TH1F **hmod = new TH1F*[2]; + for (Int_t iLay=0; iLay<2; ++iLay) { + sprintf(name,"ModPattern_SPD%d",iLay+1); + sprintf(title,"Module map - SPD Layer %d",iLay+1); + hmod[iLay]=new TH1F(name,title,240,0,240); + hmod[iLay]->GetXaxis()->SetTitle("Module number"); + hmod[iLay]->GetYaxis()->SetTitle("Entries"); + fAliITSQADataMakerSim->Add2HitsList(hmod[iLay],2+iLay+fHitsOffset); + fSPDhHits++; + } + + 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,4+fHitsOffset); + fSPDhHits++; + + 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,5+fHitsOffset); + fSPDhHits++; + + AliDebug(1,Form("%d SPD Hits histograms booked\n",fSPDhHits)); + +} + +//____________________________________________________________________________ +void AliITSQASPDDataMakerSim::MakeHits(TTree *hits) +{ + // Fill QA for HITS - SPD - + AliITS *fITS = (AliITS*)gAlice->GetModule("ITS"); + fITS->SetTreeAddress(); + Int_t nmodules; + fITS->InitModules(-1,nmodules); //-1->number of modules taken from AliITSgeom class kept in fITSgeom + //nmodules is set + + fITS->FillModules(hits,0); + + for (Int_t imod=0; imod<240; ++imod){ + AliITSmodule *module = fITS->GetModule(imod); + TObjArray *arrHits = module->GetHits(); + Int_t nhits = arrHits->GetEntriesFast(); + if (imod<80) { + fAliITSQADataMakerSim->GetHitsData(1+fHitsOffset)->Fill(0.5,nhits); + fAliITSQADataMakerSim->GetHitsData(2+fHitsOffset)->Fill(imod,nhits); + } else { + fAliITSQADataMakerSim->GetHitsData(1+fHitsOffset)->Fill(1,nhits); + fAliITSQADataMakerSim->GetHitsData(3+fHitsOffset)->Fill(imod,nhits); + } + //printf("--w--AliITSQASPDDataMakerSim::MakeHits nhits = %d\n",nhits); + for (Int_t iHit=0; iHitAt(iHit); + Double_t xl,yl,zl,xl0,yl0,zl0; + Double_t tof,tof0; + hit->GetPositionL(xl,yl,zl,tof); + hit->GetPositionL0(xl0,yl0,zl0,tof0); + Float_t dyloc=TMath::Abs(yl-yl0)*10000.; + fAliITSQADataMakerSim->GetHitsData(4+fHitsOffset)->Fill(dyloc); + Float_t edep=hit->GetIonization()*1000000; + if(dyloc>180.){ + fAliITSQADataMakerSim->GetHitsData(5+fHitsOffset)->Fill(edep); + } + } + } +} diff --git a/ITS/AliITSQASPDDataMakerSim.h b/ITS/AliITSQASPDDataMakerSim.h index 137079ce43b..a4bc3e9b302 100644 --- a/ITS/AliITSQASPDDataMakerSim.h +++ b/ITS/AliITSQASPDDataMakerSim.h @@ -1,60 +1,61 @@ -#ifndef AliITSQASPDDataMakerSim_H -#define AliITSQASPDDataMakerSim_H -/* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - - -// -// Checks the quality assurance. -// By comparing with reference data -// contained in a DB -// -// -// W. Ferrarese + P. Cerello Feb 2008 - -/* $Id$ */ - -#include "AliQA.h" -class AliITSQADataMakerSim; -class TObjArray; -class TClonesArray; - -class AliITSQASPDDataMakerSim : public TObject { - -public: - AliITSQASPDDataMakerSim(AliITSQADataMakerSim *aliITSQADataMakerSim); //ctor - AliITSQASPDDataMakerSim(const AliITSQASPDDataMakerSim& qadm); - AliITSQASPDDataMakerSim& operator = (const AliITSQASPDDataMakerSim& qac); - - virtual void StartOfDetectorCycle(); - virtual void EndOfDetectorCycle(AliQA::TASKINDEX_t task, TObjArray * list); - virtual ~AliITSQASPDDataMakerSim() {;} // dtor - virtual void InitDigits(); - virtual void InitSDigits(); - virtual void InitHits(); - virtual void MakeDigits(TClonesArray * /*digits*/){;} - virtual void MakeSDigits(TClonesArray * /*sdigits*/){;} - virtual void MakeHits(TClonesArray * /*hits*/){;} - 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; } - -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 fDigitsOffset; // number of histo booked when SPD start - Int_t fSDigitsOffset; // number of histo booked when SPD start - Int_t fHitsOffset; // number of histo booked when SPD start - ClassDef(AliITSQASPDDataMakerSim,1) // description - -}; - -#endif - - +#ifndef AliITSQASPDDataMakerSim_H +#define AliITSQASPDDataMakerSim_H +/* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + + +// +// Checks the quality assurance. +// By comparing with reference data +// contained in a DB +// +// +// W. Ferrarese + P. Cerello Feb 2008 +// + + +/* $Id$ */ + +#include "AliQA.h" +class AliITSQADataMakerSim; +class TObjArray; +class TClonesArray; + +class AliITSQASPDDataMakerSim : public TObject { + +public: + AliITSQASPDDataMakerSim(AliITSQADataMakerSim *aliITSQADataMakerSim); //ctor + AliITSQASPDDataMakerSim(const AliITSQASPDDataMakerSim& qadm); + AliITSQASPDDataMakerSim& operator = (const AliITSQASPDDataMakerSim& qac); + + virtual void StartOfDetectorCycle(); + virtual void EndOfDetectorCycle(AliQA::TASKINDEX_t task, TObjArray * list); + virtual ~AliITSQASPDDataMakerSim() {;} // dtor + virtual void InitDigits(); + virtual void InitSDigits(); + virtual void InitHits(); + virtual void MakeDigits(TClonesArray * /*digits*/){;} + virtual void MakeSDigits(TClonesArray * /*sdigits*/){;} + virtual void MakeHits(TClonesArray * /*hits*/){;} + 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; } + +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 fDigitsOffset; // number of histo booked when SPD start + Int_t fSDigitsOffset; // number of histo booked when SPD start + Int_t fHitsOffset; // number of histo booked when SPD start + ClassDef(AliITSQASPDDataMakerSim,1) // description + +}; + +#endif +