//_________________________________________________________________________
//*-- Author : Dmitri Peressounko (SUBATECH & Kurchatov Institute)
//////////////////////////////////////////////////////////////////////////////
-// This TTask performs digitization of Summable digits (in the PHOS case it is just
+// This class performs digitization of Summable digits (in the PHOS case it is just
// the sum of contributions from all primary particles into a given cell).
// In addition it performs mixing of summable digits from different events.
-// The name of the TTask is also the title of the branch that will contain
+// The name of the class is also the title of the branch that will contain
// the created SDigits
-// The title of the TTAsk is the name of the file that contains the hits from
+// The title of the class is the name of the file that contains the hits from
// which the SDigits are created
//
// For each event two branches are created in TreeD:
//
// Use case:
// root[0] AliPHOSDigitizer * d = new AliPHOSDigitizer() ;
-// root[1] d->ExecuteTask()
+// root[1] d->Digitize()
// Warning in <TDatabasePDG::TDatabasePDG>: object already instantiated
// //Digitizes SDigitis in all events found in file galice.root
//
// // Reads another set of sdigits from galice2.root
// root[3] d1->MixWith("galice3.root")
// // Reads another set of sdigits from galice3.root
-// root[4] d->ExecuteTask("deb timing")
+// root[4] d->Digitize("deb timing")
// // Reads SDigits from files galice1.root, galice2.root ....
// // mixes them and stores produced Digits in file galice1.root
// // deb - prints number of produced digits
// --- AliRoot header files ---
#include <TGeoManager.h>
#include "AliLog.h"
-#include "AliRunDigitizer.h"
+#include "AliDigitizationInput.h"
#include "AliPHOSDigit.h"
#include "AliPHOSDigitizer.h"
#include "AliPHOSGeometry.h"
{
// ctor
InitParameters() ;
- fManager = 0 ; // We work in the standalong mode
+ fDigInput = 0 ; // We work in the standalong mode
}
//____________________________________________________________________________
AliPHOSDigitizer::AliPHOSDigitizer(TString alirunFileName,
TString eventFolderName):
- AliDigitizer("PHOS"+AliConfig::Instance()->GetDigitizerTaskName(), alirunFileName),
+ AliDigitizer("PHOSDigitizer", alirunFileName),
fDefaultInit(kFALSE),
fDigitsInRun(0),
fInit(kFALSE),
InitParameters() ;
Init() ;
fDefaultInit = kFALSE ;
- fManager = 0 ; // We work in the standalone mode
+ fDigInput = 0 ; // We work in the standalone mode
fcdb = new AliPHOSCalibData(-1);
}
//____________________________________________________________________________
-AliPHOSDigitizer::AliPHOSDigitizer(const AliPHOSDigitizer & d) :
- AliDigitizer(d),
- fDefaultInit(d.fDefaultInit),
- fDigitsInRun(d.fDigitsInRun),
- fInit(d.fInit),
- fInput(d.fInput),
- fInputFileNames(0x0),//?
- fEventNames(0x0),//?
- fEmcCrystals(d.fEmcCrystals),
- fEventFolderName(d.fEventFolderName),
- fFirstEvent(d.fFirstEvent),
- fLastEvent(d.fLastEvent),
- fcdb (0x0),
- fEventCounter(0),
- fPulse(0),
- fADCValuesLG(0),
- fADCValuesHG(0)
-{
- // copyy ctor
- SetName(d.GetName()) ;
- SetTitle(d.GetTitle()) ;
- fcdb = new AliPHOSCalibData(-1);
-}
-
-//____________________________________________________________________________
-AliPHOSDigitizer::AliPHOSDigitizer(AliRunDigitizer * rd) :
- AliDigitizer(rd,"PHOS"+AliConfig::Instance()->GetDigitizerTaskName()),
+AliPHOSDigitizer::AliPHOSDigitizer(AliDigitizationInput * rd) :
+ AliDigitizer(rd,"PHOSDigitizer"),
fDefaultInit(kFALSE),
fDigitsInRun(0),
fInit(kFALSE),
fInputFileNames(0x0),
fEventNames(0x0),
fEmcCrystals(0),
- fEventFolderName(fManager->GetInputFolderName(0)),
+ fEventFolderName(fDigInput->GetInputFolderName(0)),
fFirstEvent(0),
fLastEvent(0),
fcdb (0x0),
{
// ctor Init() is called by RunDigitizer
- fManager = rd ;
- SetTitle(static_cast<AliStream*>(fManager->GetInputStream(0))->GetFileName(0));
+ fDigInput = rd ;
+ SetTitle(static_cast<AliStream*>(fDigInput->GetInputStream(0))->GetFileName(0));
InitParameters() ;
fDefaultInit = kFALSE ;
fcdb = new AliPHOSCalibData(-1);
//____________________________________________________________________________
AliPHOSDigitizer::~AliPHOSDigitizer()
{
- // dtor
- AliRunLoader* rl = AliRunLoader::GetRunLoader(fEventFolderName) ;
- if(rl){
- AliPHOSLoader * phosLoader = static_cast<AliPHOSLoader*>(rl->GetLoader("PHOSLoader"));
-
- if(phosLoader)
- phosLoader->CleanDigitizer() ;
- }
-
+ // dtor
delete [] fInputFileNames ;
delete [] fEventNames ;
AliPHOSLoader * phosLoader = static_cast<AliPHOSLoader*>(rl->GetLoader("PHOSLoader"));
Int_t readEvent = event ;
- if (fManager)
- readEvent = static_cast<AliStream*>(fManager->GetInputStream(0))->GetCurrentEventNumber() ;
+ if (fDigInput)
+ readEvent = static_cast<AliStream*>(fDigInput->GetInputStream(0))->GetCurrentEventNumber() ;
AliDebug(1,Form("Adding event %d from input stream 0 %s %s",
readEvent, GetTitle(), fEventFolderName.Data())) ;
rl->GetEvent(readEvent) ;
}
AliPHOSLoader * phosLoader2 = static_cast<AliPHOSLoader*>(rl2->GetLoader("PHOSLoader"));
- if(fManager){
- readEvent = static_cast<AliStream*>(fManager->GetInputStream(i))->GetCurrentEventNumber() ;
+ if(fDigInput){
+ readEvent = static_cast<AliStream*>(fDigInput->GetInputStream(i))->GetCurrentEventNumber() ;
}
TClonesArray * digs ;
if(AliPHOSSimParam::GetInstance()->IsStreamDigits(i)){ //This is Digits Stream
while(curSDigit && curSDigit->GetId() == absID){
//Shift primary to separate primaries belonging different inputs
Int_t primaryoffset ;
- if(fManager)
- primaryoffset = fManager->GetMask(i) ;
+ if(fDigInput)
+ primaryoffset = fDigInput->GetMask(i) ;
else
primaryoffset = 10000000*i ;
curSDigit->ShiftPrimary(primaryoffset) ;
if(AliPHOSSimParam::GetInstance()->IsCellNonlinearityOn()){ //Apply non-lineairyt on cell level
const Double_t aNL = AliPHOSSimParam::GetInstance()->GetCellNonLineairyA() ;
const Double_t bNL = AliPHOSSimParam::GetInstance()->GetCellNonLineairyB() ;
+ const Double_t cNL = AliPHOSSimParam::GetInstance()->GetCellNonLineairyC() ;
for(Int_t i = 0 ; i < nEMC ; i++){
digit = static_cast<AliPHOSDigit*>( digits->At(i) ) ;
Double_t e= digit->GetEnergy() ;
// version(1) digit->SetEnergy(e*(1+a*TMath::Exp(-e/b))) ;
- digit->SetEnergy(e*(1.+aNL*TMath::Exp(-e*e/2./bNL/bNL))) ; //Better agreement with data...
+ digit->SetEnergy(e*cNL*(1.+aNL*TMath::Exp(-e*e/2./bNL/bNL))) ; //Better agreement with data...
}
}
while(curSDigit && curSDigit->GetId() == absID){
//Shift primary to separate primaries belonging different inputs
Int_t primaryoffset ;
- if(fManager)
- primaryoffset = fManager->GetMask(i) ;
+ if(fDigInput)
+ primaryoffset = fDigInput->GetMask(i) ;
else
primaryoffset = 10000000*i ;
curSDigit->ShiftPrimary(primaryoffset) ;
}
//____________________________________________________________________________
-void AliPHOSDigitizer::Exec(Option_t *option)
+void AliPHOSDigitizer::Digitize(Option_t *option)
{
// Steering method to process digitization for events
// in the range from fFirstEvent to fLastEvent.
AliRunLoader* rl = AliRunLoader::GetRunLoader(fEventFolderName) ;
AliPHOSLoader * phosLoader = static_cast<AliPHOSLoader*>(rl->GetLoader("PHOSLoader"));
-
- // Post Digitizer to the white board
- phosLoader->PostDigitizer(this) ;
if (fLastEvent == -1)
fLastEvent = rl->GetNumberOfEvents() - 1 ;
- else if (fManager)
+ else if (fDigInput)
fLastEvent = fFirstEvent ;
Int_t nEvents = fLastEvent - fFirstEvent + 1;
fDigitsInRun += phosLoader->Digits()->GetEntriesFast() ;
}
- phosLoader->CleanDigitizer();
-
if(strstr(option,"tim")){
gBenchmark->Stop("PHOSDigitizer");
TString message ;
fFirstEvent = 0 ;
fLastEvent = fFirstEvent ;
- if (fManager)
- fInput = fManager->GetNinputs() ;
+ if (fDigInput)
+ fInput = fDigInput->GetNinputs() ;
else
fInput = 1 ;
fEventNames[0] = fEventFolderName.Data() ;
Int_t index ;
for (index = 1 ; index < fInput ; index++) {
- fInputFileNames[index] = static_cast<AliStream*>(fManager->GetInputStream(index))->GetFileName(0);
- TString tempo = fManager->GetInputFolderName(index) ;
- fEventNames[index] = tempo.Remove(tempo.Length()-1) ; // strip of the stream number added by fManager
+ fInputFileNames[index] = static_cast<AliStream*>(fDigInput->GetInputStream(index))->GetFileName(0);
+ TString tempo = fDigInput->GetInputFolderName(index) ;
+ fEventNames[index] = tempo.Remove(tempo.Length()-1) ; // strip of the stream number added by fDigInput
}
//to prevent cleaning of this object while GetEvent is called
AliRunLoader* rl = AliRunLoader::GetRunLoader(fEventFolderName) ;
if(!rl){
- rl = AliRunLoader::Open(GetTitle(), fEventFolderName) ;
+ AliRunLoader::Open(GetTitle(), fEventFolderName) ;
}
- AliPHOSLoader * phosLoader = static_cast<AliPHOSLoader*>(rl->GetLoader("PHOSLoader"));
- phosLoader->GetDigitsDataLoader()->GetBaseTaskLoader()->SetDoNotReload(kTRUE);
-
return fInit ;
}
printf(" Writing Digits to branch with title %s\n", fEventFolderName.Data()) ;
Int_t nStreams ;
- if (fManager)
+ if (fDigInput)
nStreams = GetNInputStreams() ;
else
nStreams = fInput ;
digitsBranch->Fill() ;
phosLoader->WriteDigits("OVERWRITE");
- phosLoader->WriteDigitizer("OVERWRITE");
Unload() ;