X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOSDigitizer.cxx;h=dd1e865123b8f5c179995f28a1df1707dbc89f49;hb=6b92827e3b0269041c85737f69c9228d0a98f1f6;hp=67f9af187138b4e5e36dd3bbd63ae2ac4e50c11c;hpb=797e311fc1d10181adc38a6206a67a318da48884;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOSDigitizer.cxx b/PHOS/AliPHOSDigitizer.cxx index 67f9af18713..dd1e865123b 100644 --- a/PHOS/AliPHOSDigitizer.cxx +++ b/PHOS/AliPHOSDigitizer.cxx @@ -15,6 +15,16 @@ /* $Id$ */ +/* History of cvs commits: + * + * $Log$ + * Revision 1.86 2005/07/12 20:07:35 hristov + * Changes needed to run simulation and reconstrruction in the same AliRoot session + * + * Revision 1.85 2005/05/28 14:19:04 schutz + * Compilation warnings fixed by T.P. + * + */ //_________________________________________________________________________ //*-- Author : Dmitri Peressounko (SUBATECH & Kurchatov Institute) @@ -64,7 +74,7 @@ // --- Standard library --- // --- AliRoot header files --- - +#include "AliLog.h" #include "AliRunDigitizer.h" #include "AliPHOSDigit.h" #include "AliPHOSGetter.h" @@ -90,12 +100,13 @@ ClassImp(AliPHOSDigitizer) } //____________________________________________________________________________ -AliPHOSDigitizer::AliPHOSDigitizer(const TString alirunFileName, const TString eventFolderName): - AliDigitizer("PHOS"+AliConfig::fgkDigitizerTaskName, alirunFileName), +AliPHOSDigitizer::AliPHOSDigitizer(TString alirunFileName, + TString eventFolderName): + AliDigitizer("PHOS"+AliConfig::Instance()->GetDigitizerTaskName(), + alirunFileName), fInputFileNames(0), fEventNames(0), fEventFolderName(eventFolderName) { // ctor - InitParameters() ; Init() ; fDefaultInit = kFALSE ; @@ -128,42 +139,48 @@ AliPHOSDigitizer::AliPHOSDigitizer(const AliPHOSDigitizer & d) //____________________________________________________________________________ AliPHOSDigitizer::AliPHOSDigitizer(AliRunDigitizer * rd): - AliDigitizer(rd,"PHOS"+AliConfig::fgkDigitizerTaskName), + AliDigitizer(rd,"PHOS"+AliConfig::Instance()->GetDigitizerTaskName()), fEventFolderName(0) { - // ctor + // ctor Init() is called by RunDigitizer fManager = rd ; - // SetName(fManager->GetInputFolderName(0)) ; - // take title as name of stream 0 + fEventFolderName = fManager->GetInputFolderName(0) ; SetTitle(dynamic_cast(fManager->GetInputStream(0))->GetFileName(0)); InitParameters() ; - Init() ; fDefaultInit = kFALSE ; } //____________________________________________________________________________ AliPHOSDigitizer::~AliPHOSDigitizer() { + AliPHOSGetter * gime = AliPHOSGetter::Instance(GetTitle()) ; + + // Clean Digitizer from the white board + gime->PhosLoader()->CleanDigitizer() ; // dtor - AliPHOSGetter * gime = AliPHOSGetter::Instance(GetTitle(),fEventFolderName); - gime->PhosLoader()->CleanDigitizer(); delete [] fInputFileNames ; delete [] fEventNames ; } //____________________________________________________________________________ -void AliPHOSDigitizer::Digitize(const Int_t event) +void AliPHOSDigitizer::Digitize(Int_t event) { // Makes the digitization of the collected summable digits. // It first creates the array of all PHOS modules - // filled with noise (different for EMC, CPV and PPSD) and + // filled with noise (different for EMC, and CPV) and // then adds contributions from SDigits. // This design avoids scanning over the list of digits to add // contribution to new SDigits only. - AliPHOSGetter * gime = AliPHOSGetter::Instance(GetTitle(), fEventFolderName) ; + AliPHOSGetter * gime = AliPHOSGetter::Instance(GetTitle()) ; + Int_t ReadEvent = event ; + if (fManager) + ReadEvent = dynamic_cast(fManager->GetInputStream(0))->GetCurrentEventNumber() ; + AliInfo(Form("Adding event %d from input stream 0 %s %s", + ReadEvent, GetTitle(), fEventFolderName.Data())) ; + gime->Event(ReadEvent, "S") ; TClonesArray * digits = gime->Digits() ; digits->Clear() ; @@ -184,7 +201,8 @@ void AliPHOSDigitizer::Digitize(const Int_t event) AliPHOSSDigitizer * sDigitizer = gime->SDigitizer(); if ( !sDigitizer ) - Fatal("Digitize", "SDigitizer with name %s %s not found", fEventFolderName.Data(), GetTitle() ) ; + AliFatal(Form("SDigitizer with name %s %s not found", + GetTitle(), fEventFolderName.Data() )) ; //take all the inputs to add together and load the SDigits TObjArray * sdigArray = new TObjArray(fInput) ; @@ -193,8 +211,12 @@ void AliPHOSDigitizer::Digitize(const Int_t event) for(i = 1 ; i < fInput ; i++){ TString tempo(fEventNames[i]) ; tempo += i ; - AliPHOSGetter * gime = AliPHOSGetter::Instance(fInputFileNames[i], tempo) ; - gime->Event(event,"S"); + AliPHOSGetter * gime = AliPHOSGetter::Instance(fInputFileNames[i], tempo) ; + if (fManager) + ReadEvent = dynamic_cast(fManager->GetInputStream(i))->GetCurrentEventNumber() ; + AliInfo(Form("Adding event %d from input stream %d %s %s", + ReadEvent, i, fInputFileNames[i].Data(), tempo.Data())) ; + gime->Event(ReadEvent,"S"); sdigArray->AddAt(gime->SDigits(), i) ; } @@ -369,8 +391,29 @@ Int_t AliPHOSDigitizer::DigitizeEnergy(Float_t energy, Int_t absId) { // Returns digitized value of the energy in a cell absId + AliPHOSGetter* gime = AliPHOSGetter::Instance(); + + //Determine rel.position of the cell absId + Int_t relId[4]; + gime->PHOSGeometry()->AbsToRelNumbering(absId,relId); + Int_t module=relId[0]; + Int_t raw=relId[2]; + Int_t column=relId[3]; + Int_t chanel ; + if(absId <= fEmcCrystals){ //digitize as EMC + + //reading calibration data for cell absId. + //If no calibration DB found, accept default values. + + if(gime->CalibData()) { + fADCpedestalEmc = gime->CalibData()->GetADCpedestalEmc(module,column,raw); + fADCchanelEmc = gime->CalibData()->GetADCchannelEmc(module,column,raw); + } +// printf("\t\tabsId %d ==>>module=%d column=%d raw=%d ped=%.4f gain=%.4f\n", +// absId,module,column,raw,fADCpedestalEmc,fADCchanelEmc); + chanel = (Int_t) TMath::Ceil((energy - fADCpedestalEmc)/fADCchanelEmc) ; if(chanel > fNADCemc ) chanel = fNADCemc ; } @@ -384,10 +427,15 @@ Int_t AliPHOSDigitizer::DigitizeEnergy(Float_t energy, Int_t absId) //____________________________________________________________________________ void AliPHOSDigitizer::Exec(Option_t *option) { - // Does the job + // Steering method to process digitization for events + // in the range from fFirstEvent to fLastEvent. + // This range is optionally set by SetEventRange(). + // if fLastEvent=-1, then process events until the end. + // by default fLastEvent = fFirstEvent (process only one 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 ; } @@ -399,16 +447,21 @@ void AliPHOSDigitizer::Exec(Option_t *option) if(strstr(option,"tim")) gBenchmark->Start("PHOSDigitizer"); - if (fManager) - fInput = fManager->GetNinputs() ; - - AliPHOSGetter * gime = AliPHOSGetter::Instance() ; + AliPHOSGetter * gime = AliPHOSGetter::Instance(GetTitle()) ; - Int_t nevents = gime->MaxEvent() ; - + // Post Digitizer to the white board + gime->PostDigitizer(this) ; + + if (fLastEvent == -1) + fLastEvent = gime->MaxEvent() - 1 ; + else if (fManager) + fLastEvent = fFirstEvent ; + + Int_t nEvents = fLastEvent - fFirstEvent + 1; + Int_t ievent ; - for(ievent = 0; ievent < nevents; ievent++){ + for (ievent = fFirstEvent; ievent <= fLastEvent; ievent++) { gime->Event(ievent,"S") ; @@ -423,13 +476,15 @@ void AliPHOSDigitizer::Exec(Option_t *option) fDigitsInRun += gime->Digits()->GetEntriesFast() ; } + gime->PhosLoader()->CleanDigitizer(); + if(strstr(option,"tim")){ gBenchmark->Stop("PHOSDigitizer"); TString message ; message = " took %f seconds for Digitizing %f seconds per event\n" ; - Info("Exec", message.Data(), + AliInfo(Form( message.Data(), gBenchmark->GetCpuTime("PHOSDigitizer"), - gBenchmark->GetCpuTime("PHOSDigitizer")/nevents ); + gBenchmark->GetCpuTime("PHOSDigitizer")/nEvents )); } } @@ -462,7 +517,8 @@ Bool_t AliPHOSDigitizer::Init() fInit = kTRUE ; AliPHOSGetter * gime = AliPHOSGetter::Instance(GetTitle(), fEventFolderName) ; if ( gime == 0 ) { - Fatal("Init" ,"Could not obtain the Getter object for file %s and event %s !", GetTitle(), fEventFolderName.Data()) ; + AliFatal(Form("Could not obtain the Getter object for file %s and event %s !", + GetTitle(), fEventFolderName.Data())); return kFALSE; } @@ -472,13 +528,13 @@ Bool_t AliPHOSDigitizer::Init() TString opt("Digits") ; if(gime->VersionExists(opt) ) { - Error( "Init", "Give a version name different from %s", fEventFolderName.Data() ) ; + AliError(Form("Give a version name different from %s", + fEventFolderName.Data() )) ; fInit = kFALSE ; } - // Post Digitizer to the white board - gime->PostDigitizer(this) ; - + fFirstEvent = 0 ; + fLastEvent = fFirstEvent ; if (fManager) fInput = fManager->GetNinputs() ; else @@ -492,7 +548,7 @@ Bool_t AliPHOSDigitizer::Init() for (index = 1 ; index < fInput ; index++) { fInputFileNames[index] = dynamic_cast(fManager->GetInputStream(index))->GetFileName(0); TString tempo = fManager->GetInputFolderName(index) ; - fEventNames[index] = tempo.Remove(tempo.Length()-1) ; // strip of the stream number added bt fManager + fEventNames[index] = tempo.Remove(tempo.Length()-1) ; // strip of the stream number added by fManager } //to prevent cleaning of this object while GetEvent is called @@ -504,7 +560,7 @@ Bool_t AliPHOSDigitizer::Init() //____________________________________________________________________________ void AliPHOSDigitizer::InitParameters() { - // Set initial parameters for Digitizer + // Set initial parameters Digitizer fPinNoise = 0.004 ; fEMCDigitThreshold = 0.012 ; @@ -522,11 +578,12 @@ void AliPHOSDigitizer::InitParameters() fNADCcpv = (Int_t) TMath::Power(2,12); // number of channels in CPV ADC fTimeThreshold = 0.001*10000000 ; //Means 1 MeV in terms of SDigits amplitude + SetEventRange(0,-1) ; } //__________________________________________________________________ -void AliPHOSDigitizer::MixWith(const TString alirunFileName, const TString eventFolderName) +void AliPHOSDigitizer::MixWith(TString alirunFileName, TString eventFolderName) { // Allows to produce digits by superimposing background and signal event. // It is assumed, that headers file with SIGNAL events is opened in @@ -549,16 +606,16 @@ void AliPHOSDigitizer::MixWith(const TString alirunFileName, const TString event } // looking for file which contains AliRun if (gSystem->AccessPathName(alirunFileName)) {// file does not exist - Error("MixWith", "File %s does not exist!", alirunFileName.Data()) ; + AliError(Form("File %s does not exist!", alirunFileName.Data())) ; return ; } // looking for the file which contains SDigits AliPHOSGetter * gime = AliPHOSGetter::Instance() ; TString fileName( gime->GetSDigitsFileName() ) ; - if ( eventFolderName != AliConfig::fgkDefaultEventFolderName) // only if not the default folder name + if ( eventFolderName != AliConfig::GetDefaultEventFolderName()) // only if not the default folder name fileName = fileName.ReplaceAll(".root", "") + "_" + eventFolderName + ".root" ; if ( (gSystem->AccessPathName(fileName)) ) { - Error("MixWith", "The file %s does not exist!", fileName.Data()) ; + AliError(Form("The file %s does not exist!", fileName.Data())) ; return ; } // need to increase the arrays @@ -578,10 +635,10 @@ void AliPHOSDigitizer::MixWith(const TString alirunFileName, const TString event } //__________________________________________________________________ -void AliPHOSDigitizer::Print()const +void AliPHOSDigitizer::Print(const Option_t *)const { // Print Digitizer's parameters - Info("Print", "\n------------------- %s -------------", GetName() ) ; + AliInfo(Form("\n------------------- %s -------------", GetName() )) ; if( strcmp(fEventFolderName.Data(), "") != 0 ){ printf(" Writing Digits to branch with title %s\n", fEventFolderName.Data()) ; @@ -597,7 +654,7 @@ void AliPHOSDigitizer::Print()const tempo += index ; AliPHOSGetter * gime = AliPHOSGetter::Instance(fInputFileNames[index], tempo) ; TString fileName( gime->GetSDigitsFileName() ) ; - if ( fEventNames[index] != AliConfig::fgkDefaultEventFolderName) // only if not the default folder name + if ( fEventNames[index] != AliConfig::GetDefaultEventFolderName()) // only if not the default folder name fileName = fileName.ReplaceAll(".root", "") + "_" + fEventNames[index] + ".root" ; printf ("Adding SDigits from %s %s\n", fInputFileNames[index].Data(), fileName.Data()) ; } @@ -612,7 +669,7 @@ void AliPHOSDigitizer::Print()const printf(" ---------------------------------------------------\n") ; } else - Info("Print", "AliPHOSDigitizer not initialized" ) ; + AliInfo(Form("AliPHOSDigitizer not initialized" )) ; } @@ -624,7 +681,7 @@ void AliPHOSDigitizer::Print()const AliPHOSGetter * gime = AliPHOSGetter::Instance(GetTitle(), fEventFolderName) ; TClonesArray * digits = gime->Digits() ; - Info("PrintDigits", "%d", digits->GetEntriesFast()) ; + AliInfo(Form("%d", digits->GetEntriesFast())) ; printf("\nevent %d", gAlice->GetEvNumber()) ; printf("\n Number of entries in Digits list %d", digits->GetEntriesFast() ) ; @@ -678,9 +735,8 @@ void AliPHOSDigitizer::Print()const //__________________________________________________________________ Float_t AliPHOSDigitizer::TimeOfNoise(void) const { // Calculates the time signal generated by noise - //to be rewritten, now returns just big number - return 1. ; - + //PH Info("TimeOfNoise", "Change me") ; + return gRandom->Rndm() * 1.28E-5; } //__________________________________________________________________ @@ -711,13 +767,13 @@ void AliPHOSDigitizer::WriteDigits() // and branch "AliPHOSDigitizer", with the same title to keep all the parameters // and names of files, from which digits are made. - AliPHOSGetter * gime = AliPHOSGetter::Instance(GetTitle(), fEventFolderName) ; + AliPHOSGetter * gime = AliPHOSGetter::Instance(GetTitle()) ; const TClonesArray * digits = gime->Digits() ; TTree * treeD = gime->TreeD(); // -- create Digits branch Int_t bufferSize = 32000 ; - TBranch * digitsBranch = treeD->Branch("PHOS",&digits,bufferSize); + TBranch * digitsBranch = treeD->Branch("PHOS","TClonesArray",&digits,bufferSize); digitsBranch->SetTitle(fEventFolderName); digitsBranch->Fill() ;