X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;ds=sidebyside;f=PHOS%2FAliPHOSDigitizer.cxx;h=f19f3bfbd7272f9e25b41da3bb84ebb69746fe6e;hb=ebc98c6ffbcb769021ed4eadffae30f23e128678;hp=57ad35b3d0dc6dc88f17c4a29101e1ff3cb2c2ef;hpb=97e75f77c3c9857208b9a81ffd0d66ea8e600a17;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOSDigitizer.cxx b/PHOS/AliPHOSDigitizer.cxx index 57ad35b3d0d..f19f3bfbd72 100644 --- a/PHOS/AliPHOSDigitizer.cxx +++ b/PHOS/AliPHOSDigitizer.cxx @@ -83,12 +83,12 @@ //_________________________________________________________________________ //*-- 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: @@ -100,7 +100,7 @@ // // Use case: // root[0] AliPHOSDigitizer * d = new AliPHOSDigitizer() ; -// root[1] d->ExecuteTask() +// root[1] d->Digitize() // Warning in : object already instantiated // //Digitizes SDigitis in all events found in file galice.root // @@ -111,7 +111,7 @@ // // 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 @@ -131,7 +131,7 @@ // --- AliRoot header files --- #include #include "AliLog.h" -#include "AliRunDigitizer.h" +#include "AliDigitizationInput.h" #include "AliPHOSDigit.h" #include "AliPHOSDigitizer.h" #include "AliPHOSGeometry.h" @@ -166,13 +166,13 @@ AliPHOSDigitizer::AliPHOSDigitizer() : { // 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), @@ -193,38 +193,13 @@ AliPHOSDigitizer::AliPHOSDigitizer(TString alirunFileName, 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), @@ -232,7 +207,7 @@ AliPHOSDigitizer::AliPHOSDigitizer(AliRunDigitizer * rd) : fInputFileNames(0x0), fEventNames(0x0), fEmcCrystals(0), - fEventFolderName(fManager->GetInputFolderName(0)), + fEventFolderName(fDigInput->GetInputFolderName(0)), fFirstEvent(0), fLastEvent(0), fcdb (0x0), @@ -243,8 +218,8 @@ AliPHOSDigitizer::AliPHOSDigitizer(AliRunDigitizer * rd) : { // ctor Init() is called by RunDigitizer - fManager = rd ; - SetTitle(static_cast(fManager->GetInputStream(0))->GetFileName(0)); + fDigInput = rd ; + SetTitle(static_cast(fDigInput->GetInputStream(0))->GetFileName(0)); InitParameters() ; fDefaultInit = kFALSE ; fcdb = new AliPHOSCalibData(-1); @@ -253,15 +228,7 @@ AliPHOSDigitizer::AliPHOSDigitizer(AliRunDigitizer * rd) : //____________________________________________________________________________ AliPHOSDigitizer::~AliPHOSDigitizer() { - // dtor - AliRunLoader* rl = AliRunLoader::GetRunLoader(fEventFolderName) ; - if(rl){ - AliPHOSLoader * phosLoader = static_cast(rl->GetLoader("PHOSLoader")); - - if(phosLoader) - phosLoader->CleanDigitizer() ; - } - + // dtor delete [] fInputFileNames ; delete [] fEventNames ; @@ -291,8 +258,8 @@ void AliPHOSDigitizer::Digitize(Int_t event) AliPHOSLoader * phosLoader = static_cast(rl->GetLoader("PHOSLoader")); Int_t readEvent = event ; - if (fManager) - readEvent = static_cast(fManager->GetInputStream(0))->GetCurrentEventNumber() ; + if (fDigInput) + readEvent = static_cast(fDigInput->GetInputStream(0))->GetCurrentEventNumber() ; AliDebug(1,Form("Adding event %d from input stream 0 %s %s", readEvent, GetTitle(), fEventFolderName.Data())) ; rl->GetEvent(readEvent) ; @@ -369,8 +336,8 @@ void AliPHOSDigitizer::Digitize(Int_t event) } AliPHOSLoader * phosLoader2 = static_cast(rl2->GetLoader("PHOSLoader")); - if(fManager){ - readEvent = static_cast(fManager->GetInputStream(i))->GetCurrentEventNumber() ; + if(fDigInput){ + readEvent = static_cast(fDigInput->GetInputStream(i))->GetCurrentEventNumber() ; } TClonesArray * digs ; if(AliPHOSSimParam::GetInstance()->IsStreamDigits(i)){ //This is Digits Stream @@ -464,8 +431,8 @@ void AliPHOSDigitizer::Digitize(Int_t event) 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) ; @@ -508,6 +475,21 @@ void AliPHOSDigitizer::Digitize(Int_t event) } } + + //Apply non-linearity + 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( digits->At(i) ) ; + Double_t e= digit->GetEnergy() ; + // version(1) digit->SetEnergy(e*(1+a*TMath::Exp(-e/b))) ; + digit->SetEnergy(e*cNL*(1.+aNL*TMath::Exp(-e*e/2./bNL/bNL))) ; //Better agreement with data... + } + } + + //distretize energy if necessary if(AliPHOSSimParam::GetInstance()->IsEDigitizationOn()){ Float_t adcW=AliPHOSSimParam::GetInstance()->GetADCchannelW() ; @@ -516,12 +498,12 @@ void AliPHOSDigitizer::Digitize(Int_t event) digit->SetEnergy(adcW*ceil(digit->GetEnergy()/adcW)) ; } } + //Apply decalibration if necessary for(Int_t i = 0 ; i < nEMC ; i++){ digit = static_cast( digits->At(i) ) ; Decalibrate(digit) ; } - // ticks->Delete() ; // delete ticks ; @@ -554,8 +536,8 @@ void AliPHOSDigitizer::Digitize(Int_t event) 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) ; @@ -610,7 +592,7 @@ void AliPHOSDigitizer::Digitize(Int_t event) geom->AbsToRelNumbering(digit->GetId(),relId); - digit->SetEnergy(TMath::Ceil(digit->GetEnergy())-0.9999) ; +// digit->SetEnergy(TMath::Ceil(digit->GetEnergy())-0.9999) ; Float_t tres = TimeResolution(digit->GetEnergy()) ; digit->SetTime(gRandom->Gaus(digit->GetTime(), tres) ) ; @@ -676,7 +658,8 @@ void AliPHOSDigitizer::Decalibrate(AliPHOSDigit *digit) Int_t row =relId[2]; Int_t column=relId[3]; if(relId[1]==0){ //This Is EMC - Float_t calibration = fcdb->GetADCchannelEmc(module,column,row); + Float_t decalib = fcdb->GetADCchannelEmcDecalib(module,column,row); // O(1) + Float_t calibration = fcdb->GetADCchannelEmc(module,column,row)*decalib; Float_t energy = digit->GetEnergy()/calibration; digit->SetEnergy(energy); //Now digit measures E in ADC counts Float_t time = digit->GetTime() ; @@ -728,7 +711,7 @@ Int_t AliPHOSDigitizer::DigitizeCPV(Float_t charge, Int_t absId) } //____________________________________________________________________________ -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. @@ -752,13 +735,10 @@ void AliPHOSDigitizer::Exec(Option_t *option) AliRunLoader* rl = AliRunLoader::GetRunLoader(fEventFolderName) ; AliPHOSLoader * phosLoader = static_cast(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; @@ -779,8 +759,6 @@ void AliPHOSDigitizer::Exec(Option_t *option) fDigitsInRun += phosLoader->Digits()->GetEntriesFast() ; } - phosLoader->CleanDigitizer(); - if(strstr(option,"tim")){ gBenchmark->Stop("PHOSDigitizer"); TString message ; @@ -835,8 +813,8 @@ Bool_t AliPHOSDigitizer::Init() fFirstEvent = 0 ; fLastEvent = fFirstEvent ; - if (fManager) - fInput = fManager->GetNinputs() ; + if (fDigInput) + fInput = fDigInput->GetNinputs() ; else fInput = 1 ; @@ -846,19 +824,16 @@ Bool_t AliPHOSDigitizer::Init() fEventNames[0] = fEventFolderName.Data() ; Int_t index ; for (index = 1 ; index < fInput ; index++) { - fInputFileNames[index] = static_cast(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(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(rl->GetLoader("PHOSLoader")); - phosLoader->GetDigitsDataLoader()->GetBaseTaskLoader()->SetDoNotReload(kTRUE); - return fInit ; } @@ -884,7 +859,7 @@ void AliPHOSDigitizer::Print(const Option_t *)const printf(" Writing Digits to branch with title %s\n", fEventFolderName.Data()) ; Int_t nStreams ; - if (fManager) + if (fDigInput) nStreams = GetNInputStreams() ; else nStreams = fInput ; @@ -1026,7 +1001,6 @@ void AliPHOSDigitizer::WriteDigits() digitsBranch->Fill() ; phosLoader->WriteDigits("OVERWRITE"); - phosLoader->WriteDigitizer("OVERWRITE"); Unload() ;