]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PHOS/AliPHOSDigitizer.cxx
Typo corrected.
[u/mrichter/AliRoot.git] / PHOS / AliPHOSDigitizer.cxx
index 9bee9d177192f8fcd8bdcbc4bd1062216616fff8..929d4babe384a40846082815e914879b7f494ee1 100644 (file)
 /* History of cvs commits:
  *
  * $Log$
+ * Revision 1.94  2007/02/01 10:34:47  hristov
+ * Removing warnings on Solaris x86
+ *
+ * Revision 1.93  2006/10/17 13:17:01  kharlov
+ * Replace AliInfo by AliDebug
+ *
+ * Revision 1.92  2006/08/28 10:01:56  kharlov
+ * Effective C++ warnings fixed (Timur Pocheptsov)
+ *
+ * Revision 1.91  2006/04/29 20:25:30  hristov
+ * Decalibration is implemented (Yu.Kharlov)
+ *
+ * Revision 1.90  2006/04/22 10:30:17  hristov
+ * Add fEnergy to AliPHOSDigit and operate with EMC amplitude in energy units (Yu.Kharlov)
+ *
  * Revision 1.89  2006/04/11 15:22:59  hristov
  * run number in query set to -1: forces AliCDBManager to use its run number (A.Colla)
  *
@@ -96,24 +111,64 @@ ClassImp(AliPHOSDigitizer)
 
 
 //____________________________________________________________________________ 
-  AliPHOSDigitizer::AliPHOSDigitizer():AliDigitizer("",""),
-                                      fInput(0),
-                                      fInputFileNames(0x0),
-                                      fEventNames(0x0)
+AliPHOSDigitizer::AliPHOSDigitizer() :
+  AliDigitizer("",""),
+  fDefaultInit(kTRUE),
+  fDigitsInRun(0),
+  fInit(kFALSE),
+  fInput(0),
+  fInputFileNames(0x0),
+  fEventNames(0x0),
+  fEmcCrystals(0),
+  fPinNoise(0.f),
+  fEMCDigitThreshold(0.f),
+  fCPVNoise(0.f),
+  fCPVDigitThreshold(0.f),
+  fTimeResolution(0.f),
+  fTimeThreshold(0.f),
+  fTimeSignalLength(0.f),
+  fADCchanelEmc(0.f),
+  fADCpedestalEmc(0.f),
+  fNADCemc(0),
+  fADCchanelCpv(0.f),
+  fADCpedestalCpv(0.f),
+  fNADCcpv(0),
+  fEventFolderName(""),
+  fFirstEvent(0),
+  fLastEvent(0)
 {
   // ctor
   InitParameters() ; 
-  fDefaultInit = kTRUE ;
   fManager = 0 ;                     // We work in the standalong mode
-  fEventFolderName = "" ; 
 }
 
 //____________________________________________________________________________ 
 AliPHOSDigitizer::AliPHOSDigitizer(TString alirunFileName, 
                                   TString eventFolderName):
-  AliDigitizer("PHOS"+AliConfig::Instance()->GetDigitizerTaskName(), 
-              alirunFileName), 
-  fInputFileNames(0), fEventNames(0), fEventFolderName(eventFolderName)
+  AliDigitizer("PHOS"+AliConfig::Instance()->GetDigitizerTaskName(), alirunFileName), 
+  fDefaultInit(kFALSE),
+  fDigitsInRun(0),
+  fInit(kFALSE),
+  fInput(0),
+  fInputFileNames(0x0),
+  fEventNames(0x0),
+  fEmcCrystals(0),
+  fPinNoise(0.f),
+  fEMCDigitThreshold(0.f),
+  fCPVNoise(0.f),
+  fCPVDigitThreshold(0.f),
+  fTimeResolution(0.f),
+  fTimeThreshold(0.f),
+  fTimeSignalLength(0.f),
+  fADCchanelEmc(0.f),
+  fADCpedestalEmc(0.f),
+  fNADCemc(0),
+  fADCchanelCpv(0.f),
+  fADCpedestalCpv(0.f),
+  fNADCcpv(0),
+  fEventFolderName(eventFolderName),
+  fFirstEvent(0),
+  fLastEvent(0)
 {
   // ctor
   InitParameters() ; 
@@ -123,37 +178,66 @@ AliPHOSDigitizer::AliPHOSDigitizer(TString alirunFileName,
 }
 
 //____________________________________________________________________________ 
-AliPHOSDigitizer::AliPHOSDigitizer(const AliPHOSDigitizer & d)
-  : AliDigitizer(d)
+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),
+  fPinNoise(d.fPinNoise),
+  fEMCDigitThreshold(d.fEMCDigitThreshold),
+  fCPVNoise(d.fCPVNoise),
+  fCPVDigitThreshold(d.fCPVDigitThreshold),
+  fTimeResolution(d.fTimeResolution),
+  fTimeThreshold(d.fTimeThreshold),
+  fTimeSignalLength(d.fTimeSignalLength),
+  fADCchanelEmc(d.fADCchanelEmc),
+  fADCpedestalEmc(d.fADCpedestalEmc),
+  fNADCemc(d.fNADCemc),
+  fADCchanelCpv(d.fADCchanelCpv),
+  fADCpedestalCpv(d.fADCpedestalCpv),
+  fNADCcpv(d.fNADCcpv),
+  fEventFolderName(d.fEventFolderName),
+  fFirstEvent(d.fFirstEvent),
+  fLastEvent(d.fLastEvent)
 {
   // copyy ctor 
-
   SetName(d.GetName()) ; 
   SetTitle(d.GetTitle()) ; 
-  fPinNoise = d.fPinNoise ; 
-  fEMCDigitThreshold = d.fEMCDigitThreshold ; 
-  fCPVNoise          = d.fCPVNoise ; 
-  fCPVDigitThreshold = d.fCPVDigitThreshold ; 
-  fTimeResolution    = d.fTimeResolution ; 
-  fTimeThreshold     = d.fTimeThreshold ; 
-  fTimeSignalLength  = d.fTimeSignalLength ; 
-  fADCchanelEmc      = d.fADCchanelEmc ; 
-  fADCpedestalEmc    = d.fADCpedestalEmc ; 
-  fNADCemc           = d.fNADCemc ;
-  fADCchanelCpv      = d.fADCchanelCpv ;
-  fADCpedestalCpv    = d.fADCpedestalCpv ;
-  fNADCcpv           = d.fNADCcpv ; 
-  fEventFolderName   = d.fEventFolderName;
 }
 
 //____________________________________________________________________________ 
-AliPHOSDigitizer::AliPHOSDigitizer(AliRunDigitizer * rd):
- AliDigitizer(rd,"PHOS"+AliConfig::Instance()->GetDigitizerTaskName()),
- fEventFolderName(0)
+AliPHOSDigitizer::AliPHOSDigitizer(AliRunDigitizer * rd) :
+  AliDigitizer(rd,"PHOS"+AliConfig::Instance()->GetDigitizerTaskName()),
+  fDefaultInit(kFALSE),
+  fDigitsInRun(0),
+  fInit(kFALSE),
+  fInput(0),
+  fInputFileNames(0x0),
+  fEventNames(0x0),
+  fEmcCrystals(0),
+  fPinNoise(0.f),
+  fEMCDigitThreshold(0.f),
+  fCPVNoise(0.f),
+  fCPVDigitThreshold(0.f),
+  fTimeResolution(0.f),
+  fTimeThreshold(0.f),
+  fTimeSignalLength(0.f),
+  fADCchanelEmc(0.f),
+  fADCpedestalEmc(0.f),
+  fNADCemc(0),
+  fADCchanelCpv(0.f),
+  fADCpedestalCpv(0.f),
+  fNADCcpv(0),
+  fEventFolderName(fManager->GetInputFolderName(0)),
+  fFirstEvent(0),
+  fLastEvent(0)
 {
   // ctor Init() is called by RunDigitizer
   fManager = rd ; 
-  fEventFolderName = fManager->GetInputFolderName(0) ;
   SetTitle(dynamic_cast<AliStream*>(fManager->GetInputStream(0))->GetFileName(0));
   InitParameters() ; 
   fDefaultInit = kFALSE ; 
@@ -187,8 +271,8 @@ void AliPHOSDigitizer::Digitize(Int_t event)
   Int_t ReadEvent = event ; 
   if (fManager) 
     ReadEvent = dynamic_cast<AliStream*>(fManager->GetInputStream(0))->GetCurrentEventNumber() ; 
-  AliInfo(Form("Adding event %d from input stream 0 %s %s", 
-              ReadEvent, GetTitle(), fEventFolderName.Data())) ; 
+  AliDebug(1,Form("Adding event %d from input stream 0 %s %s", 
+                 ReadEvent, GetTitle(), fEventFolderName.Data())) ; 
   gime->Event(ReadEvent, "S") ;
   TClonesArray * digits = gime->Digits() ; 
   digits->Clear() ;
@@ -220,13 +304,13 @@ void AliPHOSDigitizer::Digitize(Int_t event)
   for(i = 1 ; i < fInput ; i++){
     TString tempo(fEventNames[i]) ; 
     tempo += i ;
-    AliPHOSGetter * gime = AliPHOSGetter::Instance(fInputFileNames[i], tempo) ;
+    AliPHOSGetter * gime1 = AliPHOSGetter::Instance(fInputFileNames[i], tempo) ;
     if (fManager) 
       ReadEvent = dynamic_cast<AliStream*>(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) ;
+    gime1->Event(ReadEvent,"S");
+    sdigArray->AddAt(gime1->SDigits(), i) ;
   }
 
   //Find the first crystal with signal
@@ -290,7 +374,7 @@ void AliPHOSDigitizer::Digitize(Int_t event)
          new((*ticks)[contrib++]) AliPHOSTick(curSDigit->GetTime(),0, b);  
          new((*ticks)[contrib++]) AliPHOSTick(curSDigit->GetTime()+fTimeSignalLength, -a, -b); 
          
-         *digit = *digit + *curSDigit ;  //add energies
+         *digit += *curSDigit ;  //add energies
 
          index[i]++ ;
          if( dynamic_cast<TClonesArray *>(sdigArray->At(i))->GetEntriesFast() > index[i] )
@@ -345,7 +429,7 @@ void AliPHOSDigitizer::Digitize(Int_t event)
          curSDigit->ShiftPrimary(primaryoffset) ;
 
          //add energies
-         *digit = *digit + *curSDigit ;  
+         *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]) ) ;   
@@ -372,8 +456,7 @@ void AliPHOSDigitizer::Digitize(Int_t event)
   //remove digits below thresholds
   for(i = 0 ; i < nEMC ; i++){
     digit = dynamic_cast<AliPHOSDigit*>( digits->At(i) ) ;
-    // YVK: amplitude is in energy units
-//     if(sDigitizer->Calibrate( digit->GetAmp() ) < fEMCDigitThreshold)
+    DecalibrateEMC(digit);
     if(digit->GetEnergy() < fEMCDigitThreshold)
       digits->RemoveAt(i) ;
     else
@@ -396,20 +479,41 @@ void AliPHOSDigitizer::Digitize(Int_t event)
     digit = dynamic_cast<AliPHOSDigit*>( digits->At(i) ) ; 
     digit->SetIndexInList(i) ;     
     if(digit->GetId() > fEmcCrystals){ //digitize CPV only
-      digit->SetAmp(DigitizeEnergy(digit->GetEnergy(),digit->GetId()) ) ;
+      digit->SetAmp(DigitizeCPV(digit->GetEnergy(),digit->GetId()) ) ;
     }
   }
 }
 
 //____________________________________________________________________________
-Int_t AliPHOSDigitizer::DigitizeEnergy(Float_t energy, Int_t absId)
+void AliPHOSDigitizer::DecalibrateEMC(AliPHOSDigit *digit)
+{
+  // Decalibrate EMC digit, i.e. change its energy by a factor read from CDB
+
+  AliPHOSGetter* gime = AliPHOSGetter::Instance();
+
+  if(!gime->CalibData()) {
+    AliPHOSCalibData* cdb = new AliPHOSCalibData(-1);
+    gime->SetCalibData(cdb);
+  }
+
+  //Determine rel.position of the cell absolute ID
+  Int_t relId[4];
+  gime->PHOSGeometry()->AbsToRelNumbering(digit->GetId(),relId);
+  Int_t module=relId[0];
+  Int_t row   =relId[2];
+  Int_t column=relId[3];
+  Float_t decalibration = gime->CalibData()->GetADCchannelEmc(module,column,row);
+  Float_t energy = digit->GetEnergy() / decalibration;
+  digit->SetEnergy(energy);
+}
+//____________________________________________________________________________
+Int_t AliPHOSDigitizer::DigitizeCPV(Float_t charge, Int_t absId)
 {
-  // Returns digitized value of the energy in a cell absId
+  // Returns digitized value of the CPV charge in a pad absId
 
   AliPHOSGetter* gime = AliPHOSGetter::Instance();
 
   if(!gime->CalibData()) {
-    //AliPHOSCalibData* cdb = new AliPHOSCalibData(gAlice->GetRunNumber()); // original
     AliPHOSCalibData* cdb = new AliPHOSCalibData(-1); // use AliCDBManager's run number
     gime->SetCalibData(cdb);
   }
@@ -421,31 +525,22 @@ Int_t AliPHOSDigitizer::DigitizeEnergy(Float_t energy, Int_t absId)
   Int_t row   =relId[2];
   Int_t column=relId[3];
   
-  Int_t chanel ;
+  Int_t channel = 0;
   
-  if(absId <= fEmcCrystals){ //digitize as EMC 
+  if(absId > fEmcCrystals){ //digitize CPV only
 
     //reading calibration data for cell absId.
     //If no calibration DB found, accept default values.
 
-    if(gime->CalibData()) {
-      fADCpedestalEmc = gime->CalibData()->GetADCpedestalEmc(module,column,row);
-      fADCchanelEmc = gime->CalibData()->GetADCchannelEmc(module,column,row);
-    }
-
-    chanel = (Int_t) TMath::Ceil((energy - fADCpedestalEmc)/fADCchanelEmc) ;       
-    if(chanel > fNADCemc ) chanel =  fNADCemc ;
-  }
-  else{ //Digitize as CPV
     if(gime->CalibData()) {
       fADCpedestalCpv = gime->CalibData()->GetADCpedestalCpv(module,column,row);
-      fADCchanelCpv = gime->CalibData()->GetADCchannelCpv(module,column,row);
+      fADCchanelCpv   = gime->CalibData()->GetADCchannelCpv( module,column,row);
     }
 
-    chanel = (Int_t) TMath::Ceil((energy - fADCpedestalCpv)/fADCchanelCpv) ;       
-    if(chanel > fNADCcpv ) chanel =  fNADCcpv ;
+    channel = (Int_t) TMath::Ceil((charge - fADCpedestalCpv)/fADCchanelCpv) ;       
+    if(channel > fNADCcpv ) channel =  fNADCcpv ;
   }
-  return chanel ;
+  return channel ;
 }
 
 //____________________________________________________________________________
@@ -593,8 +688,8 @@ void AliPHOSDigitizer::InitParameters()
   fTimeResolution     = 0.5e-9 ; // [sec]
   fTimeSignalLength   = 1.0e-9 ; // [sec]
   fDigitsInRun  = 0 ; 
-  fADCchanelEmc = 0.0015;        // width of one ADC channel in GeV
-  fADCpedestalEmc = 0.005 ;      //
+  fADCchanelEmc = 1.0;        // Coefficient between real and measured energies in EMC
+  fADCpedestalEmc = 0. ;      //
   fNADCemc = (Int_t) TMath::Power(2,16) ;  // number of channels in EMC ADC
 
   fADCchanelCpv = 0.0012 ;          // width of one ADC channel in CPV 'popugais'