]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PHOS/AliPHOSDigitizer.cxx
L1phase shift corrected
[u/mrichter/AliRoot.git] / PHOS / AliPHOSDigitizer.cxx
index 88dabf0aa5decac00834aaa8ff74126bb9ee60a2..f193db478b3669d80bba273e218ae9dbfe7d80c8 100644 (file)
 //_________________________________________________________________________
 //*-- 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"
 #include "AliPHOSCalibData.h"
 #include "AliRunLoader.h"
 #include "AliPHOSLoader.h"
+#include "AliPHOSPulseGenerator.h"
 
 ClassImp(AliPHOSDigitizer)
 
@@ -158,17 +159,20 @@ AliPHOSDigitizer::AliPHOSDigitizer() :
   fFirstEvent(0),
   fLastEvent(0), 
   fcdb(0x0),
-  fEventCounter(0)
+  fEventCounter(0),
+  fPulse(0),
+  fADCValuesLG(0),
+  fADCValuesHG(0)
 {
   // 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),
@@ -180,13 +184,16 @@ AliPHOSDigitizer::AliPHOSDigitizer(TString alirunFileName,
   fFirstEvent(0),
   fLastEvent(0), 
   fcdb(0x0),
-  fEventCounter(0)
+  fEventCounter(0),
+  fPulse(0),
+  fADCValuesLG(0),
+  fADCValuesHG(0)
 {
   // ctor
   InitParameters() ; 
   Init() ;
   fDefaultInit = kFALSE ; 
-  fManager = 0 ;                     // We work in the standalong mode
+  fDigInput = 0 ;                     // We work in the standalone mode
   fcdb = new AliPHOSCalibData(-1);
 }
 
@@ -204,7 +211,10 @@ AliPHOSDigitizer::AliPHOSDigitizer(const AliPHOSDigitizer & d) :
   fFirstEvent(d.fFirstEvent),
   fLastEvent(d.fLastEvent), 
   fcdb (0x0), 
-  fEventCounter(0)
+  fEventCounter(0),
+  fPulse(0),
+  fADCValuesLG(0),
+  fADCValuesHG(0)
 {
   // copyy ctor 
   SetName(d.GetName()) ; 
@@ -213,8 +223,8 @@ AliPHOSDigitizer::AliPHOSDigitizer(const AliPHOSDigitizer & d) :
 }
 
 //____________________________________________________________________________ 
-AliPHOSDigitizer::AliPHOSDigitizer(AliRunDigitizer * rd) :
-  AliDigitizer(rd,"PHOS"+AliConfig::Instance()->GetDigitizerTaskName()),
+AliPHOSDigitizer::AliPHOSDigitizer(AliDigitizationInput * rd) :
+  AliDigitizer(rd,"PHOSDigitizer"),
   fDefaultInit(kFALSE),
   fDigitsInRun(0),
   fInit(kFALSE),
@@ -222,16 +232,19 @@ AliPHOSDigitizer::AliPHOSDigitizer(AliRunDigitizer * rd) :
   fInputFileNames(0x0),
   fEventNames(0x0),
   fEmcCrystals(0),
-  fEventFolderName(fManager->GetInputFolderName(0)),
+  fEventFolderName(fDigInput->GetInputFolderName(0)),
   fFirstEvent(0),
   fLastEvent(0), 
   fcdb (0x0), 
-  fEventCounter(0)
+  fEventCounter(0),
+  fPulse(0),
+  fADCValuesLG(0),
+  fADCValuesHG(0)
 
 {
   // ctor Init() is called by RunDigitizer
-  fManager = rd ; 
-  SetTitle(dynamic_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);
@@ -240,16 +253,14 @@ AliPHOSDigitizer::AliPHOSDigitizer(AliRunDigitizer * rd) :
 //____________________________________________________________________________ 
   AliPHOSDigitizer::~AliPHOSDigitizer()
 {
-  // dtor
-  AliRunLoader* rl = AliRunLoader::GetRunLoader(fEventFolderName) ;
-  if(rl){                                                                                                                               
-    AliPHOSLoader * phosLoader = dynamic_cast<AliPHOSLoader*>(rl->GetLoader("PHOSLoader"));                                                                 
-    phosLoader->CleanDigitizer() ;
-  }
-
+  // dtor  
   delete [] fInputFileNames ; 
   delete [] fEventNames ; 
 
+  delete fPulse;
+  delete [] fADCValuesLG;
+  delete [] fADCValuesHG;
+
   if(fcdb){ delete fcdb ; fcdb=0;} 
 
 }
@@ -269,11 +280,11 @@ void AliPHOSDigitizer::Digitize(Int_t event)
 
   //First stream 
   AliRunLoader* rl = AliRunLoader::GetRunLoader(fEventFolderName) ;
-  AliPHOSLoader * phosLoader = dynamic_cast<AliPHOSLoader*>(rl->GetLoader("PHOSLoader"));                                                                
+  AliPHOSLoader * phosLoader = static_cast<AliPHOSLoader*>(rl->GetLoader("PHOSLoader"));
 
   Int_t readEvent = event ; 
-  if (fManager
-    readEvent = dynamic_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) ;
@@ -348,10 +359,10 @@ void AliPHOSDigitizer::Digitize(Int_t event)
       }
       rl2->LoadHeader();
     }
-    AliPHOSLoader * phosLoader2 = dynamic_cast<AliPHOSLoader*>(rl2->GetLoader("PHOSLoader"));
+    AliPHOSLoader * phosLoader2 = static_cast<AliPHOSLoader*>(rl2->GetLoader("PHOSLoader"));
  
-    if(fManager){ 
-      readEvent = dynamic_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
@@ -378,10 +389,10 @@ void AliPHOSDigitizer::Digitize(Int_t event)
   Int_t nextSig = 200000 ; 
   TClonesArray * sdigits ;  
   for(Int_t i = 0 ; i < fInput ; i++){
-    sdigits = dynamic_cast<TClonesArray *>(sdigArray->At(i)) ;
+    sdigits = static_cast<TClonesArray *>(sdigArray->At(i)) ;
     if ( !sdigits->GetEntriesFast() )
       continue ; 
-    Int_t curNext = dynamic_cast<AliPHOSDigit *>(sdigits->At(0))->GetId() ;
+    Int_t curNext = static_cast<AliPHOSDigit *>(sdigits->At(0))->GetId() ;
     if(curNext < nextSig) 
       nextSig = curNext ;
   }
@@ -410,7 +421,7 @@ void AliPHOSDigitizer::Digitize(Int_t event)
       Float_t noise = gRandom->Gaus(0.,apdNoise) ; 
       new((*digits)[idigit]) AliPHOSDigit( -1, absID, noise, TimeOfNoise() ) ;
       //look if we have to add signal?
-      digit = dynamic_cast<AliPHOSDigit *>(digits->At(idigit)) ;
+      digit = static_cast<AliPHOSDigit *>(digits->At(idigit)) ;
       idigit++ ;
     
       if(absID==nextSig){
@@ -432,8 +443,8 @@ void AliPHOSDigitizer::Digitize(Int_t event)
       
         //loop over inputs
         for(Int_t i = 0 ; i < fInput ; i++){
-         if( dynamic_cast<TClonesArray *>(sdigArray->At(i))->GetEntriesFast() > index[i] ){
-           curSDigit = dynamic_cast<AliPHOSDigit*>(dynamic_cast<TClonesArray *>(sdigArray->At(i))->At(index[i])) ;     
+         if( static_cast<TClonesArray *>(sdigArray->At(i))->GetEntriesFast() > index[i] ){
+           curSDigit = static_cast<AliPHOSDigit*>(static_cast<TClonesArray *>(sdigArray->At(i))->At(index[i])) ;       
             if(AliPHOSSimParam::GetInstance()->IsStreamDigits(i)){ //This is Digits Stream
               curSDigit->SetEnergy(Calibrate(curSDigit->GetEnergy(),curSDigit->GetId())) ;
               curSDigit->SetTime(CalibrateT(curSDigit->GetTime(),curSDigit->GetId())) ;
@@ -445,8 +456,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) ;
@@ -463,8 +474,8 @@ void AliPHOSDigitizer::Digitize(Int_t event)
            *digit += *curSDigit ;  //add energies
 
            index[i]++ ;
-           if( dynamic_cast<TClonesArray *>(sdigArray->At(i))->GetEntriesFast() > index[i] )
-             curSDigit = dynamic_cast<AliPHOSDigit*>(dynamic_cast<TClonesArray *>(sdigArray->At(i))->At(index[i])) ;   
+           if( static_cast<TClonesArray *>(sdigArray->At(i))->GetEntriesFast() > index[i] )
+             curSDigit = static_cast<AliPHOSDigit*>(static_cast<TClonesArray *>(sdigArray->At(i))->At(index[i])) ;     
            else
              curSDigit = 0 ;
          }
@@ -478,10 +489,10 @@ void AliPHOSDigitizer::Digitize(Int_t event)
         //Find next signal module
         nextSig = 200000 ;
         for(Int_t i = 0 ; i < fInput ; i++){
-         sdigits = dynamic_cast<TClonesArray *>(sdigArray->At(i)) ;
+         sdigits = static_cast<TClonesArray *>(sdigArray->At(i)) ;
          Int_t curNext = nextSig ;
          if(sdigits->GetEntriesFast() > index[i] ){
-           curNext = dynamic_cast<AliPHOSDigit *>(sdigits->At(index[i]))->GetId() ;
+           curNext = static_cast<AliPHOSDigit *>(sdigits->At(index[i]))->GetId() ;
          }
          if(curNext < nextSig) nextSig = curNext ;
         }
@@ -489,20 +500,35 @@ 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<AliPHOSDigit*>( 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() ;
     for(Int_t i = 0 ; i < nEMC ; i++){                                                                                                       
-      digit = dynamic_cast<AliPHOSDigit*>( digits->At(i) ) ;
+      digit = static_cast<AliPHOSDigit*>( digits->At(i) ) ;
       digit->SetEnergy(adcW*ceil(digit->GetEnergy()/adcW)) ;
     } 
   }
   //Apply decalibration if necessary
   for(Int_t i = 0 ; i < nEMC ; i++){
-    digit = dynamic_cast<AliPHOSDigit*>( digits->At(i) ) ;
+    digit = static_cast<AliPHOSDigit*>( digits->At(i) ) ;
     Decalibrate(digit) ;
   }
   
 //  ticks->Delete() ;
 //  delete ticks ;
@@ -523,11 +549,11 @@ void AliPHOSDigitizer::Digitize(Int_t event)
         idigit++ ;
         //look if we have to add signal?
         if(absID==nextSig){
-          digit = dynamic_cast<AliPHOSDigit *>(digits->At(idigit-1)) ;
+          digit = static_cast<AliPHOSDigit *>(digits->At(idigit-1)) ;
           //Add SDigits from all inputs
           for(Int_t i = 0 ; i < fInput ; i++){
-            if( dynamic_cast<TClonesArray *>(sdigArray->At(i))->GetEntriesFast() > index[i] )
-              curSDigit = dynamic_cast<AliPHOSDigit*>( dynamic_cast<TClonesArray *>(sdigArray->At(i))->At(index[i])) ;         
+            if( static_cast<TClonesArray *>(sdigArray->At(i))->GetEntriesFast() > index[i] )
+              curSDigit = static_cast<AliPHOSDigit*>( static_cast<TClonesArray *>(sdigArray->At(i))->At(index[i])) ;   
             else
               curSDigit = 0 ;
 
@@ -535,8 +561,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) ;
@@ -544,8 +570,8 @@ void AliPHOSDigitizer::Digitize(Int_t event)
               //add energies
               *digit += *curSDigit ;  
               index[i]++ ;
-              if( dynamic_cast<TClonesArray *>(sdigArray->At(i))->GetEntriesFast() > index[i] )
-                curSDigit = dynamic_cast<AliPHOSDigit*>( dynamic_cast<TClonesArray *>(sdigArray->At(i))->At(index[i]) ) ;      
+              if( static_cast<TClonesArray *>(sdigArray->At(i))->GetEntriesFast() > index[i] )
+                curSDigit = static_cast<AliPHOSDigit*>( static_cast<TClonesArray *>(sdigArray->At(i))->At(index[i]) ) ;        
               else
                 curSDigit = 0 ;
             }
@@ -554,10 +580,10 @@ void AliPHOSDigitizer::Digitize(Int_t event)
           //Find next signal module
           nextSig = 200000 ;
           for(Int_t i = 0 ; i < fInput ; i++){
-           sdigits = dynamic_cast<TClonesArray *>(sdigArray->At(i)) ;
+           sdigits = static_cast<TClonesArray *>(sdigArray->At(i)) ;
            Int_t curNext = nextSig ;
            if(sdigits->GetEntriesFast() > index[i] )
-             curNext = dynamic_cast<AliPHOSDigit *>( sdigits->At(index[i]) )->GetId() ;
+             curNext = static_cast<AliPHOSDigit *>( sdigits->At(index[i]) )->GetId() ;
            if(curNext < nextSig) nextSig = curNext ;
           }
       
@@ -573,7 +599,7 @@ void AliPHOSDigitizer::Digitize(Int_t event)
   //set amplitudes in bad channels to zero
 
   for(Int_t i = 0 ; i <digits->GetEntriesFast(); i++){
-    digit = dynamic_cast<AliPHOSDigit*>( digits->At(i) ) ;
+    digit = static_cast<AliPHOSDigit*>( digits->At(i) ) ;
     geom->AbsToRelNumbering(digit->GetId(),relId);
     if(relId[1] == 0) // Emc
       if(fcdb->IsBadChannelEmc(relId[0],relId[3],relId[2])) digit->SetEnergy(0.); 
@@ -582,22 +608,34 @@ void AliPHOSDigitizer::Digitize(Int_t event)
   //remove digits below thresholds
   Float_t emcThreshold = AliPHOSSimParam::GetInstance()->GetEmcDigitsThreshold() ;
   for(Int_t i = 0 ; i < nEMC ; i++){
-    digit = dynamic_cast<AliPHOSDigit*>( digits->At(i) ) ;
+    digit = static_cast<AliPHOSDigit*>( digits->At(i) ) ;
 
     if(digit->GetEnergy() < emcThreshold){
       digits->RemoveAt(i) ;
       continue ;
     }
 
-    digit->SetEnergy(TMath::Ceil(digit->GetEnergy())-0.9999) ;
+    geom->AbsToRelNumbering(digit->GetId(),relId);
+
+//    digit->SetEnergy(TMath::Ceil(digit->GetEnergy())-0.9999) ;
 
     Float_t tres = TimeResolution(digit->GetEnergy()) ; 
     digit->SetTime(gRandom->Gaus(digit->GetTime(), tres) ) ;
+
+    fPulse->Reset();
+    fPulse->SetAmplitude(digit->GetEnergy()/
+                        fcdb->GetADCchannelEmc(relId[0],relId[3],relId[2]));
+    fPulse->SetTZero(digit->GetTimeR());
+    fPulse->MakeSamples();
+    fPulse->GetSamples(fADCValuesHG, fADCValuesLG) ; 
+    Int_t nSamples = fPulse->GetRawFormatTimeBins();
+    digit->SetALTROSamplesHG(nSamples,fADCValuesHG);
+    digit->SetALTROSamplesLG(nSamples,fADCValuesLG);
   }
 
   Float_t cpvDigitThreshold = AliPHOSSimParam::GetInstance()->GetCpvDigitsThreshold() ;
   for(Int_t i = nEMC; i < nCPV ; i++){
-    if( dynamic_cast<AliPHOSDigit*>(digits->At(i))->GetEnergy() < cpvDigitThreshold )
+    if( static_cast<AliPHOSDigit*>(digits->At(i))->GetEnergy() < cpvDigitThreshold )
       digits->RemoveAt(i) ;
   } 
     
@@ -606,7 +644,7 @@ void AliPHOSDigitizer::Digitize(Int_t event)
   
   //Set indexes in list of digits and make true digitization of the energy
   for (Int_t i = 0 ; i < ndigits ; i++) { 
-    digit = dynamic_cast<AliPHOSDigit*>( digits->At(i) ) ; 
+    digit = static_cast<AliPHOSDigit*>( digits->At(i) ) ; 
     digit->SetIndexInList(i) ;     
     if(digit->GetId() > fEmcCrystals){ //digitize CPV only
       digit->SetAmp(DigitizeCPV(digit->GetEnergy(),digit->GetId()) ) ;
@@ -645,7 +683,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() ;
@@ -697,7 +736,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.
@@ -720,14 +759,11 @@ void AliPHOSDigitizer::Exec(Option_t *option)
      gBenchmark->Start("PHOSDigitizer");
   
   AliRunLoader* rl = AliRunLoader::GetRunLoader(fEventFolderName) ;
-  AliPHOSLoader * phosLoader = dynamic_cast<AliPHOSLoader*>(rl->GetLoader("PHOSLoader"));
-
-  // Post Digitizer to the white board
-  phosLoader->PostDigitizer(this) ;
+  AliPHOSLoader * phosLoader = static_cast<AliPHOSLoader*>(rl->GetLoader("PHOSLoader"));
   
   if (fLastEvent == -1) 
     fLastEvent = rl->GetNumberOfEvents() - 1 ;
-  else if (fManager
+  else if (fDigInput
     fLastEvent = fFirstEvent ; 
  
   Int_t nEvents   = fLastEvent - fFirstEvent + 1;
@@ -748,8 +784,6 @@ void AliPHOSDigitizer::Exec(Option_t *option)
     fDigitsInRun += phosLoader->Digits()->GetEntriesFast() ;  
  }
  
-  phosLoader->CleanDigitizer();
-
   if(strstr(option,"tim")){
     gBenchmark->Stop("PHOSDigitizer");
     TString message ; 
@@ -804,8 +838,8 @@ Bool_t AliPHOSDigitizer::Init()
   
   fFirstEvent = 0 ; 
   fLastEvent = fFirstEvent ; 
-  if (fManager
-    fInput = fManager->GetNinputs() ; 
+  if (fDigInput
+    fInput = fDigInput->GetNinputs() ; 
   else 
     fInput           = 1 ;
   
@@ -815,9 +849,9 @@ Bool_t AliPHOSDigitizer::Init()
   fEventNames[0]     = fEventFolderName.Data() ; 
   Int_t index ; 
   for (index = 1 ; index < fInput ; index++) {
-    fInputFileNames[index] = dynamic_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
@@ -825,9 +859,6 @@ Bool_t AliPHOSDigitizer::Init()
   if(!rl){
     rl = AliRunLoader::Open(GetTitle(), fEventFolderName) ; 
   }
-  AliPHOSLoader * phosLoader = dynamic_cast<AliPHOSLoader*>(rl->GetLoader("PHOSLoader"));
-  phosLoader->GetDigitsDataLoader()->GetBaseTaskLoader()->SetDoNotReload(kTRUE);
-
   return fInit ; 
 }
 
@@ -838,6 +869,9 @@ void AliPHOSDigitizer::InitParameters()
 
   fDigitsInRun  = 0 ; 
   SetEventRange(0,-1) ;
+  fPulse = new AliPHOSPulseGenerator();
+  fADCValuesLG = new Int_t[fPulse->GetRawFormatTimeBins()];
+  fADCValuesHG = new Int_t[fPulse->GetRawFormatTimeBins()];
     
 }
 
@@ -850,7 +884,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 ; 
@@ -881,7 +915,7 @@ void AliPHOSDigitizer::Print(const Option_t *)const
   
 
   AliRunLoader* rl = AliRunLoader::GetRunLoader(fEventFolderName) ;
-  AliPHOSLoader * phosLoader = dynamic_cast<AliPHOSLoader*>(rl->GetLoader("PHOSLoader"));
+  AliPHOSLoader * phosLoader = static_cast<AliPHOSLoader*>(rl->GetLoader("PHOSLoader"));
   TClonesArray * digits = phosLoader->Digits() ; 
   const AliPHOSGeometry *geom = AliPHOSGeometry::GetInstance() ;
   
@@ -898,7 +932,7 @@ void AliPHOSDigitizer::Print(const Option_t *)const
     Int_t maxEmc = geom->GetNModules()*geom->GetNCristalsInModule() ;
     Int_t index ;
     for (index = 0 ; (index < digits->GetEntriesFast()) && 
-          (dynamic_cast<AliPHOSDigit *>(digits->At(index))->GetId() <= maxEmc) ; index++) {
+          (static_cast<AliPHOSDigit *>(digits->At(index))->GetId() <= maxEmc) ; index++) {
       digit = (AliPHOSDigit * )  digits->At(index) ;
       if(digit->GetNprimary() == 0) 
        continue;
@@ -954,12 +988,12 @@ void AliPHOSDigitizer::Unload()
     TString tempo(fEventNames[i]) ; 
     tempo += i ;
     AliRunLoader* rl = AliRunLoader::GetRunLoader(tempo) ; 
-    AliPHOSLoader * phosLoader = dynamic_cast<AliPHOSLoader*>(rl->GetLoader("PHOSLoader"));
+    AliPHOSLoader * phosLoader = static_cast<AliPHOSLoader*>(rl->GetLoader("PHOSLoader"));
     phosLoader->UnloadSDigits() ; 
   }
   
   AliRunLoader* rl = AliRunLoader::GetRunLoader(fEventFolderName) ;
-  AliPHOSLoader * phosLoader = dynamic_cast<AliPHOSLoader*>(rl->GetLoader("PHOSLoader"));
+  AliPHOSLoader * phosLoader = static_cast<AliPHOSLoader*>(rl->GetLoader("PHOSLoader"));
   phosLoader->UnloadDigits() ; 
 }
 
@@ -976,7 +1010,7 @@ void AliPHOSDigitizer::WriteDigits()
   //      and names of files, from which digits are made.
 
   AliRunLoader* rl = AliRunLoader::GetRunLoader(fEventFolderName) ;
-  AliPHOSLoader * phosLoader = dynamic_cast<AliPHOSLoader*>(rl->GetLoader("PHOSLoader"));
+  AliPHOSLoader * phosLoader = static_cast<AliPHOSLoader*>(rl->GetLoader("PHOSLoader"));
  
   const TClonesArray * digits = phosLoader->Digits() ; 
   TTree * treeD = phosLoader->TreeD();
@@ -992,7 +1026,6 @@ void AliPHOSDigitizer::WriteDigits()
   digitsBranch->Fill() ;
   
   phosLoader->WriteDigits("OVERWRITE");
-  phosLoader->WriteDigitizer("OVERWRITE");
 
   Unload() ;