From 842287f2b6ce3c84f838f2f084aae3b1b9e3813d Mon Sep 17 00:00:00 2001 From: cblume Date: Tue, 13 May 2003 12:29:22 +0000 Subject: [PATCH 1/1] Include the bug fixes by Oliver in the TR simulation --- TRD/AliTRDsim.cxx | 54 ++++++++++++++++++++++++++++++++++++++++++----- TRD/AliTRDsim.h | 21 +++++++++--------- TRD/AliTRDv1.cxx | 25 ++++++++++++++++------ 3 files changed, 79 insertions(+), 21 deletions(-) diff --git a/TRD/AliTRDsim.cxx b/TRD/AliTRDsim.cxx index 68097ab5c10..2bb143c1c2c 100644 --- a/TRD/AliTRDsim.cxx +++ b/TRD/AliTRDsim.cxx @@ -15,6 +15,9 @@ /* $Log$ +Revision 1.11 2001/11/14 10:50:46 cblume +Changes in digits IO. Add merging of summable digits + Revision 1.10 2001/05/31 16:53:26 alibrary Correction to the destructor @@ -363,14 +366,11 @@ Double_t AliTRDsim::Sigma(Double_t energykeV) // Calculates the absorbtion crosssection for a one-foil-one-gap-radiator // - // Gas at 0 C - const Double_t kTemp0 = 273.16; - // keV -> MeV Double_t energyMeV = energykeV * 0.001; if (energyMeV >= 0.001) { - return(GetMuPo(energyMeV) * fFoilDens * fFoilThick + - GetMuCO(energyMeV) * fGapDens * fGapThick * fTemp/kTemp0); + return(GetMuPo(energyMeV) * fFoilDens * fFoilThick + + GetMuAi(energyMeV) * fGapDens * fGapThick * GetTemp()); } else { return 1e6; @@ -698,6 +698,50 @@ Double_t AliTRDsim::GetMuHe(Double_t energyMeV) } +//_____________________________________________________________________________ +Double_t AliTRDsim::GetMuAi(Double_t energyMeV) +{ + // + // Returns the photon absorbtion cross section for air + // Implemented by Oliver Busch + // + + const Int_t kN = 38; + + Double_t mu[kN] = { 0.35854E+04, 0.11841E+04, 0.52458E+03, + 0.16143E+03, 0.14250E+03, 0.15722E+03, + 0.77538E+02, 0.40099E+02, 0.23313E+02, + 0.98816E+01, 0.51000E+01, 0.16079E+01, + 0.77536E+00, 0.35282E+00, 0.24790E+00, + 0.20750E+00, 0.18703E+00, 0.16589E+00, + 0.15375E+00, 0.13530E+00, 0.12311E+00, + 0.10654E+00, 0.95297E-01, 0.86939E-01, + 0.80390E-01, 0.70596E-01, 0.63452E-01, + 0.56754E-01, 0.51644E-01, 0.44382E-01, + 0.35733E-01, 0.30721E-01, 0.27450E-01, + 0.25171E-01, 0.22205E-01, 0.20399E-01, + 0.18053E-01, 0.18057E-01 }; + + + + Double_t en[kN] = { 0.10000E-02, 0.15000E-02, 0.20000E-02, + 0.30000E-02, 0.32029E-02, 0.32029E-02, + 0.40000E-02, 0.50000E-02, 0.60000E-02, + 0.80000E-02, 0.10000E-01, 0.15000E-01, + 0.20000E-01, 0.30000E-01, 0.40000E-01, + 0.50000E-01, 0.60000E-01, 0.80000E-01, + 0.10000E+00, 0.15000E+00, 0.20000E+00, + 0.30000E+00, 0.40000E+00, 0.50000E+00, + 0.60000E+00, 0.80000E+00, 0.10000E+01, + 0.12500E+01, 0.15000E+01, 0.20000E+01, + 0.30000E+01, 0.40000E+01, 0.50000E+01, + 0.60000E+01, 0.80000E+01, 0.10000E+02, + 0.15000E+02, 0.20000E+02 }; + + return Interpolate(energyMeV,en,mu,kN); + +} + //_____________________________________________________________________________ Double_t AliTRDsim::Interpolate(Double_t energyMeV , Double_t *en, Double_t *mu, Int_t n) diff --git a/TRD/AliTRDsim.h b/TRD/AliTRDsim.h index 71971e179c8..4a5ae6a5581 100644 --- a/TRD/AliTRDsim.h +++ b/TRD/AliTRDsim.h @@ -71,16 +71,17 @@ class AliTRDsim : public TObject { virtual Double_t GetMuN2(Double_t energyMeV); virtual Double_t GetMuO2(Double_t energyMeV); virtual Double_t GetMuHe(Double_t energyMeV); - - Int_t GetNFoils() const { return fNFoils; }; - Float_t GetFoilThick() const { return fFoilThick; }; - Float_t GetGapThick() const { return fGapThick; }; - Float_t GetFoilDens() const { return fFoilDens; }; - Float_t GetGapDens() const { return fGapDens; }; - Double_t GetFoilOmega() const { return fFoilOmega; }; - Double_t GetGapOmega() const { return fGapOmega; }; - Float_t GetTemp() const { return fTemp; }; - TH1D *GetSpectrum() const { return fSpectrum; }; + virtual Double_t GetMuAi(Double_t energyMeV); + + Int_t GetNFoils() const { return fNFoils; }; + Float_t GetFoilThick() const { return fFoilThick; }; + Float_t GetGapThick() const { return fGapThick; }; + Float_t GetFoilDens() const { return fFoilDens; }; + Float_t GetGapDens() const { return fGapDens; }; + Double_t GetFoilOmega() const { return fFoilOmega; }; + Double_t GetGapOmega() const { return fGapOmega; }; + Float_t GetTemp() const { return fTemp / 273.16; }; + TH1D *GetSpectrum() const { return fSpectrum; }; protected: diff --git a/TRD/AliTRDv1.cxx b/TRD/AliTRDv1.cxx index 383c8e20778..b6b4cd13790 100644 --- a/TRD/AliTRDv1.cxx +++ b/TRD/AliTRDv1.cxx @@ -15,6 +15,9 @@ /* $Log$ +Revision 1.41 2003/04/23 15:19:48 cblume +Fix bug in absorbtion length of photons + Revision 1.40 2003/04/08 08:14:53 morsch AddTrackReference moved to AliModule. @@ -336,27 +339,37 @@ void AliTRDv1::CreateTRhit(Int_t det) // Take the absorbtion in the entrance window into account Double_t muMy = fTR->GetMuMy(energyMeV); sigma = muMy * fFoilDensity; - absLength = gRandom->Exp(-sigma); - if (absLength < AliTRDgeometry::MyThick()) continue; + if (sigma > 0.0) { + absLength = gRandom->Exp(1.0/sigma); + if (absLength < AliTRDgeometry::MyThick()) continue; + } + else { + continue; + } // The absorbtion cross sections in the drift gas if (fGasMix == 1) { // Gas-mixture (Xe/CO2) Double_t muXe = fTR->GetMuXe(energyMeV); Double_t muCO = fTR->GetMuCO(energyMeV); - sigma = (0.85 * muXe + 0.15 * muCO) * fGasDensity; + sigma = (0.85 * muXe + 0.15 * muCO) * fGasDensity * fTR->GetTemp(); } else { // Gas-mixture (Xe/Isobutane) Double_t muXe = fTR->GetMuXe(energyMeV); Double_t muBu = fTR->GetMuBu(energyMeV); - sigma = (0.97 * muXe + 0.03 * muBu) * fGasDensity; + sigma = (0.97 * muXe + 0.03 * muBu) * fGasDensity * fTR->GetTemp(); } // The distance after which the energy of the TR photon // is deposited. - absLength = gRandom->Exp(-sigma); - if (absLength > AliTRDgeometry::DrThick()) continue; + if (sigma > 0.0) { + absLength = gRandom->Exp(1.0/sigma); + if (absLength > AliTRDgeometry::DrThick()) continue; + } + else { + continue; + } // The position of the absorbtion Float_t posHit[3]; -- 2.31.1