#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)
{
//
// Default constructor
// 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;
-
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)
{
//
// 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;
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!");
, 1.56, 1.49, 1.50, 1.49, 1.29
, 1.19, 1.21, 1.21, 1.20, 1.10 };
// Normalization to maximum
- for (ipasa = 0; ipasa < kNpasa; ipasa++) {
+ for (ipasa = 0; ipasa < kNpasaAr; ipasa++) {
signalAr[ipasa] /= 68.52;
}
signalAr[0] = 0.0;
signalAr[1] = 0.0;
signalAr[2] = 0.0;
// With undershoot, positive peak corresponds to ~3% of the main signal:
- for (ipasa = 3; ipasa < kNpasa; ipasa++) {
+ for (ipasa = 3; ipasa < kNpasaAr; ipasa++) {
xtalkAr[ipasa] = 0.2 * (signalAr[ipasa-2] - signalAr[ipasa-3]);
}
xtalkAr[0] = 0.0;
}
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;
- }
+ }
}