From: schutz Date: Sun, 30 Sep 2007 17:08:20 +0000 (+0000) Subject: Introducing the notion of QA data acquisition cycle (needed by online) X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=commitdiff_plain;h=5b188f2fb5932efab374ef63cdae4d8d000f2e79 Introducing the notion of QA data acquisition cycle (needed by online) --- diff --git a/PHOS/AliPHOSDigitizer.cxx b/PHOS/AliPHOSDigitizer.cxx index e776cc07233..cc874cc9231 100644 --- a/PHOS/AliPHOSDigitizer.cxx +++ b/PHOS/AliPHOSDigitizer.cxx @@ -18,6 +18,9 @@ /* History of cvs commits: * * $Log$ + * Revision 1.98 2007/09/26 14:22:17 cvetan + * Important changes to the reconstructor classes. Complete elimination of the run-loaders, which are now steered only from AliReconstruction. Removal of the corresponding Reconstruct() and FillESD() methods. + * * Revision 1.97 2007/08/07 14:12:03 kharlov * Quality assurance added (Yves Schutz) * @@ -191,7 +194,11 @@ AliPHOSDigitizer::AliPHOSDigitizer(TString alirunFileName, fManager = 0 ; // We work in the standalong mode //Initialize the quality assurance data maker only once fQADM = new AliPHOSQualAssDataMaker() ; - GetQualAssDataMaker()->Init(AliQualAss::kDIGITS) ; + //FIXME: get the run number + Int_t run = 0 ; + //EMXIF + GetQualAssDataMaker()->Init(AliQualAss::kDIGITS, run, fgkCycles) ; + GetQualAssDataMaker()->StartOfCycle(AliQualAss::kDIGITS) ; } //____________________________________________________________________________ @@ -228,7 +235,11 @@ AliPHOSDigitizer::AliPHOSDigitizer(const AliPHOSDigitizer & d) : SetName(d.GetName()) ; SetTitle(d.GetTitle()) ; //Initialize the quality assurance data maker only once - GetQualAssDataMaker()->Init(AliQualAss::kDIGITS) ; + //FIXME: get the run number + Int_t run = 0 ; + //EMXIF + GetQualAssDataMaker()->Init(AliQualAss::kDIGITS, run, fgkCycles) ; + GetQualAssDataMaker()->StartOfCycle(AliQualAss::kDIGITS) ; } //____________________________________________________________________________ @@ -268,7 +279,11 @@ AliPHOSDigitizer::AliPHOSDigitizer(AliRunDigitizer * rd) : fDefaultInit = kFALSE ; //Initialize the quality assurance data maker only once fQADM = new AliPHOSQualAssDataMaker() ; - GetQualAssDataMaker()->Init(AliQualAss::kDIGITS) ; + //FIXME: get the run number + Int_t run = 0 ; + //EMXIF + GetQualAssDataMaker()->Init(AliQualAss::kDIGITS, run) ; + GetQualAssDataMaker()->StartOfCycle(AliQualAss::kDIGITS) ; } //____________________________________________________________________________ @@ -628,7 +643,12 @@ void AliPHOSDigitizer::Exec(Option_t *option) Digitize(ievent) ; //Add prepared SDigits to digits and add the noise //makes the quality assurance data + if (GetQualAssDataMaker()->IsCycleDone() ) { + GetQualAssDataMaker()->EndOfCycle(AliQualAss::kDIGITS) ; + GetQualAssDataMaker()->StartOfCycle(AliQualAss::kDIGITS) ; + } GetQualAssDataMaker()->Exec(AliQualAss::kDIGITS, gime->Digits()) ; + GetQualAssDataMaker()->Increment() ; WriteDigits() ; @@ -640,8 +660,10 @@ void AliPHOSDigitizer::Exec(Option_t *option) } //Write the quality assurance data only after the last event - if ( fEventCounter == gime->MaxEvent() ) + if ( fEventCounter == gime->MaxEvent() ) { + GetQualAssDataMaker()->EndOfCycle(AliQualAss::kDIGITS) ; GetQualAssDataMaker()->Finish(AliQualAss::kDIGITS) ; + } gime->PhosLoader()->CleanDigitizer(); diff --git a/PHOS/AliPHOSDigitizer.h b/PHOS/AliPHOSDigitizer.h index 203567849ac..d47b45b8d6f 100644 --- a/PHOS/AliPHOSDigitizer.h +++ b/PHOS/AliPHOSDigitizer.h @@ -8,6 +8,9 @@ /* History of cvs commits: * * $Log$ + * Revision 1.35 2007/08/07 14:12:03 kharlov + * Quality assurance added (Yves Schutz) + * * Revision 1.34 2006/04/29 20:25:30 hristov * Decalibration is implemented (Yu.Kharlov) * @@ -145,8 +148,11 @@ private: Int_t fLastEvent; // last event to process AliPHOSQualAssDataMaker * fQADM ; //!Quality Assurance Data Maker Int_t fEventCounter ; //! counts the events processed + + //QA stuff + static const Int_t fgkCycles = 9999 ; // QA data accumulation cycle - ClassDef(AliPHOSDigitizer,3) // description + ClassDef(AliPHOSDigitizer,4) // description }; diff --git a/PHOS/AliPHOSQualAssDataMaker.cxx b/PHOS/AliPHOSQualAssDataMaker.cxx index 931c8b8f865..59dac0f2034 100644 --- a/PHOS/AliPHOSQualAssDataMaker.cxx +++ b/PHOS/AliPHOSQualAssDataMaker.cxx @@ -49,9 +49,6 @@ ClassImp(AliPHOSQualAssDataMaker) AliQualAssDataMaker(AliQualAss::GetDetName(AliQualAss::kPHOS), "PHOS Quality Assurance Data Maker") { // ctor - fDetectorDir = fOutput->GetDirectory(GetName()) ; - if (!fDetectorDir) - fDetectorDir = fOutput->mkdir(GetName()) ; } //____________________________________________________________________________ @@ -72,6 +69,12 @@ AliPHOSQualAssDataMaker& AliPHOSQualAssDataMaker::operator = (const AliPHOSQualA return *this; } +//____________________________________________________________________________ +void AliPHOSQualAssDataMaker::EndOfDetectorCycle() +{ + //Detector specific actions at end of cycle +} + //____________________________________________________________________________ void AliPHOSQualAssDataMaker::InitESDs() { @@ -233,7 +236,7 @@ void AliPHOSQualAssDataMaker::MakeDigits(TObject * data) // } //____________________________________________________________________________ -void AliPHOSQualAssDataMaker::MakeRaws(TTree * clustersTree) +void AliPHOSQualAssDataMaker::MakeRaws(TObject * data) { GetRawsData(1)->Fill(99) ; } @@ -314,3 +317,10 @@ void AliPHOSQualAssDataMaker::MakeSDigits(TObject * data) // fhTrackSegments->Fill( ts->GetCpvDistance()) ; // } // } + +//____________________________________________________________________________ +void AliPHOSQualAssDataMaker::StartOfDetectorCycle() +{ + //Detector specific actions at start of cycle + +} diff --git a/PHOS/AliPHOSQualAssDataMaker.h b/PHOS/AliPHOSQualAssDataMaker.h index 0fbcb1c96c7..664195ccd0e 100644 --- a/PHOS/AliPHOSQualAssDataMaker.h +++ b/PHOS/AliPHOSQualAssDataMaker.h @@ -31,6 +31,7 @@ public: virtual ~AliPHOSQualAssDataMaker() {;} // dtor private: + virtual void EndOfDetectorCycle() ; virtual void InitHits() ; virtual void InitESDs() ; virtual void InitDigits() ; @@ -44,10 +45,11 @@ private: virtual void MakeDigits(TObject * digits) ; // virtual void MakeRecParticles(TTree * recpar) ; virtual void MakeRecPoints(TTree * recpo) ; - virtual void MakeRaws(TTree * recpo) ; + virtual void MakeRaws(TObject * data) ; virtual void MakeSDigits(TObject * sigits) ; //virtual void MakeTrackSegments(TTree *ts ) ; - + virtual void StartOfDetectorCycle() ; + ClassDef(AliPHOSQualAssDataMaker,1) // description }; diff --git a/PHOS/AliPHOSSDigitizer.cxx b/PHOS/AliPHOSSDigitizer.cxx index 5e079322cba..1f874acd2c3 100644 --- a/PHOS/AliPHOSSDigitizer.cxx +++ b/PHOS/AliPHOSSDigitizer.cxx @@ -7,8 +7,7 @@ * 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 * + * copies and that both the copyright notice and this permission notice *Ă„Qual * 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. * **************************************************************************/ @@ -19,6 +18,9 @@ /* History of cvs commits: * * $Log$ + * Revision 1.52 2007/09/26 14:22:18 cvetan + * Important changes to the reconstructor classes. Complete elimination of the run-loaders, which are now steered only from AliReconstruction. Removal of the corresponding Reconstruct() and FillESD() methods. + * * Revision 1.51 2007/08/07 14:12:03 kharlov * Quality assurance added (Yves Schutz) * @@ -123,9 +125,14 @@ AliPHOSSDigitizer::AliPHOSSDigitizer(const char * alirunFileName, InitParameters() ; Init(); fDefaultInit = kFALSE ; - // Intialize the quality assurance data maker - GetQualAssDataMaker()->Init(AliQualAss::kHITS) ; - GetQualAssDataMaker()->Init(AliQualAss::kSDIGITS) ; + // Intialize the quality assurance data maker + //FIXME: get the run number + Int_t run = 0 ; + //EMXIF + GetQualAssDataMaker()->Init(AliQualAss::kHITS, run, fgkCycles) ; + GetQualAssDataMaker()->StartOfCycle(AliQualAss::kHITS) ; + GetQualAssDataMaker()->Init(AliQualAss::kSDIGITS, run) ; + GetQualAssDataMaker()->StartOfCycle(AliQualAss::kSDIGITS, "same") ; } //____________________________________________________________________________ @@ -143,11 +150,15 @@ AliPHOSSDigitizer::AliPHOSSDigitizer(const AliPHOSSDigitizer& sd) : { // cpy ctor // Intialize the quality assurance data maker - GetQualAssDataMaker()->Init(AliQualAss::kHITS) ; - GetQualAssDataMaker()->Init(AliQualAss::kSDIGITS) ; + //FIXME: get the run number + Int_t run = 0 ; + //EMXIF + GetQualAssDataMaker()->Init(AliQualAss::kHITS, run, fgkCycles) ; + GetQualAssDataMaker()->StartOfCycle(AliQualAss::kHITS) ; + GetQualAssDataMaker()->Init(AliQualAss::kSDIGITS, run) ; + GetQualAssDataMaker()->StartOfCycle(AliQualAss::kSDIGITS, "same") ; } - //_____________________________________________________________________________ AliPHOSSDigitizer& AliPHOSSDigitizer::operator = (const AliPHOSSDigitizer& qa) { @@ -278,10 +289,16 @@ void AliPHOSSDigitizer::Exec(Option_t *option) // make Quality Assurance data + if (GetQualAssDataMaker()->IsCycleDone() ) { + GetQualAssDataMaker()->EndOfCycle(AliQualAss::kHITS) ; + GetQualAssDataMaker()->EndOfCycle(AliQualAss::kSDIGITS) ; + GetQualAssDataMaker()->StartOfCycle(AliQualAss::kHITS) ; + GetQualAssDataMaker()->StartOfCycle(AliQualAss::kSDIGITS, "same") ; + } GetQualAssDataMaker()->Exec(AliQualAss::kHITS, hits) ; GetQualAssDataMaker()->Exec(AliQualAss::kSDIGITS, sdigits) ; - - + GetQualAssDataMaker()->Increment() ; + //Now write SDigits @@ -306,6 +323,8 @@ void AliPHOSSDigitizer::Exec(Option_t *option) }// event loop //Write the quality assurance data + GetQualAssDataMaker()->EndOfCycle(AliQualAss::kHITS) ; + GetQualAssDataMaker()->EndOfCycle(AliQualAss::kSDIGITS) ; GetQualAssDataMaker()->Finish(AliQualAss::kHITS) ; GetQualAssDataMaker()->Finish(AliQualAss::kSDIGITS) ; diff --git a/PHOS/AliPHOSSDigitizer.h b/PHOS/AliPHOSSDigitizer.h index 994e79c16dc..59692c4ff53 100644 --- a/PHOS/AliPHOSSDigitizer.h +++ b/PHOS/AliPHOSSDigitizer.h @@ -9,6 +9,9 @@ /* History of cvs commits: * * $Log$ + * Revision 1.27 2007/08/07 14:12:03 kharlov + * Quality assurance added (Yves Schutz) + * * Revision 1.26 2006/08/28 10:01:56 kharlov * Effective C++ warnings fixed (Timur Pocheptsov) * @@ -79,9 +82,11 @@ private: Int_t fSDigitsInRun ; //! Total number of sdigits in one run Int_t fFirstEvent; // first event to process Int_t fLastEvent; // last event to process + AliPHOSQualAssDataMaker * fQADM ; //!Quality Assurance Data Maker + static const Int_t fgkCycles = 9999 ; // QA data accumulation cycle - ClassDef(AliPHOSSDigitizer,3) // description + ClassDef(AliPHOSSDigitizer,4) // description }; diff --git a/STEER/AliQualAss.cxx b/STEER/AliQualAss.cxx index 0cd7b7abbc4..04bdc4f31a4 100644 --- a/STEER/AliQualAss.cxx +++ b/STEER/AliQualAss.cxx @@ -45,10 +45,10 @@ ClassImp(AliQualAss) AliQualAss * AliQualAss::fgQA = 0x0 ; TFile * AliQualAss::fgDataFile = 0x0 ; - TString AliQualAss::fgDataName = "QA.root" ; + TString AliQualAss::fgDataName = "QAData" ; TString AliQualAss::fgDetNames[] = {"ITS", "TPC", "TRD", "TOF", "PHOS", "HMPID", "EMCAL", "MUON", "FMD", "ZDC", "PMD", "T0", "VZERO", "ACORDE", "HLT"} ; - TString AliQualAss::fgTaskNames[] = {"Hits", "SDigits", "Digits", "RecPoints", "TrackSegments", "RecParticles", "ESDs"} ; + TString AliQualAss::fgTaskNames[] = {"Raws", "Hits", "SDigits", "Digits", "RecPoints", "TrackSegments", "RecParticles", "ESDs"} ; //____________________________________________________________________________ AliQualAss::AliQualAss() : @@ -162,18 +162,26 @@ const Bool_t AliQualAss::CheckRange(QABIT bit) const //_______________________________________________________________ -TFile * AliQualAss::GetQADMOutFile() +TFile * AliQualAss::GetQADMOutFile(Int_t run, Int_t cycle) { // opens the file to store the detectors Quality Assurance Data Maker results - + char temp[100] ; + sprintf(temp, "%s_%d_%d.root", fgDataName.Data(), run, cycle) ; + TString opt ; if (! fgDataFile ) { - TString opt ; - if (gSystem->AccessPathName(fgDataName.Data())) + if (gSystem->AccessPathName(temp)) + opt = "NEW" ; + else + opt = "UPDATE" ; + fgDataFile = TFile::Open(temp, opt.Data()) ; + } else { + if ( (strcmp(temp, fgDataFile->GetName()) != 0) ) { + if (gSystem->AccessPathName(temp)) opt = "NEW" ; else opt = "UPDATE" ; - - fgDataFile = TFile::Open(fgDataName.Data(), opt.Data()) ; + fgDataFile = TFile::Open(temp, opt.Data()) ; + } } return fgDataFile ; } diff --git a/STEER/AliQualAss.h b/STEER/AliQualAss.h index bb21d510491..ee4e68b7740 100644 --- a/STEER/AliQualAss.h +++ b/STEER/AliQualAss.h @@ -49,7 +49,7 @@ public: static const TString GetDetName(DETECTORINDEX det) { return fgDetNames[det] ; } static const TString GetTaskName(TASKINDEX tsk) { return fgTaskNames[tsk] ; } static const char * GetDetName(Int_t det) ; - static TFile * GetQADMOutFile() ; + static TFile * GetQADMOutFile(Int_t run, Int_t cycle) ; void Set(QABIT bit) ; void Show() const { ShowStatus(fDet) ; } void ShowAll() const ; diff --git a/STEER/AliQualAssDataMaker.cxx b/STEER/AliQualAssDataMaker.cxx index ebddb74dceb..7eb303be292 100644 --- a/STEER/AliQualAssDataMaker.cxx +++ b/STEER/AliQualAssDataMaker.cxx @@ -51,13 +51,16 @@ AliQualAssDataMaker::AliQualAssDataMaker(const char * name, const char * title) fHitsQAList(0x0), fRawsQAList(0x0), fRecPointsQAList(0x0), - fSDigitsQAList(0x0) + fSDigitsQAList(0x0), + fCurrentCycle(-1), + fCycle(9999999), + fCycleCounter(0), + fRun(0) { // ctor TString tmp(GetName()) ; tmp.Append("QA") ; SetName(tmp.Data()) ; - fOutput = AliQualAss::GetQADMOutFile() ; fDetectorDirName = GetName() ; } @@ -71,7 +74,11 @@ AliQualAssDataMaker::AliQualAssDataMaker(const AliQualAssDataMaker& qadm) : fHitsQAList(qadm.fHitsQAList), fRawsQAList(qadm.fRecPointsQAList), fRecPointsQAList(qadm.fRecPointsQAList), - fSDigitsQAList(qadm.fSDigitsQAList) + fSDigitsQAList(qadm.fSDigitsQAList), + fCurrentCycle(qadm.fCurrentCycle), + fCycle(qadm.fCycle), + fCycleCounter(qadm.fCycleCounter), + fRun(qadm.fRun) { //copy ctor fDetectorDirName = GetName() ; @@ -86,15 +93,59 @@ AliQualAssDataMaker& AliQualAssDataMaker::operator = (const AliQualAssDataMaker& return *this; } +//____________________________________________________________________________ +void AliQualAssDataMaker::EndOfCycle(AliQualAss::TASKINDEX task) +{ + // Finishes a cycle of QA data acquistion + + EndOfDetectorCycle() ; + TDirectory * subDir = fDetectorDir->GetDirectory(AliQualAss::GetTaskName(task)) ; + + switch (task) { + + case AliQualAss::kRAWS: + subDir->cd() ; + fRawsQAList->Write() ; + break ; + + case AliQualAss::kHITS: + subDir->cd() ; + fHitsQAList->Write() ; + break ; + + case AliQualAss::kSDIGITS: + subDir->cd() ; + fSDigitsQAList->Write() ; + break ; + + case AliQualAss::kDIGITS: + subDir->cd() ; + fDigitsQAList->Write() ; + break ; + + case AliQualAss::kRECPOINTS: + subDir->cd() ; + fRecPointsQAList->Write() ; + break ; + + case AliQualAss::kTRACKSEGMENTS: + break ; + + case AliQualAss::kRECPARTICLES: + break ; + + case AliQualAss::kESDS: + subDir->cd() ; + fESDsQAList->Write() ; + break ; + } +} + //____________________________________________________________________________ void AliQualAssDataMaker::Exec(AliQualAss::TASKINDEX task, TObject * data) { // creates the quality assurance data for the various tasks (Hits, SDigits, Digits, ESDs) - - fDetectorDir = fOutput->GetDirectory(GetDetectorDirName()) ; - if (!fDetectorDir) - fDetectorDir = fOutput->mkdir(GetDetectorDirName()) ; - + switch (task) { case AliQualAss::kRAWS: @@ -151,127 +202,64 @@ void AliQualAssDataMaker::Exec(AliQualAss::TASKINDEX task, TObject * data) else AliError("Wrong type of esd container") ; break ; - } + } } //____________________________________________________________________________ -void AliQualAssDataMaker::Finish(AliQualAss::TASKINDEX task) const +void AliQualAssDataMaker::Finish(AliQualAss::TASKINDEX) const { - // write to the output File - - fDetectorDir->cd() ; - TDirectory * subDir = 0x0 ; - -// switch (task) { -// case AliQualAss::kHITS: - subDir = fDetectorDir->GetDirectory(AliQualAss::GetTaskName(task)) ; -// break ; - -// case AliQualAss::kSDIGITS: -// subDir = fDetectorDir->GetDirectory("SDigits") ; -// break ; - -// case AliQualAss::kDIGITS: -// subDir = fDetectorDir->GetDirectory("Digits") ; -// break ; - -// case AliQualAss::kRECPOINTS: -// subDir = fDetectorDir->GetDirectory("RecPoints") ; -// break ; - -// case AliQualAss::kTRACKSEGMENTS: -// subDir = fDetectorDir->GetDirectory("TrackSegments") ; -// break ; - -// case AliQualAss::kRECPARTICLES: -// subDir = fDetectorDir->GetDirectory("RecParticles") ; -// break ; - -// case AliQualAss::kESDS: -// subDir = fDetectorDir->GetDirectory("ESDs") ; -// break ; -// } - subDir->Write() ; + // write to the output File } //____________________________________________________________________________ -TList * AliQualAssDataMaker::Init(AliQualAss::TASKINDEX task) +TList * AliQualAssDataMaker::Init(AliQualAss::TASKINDEX task, Int_t run, Int_t cycles) { // general intialisation - TDirectory * subDir = 0x0 ; + fRun = run ; + if (cycles > 0) + SetCycle(cycles) ; + switch (task) { case AliQualAss::kRAWS: - subDir = fDetectorDir->GetDirectory("Raws") ; - if (!subDir) - subDir = fDetectorDir->mkdir("Raws") ; - subDir->cd() ; fRawsQAList = new TList() ; InitRaws() ; return fRawsQAList ; break ; case AliQualAss::kHITS: - subDir = fDetectorDir->GetDirectory("Hits") ; - if (!subDir) - subDir = fDetectorDir->mkdir("Hits") ; - subDir->cd() ; fHitsQAList = new TList() ; InitHits() ; return fHitsQAList ; break ; case AliQualAss::kSDIGITS: - subDir = fDetectorDir->GetDirectory("SDigits") ; - if (!subDir) - subDir = fDetectorDir->mkdir("SDigits") ; - subDir->cd() ; fSDigitsQAList = new TList() ; InitSDigits() ; return fSDigitsQAList ; break ; case AliQualAss::kDIGITS: - subDir = fDetectorDir->GetDirectory("Digits") ; - if (!subDir) - subDir = fDetectorDir->mkdir("Digits") ; - subDir->cd() ; fDigitsQAList = new TList(); InitDigits() ; return fDigitsQAList ; break ; case AliQualAss::kRECPOINTS: - subDir = fDetectorDir->GetDirectory("RecPoints") ; - if(!subDir) - subDir = fDetectorDir->mkdir("RecPoints") ; - subDir->cd() ; fRecPointsQAList = new TList ; InitRecPoints() ; return fRecPointsQAList ; break ; case AliQualAss::kTRACKSEGMENTS: -// subDir = fDetectorDir->GetDirectory("TrackSegments") ; -// if (!subDir) -// subDir = fDetectorDir->mkdir("TrackSegments") ; -// subDir->cd() ; // InitTrackSegments() ; break ; case AliQualAss::kRECPARTICLES: -// subDir = fDetectorDir->GetDirectory("RecParticles") ; -// if (!subDir) -// subDir = fDetectorDir->mkdir("RecParticles") ; -// subDir->cd() ; // InitRecParticles() ; break ; case AliQualAss::kESDS: - subDir = fDetectorDir->GetDirectory("ESDs") ; - if (!subDir) - subDir = fDetectorDir->mkdir("ESDs") ; - subDir->cd() ; fESDsQAList = new TList() ; InitESDs() ; return fRecPointsQAList ; @@ -279,3 +267,71 @@ TList * AliQualAssDataMaker::Init(AliQualAss::TASKINDEX task) } return 0x0 ; } + +//____________________________________________________________________________ +void AliQualAssDataMaker::StartOfCycle(AliQualAss::TASKINDEX task, Option_t * sameCycle) +{ + // Finishes a cycle of QA data acquistion + + if ( (strcmp(sameCycle, "same") != 0) ) { + fCurrentCycle++ ; + ResetCycle() ; + } else if ( !(strcmp(sameCycle, "") != 0) ) + AliFatal(Form("%s is an invalid option, valid options are: same", sameCycle)) ; + + fOutput = AliQualAss::GetQADMOutFile(fRun, fCurrentCycle) ; + + AliInfo(Form(" Run %d Cycle %d task %s file %s", + fRun, fCurrentCycle, AliQualAss::GetTaskName(task).Data(), fOutput->GetName() )) ; + + fDetectorDir = fOutput->GetDirectory(GetDetectorDirName()) ; + if (!fDetectorDir) + fDetectorDir = fOutput->mkdir(GetDetectorDirName()) ; + + TDirectory * subDir = fDetectorDir->GetDirectory(AliQualAss::GetTaskName(task)) ; + if (!subDir) + subDir = fDetectorDir->mkdir(AliQualAss::GetTaskName(task)) ; + subDir->cd() ; + + TList * list = 0x0 ; + + switch (task) { + case AliQualAss::kRAWS: + list = fRawsQAList ; + break ; + + case AliQualAss::kHITS: + list = fHitsQAList ; + break ; + + case AliQualAss::kSDIGITS: + list = fSDigitsQAList ; + break ; + + case AliQualAss::kDIGITS: + list = fDigitsQAList ; + break ; + + case AliQualAss::kRECPOINTS: + list = fRecPointsQAList ; + break ; + + case AliQualAss::kTRACKSEGMENTS: + break ; + + case AliQualAss::kRECPARTICLES: + break ; + + case AliQualAss::kESDS: + list = fESDsQAList ; + break ; + } + + TIter next(list) ; + TH1 * h ; + while ( (h = dynamic_cast(next())) ) + h->Reset() ; + + StartOfDetectorCycle() ; + +} diff --git a/STEER/AliQualAssDataMaker.h b/STEER/AliQualAssDataMaker.h index f43807cdd15..52dd37629f0 100644 --- a/STEER/AliQualAssDataMaker.h +++ b/STEER/AliQualAssDataMaker.h @@ -39,42 +39,50 @@ public: virtual ~AliQualAssDataMaker() {;} // dtor virtual void Exec(AliQualAss::TASKINDEX, TObject * data) ; + void EndOfCycle(AliQualAss::TASKINDEX) ; void Finish(AliQualAss::TASKINDEX task) const ; static const char * GetDetectorDirName() { return fDetectorDirName.Data() ; } - TList * Init(AliQualAss::TASKINDEX) ; - Int_t Add2DigitsList(TH1 * hist, Int_t index) { return Add2List(hist, index, fDigitsQAList) ; } - Int_t Add2ESDsList(TH1 * hist, Int_t index) { return Add2List(hist, index, fESDsQAList) ; } - Int_t Add2HitsList(TH1 * hist, Int_t index) { return Add2List(hist, index, fHitsQAList) ; } - Int_t Add2RecPointsList(TH1 * hist, Int_t index) { return Add2List(hist, index, fRecPointsQAList) ; } - Int_t Add2RawsList(TH1 * hist, Int_t index) { return Add2List(hist, index, fRawsQAList) ; } - Int_t Add2SDigitsList(TH1 * hist, Int_t index) { return Add2List(hist, index, fSDigitsQAList) ; } + const Int_t Increment() { return ++fCycleCounter ; } + TList * Init(AliQualAss::TASKINDEX, Int_t run, Int_t cycles = -1) ; + const Bool_t IsCycleDone() const { return fCycleCounter > fCycle ? kTRUE : kFALSE ; } + const Int_t Add2DigitsList(TH1 * hist, Int_t index) { return Add2List(hist, index, fDigitsQAList) ; } + const Int_t Add2ESDsList(TH1 * hist, Int_t index) { return Add2List(hist, index, fESDsQAList) ; } + const Int_t Add2HitsList(TH1 * hist, Int_t index) { return Add2List(hist, index, fHitsQAList) ; } + const Int_t Add2RecPointsList(TH1 * hist, Int_t index) { return Add2List(hist, index, fRecPointsQAList) ; } + const Int_t Add2RawsList(TH1 * hist, Int_t index) { return Add2List(hist, index, fRawsQAList) ; } + const Int_t Add2SDigitsList(TH1 * hist, Int_t index) { return Add2List(hist, index, fSDigitsQAList) ; } TH1 * GetDigitsData(Int_t index) { return dynamic_cast(GetData(fDigitsQAList, index)) ; } TH1 * GetESDsData(Int_t index) { return dynamic_cast(GetData(fESDsQAList, index)) ; } TH1 * GetHitsData(Int_t index) { return dynamic_cast(GetData(fHitsQAList, index)) ; } TH1 * GetRecPointsData(Int_t index) { return dynamic_cast(GetData(fRecPointsQAList, index)) ; } TH1 * GetRawsData(Int_t index) { return dynamic_cast(GetData(fRawsQAList, index)) ; } TH1 * GetSDigitsData(Int_t index) { return dynamic_cast(GetData(fSDigitsQAList, index)) ; } + void SetCycle(Int_t nevts) { fCycle = nevts ; } + void StartOfCycle(AliQualAss::TASKINDEX, Option_t * sameCycle = "") ; protected: Int_t Add2List(TH1 * hist, Int_t index, TList * list) { list->AddAt(hist, index) ; return list->LastIndex() ; } + virtual void EndOfDetectorCycle() {AliInfo("To be implemented by detectors");} TObject * GetData(TList * list, Int_t index) { return list->At(index) ; } - virtual void InitDigits() {AliInfo("To ne implemented by detectors");} - virtual void InitESDs() {AliInfo("To ne implemented by detectors");} - virtual void InitHits() {AliInfo("To ne implemented by detectors");} - //virtual void InitRecParticles() {AliInfo("To ne implemented by detectors");} - virtual void InitRecPoints() {AliInfo("To ne implemented by detectors");} - virtual void InitRaws() {AliInfo("To ne implemented by detectors");} - virtual void InitSDigits() {AliInfo("To ne implemented by detectors");} + virtual void InitDigits() {AliInfo("To be implemented by detectors");} + virtual void InitESDs() {AliInfo("To be implemented by detectors");} + virtual void InitHits() {AliInfo("To be implemented by detectors");} + //virtual void InitRecParticles() {AliInfo("To be implemented by detectors");} + virtual void InitRecPoints() {AliInfo("To be implemented by detectors");} + virtual void InitRaws() {AliInfo("To be implemented by detectors");} + virtual void InitSDigits() {AliInfo("To be implemented by detectors");} //virtual void InitTrackSegments() {AliInfo("To ne implemented by detectors");} - virtual void MakeESDs(AliESDEvent * ) {AliInfo("To ne implemented by detectors");} - virtual void MakeHits(TObject * ) {AliInfo("To ne implemented by detectors");} - virtual void MakeDigits(TObject * ) {AliInfo("To ne implemented by detectors");} - // virtual void MakeRecParticles(TClonesArray * ) {AliInfo("To ne implemented by detectors");} - virtual void MakeRaws(TObject * ) {AliInfo("To ne implemented by detectors");} - virtual void MakeRecPoints(TTree * ) {AliInfo("To ne implemented by detectors");} - virtual void MakeSDigits(TObject * ) {AliInfo("To ne implemented by detectors");} - //virtual void MakeTrackSegments(TTree * ) {AliInfo("To ne implemented by detectors");} + virtual void MakeESDs(AliESDEvent * ) {AliInfo("To be implemented by detectors");} + virtual void MakeHits(TObject * ) {AliInfo("To be implemented by detectors");} + virtual void MakeDigits(TObject * ) {AliInfo("To be implemented by detectors");} + // virtual void MakeRecParticles(TClonesArray * ) {AliInfo("To be implemented by detectors");} + virtual void MakeRaws(TObject * ) {AliInfo("To be implemented by detectors");} + virtual void MakeRecPoints(TTree * ) {AliInfo("To be implemented by detectors");} + virtual void MakeSDigits(TObject * ) {AliInfo("To be implemented by detectors");} + //virtual void MakeTrackSegments(TTree * ) {AliInfo("To be implemented by detectors");} + void ResetCycle() { fCycleCounter = 0 ; } + virtual void StartOfDetectorCycle() {AliInfo("To be implemented by detectors");} TFile * fOutput ; //! output root file TDirectory * fDetectorDir ; //! directory for the given detector in the file @@ -85,6 +93,10 @@ protected: TList * fRawsQAList ; //! list of the raws QA data objects TList * fRecPointsQAList ; //! list of the recpoints QA data objects TList * fSDigitsQAList ; //! list of the sdigits QA data objects + Int_t fCurrentCycle ; //! current cycle number + Int_t fCycle ; //! length (# events) of the QA data acquisition cycle + Int_t fCycleCounter ; //! cycle counter + Int_t fRun ; //! run number ClassDef(AliQualAssDataMaker,1) // description }; diff --git a/STEER/AliReconstruction.cxx b/STEER/AliReconstruction.cxx index 94e9a455c20..a91eff1d99f 100644 --- a/STEER/AliReconstruction.cxx +++ b/STEER/AliReconstruction.cxx @@ -230,6 +230,7 @@ AliReconstruction::AliReconstruction(const char* gAliceFilename, const char* cdb fLoader[iDet] = NULL; fTracker[iDet] = NULL; fQualAssDataMaker[iDet] = NULL; + fQACycles[iDet] = 999999; } AliPID pid; } @@ -288,6 +289,7 @@ AliReconstruction::AliReconstruction(const AliReconstruction& rec) : fLoader[iDet] = NULL; fTracker[iDet] = NULL; fQualAssDataMaker[iDet] = NULL; + fQACycles[iDet] = rec.fQACycles[iDet]; } for (Int_t i = 0; i < rec.fSpecCDBUri.GetEntriesFast(); i++) { if (rec.fSpecCDBUri[i]) fSpecCDBUri.Add(rec.fSpecCDBUri[i]->Clone()); @@ -862,6 +864,8 @@ Bool_t AliReconstruction::Run(const char* input) continue; AliQualAssDataMaker * qadm = GetQualAssDataMaker(iDet); if (!qadm) continue; + qadm->EndOfCycle(AliQualAss::kRECPOINTS); + qadm->EndOfCycle(AliQualAss::kESDS); qadm->Finish(AliQualAss::kRECPOINTS); qadm->Finish(AliQualAss::kESDS) ; } @@ -1018,6 +1022,13 @@ Bool_t AliReconstruction::RunLocalEventReconstruction(const TString& detectors) if (qadm) { AliCodeTimerStart(Form("running quality assurance data maker for %s", fgkDetectorName[iDet])); AliInfo(Form("running quality assurance data maker for %s", fgkDetectorName[iDet])); + + if (qadm->IsCycleDone() ) { + qadm->EndOfCycle(AliQualAss::kRECPOINTS) ; + qadm->EndOfCycle(AliQualAss::kESDS) ; + qadm->StartOfCycle(AliQualAss::kRECPOINTS) ; + qadm->StartOfCycle(AliQualAss::kESDS, "same") ; + } qadm->Exec(AliQualAss::kRECPOINTS, clustersTree) ; AliCodeTimerStop(Form("running quality assurance data maker for %s", fgkDetectorName[iDet])); } @@ -2709,8 +2720,13 @@ AliQualAssDataMaker * AliReconstruction::GetQualAssDataMaker(Int_t iDet) } if (qadm) { AliInfo(Form("Initializing quality assurance data maker for %s", fgkDetectorName[iDet])); - qadm->Init(AliQualAss::kRECPOINTS); - qadm->Init(AliQualAss::kESDS) ; + //FIXME: get the run number + Int_t run = 0 ; + //EMXIF + qadm->Init(AliQualAss::kRECPOINTS, run, GetQACycles(fgkDetectorName[iDet])); + qadm->Init(AliQualAss::kESDS, run) ; + qadm->StartOfCycle(AliQualAss::kRECPOINTS); + qadm->StartOfCycle(AliQualAss::kESDS, "same") ; fQualAssDataMaker[iDet] = qadm; } @@ -2734,6 +2750,7 @@ Bool_t AliReconstruction::RunQualAss(const char* detectors, AliESDEvent *& esd) AliInfo(Form("running quality assurance data maker for %s", fgkDetectorName[iDet])); qadm->Exec(AliQualAss::kESDS, esd) ; + qadm->Increment() ; AliCodeTimerStop(Form("running quality assurance data maker for %s", fgkDetectorName[iDet])); } @@ -2746,3 +2763,15 @@ Bool_t AliReconstruction::RunQualAss(const char* detectors, AliESDEvent *& esd) return kTRUE; } + +//_____________________________________________________________________________ +Int_t AliReconstruction::GetDetIndex(const char* detector) +{ + // return the detector index corresponding to detector + Int_t index = -1 ; + for (index = 0; index < fgkNDetectors ; index++) { + if ( strcmp(detector, fgkDetectorName[index]) == 0 ) + break ; + } + return index ; +} diff --git a/STEER/AliReconstruction.h b/STEER/AliReconstruction.h index c57d492c45f..9fe9d508ffc 100644 --- a/STEER/AliReconstruction.h +++ b/STEER/AliReconstruction.h @@ -104,6 +104,7 @@ public: // Quality Assurance virtual Bool_t RunQualAss(const char* detectors, AliESDEvent *& esd); + void SetQACycles(const char * detector, const Int_t cycles) { fQACycles[GetDetIndex(detector)] = cycles ; } private: Bool_t RunLocalReconstruction(const TString& detectors); @@ -135,7 +136,9 @@ private: void FillRawDataErrorLog(Int_t iEvent, AliESDEvent* esd); //Quality Assurance + Int_t GetDetIndex(const char * detector); AliQualAssDataMaker* GetQualAssDataMaker(Int_t iDet); + const Int_t GetQACycles(const char * detector) { return fQACycles[GetDetIndex(detector)] ; } //*** Global reconstruction flags ******************* Bool_t fUniformField; // uniform field tracking flag @@ -187,8 +190,9 @@ private: //Quality Assurance AliQualAssDataMaker * fQualAssDataMaker[fgkNDetectors]; //! array of QA data maker objects + Int_t fQACycles[fgkNDetectors] ; // cycle length (# events) over which QA data are accumulated - ClassDef(AliReconstruction, 13) // class for running the reconstruction + ClassDef(AliReconstruction, 14) // class for running the reconstruction }; #endif diff --git a/STEER/AliSimulation.cxx b/STEER/AliSimulation.cxx index a2da2d9299d..5bddd023d1e 100644 --- a/STEER/AliSimulation.cxx +++ b/STEER/AliSimulation.cxx @@ -141,6 +141,7 @@ ClassImp(AliSimulation) AliSimulation *AliSimulation::fgInstance = 0; +const char* AliSimulation::fgkDetectorName[AliSimulation::fgkNDetectors] = {"ITS", "TPC", "TRD", "TOF", "PHOS", "HMPID", "EMCAL", "MUON", "FMD", "ZDC", "PMD", "T0", "VZERO", "ACORDE", "HLT"}; //_____________________________________________________________________________ AliSimulation::AliSimulation(const char* configFileName, const char* cdbUri, @@ -176,6 +177,10 @@ AliSimulation::AliSimulation(const char* configFileName, const char* cdbUri, // create simulation object with default parameters fgInstance = this; SetGAliceFile("galice.root"); + +// for QA + for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) + fQACycles[iDet] = 999999; } //_____________________________________________________________________________ @@ -225,6 +230,10 @@ AliSimulation::AliSimulation(const AliSimulation& sim) : if (sim.fSpecCDBUri[i]) fSpecCDBUri.Add(sim.fSpecCDBUri[i]->Clone()); } fgInstance = this; + +// for QA + for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) + fQACycles[iDet] = sim.fQACycles[iDet]; } //_____________________________________________________________________________ @@ -762,6 +771,7 @@ Bool_t AliSimulation::RunSDigitization(const char* detectors) if (IsSelected(det->GetName(), detStr)) { AliInfo(Form("creating summable digits for %s", det->GetName())); AliCodeTimerAuto(Form("creating summable digits for %s", det->GetName())); + det->Hits2SDigits(); } } @@ -1285,6 +1295,7 @@ Bool_t AliSimulation::ConvertRaw2SDigits(const char* rawDirectory, const char* e } } // detectors + // // If ESD information available obtain reconstructed vertex and store in header. if (esdOK) { @@ -1317,3 +1328,15 @@ Bool_t AliSimulation::ConvertRaw2SDigits(const char* rawDirectory, const char* e return kTRUE; } + +//_____________________________________________________________________________ +Int_t AliSimulation::GetDetIndex(const char* detector) +{ + // return the detector index corresponding to detector + Int_t index = -1 ; + for (index = 0; index < fgkNDetectors ; index++) { + if ( strcmp(detector, fgkDetectorName[index]) == 0 ) + break ; + } + return index ; +} diff --git a/STEER/AliSimulation.h b/STEER/AliSimulation.h index 8c62847623b..fcf9c90c3bd 100644 --- a/STEER/AliSimulation.h +++ b/STEER/AliSimulation.h @@ -93,7 +93,12 @@ public: virtual Bool_t ConvertDateToRoot(const char* dateFileName = "raw.date", const char* rootFileName = "raw.root"); virtual Bool_t ConvertRaw2SDigits(const char* rawDirectory, const char* esdFile = ""); - + + //Quality Assurance + Int_t GetDetIndex(const char * detector); + const Int_t GetQACycles(const char * detector) { return fQACycles[GetDetIndex(detector)] ; } + void SetQACycles(const char * detector, const Int_t cycles) { fQACycles[GetDetIndex(detector)] = cycles ; } + private: AliRunLoader* LoadRun(const char* mode = "UPDATE") const; Int_t GetNSignalPerBkgrd(Int_t nEvents = 0) const; @@ -128,7 +133,14 @@ private: TString fRemoteCDBUri; // Uri of the remote CDB storage TObjArray fSpecCDBUri; // Array with detector specific CDB storages Bool_t fEmbeddingFlag; // Flag for embedding - ClassDef(AliSimulation, 4) // class for running generation, simulation and digitization + + //QA stuff + static const Int_t fgkNDetectors = 15 ; // number of detectors + static const char * fgkDetectorName[fgkNDetectors] ; // names of detectors + Int_t fQACycles[fgkNDetectors] ; // cycle length (# events) over which QA data are accumulated + + + ClassDef(AliSimulation, 5) // class for running generation, simulation and digitization }; #endif