]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PHOS/AliPHOS.cxx
fADCValuesHigh4x4 is not persistent
[u/mrichter/AliRoot.git] / PHOS / AliPHOS.cxx
index 90c48abbab710c37b50b26399ba784c472aabb6f..768de84dfc5a2b84c8aaf963c6a10870fb006f94 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 /* $Id$ */
+/* History of cvs commits:
+ *
+ * $Log$
+ * Revision 1.96  2006/04/07 08:41:59  hristov
+ * Follow AliAlignObj framework and remove AliPHOSAlignData (Yu.Kharlov)
+ *
+ * Revision 1.95  2006/03/14 19:40:41  kharlov
+ * Remove De-digitizing of raw data and digitizing the raw data fit
+ *
+ * Revision 1.94  2006/03/07 18:56:25  kharlov
+ * CDB is passed via environment variable
+ *
+ * Revision 1.93  2005/11/22 08:45:11  kharlov
+ * Calibration is read from CDB if any (Boris Polichtchouk)
+ *
+ * Revision 1.92  2005/11/03 13:09:19  hristov
+ * Removing meaningless const declarations (linuxicc)
+ *
+ * Revision 1.91  2005/07/27 15:08:53  kharlov
+ * Mixture ArCO2 is corrected
+ *
+ * Revision 1.90  2005/06/17 07:39:07  hristov
+ * Removing GetDebug and SetDebug from AliRun and AliModule. Using AliLog for the messages
+ *
+ * Revision 1.89  2005/05/28 12:10:07  schutz
+ * Copy constructor is corrected (by T.P.)
+ *
+ */
 
 //_________________________________________________________________________
 // Base Class for PHOS description:
@@ -46,6 +74,10 @@ class TFile;
 #include "AliPHOSDigit.h"
 #include "AliAltroBuffer.h"
 #include "AliLog.h"
+#include "AliCDBManager.h"
+#include "AliCDBEntry.h"
+#include "AliCDBStorage.h"
+#include "AliPHOSCalibData.h"
 
 ClassImp(AliPHOS)
 
@@ -60,7 +92,6 @@ Double_t AliPHOS::fgTimeTrigger = 100E-9 ;      // 100ns, just for a reference
 {
   // Default ctor
   fName   = "PHOS" ;
-  fDebug  = 0; 
 
 }
 
@@ -68,8 +99,7 @@ Double_t AliPHOS::fgTimeTrigger = 100E-9 ;      // 100ns, just for a reference
 AliPHOS::AliPHOS(const char* name, const char* title): AliDetector(name, title)
 {
   //   ctor : title is used to identify the layout
-  
-  fDebug  = 0 ; 
+
   fHighCharge        = 8.2 ;          // adjusted for a high gain range of 5.12 GeV (10 bits)
   fHighGain          = 6.64 ; 
   fHighLowGainFactor = 16. ;          // adjusted for a low gain range of 82 GeV (10 bits) 
@@ -83,10 +113,13 @@ AliPHOS::~AliPHOS()
 }
 
 //____________________________________________________________________________
-void AliPHOS::Copy(AliPHOS & phos)
+void AliPHOS::Copy(TObject &obj)const
 {
-  // copy method to be used byy the cpy ctor
-  TObject::Copy(phos) ; 
+  // copy method to be used by the cpy ctor
+  TObject::Copy(obj);
+  
+  AliPHOS &phos = static_cast<AliPHOS &>(obj); 
+  
   phos.fHighCharge        = fHighCharge ;
   phos.fHighGain          = fHighGain ; 
   phos.fHighLowGainFactor = fHighLowGainFactor ;  
@@ -214,31 +247,16 @@ void AliPHOS::CreateMaterials()
   Float_t dAr = 0.001782 ; 
   AliMaterial(15, "Ar$", 39.948, 18.0, dAr, 14.0, 0., 0, 0) ;   
  
- // ArCo2
-  Char_t namate[21]="";
-  Float_t aGM[2] ; 
-  Float_t zGM[2] ; 
-  Float_t wGM[2] ; 
-  Float_t dGM ; 
-
-  Float_t absL, radL, density ;
-  Float_t buf[1] ;
-  Int_t nbuf ;
-
-  gMC->Gfmate((*fIdmate)[15], namate, aGM[0], zGM[0], density, radL, absL, buf, nbuf) ; // Get properties of Ar 
-  gMC->Gfmate((*fIdmate)[14], namate, aGM[1], zGM[1], density, radL, absL, buf, nbuf) ; // Get properties of CO2 
-
-
-  // Create gas mixture 
-
-  Float_t arContent    = 0.80 ;  // Ar-content of the Ar/CO2-mixture (80% / 20%) 
-  wGM[0] = arContent;
-  wGM[1] = 1. - arContent ;
-  dGM    = wGM[0] * dAr + wGM[1] * dCO;
-
-  
-  AliMixture(16, "ArCO2$", aGM, zGM, dGM,  2, wGM) ;
+  // Ar+CO2 Mixture (80% / 20%)
+  Float_t arContent = 0.80 ;  // Ar-content of the ArCO2-mixture
+  Float_t aArCO[3]  = {39.948, 12.0, 16.0} ;
+  Float_t zArCO[3]  = {18.0  ,  6.0,  8.0} ;
+  Float_t wArCO[3];
+  wArCO[0] = arContent;
+  wArCO[1] = (1-arContent)*1;
+  wArCO[2] = (1-arContent)*2;
+  Float_t dArCO = arContent*dAr + (1-arContent)*dCO ;
+  AliMixture(16, "ArCO2$", aArCO, zArCO, dArCO,  -3, wArCO) ;
 
   // --- Stainless steel (let it be pure iron) ---
   AliMaterial(17, "Steel$", 55.845, 26, 7.87, 1.76, 0., 0, 0) ;
@@ -409,10 +427,6 @@ void AliPHOS::Digits2Raw()
     return;
   }
 
-  // get the digitizer 
-  loader->LoadDigitizer();
-  AliPHOSDigitizer * digitizer = dynamic_cast<AliPHOSDigitizer *>(loader->Digitizer())  ; 
-  
   // get the geometry
   AliPHOSGeometry* geom = GetGeometry();
   if (!geom) {
@@ -422,7 +436,9 @@ void AliPHOS::Digits2Raw()
 
   // some digitization constants
   const Int_t    kDDLOffset = 0x600; // assigned to PHOS
-  const Int_t    kThreshold = 1; // skip digits below this threshold
+//   const Int_t    kThreshold = 1; // skip digits below this threshold // YVK
+  const Float_t    kThreshold = 0.001; // skip digits below 1 MeV
+  const Int_t      kAdcThreshold = 1;  // Lower ADC threshold to write to raw data
 
   AliAltroBuffer* buffer = NULL;
   Int_t prevDDL = -1;
@@ -432,7 +448,7 @@ void AliPHOS::Digits2Raw()
   // loop over digits (assume ordered digits)
   for (Int_t iDigit = 0; iDigit < digits->GetEntries(); iDigit++) {
     AliPHOSDigit* digit = dynamic_cast<AliPHOSDigit *>(digits->At(iDigit)) ;
-    if (digit->GetAmp() < kThreshold) 
+    if (digit->GetEnergy() < kThreshold) 
       continue;
     Int_t relId[4];
     geom->AbsToRelNumbering(digit->GetId(), relId);
@@ -467,27 +483,30 @@ void AliPHOS::Digits2Raw()
 
     // out of time range signal (?)
     if (digit->GetTimeR() > GetRawFormatTimeMax() ) {
-      buffer->FillBuffer(digit->GetAmp());
+      buffer->FillBuffer((Int_t)digit->GetEnergy());
       buffer->FillBuffer(GetRawFormatTimeBins() );  // time bin
       buffer->FillBuffer(3);          // bunch length      
       buffer->WriteTrailer(3, relId[3], relId[2], module);  // trailer
       
     // calculate the time response function
     } else {
-      Double_t energy = 0 ;  
-      if ( digit->GetId() <= geom->GetNModules() *  geom->GetNCristalsInModule())
-       energy = digit->GetAmp() * digitizer->GetEMCchannel() + digitizer->GetEMCpedestal() ; 
-      else 
-       energy = digit->GetAmp() * digitizer->GetCPVchannel() + digitizer->GetCPVpedestal() ;
-        
+      Double_t energy = 0 ;
+      Int_t   module = relId[0];
+      if ( digit->GetId() <= geom->GetNModules() *  geom->GetNCristalsInModule()) {
+       energy=digit->GetEnergy();
+      }
+      else {
+//     energy = digit->GetAmp()*digitizer->GetCPVchannel()+digitizer->GetCPVpedestal();
+       energy = 0; // CPV raw data format is now know yet
+      }        
       Bool_t lowgain = RawSampledResponse(digit->GetTimeR(), energy, adcValuesHigh, adcValuesLow) ; 
       
-     if (lowgain) 
+      if (lowgain) 
        buffer->WriteChannel(relId[3], relId[2], module + fLowGainOffset, 
-                          GetRawFormatTimeBins(), adcValuesLow, kThreshold);
+                            GetRawFormatTimeBins(), adcValuesLow , kAdcThreshold);
       else 
        buffer->WriteChannel(relId[3], relId[2], module, 
-                            GetRawFormatTimeBins(), adcValuesHigh, kThreshold);
+                            GetRawFormatTimeBins(), adcValuesHigh, kAdcThreshold);
       
     }
   }
@@ -554,10 +573,14 @@ Double_t AliPHOS::RawResponseFunctionMax(Double_t charge, Double_t gain)
 }
 
 //__________________________________________________________________
-Bool_t AliPHOS::RawSampledResponse(const Double_t dtime, const Double_t damp, Int_t * adcH, Int_t * adcL) const 
+Bool_t AliPHOS::RawSampledResponse(Double_t dtime, Double_t damp, Int_t * adcH, Int_t * adcL) const 
 {
   // for a start time dtime and an amplitude damp given by digit, 
   // calculates the raw sampled response AliPHOS::RawResponseFunction
+  // Input: dtime - signal start time
+  //        damp  - signal amplitude (energy)
+  // Output: adcH - array[fkTimeBins] of 10-bit samples for high-gain channel
+  //         adcL - array[fkTimeBins] of 10-bit samples for low-gain channel
 
   const Int_t kRawSignalOverflow = 0x3FF ; 
   Bool_t lowGain = kFALSE ;