Calibration of raw data
authorkharlov <kharlov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 2 Sep 2005 14:32:07 +0000 (14:32 +0000)
committerkharlov <kharlov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 2 Sep 2005 14:32:07 +0000 (14:32 +0000)
PHOS/AliPHOSClusterizerv1.cxx
PHOS/AliPHOSClusterizerv1.h
PHOS/AliPHOSGetter.cxx
PHOS/AliPHOSGetter.h

index ca20e8f520b48cb438a54e54150b15ae2a66d581..db77cdaff0470affec669332a7d53bb2bd20b32f 100644 (file)
@@ -18,6 +18,9 @@
 /* History of cvs commits:
  *
  * $Log$
+ * Revision 1.80  2005/08/24 15:31:36  kharlov
+ * Setting raw digits flag
+ *
  * Revision 1.79  2005/07/25 15:53:53  kharlov
  * Read raw data
  *
@@ -109,11 +112,23 @@ const TString AliPHOSClusterizerv1::BranchName() const
 }
  
 //____________________________________________________________________________
-Float_t  AliPHOSClusterizerv1::Calibrate(Int_t amp, Int_t absId) const
+Float_t  AliPHOSClusterizerv1::Calibrate(Int_t amp, Int_t absId)
 {  
   //To be replaced later by the method, reading individual parameters from the database
-  if(fCalibrationDB){
-    return fCalibrationDB->Calibrate(amp,absId) ;
+  if(fCalibData){
+    Int_t relId[4];
+    AliPHOSGetter *gime = AliPHOSGetter::Instance();
+    gime->PHOSGeometry()->AbsToRelNumbering(absId,relId) ;
+    Int_t   module = relId[0];
+    Int_t   column = relId[2];
+    Int_t   row    = relId[3];
+    if(absId <= fEmcCrystals) { //calibrate as EMC 
+      fADCchanelEmc   = fCalibData->GetADCchannelEmc (module,column,row);
+      fADCpedestalEmc = fCalibData->GetADCpedestalEmc(module,column,row);
+      return fADCpedestalEmc + amp*fADCchanelEmc ;        
+    }
+    else //calibrate as CPV, not implemented yet
+      return 0;
   }
   else{ //simulation
     if(absId <= fEmcCrystals) //calibrate as EMC 
@@ -287,7 +302,7 @@ void AliPHOSClusterizerv1::GetCalibrationParameters()
 
   AliPHOSGetter * gime = AliPHOSGetter::Instance();
   if(gime->IsRawDigits()){
-    fCalibrationDB = gime->CalibrationDB();    
+    fCalibData = gime->CalibData();    
   }
   else{
     if ( !gime->Digitizer() ) 
@@ -350,7 +365,7 @@ void AliPHOSClusterizerv1::InitParameters()
 
   fWrite                   = kTRUE ;
 
-  fCalibrationDB           = 0 ;
+  fCalibData               = 0 ;
 
   SetEventRange(0,-1) ;
 }
index 9908d622bb69cc7a23b327c6a376507d60a3bcdb..e005a681f70501106daa7b5b820643a0479cb321 100644 (file)
@@ -8,6 +8,9 @@
 /* History of cvs commits:
  *
  * $Log$
+ * Revision 1.43  2005/05/28 14:19:04  schutz
+ * Compilation warnings fixed by T.P.
+ *
  */
 
 //_________________________________________________________________________
@@ -30,7 +33,7 @@ class AliPHOSEmcRecPoint ;
 class AliPHOSDigit ;
 class AliPHOSDigitizer ;
 class AliPHOSGeometry ;
-class AliPHOSCalibrationDB ;
+class AliPHOSCalibData ;
 
 class AliPHOSClusterizerv1 : public AliPHOSClusterizer {
   
@@ -48,7 +51,7 @@ public:
   virtual Int_t   AreNeighbours(AliPHOSDigit * d1, AliPHOSDigit * d2)const ; 
                                // Checks if digits are in neighbour cells 
 
-  virtual Float_t Calibrate(Int_t amp, Int_t absId)const ;  // Tranforms Amp to energy 
+  virtual Float_t Calibrate(Int_t amp, Int_t absId) ;  // Tranforms Amp to energy 
 
   virtual void    GetNumberOfClustersFound(int * numb )const{  numb[0] = fNumberOfEmcClusters ; 
                                                                numb[1] = fNumberOfCpvClusters ; }
@@ -122,7 +125,7 @@ private:
   Int_t   fNumberOfCpvClusters ;     // number of CPV clusters found
  
   //Calibration parameters
-  AliPHOSCalibrationDB * fCalibrationDB ; //! Calibration database if aval
+  AliPHOSCalibData * fCalibData ;   //! Calibration database if aval
   Float_t fADCchanelEmc ;           // width of one ADC channel in GeV
   Float_t fADCpedestalEmc ;         //
   Float_t fADCchanelCpv ;           // width of one ADC channel in CPV 'popugais'
index 993239af52bd2d765eb4b8b361ab3cc6bfae4e46..fb55d24ffcf67e937746dee6a1d484826aaf642a 100644 (file)
@@ -555,14 +555,15 @@ Bool_t AliPHOSGetter::OpenESDFile()
 }
 
 //____________________________________________________________________________ 
-void AliPHOSGetter::FitRaw(Bool_t lowGainFlag, TGraph * gLowGain, TGraph * gHighGain, TF1* signalF, Int_t & amp, Double_t & time)
+void AliPHOSGetter::FitRaw(Bool_t lowGainFlag, TGraph * gLowGain, TGraph * gHighGain, TF1* signalF, Double_t & energy, Double_t & time)
 {
   // Fits the raw signal time distribution 
 
   const Int_t kNoiseThreshold = 0 ;
   Double_t timezero1 = 0., timezero2 = 0., timemax = 0. ;
   Double_t signal = 0., signalmax = 0. ;       
-  Double_t energy = time = 0. ; 
+  time   = 0. ; 
+  energy = 0. ; 
 
   if (lowGainFlag) {
     timezero1 = timezero2 = signalmax = timemax = 0. ;
@@ -615,15 +616,33 @@ void AliPHOSGetter::FitRaw(Bool_t lowGainFlag, TGraph * gLowGain, TGraph * gHigh
       time   = signalF->GetMaximumX() - PHOS()->GetRawFormatTimePeak() - PHOS()->GetRawFormatTimeTrigger() ;
     }
   }
-  
-  if (time == 0. && energy == 0.) 
-    amp = 0 ; 
-  else {
-  AliPHOSDigitizer * digitizer = Digitizer() ; 
-  amp = static_cast<Int_t>( (energy - digitizer->GetEMCpedestal()) / digitizer->GetEMCchannel() + 0.5 ) ; 
-  }
+  if (time == 0) energy = 0 ; 
 }
 
+//____________________________________________________________________________ 
+Int_t AliPHOSGetter::CalibrateRaw(Double_t energy, Int_t *relId)
+{
+  // Convert energy into digitized amplitude for a cell relId
+  // It is a user responsilibity to open CDB and set
+  // AliPHOSCalibData object by the following operators:
+  // 
+  // AliCDBLocal *loc = new AliCDBLocal("deCalibDB");
+  // AliPHOSCalibData* clb = (AliPHOSCalibData*)AliCDBStorage::Instance()
+  //    ->Get(path_to_calibdata,run_number);
+  // AliPHOSGetter* gime = AliPHOSGetter::Instance("galice.root");
+  // gime->SetCalibData(clb);
+
+  if (CalibData() == 0)
+    Fatal("CalibrateRaw","Failure to calibrate raw data");
+
+  Int_t   module = relId[0];
+  Int_t   column = relId[2];
+  Int_t   row    = relId[3];
+  Float_t gainFactor = CalibData()->GetADCchannelEmc (module,column,row);
+  Float_t pedestal   = CalibData()->GetADCpedestalEmc(module,column,row);
+  Int_t   amp = static_cast<Int_t>( (energy - pedestal) / gainFactor + 0.5 ) ; 
+  return amp;
+}
 //____________________________________________________________________________ 
 Int_t AliPHOSGetter::ReadRaw(AliRawReader *rawReader)
 {
@@ -637,22 +656,35 @@ Int_t AliPHOSGetter::ReadRaw(AliRawReader *rawReader)
   TF1 * signalF = new TF1("signal", AliPHOS::RawResponseFunction, 0, PHOS()->GetRawFormatTimeMax(), 4);
   signalF->SetParNames("Charge", "Gain", "Amplitude", "TimeZero") ; 
 
-  Int_t relId[4], id ;
+  Int_t relId[4], id =0;
   Bool_t lowGainFlag = kFALSE ; 
  
   TClonesArray * digits = Digits() ;
   digits->Clear() ; 
   Int_t idigit = 0 ; 
-  Int_t amp = 0 ; 
-  Double_t time = 0. ; 
+  Int_t amp    = 0 ; 
+  Double_t energy = 0. ; 
+  Double_t time   = 0. ; 
 
   TGraph * gLowGain = new TGraph(PHOS()->GetRawFormatTimeBins()) ; 
   TGraph * gHighGain= new TGraph(PHOS()->GetRawFormatTimeBins()) ;  
 
   while ( in.Next() ) { // PHOS entries loop 
     if ( (in.IsNewRow() || in.IsNewColumn() || in.IsNewModule()) ) {
+      relId[0] = in.GetModule() ;
+      if ( relId[0] >= PHOS()->GetRawFormatLowGainOffset() ) { 
+       relId[0] -=  PHOS()->GetRawFormatLowGainOffset() ;
+       lowGainFlag = kTRUE ;
+      } else
+       lowGainFlag = kFALSE ;
+      relId[1] = 0 ;
+      relId[2] = in.GetRow() ;
+      relId[3] = in.GetColumn() ;
+      PHOSGeometry()->RelToAbsNumbering(relId, id) ;
+
       if (!first) {
-       FitRaw(lowGainFlag, gLowGain, gHighGain, signalF, amp, time) ; 
+       FitRaw(lowGainFlag, gLowGain, gHighGain, signalF, energy, time) ; 
+       amp = CalibrateRaw(energy,relId);
        if (amp > 0) {
          new((*digits)[idigit]) AliPHOSDigit( -1, id, amp, time) ;     
          idigit++ ; 
@@ -664,16 +696,6 @@ Int_t AliPHOSGetter::ReadRaw(AliRawReader *rawReader)
        } 
       }
       first = kFALSE ; 
-      relId[0] = in.GetModule() ;
-      if ( relId[0] >= PHOS()->GetRawFormatLowGainOffset() ) { 
-       relId[0] -=  PHOS()->GetRawFormatLowGainOffset() ; 
-       lowGainFlag = kTRUE ; 
-      } else 
-       lowGainFlag = kFALSE ; 
-      relId[1] = 0 ; 
-      relId[2] = in.GetRow() ; 
-      relId[3] = in.GetColumn() ; 
-      PHOSGeometry()->RelToAbsNumbering(relId, id) ;   
     }
     if (lowGainFlag)
       gLowGain->SetPoint(in.GetTime(), 
@@ -686,11 +708,12 @@ Int_t AliPHOSGetter::ReadRaw(AliRawReader *rawReader)
 
   } // PHOS entries loop
 
-//   FitRaw(lowGainFlag, gLowGain, gHighGain, signalF, amp, time) ; 
-//   if (amp > 0 ) {
-//     new((*digits)[idigit]) AliPHOSDigit( -1, id, amp, time) ;
-//     idigit++ ; 
-//   }
+  FitRaw(lowGainFlag, gLowGain, gHighGain, signalF, energy, time) ; 
+  amp = CalibrateRaw(energy,relId);
+  if (amp > 0 ) {
+    new((*digits)[idigit]) AliPHOSDigit( -1, id, amp, time) ;
+    idigit++ ; 
+  }
   digits->Sort() ; 
 
   delete signalF ; 
index d6aeebb258cc9a73d14f89ba57a282e50d63ff5b..675706e1d5d813874d46eb8eefcd8623dd26ef6a 100644 (file)
@@ -228,7 +228,9 @@ private:
   Bool_t OpenESDFile() ;
   void ReadPrimaries(void) ;
 
-  void FitRaw(Bool_t lowGainFlag, TGraph * gLowGain, TGraph * gHighGain, TF1* signalF, Int_t & amp, Double_t & time) ; 
+  void FitRaw(Bool_t lowGainFlag, TGraph * gLowGain, TGraph * gHighGain, TF1* signalF, Double_t & energy, Double_t & time) ; 
+
+  Int_t CalibrateRaw (Double_t energy, Int_t *relId);
 
 private:
   
@@ -243,7 +245,7 @@ private:
   AliESD *          fESD ;               //! ESD object
   TTree *           fESDTree ;           //! ESD Tree
   
-  Bool_t            fRawDigits ;         //!
+  Bool_t            fRawDigits ;         //! true is raw data
 
   AliPHOSCalibrationDB * fcdb ;       //!
   static AliPHOSCalibData * fCalibData;