* 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:
#include "AliPHOSDigit.h"
#include "AliAltroBuffer.h"
#include "AliLog.h"
+#include "AliCDBManager.h"
+#include "AliCDBEntry.h"
+#include "AliCDBStorage.h"
+#include "AliPHOSCalibData.h"
ClassImp(AliPHOS)
{
// Default ctor
fName = "PHOS" ;
- fDebug = 0;
}
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)
}
//____________________________________________________________________________
-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 ;
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) ;
return;
}
- // get the digitizer
- loader->LoadDigitizer();
- AliPHOSDigitizer * digitizer = dynamic_cast<AliPHOSDigitizer *>(loader->Digitizer()) ;
-
// get the geometry
AliPHOSGeometry* geom = GetGeometry();
if (!geom) {
// 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;
// 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);
// 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);
}
}
}
//__________________________________________________________________
-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 ;