]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PHOS/AliPHOSDigitizer.cxx
Changes default values of pin noise and emc threshold
[u/mrichter/AliRoot.git] / PHOS / AliPHOSDigitizer.cxx
index 13b5a236e0765b9142bc63da5c113fd3a8acb147..6c6ad8b8ada88fd7ee9c6729ac2c98d90a32890f 100644 (file)
@@ -86,11 +86,11 @@ ClassImp(AliPHOSDigitizer)
 {
   // ctor
 
-  fPinNoise           = 0.01 ;
-  fEMCDigitThreshold  = 0.01 ;
+  fPinNoise           = 0.004 ;
+  fEMCDigitThreshold  = 0.012 ;
   fCPVNoise           = 0.01;
   fCPVDigitThreshold  = 0.09 ;
-  fTimeResolution     = 1.0e-9 ;
+  fTimeResolution     = 0.5e-9 ;
   fTimeSignalLength   = 1.0e-9 ;
   fDigitsInRun  = 0 ; 
   fADCchanelEmc = 0.0015;        // width of one ADC channel in GeV
@@ -102,7 +102,7 @@ ClassImp(AliPHOSDigitizer)
   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
-  fARD = 0 ;                        // We work in the standalong mode
+  fManager = 0 ;                        // We work in the standalong mode
 }
 
 //____________________________________________________________________________ 
@@ -111,20 +111,17 @@ AliPHOSDigitizer::AliPHOSDigitizer(const char *headerFile,const char * name)
   // ctor
   SetName(name) ;
   SetTitle(headerFile) ;
-  fARD = 0 ;                     // We work in the standalong mode
+  fManager = 0 ;                     // We work in the standalong mode
   Init() ;
   
 }
 
 //____________________________________________________________________________ 
-AliPHOSDigitizer::AliPHOSDigitizer(AliRunDigitizer * ard)
+AliPHOSDigitizer::AliPHOSDigitizer(AliRunDigitizer * ard):AliDigitizer(ard)
 {
   // ctor
-  fARD = ard ;
-  SetName("Default");
-  SetTitle("aliroot") ;
-  Init() ;
-  
+  SetName("");     //Will call init in the digitizing
+  SetTitle("aliroot") ;  
 }
 
 //____________________________________________________________________________ 
@@ -146,12 +143,8 @@ void AliPHOSDigitizer::Digitize(const Int_t event)
   // This design avoids scanning over the list of digits to add 
   // contribution to new SDigits only.
 
-  if( strcmp(GetName(), "") == 0 )
-    Init() ;
-
   AliPHOSGetter * gime = AliPHOSGetter::GetInstance() ; 
   TClonesArray * digits = gime->Digits(GetName()) ; 
-  AliPHOSSDigitizer * sdiz = gime->SDigitizer(GetName()) ; 
 
   digits->Clear() ;
 
@@ -169,8 +162,6 @@ void AliPHOSDigitizer::Digitize(const Int_t event)
 
   digits->Expand(nCPV) ;
 
-
-  // sdigitize random gaussian noise and add it to all cells (EMCA+CPV+PPSD) 
   // get first the sdigitizer from the tasks list (must have same name as the digitizer)
   const AliPHOSSDigitizer * sDigitizer = gime->SDigitizer(GetName()); 
   if ( !sDigitizer) {
@@ -179,7 +170,7 @@ void AliPHOSDigitizer::Digitize(const Int_t event)
   }
     
   // loop through the sdigits posted to the White Board and add them to the noise
-  TCollection * folderslist = ((TFolder*)gROOT->FindObjectAny("YSAlice/WhiteBoard/SDigits/PHOS"))->GetListOfFolders() ; 
+  TCollection * folderslist = gime->SDigitsFolder()->GetListOfFolders() ; 
   TIter next(folderslist) ; 
   TFolder * folder = 0 ; 
   TClonesArray * sdigits = 0 ;
@@ -187,19 +178,24 @@ void AliPHOSDigitizer::Digitize(const Int_t event)
   TObjArray * sdigArray = new TObjArray(2) ;
   while ( (folder = (TFolder*)next()) ) 
     if ( (sdigits = (TClonesArray*)folder->FindObject(GetName()) ) ) {
+      TString fileName(folder->GetName()) ;
+      fileName.ReplaceAll("_","/") ;
       cout << "INFO: AliPHOSDigitizer::Digitize -> Adding SDigits " 
-          << GetName() << " from " << folder->GetName() << endl ; 
+          << GetName() << " from " << fileName << endl ; 
       sdigArray->AddAt(sdigits, input) ;
       input++ ;
     }
 
-  //Find the first crystall with sygnal
+  //Find the first crystall with signal
   Int_t nextSig = 200000 ; 
   Int_t i;
   for(i=0; i<input; i++){
     sdigits = (TClonesArray *)sdigArray->At(i) ;
+    if ( !sdigits->GetEntriesFast() )
+      continue ; 
     Int_t curNext = ((AliPHOSDigit *)sdigits->At(0))->GetId() ;
-    if(curNext < nextSig) nextSig = curNext ;
+     if(curNext < nextSig) 
+       nextSig = curNext ;
   }
 
   TArrayI index(input) ;
@@ -238,8 +234,8 @@ void AliPHOSDigitizer::Digitize(const Int_t event)
        while(curSDigit && curSDigit->GetId() == absID){           
          //Shift primary to separate primaries belonging different inputs
          Int_t primaryoffset ;
-         if(fARD)
-           primaryoffset = fARD->GetMask(i) ; 
+         if(fManager)
+           primaryoffset = fManager->GetMask(i) ; 
          else
            primaryoffset = 10000000*i ;
          curSDigit->ShiftPrimary(primaryoffset) ;
@@ -294,12 +290,13 @@ void AliPHOSDigitizer::Digitize(const Int_t event)
          curSDigit = (AliPHOSDigit*)((TClonesArray *)sdigArray->At(i))->At(index[i]) ;         
        else
          curSDigit = 0 ;
+
        //May be several digits will contribute from the same input
        while(curSDigit && curSDigit->GetId() == absID){           
          //Shift primary to separate primaries belonging different inputs
          Int_t primaryoffset ;
-         if(fARD)
-           primaryoffset = fARD->GetMask(i) ; 
+         if(fManager)
+           primaryoffset = fManager->GetMask(i) ; 
          else
            primaryoffset = 10000000*i ;
          curSDigit->ShiftPrimary(primaryoffset) ;
@@ -313,8 +310,9 @@ void AliPHOSDigitizer::Digitize(const Int_t event)
            curSDigit = 0 ;
        }
       }
-      
+
       //Find next signal module
+      nextSig = 200000 ;
       for(i=0; i<input; i++){
        sdigits = (TClonesArray *)sdigArray->At(i) ;
        Int_t curNext = nextSig ;
@@ -330,13 +328,18 @@ void AliPHOSDigitizer::Digitize(const Int_t event)
   
   
   //remove digits below thresholds
-  for(absID = 0; absID < nEMC ; absID++)
-    if(sDigitizer->Calibrate(((AliPHOSDigit*)digits->At(absID))->GetAmp()) < fEMCDigitThreshold)
-      digits->RemoveAt(absID) ;
-  
-  for(absID = nEMC; absID < nCPV ; absID++)
-    if(sDigitizer->Calibrate(((AliPHOSDigit*)digits->At(absID))->GetAmp()) < fCPVDigitThreshold)
-      digits->RemoveAt(absID) ;
+  for(i = 0; i < nEMC ; i++){
+    digit = (AliPHOSDigit*) digits->At(i) ;
+    if(sDigitizer->Calibrate( digit->GetAmp() ) < fEMCDigitThreshold)
+      digits->RemoveAt(i) ;
+    else
+      digit->SetTime(gRandom->Gaus(digit->GetTime(),fTimeResolution) ) ;
+  }
+
+
+  for(i = nEMC; i < nCPV ; i++)
+    if(sDigitizer->Calibrate(((AliPHOSDigit*)digits->At(i))->GetAmp()) < fCPVDigitThreshold)
+      digits->RemoveAt(i) ;
     
   digits->Compress() ;  
   
@@ -347,7 +350,7 @@ void AliPHOSDigitizer::Digitize(const Int_t event)
   for (i = 0 ; i < ndigits ; i++) { 
     AliPHOSDigit * digit = (AliPHOSDigit *) digits->At(i) ; 
     digit->SetIndexInList(i) ;     
-    Float_t energy = sdiz->Calibrate(digit->GetAmp()) ;
+    Float_t energy = sDigitizer->Calibrate(digit->GetAmp()) ;
     digit->SetAmp(DigitizeEnergy(energy,digit->GetId()) ) ;
   }
 
@@ -371,7 +374,7 @@ void AliPHOSDigitizer::Exec(Option_t *option)
 { 
   // Managing method
 
-  if( strcmp(GetName(), "") == 0 )    
+  if(strcmp(GetName(), "") == 0 )   
     Init() ;
   
   if (strstr(option,"print")) {
@@ -388,8 +391,8 @@ void AliPHOSDigitizer::Exec(Option_t *option)
   
   TTree * treeD ;
   
-  if(fARD){
-    treeD = fARD->GetTreeD() ;
+  if(fManager){
+    treeD = fManager->GetTreeD() ;
     nevents = 1 ;    // Will process only one event
   }
   else {
@@ -433,10 +436,10 @@ void AliPHOSDigitizer::Exec(Option_t *option)
 
   for(ievent = 0; ievent < nevents; ievent++){
     
-    if(fARD){
+    if(fManager){
       Int_t input ;
-      for(input = 0 ; input < fARD->GetNinputs(); input ++){
-       TTree * treeS = fARD->GetInputTreeS(input) ;
+      for(input = 0 ; input < fManager->GetNinputs(); input ++){
+       TTree * treeS = fManager->GetInputTreeS(input) ;
        if(!treeS){
          cerr << "AliPHOSDigitizer -> No Input " << endl ;
          return ;
@@ -453,6 +456,9 @@ void AliPHOSDigitizer::Exec(Option_t *option)
     
     if(strstr(option,"deb"))
       PrintDigits(option);
+    
+    //increment the total number of Digits per run 
+    fDigitsInRun += gime->Digits()->GetEntriesFast() ;  
   }
   
   if(strstr(option,"tim")){
@@ -491,7 +497,7 @@ Bool_t AliPHOSDigitizer::Init()
   fEMCDigitThreshold  = 0.01 ;
   fCPVNoise           = 0.01;
   fCPVDigitThreshold  = 0.09 ;
-  fTimeResolution     = 1.0e-9 ;
+  fTimeResolution     = 0.5e-9 ;
   fTimeSignalLength   = 1.0e-9 ;
   fDigitsInRun  = 0 ; 
   fADCchanelEmc = 0.0015;        // width of one ADC channel in GeV
@@ -503,19 +509,15 @@ Bool_t AliPHOSDigitizer::Init()
   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
-
-  // Makes all memory allocations
-  // Adds Digitizer task to the folder of PHOS tasks
-
-   //============================================================= YS
-  //  The initialisation is now done by AliPHOSGetter
     
-  if( strcmp(GetTitle(), "") == 0 )
-    SetTitle("galice.root") ;
+  if(fManager)
+    SetTitle("aliroot") ;
+  else if (strcmp(GetTitle(),"")==0) 
+   SetTitle("galice.root") ;
+
+  if( strcmp(GetName(), "") == 0 )
+    SetName("Default") ;
   
-  // the SDigits name is stored by AliPHOSGetter as the name of the TClones Array 
-  // //YSAlice/WhiteBoard/SDigits/PHOS/headerFile/branchname and has branchTitle as title.    
-    
   AliPHOSGetter * gime = AliPHOSGetter::GetInstance(GetTitle(), GetName()) ; 
   if ( gime == 0 ) {
     cerr << "ERROR: AliPHOSDigitizer::Init -> Could not obtain the Getter object !" << endl ; 
@@ -524,15 +526,15 @@ Bool_t AliPHOSDigitizer::Init()
   
   const AliPHOSGeometry * geom = gime->PHOSGeometry() ;
   fEmcCrystals = geom->GetNModules() *  geom->GetNCristalsInModule() ;
-     
-  // create a folder on the white board //YSAlice/WhiteBoard/Digits/PHOS/headerFile/digitsTitle
+  
+  // Post Digits to the white board
   gime->PostDigits(GetName() ) ;   
   
-  //add Task to //YSAlice/tasks/Digitizer/PHOS
-    gime->PostDigitizer(this) ;
+  // Post Digitizer to the white board
+  gime->PostDigitizer(this) ;
   
   //Mark that we will use current header file
-  if(!fARD){
+  if(!fManager){
     gime->PostSDigits(GetName(),GetTitle()) ;
     gime->PostSDigitizer(GetName(),GetTitle()) ;
   }
@@ -557,15 +559,15 @@ void AliPHOSDigitizer::MixWith(const char* headerFile)
   if( strcmp(GetName(), "") == 0 )
     Init() ;
 
-  if(fARD){
+  if(fManager){
     cout << "Can not use this method under AliRunDigitizer " << endl ;
     return ;
   }
   
   // check if the specified SDigits do not already exist on the White Board:
-  // //YSAlice/WhiteBoard/SDigits/PHOS/headerFile/sDigitsTitle
+  // //Folders/RunMC/Event/Data/PHOS/SDigits/headerFile/sdigitsname
 
-  TString path = "YSAlice/WhiteBoard/SDigits/PHOS/" ; 
+  TString path = "Folders/RunMC/Event/Data/PHOS/SDigits" ; 
   path += headerFile ; 
   path += "/" ; 
   path += GetName() ;
@@ -597,7 +599,7 @@ void AliPHOSDigitizer::Print(Option_t* option)const {
     cout << "------------------- "<< GetName() << " -------------" << endl ;
     cout << "Digitizing sDigits from file(s): " <<endl ;
     
-     TCollection * folderslist = ((TFolder*)gROOT->FindObjectAny("YSAlice/WhiteBoard/SDigits/PHOS"))->GetListOfFolders() ; 
+     TCollection * folderslist = ((TFolder*)gROOT->FindObjectAny("Folders/RunMC/Event/Data/PHOS/SDigits"))->GetListOfFolders() ; 
     TIter next(folderslist) ; 
     TFolder * folder = 0 ; 
     
@@ -635,10 +637,11 @@ void AliPHOSDigitizer::PrintDigits(Option_t * option){
     
     //loop over digits
     AliPHOSDigit * digit;
-    cout << "Digit Id    Amplitude     Index "  <<  " Nprim " << " Primaries list " <<  endl;      
+    cout << "EMC digits (with primaries): " << endl ;
+    cout << "Digit Id     Amplitude   Index       Nprim  Primaries list " <<  endl;      
     Int_t maxEmc = gime->PHOSGeometry()->GetNModules()*gime->PHOSGeometry()->GetNCristalsInModule() ;
     Int_t index ;
-    for (index = 0 ; (index < digits->GetEntries()) && 
+    for (index = 0 ; (index < digits->GetEntriesFast()) && 
         (((AliPHOSDigit * )  digits->At(index))->GetId() <= maxEmc) ; index++) {
       digit = (AliPHOSDigit * )  digits->At(index) ;
       if(digit->GetNprimary() == 0) continue;
@@ -658,10 +661,11 @@ void AliPHOSDigitizer::PrintDigits(Option_t * option){
     
     //loop over CPV digits
     AliPHOSDigit * digit;
-    cout << "Digit Id " << " Amplitude " <<  " Index "  <<  " Nprim " << " Primaries list " <<  endl;      
+    cout << "CPV digits: " << endl ;
+    cout << "Digit Id     Amplitude   Index       Nprim  Primaries list " <<  endl;      
     Int_t maxEmc = gime->PHOSGeometry()->GetNModules()*gime->PHOSGeometry()->GetNCristalsInModule() ;
     Int_t index ;
-    for (index = 0 ; index < digits->GetEntries(); index++) {
+    for (index = 0 ; index < digits->GetEntriesFast(); index++) {
       digit = (AliPHOSDigit * )  digits->At(index) ;
       if(digit->GetId() > maxEmc){
        cout << setw(6)  <<  digit->GetId() << "   "  <<        setw(10)  <<  digit->GetAmp() <<   "    "  
@@ -722,12 +726,11 @@ void AliPHOSDigitizer::WriteDigits(Int_t event)
   //      and names of files, from which digits are made.
 
   AliPHOSGetter * gime = AliPHOSGetter::GetInstance() ; 
-  TClonesArray * digits = gime->Digits(GetName()) ; 
+  const TClonesArray * digits = gime->Digits(GetName()) ; 
+ TTree * treeD ;
 
-  TTree * treeD ;
-
-  if(fARD)
-    treeD = fARD->GetTreeD() ;
+  if(fManager)
+    treeD = fManager->GetTreeD() ;
  else
     treeD = gAlice->TreeD();
   
@@ -769,9 +772,7 @@ void AliPHOSDigitizer::WriteDigits(Int_t event)
     cwd->cd();
   }
   
-  digitsBranch->Fill() ;      
-  digitizerBranch->Fill() ;
-
-  treeD->Write(0,kOverwrite) ;  
+  digitsBranch->Fill() ;
+  treeD->AutoSave() ; // Write(0,kOverwrite) ;  
  
 }