#include "AliRun.h"
#include "AliTRDSimParam.h"
+#include "AliTRDCommonParam.h"
ClassImp(AliTRDSimParam)
,fTRFwid(0.0)
,fCTOn(kFALSE)
,fCTsmp(0)
- ,fAnodeWireOffset(0.0)
,fPadCoupling(0.0)
,fTimeCoupling(0.0)
,fTimeStructOn(kFALSE)
,fPRFOn(kFALSE)
- ,fGasMixture(0)
+ ,fNTimeBins(0)
{
//
// Default constructor
fNoise = 1250.0;
fADCoutRange = 1023.0; // 10-bit ADC
fADCinRange = 2000.0; // 2V input range
- // Go back to 0 again, just to be consistent with reconstruction
- fADCbaseline = 0;
- //fADCbaseline = 10;
+ fADCbaseline = 10;
// Diffusion on
fDiffusionOn = kTRUE;
// The time coupling factor (same number as for the TPC)
fTimeCoupling = 0.4;
- // Distance of first Anode wire from first pad edge
- fAnodeWireOffset = 0.25;
-
// Use drift time maps
fTimeStructOn = kTRUE;
// The pad response function
fPRFOn = kTRUE;
- // The gas mixture, default Xenon
- fGasMixture = kXenon;
+ // The number of time bins
+ fNTimeBins = 30;
ReInit();
,fTRFwid(p.fTRFwid)
,fCTOn(p.fCTOn)
,fCTsmp(0)
- ,fAnodeWireOffset(p.fAnodeWireOffset)
,fPadCoupling(p.fPadCoupling)
,fTimeCoupling(p.fTimeCoupling)
,fTimeStructOn(p.fTimeStructOn)
,fPRFOn(p.fPRFOn)
- ,fGasMixture(p.fGasMixture)
+ ,fNTimeBins(p.fNTimeBins)
{
//
// Copy constructor
target->fTRFhi = fTRFhi;
target->fTRFwid = fTRFwid;
target->fCTOn = fCTOn;
- target->fAnodeWireOffset = fAnodeWireOffset;
target->fPadCoupling = fPadCoupling;
target->fTimeCoupling = fTimeCoupling;
target->fPRFOn = fPRFOn;
- target->fGasMixture = fGasMixture;
+ target->fNTimeBins = fNTimeBins;
if (target->fTRFsmp) {
delete[] target->fTRFsmp;
// Reinitializes the parameter class after a change
//
- if (fGasMixture == kXenon) {
+ if (AliTRDCommonParam::Instance()->IsXenon()) {
// The range and the binwidth for the sampled TRF
fTRFbin = 200;
// Start 0.2 mus before the signal
fTRFlo = -0.4;
// End the maximum drift time after the signal
fTRFhi = 3.58;
+ // Standard gas gain
+ fGasGain = 4000.0;
}
- else if (fGasMixture == kArgon) {
+ else if (AliTRDCommonParam::Instance()->IsArgon()) {
// The range and the binwidth for the sampled TRF
- fTRFbin = 50;
+ fTRFbin = 50;
// Start 0.2 mus before the signal
- fTRFlo = 0.02;
+ fTRFlo = 0.02;
// End the maximum drift time after the signal
- fTRFhi = 1.98;
+ fTRFhi = 1.98;
+ // Higher gas gain
+ fGasGain = 8000.0;
}
else {
AliFatal("Not a valid gas mixture!");
}
fCTsmp = new Float_t[fTRFbin];
+ if (AliTRDCommonParam::Instance()->IsXenon()) {
+ if (fTRFbin != kNpasa) {
+ AliError("Array mismatch (xenon)\n\n");
+ }
+ }
+ else if (AliTRDCommonParam::Instance()->IsArgon()) {
+ if (fTRFbin != kNpasaAr) {
+ AliError("Array mismatch (argon)\n\n");
+ }
+ }
+
for (Int_t iBin = 0; iBin < fTRFbin; iBin++) {
- if (fGasMixture == kXenon) {
+ if (AliTRDCommonParam::Instance()->IsXenon()) {
fTRFsmp[iBin] = signal[iBin];
fCTsmp[iBin] = xtalk[iBin];
}
- else {
+ else if (AliTRDCommonParam::Instance()->IsArgon()) {
fTRFsmp[iBin] = signalAr[iBin];
fCTsmp[iBin] = xtalkAr[iBin];
}
// (We assume a signal rise time of 0.2us = fTRFlo/2.
//
- Int_t iBin = ((Int_t) ((time - fTRFlo/2.0) / fTRFwid));
- if ((iBin >= 0) &&
- (iBin < fTRFbin)) {
- return fTRFsmp[iBin];
- }
+ Double_t rt = (time - .5*fTRFlo) / fTRFwid;
+ Int_t iBin = (Int_t) rt;
+ Double_t dt = rt - iBin;
+ if ((iBin >= 0) && (iBin+1 < fTRFbin)) {
+ return fTRFsmp[iBin] + (fTRFsmp[iBin+1] - fTRFsmp[iBin])*dt;
+ }
else {
return 0.0;
- }
+ }
}
// Applies the pad-pad capacitive cross talk
//
- Int_t iBin = ((Int_t) ((time - fTRFlo) / fTRFwid));
- if ((iBin >= 0) &&
- (iBin < fTRFbin)) {
- return fCTsmp[iBin];
- }
+ Double_t rt = (time - fTRFlo) / fTRFwid;
+ Int_t iBin = (Int_t) rt;
+ Double_t dt = rt - iBin;
+ if ((iBin >= 0) && (iBin+1 < fTRFbin)) {
+ return fCTsmp[iBin] + (fCTsmp[iBin+1] - fCTsmp[iBin])*dt;
+ }
else {
return 0.0;
- }
+ }
}