X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOSSDigitizer.cxx;h=1e5b0d5dcd1395f8cccf01870b91144f304dfe02;hb=6d0a5c2edc0d11554da9324728e9eee58cf7ace4;hp=0f9641ba9d6429e0a096a1f27d8108416fdd0b90;hpb=71dfb0d88021f8b0bc2622f69326212a5fafdb01;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOSSDigitizer.cxx b/PHOS/AliPHOSSDigitizer.cxx index 0f9641ba9d6..1e5b0d5dcd1 100644 --- a/PHOS/AliPHOSSDigitizer.cxx +++ b/PHOS/AliPHOSSDigitizer.cxx @@ -16,6 +16,23 @@ /* $Id$ */ +/* History of cvs commits: + * + * $Log$ + * Revision 1.50 2006/08/28 10:01:56 kharlov + * Effective C++ warnings fixed (Timur Pocheptsov) + * + * Revision 1.49 2006/05/10 06:42:53 kharlov + * Remove redundant loop over primaries + * + * Revision 1.48 2006/04/22 10:30:17 hristov + * Add fEnergy to AliPHOSDigit and operate with EMC amplitude in energy units (Yu.Kharlov) + * + * Revision 1.47 2005/05/28 14:19:04 schutz + * Compilation warnings fixed by T.P. + * + */ + //_________________________________________________________________________ // This is a TTask that makes SDigits out of Hits // The name of the TTask is also the title of the branch that will contain @@ -52,55 +69,102 @@ // --- ROOT system --- #include "TBenchmark.h" -#include "TRandom.h" + //#include "TObjectTable.h" // --- Standard library --- // --- AliRoot header files --- +#include "AliLog.h" #include "AliPHOSGeometry.h" #include "AliPHOSDigit.h" #include "AliPHOSGetter.h" #include "AliPHOSHit.h" #include "AliPHOSSDigitizer.h" +#include "AliPHOSQualAssDataMaker.h" ClassImp(AliPHOSSDigitizer) //____________________________________________________________________________ - AliPHOSSDigitizer::AliPHOSSDigitizer():TTask("","") +AliPHOSSDigitizer::AliPHOSSDigitizer() : + TTask("",""), + fA(0.f), fB(0.f), + fPrimThreshold(0.f), + fDefaultInit(kTRUE), + fEventFolderName(""), + fInit(kFALSE), + fSDigitsInRun(0), + fFirstEvent(0), + fLastEvent(0), + fQADM (0x0) { // ctor - InitParameters() ; - fDefaultInit = kTRUE ; + // Intialize the quality assurance data maker } //____________________________________________________________________________ -AliPHOSSDigitizer::AliPHOSSDigitizer(const char * alirunFileName, const char * eventFolderName): - TTask("PHOS"+AliConfig::fgkSDigitizerTaskName, alirunFileName), - fEventFolderName(eventFolderName) +AliPHOSSDigitizer::AliPHOSSDigitizer(const char * alirunFileName, + const char * eventFolderName): + TTask("PHOS"+AliConfig::Instance()->GetSDigitizerTaskName(), alirunFileName), + fA(0.f), fB(0.f), + fPrimThreshold(0.f), + fDefaultInit(kFALSE), + fEventFolderName(eventFolderName), + fInit(kFALSE), + fSDigitsInRun(0), + fFirstEvent(0), + fLastEvent(0), + fQADM (0x0) { - // ctor InitParameters() ; Init(); fDefaultInit = kFALSE ; + // Intialize the quality assurance data maker + GetQualAssDataMaker()->Init(AliQualAss::kHITS) ; + GetQualAssDataMaker()->Init(AliQualAss::kSDIGITS) ; } -//____________________________________________________________________________ -AliPHOSSDigitizer::AliPHOSSDigitizer(const AliPHOSSDigitizer & sd) - : TTask(sd) +//____________________________________________________________________________ +AliPHOSSDigitizer::AliPHOSSDigitizer(const AliPHOSSDigitizer& sd) : + TTask(sd.GetName(), sd.GetTitle()), + fA(sd.fA), fB(sd.fB), + fPrimThreshold(sd.fPrimThreshold), + fDefaultInit(kFALSE), + fEventFolderName(sd.fEventFolderName), + fInit(kFALSE), + fSDigitsInRun(sd.fSDigitsInRun), + fFirstEvent(sd.fFirstEvent), + fLastEvent(sd.fLastEvent), + fQADM (sd.fQADM) +{ + // cpy ctor + // Intialize the quality assurance data maker + GetQualAssDataMaker()->Init(AliQualAss::kHITS) ; + GetQualAssDataMaker()->Init(AliQualAss::kSDIGITS) ; +} + + +//_____________________________________________________________________________ +AliPHOSSDigitizer& AliPHOSSDigitizer::operator = (const AliPHOSSDigitizer& qa) { - //cpy ctor - - fA = sd.fA ; - fB = sd.fB ; - fPrimThreshold = sd.fPrimThreshold ; - fSDigitsInRun = sd.fSDigitsInRun ; - SetName(sd.GetName()) ; - SetTitle(sd.GetTitle()) ; - fEventFolderName = sd.fEventFolderName; +// assignment operator + + this->~AliPHOSSDigitizer(); + new(this) AliPHOSSDigitizer(qa); + return *this; } +//____________________________________________________________________________ +AliPHOSSDigitizer::~AliPHOSSDigitizer() { + //dtor + // AliPHOSGetter * gime = + // AliPHOSGetter::Instance(GetTitle(),fEventFolderName.Data()); + AliPHOSGetter * gime = + AliPHOSGetter::Instance(); + gime->PhosLoader()->CleanSDigitizer(); + delete fQADM ; +} //____________________________________________________________________________ void AliPHOSSDigitizer::Init() @@ -123,7 +187,9 @@ void AliPHOSSDigitizer::Init() gime->PostSDigitizer(this); gime->PhosLoader()->GetSDigitsDataLoader()->GetBaseTaskLoader()->SetDoNotReload(kTRUE); - + + fQADM = new AliPHOSQualAssDataMaker() ; + } //____________________________________________________________________________ @@ -139,7 +205,13 @@ void AliPHOSSDigitizer::InitParameters() //____________________________________________________________________________ void AliPHOSSDigitizer::Exec(Option_t *option) { - // Collects all hits in the same active volume into digit + // Steering method to produce summable digits for events + // in the range from fFirstEvent to fLastEvent. + // This range is optionally set by SetEventRange(). + // if fLastEvent=-1 (by default), then process events until the end. + // + // Summable digit is a sum of all hits in the same active + // volume into digit if (strstr(option, "print") ) { Print() ; @@ -153,48 +225,42 @@ void AliPHOSSDigitizer::Exec(Option_t *option) //switch off reloading of this task while getting event if (!fInit) { // to prevent overwrite existing file - Error( "Exec", "Give a version name different from %s", fEventFolderName.Data() ) ; + AliError( Form("Give a version name different from %s", fEventFolderName.Data()) ) ; return ; } + if (fLastEvent == -1) + fLastEvent = gime->MaxEvent() - 1 ; + else + fLastEvent = TMath::Min(fFirstEvent, gime->MaxEvent()); // only ine event at the time + Int_t nEvents = fLastEvent - fFirstEvent + 1; + + Int_t ievent, i; - Int_t nevents = gime->MaxEvent() ; - Int_t ievent ; - for(ievent = 0; ievent < nevents; ievent++){ - - gime->Event(ievent,"H") ; + //AliMemoryWatcher memwatcher; + for (ievent = fFirstEvent; ievent <= fLastEvent; ievent++) { + gime->Event(ievent,"H") ; TTree * treeS = gime->TreeS(); TClonesArray * hits = gime->Hits() ; TClonesArray * sdigits = gime->SDigits() ; sdigits->Clear(); Int_t nSdigits = 0 ; //Now make SDigits from hits, for PHOS it is the same, so just copy - Int_t nPrim = static_cast((gime->TreeH())->GetEntries()) ; - // Attention nPrim is the number of primaries tracked by Geant - // and this number could be different to the number of Primaries in TreeK; - Int_t iprim ; - - for (iprim = 0 ; iprim < nPrim ; iprim ++) { - //=========== Get the PHOS branch from Hits Tree for the Primary iprim - gime->Track(iprim) ; - Int_t i; - for ( i = 0 ; i < hits->GetEntries() ; i++ ) { - AliPHOSHit * hit = dynamic_cast(hits->At(i)) ; - // Assign primary number only if contribution is significant - - if( hit->GetEnergy() > fPrimThreshold) - new((*sdigits)[nSdigits]) AliPHOSDigit(hit->GetPrimary(),hit->GetId(), - Digitize(hit->GetEnergy()), hit->GetTime()) ; - else - new((*sdigits)[nSdigits]) AliPHOSDigit( -1 , hit->GetId(), - Digitize(hit->GetEnergy()), hit->GetTime()) ; - nSdigits++ ; - - } + for ( i = 0 ; i < hits->GetEntries() ; i++ ) { + AliPHOSHit * hit = dynamic_cast(hits->At(i)) ; + // Assign primary number only if contribution is significant + + if( hit->GetEnergy() > fPrimThreshold) + new((*sdigits)[nSdigits]) AliPHOSDigit(hit->GetPrimary(),hit->GetId(), + hit->GetEnergy() ,hit->GetTime()) ; + else + new((*sdigits)[nSdigits]) AliPHOSDigit(-1 ,hit->GetId(), + hit->GetEnergy() ,hit->GetTime()) ; + nSdigits++ ; + + } - } // loop over iprim - sdigits->Sort() ; nSdigits = sdigits->GetEntriesFast() ; @@ -202,12 +268,19 @@ void AliPHOSSDigitizer::Exec(Option_t *option) fSDigitsInRun += nSdigits ; sdigits->Expand(nSdigits) ; - Int_t i ; for (i = 0 ; i < nSdigits ; i++) { AliPHOSDigit * digit = dynamic_cast(sdigits->At(i)) ; digit->SetIndexInList(i) ; } + // make Quality Assurance data + + GetQualAssDataMaker()->SetData(hits) ; + GetQualAssDataMaker()->Exec(AliQualAss::kHITS) ; + GetQualAssDataMaker()->SetData(sdigits) ; + GetQualAssDataMaker()->Exec(AliQualAss::kSDIGITS) ; + + //Now write SDigits @@ -223,24 +296,35 @@ void AliPHOSSDigitizer::Exec(Option_t *option) //Next - SDigitizer gime->WriteSDigitizer("OVERWRITE"); - + //gObjectTable->Print() ; + if(strstr(option,"deb")) PrintSDigits(option) ; - } + + //memwatcher.Watch(ievent); + }// event loop + //Write the quality assurance data + GetQualAssDataMaker()->Finish(AliQualAss::kHITS) ; + GetQualAssDataMaker()->Finish(AliQualAss::kSDIGITS) ; + Unload(); - gime->PhosLoader()->GetSDigitsDataLoader()->GetBaseTaskLoader()->SetDoNotReload(kTRUE); + // gime->PhosLoader()->GetSDigitsDataLoader()->GetBaseTaskLoader()->SetDoNotReload(kTRUE); if(strstr(option,"tim")){ gBenchmark->Stop("PHOSSDigitizer"); Info("Exec"," took %f seconds for SDigitizing %f seconds per event", - gBenchmark->GetCpuTime("PHOSSDigitizer"), gBenchmark->GetCpuTime("PHOSSDigitizer")/nevents) ; + gBenchmark->GetCpuTime("PHOSSDigitizer"), gBenchmark->GetCpuTime("PHOSSDigitizer")/nEvents) ; } + + //TFile f("out.root","RECREATE"); + //memwatcher.WriteToFile(); + //f.Close(); } //__________________________________________________________________ -void AliPHOSSDigitizer::Print()const +void AliPHOSSDigitizer::Print(const Option_t *)const { // Prints parameters of SDigitizer Info("Print", "\n------------------- %s -------------", GetName() ) ; @@ -287,8 +371,9 @@ void AliPHOSSDigitizer::PrintSDigits(Option_t * option) digit = dynamic_cast( sdigits->At(index) ) ; // if(digit->GetNprimary() == 0) // continue; - printf("%6d %8d %6.5e %4d %2d :", - digit->GetId(), digit->GetAmp(), digit->GetTime(), digit->GetIndexInList(), digit->GetNprimary()) ; +// printf("%6d %8d %6.5e %4d %2d :\n", // YVK + printf("%6d %.4f %6.5e %4d %2d :\n", + digit->GetId(), digit->GetEnergy(), digit->GetTime(), digit->GetIndexInList(), digit->GetNprimary()) ; Int_t iprimary; for (iprimary=0; iprimaryGetNprimary(); iprimary++) { printf("%d ",digit->GetPrimary(iprimary+1) ) ;