00001
00015 #ifndef LARPROPERTIES_HH
00016 #define LARPROPERTIES_HH
00017
00018 #include "LArUtilBase.hh"
00019 #include "LArUtilException.hh"
00020 #include "LArUtilConstants.hh"
00021 #include <algorithm>
00022 #include <cmath>
00023
00024 namespace larutil {
00029 class LArProperties : public LArUtilBase{
00030
00031 private:
00032
00034 LArProperties(bool default_load=true);
00035
00037 virtual ~LArProperties(){};
00038
00039 static LArProperties* _me;
00040
00041 protected:
00042
00043 virtual void ClearData();
00044 virtual bool ReadTree();
00045
00046 public:
00047
00049 static const LArProperties* GetME(bool default_load=true)
00050 {
00051 if(!_me) _me = new LArProperties(default_load);
00052 return _me;
00053 }
00054
00055
00056
00057 Double_t Density(Double_t temperature=0.) const;
00058 Double_t DriftVelocity(Double_t efield=0., Double_t temperature=0.) const;
00059
00061 Double_t BirksCorrection(Double_t dQdX) const;
00062 Double_t ModBoxCorrection(Double_t dQdX) const;
00063
00064 Double_t Efield(UInt_t planegap=0) const;
00065
00066 Double_t Temperature() const
00067 {return fTemperature;}
00068
00069 Double_t ElectronLifetime() const
00070 {return fElectronlifetime;}
00071
00072 Double_t RadiationLength() const
00073 { return fRadiationLength; }
00074
00075 Double_t Argon39DecayRate() const
00076 { return fArgon39DecayRate; }
00077
00079 Double_t Eloss(Double_t mom, Double_t mass, Double_t tcut) const;
00080
00082 Double_t ElossVar(Double_t mom, Double_t mass) const;
00083
00084 Double_t ScintResolutionScale() const { return fScintResolutionScale; }
00085 Double_t ScintFastTimeConst() const { return fScintFastTimeConst; }
00086 Double_t ScintSlowTimeConst() const { return fScintSlowTimeConst; }
00087 Double_t ScintBirksConstant() const { return fScintBirksConstant; }
00088
00089 bool ScintByParticleType() const { return fScintByParticleType; }
00090
00091 Double_t ScintYield() const { return fScintYield; }
00092 Double_t ScintYieldRatio() const { return fScintYieldRatio; }
00093
00094 Double_t ProtonScintYield() const { return fProtonScintYield; }
00095 Double_t ProtonScintYieldRatio() const { return fProtonScintYieldRatio; }
00096 Double_t MuonScintYield() const { return fMuonScintYield; }
00097 Double_t MuonScintYieldRatio() const { return fMuonScintYieldRatio; }
00098 Double_t KaonScintYield() const { return fKaonScintYield; }
00099 Double_t KaonScintYieldRatio() const { return fKaonScintYieldRatio; }
00100 Double_t PionScintYield() const { return fPionScintYield; }
00101 Double_t PionScintYieldRatio() const { return fPionScintYieldRatio; }
00102 Double_t ElectronScintYield() const { return fElectronScintYield; }
00103 Double_t ElectronScintYieldRatio() const { return fElectronScintYieldRatio; }
00104 Double_t AlphaScintYield() const { return fAlphaScintYield; }
00105 Double_t AlphaScintYieldRatio() const { return fAlphaScintYieldRatio; }
00106
00107 bool CerenkovLightEnabled() const { return fEnableCerenkovLight; }
00108
00109 std::map<Double_t, Double_t> SlowScintSpectrum() const;
00110 std::map<Double_t, Double_t> FastScintSpectrum() const;
00111 std::map<Double_t, Double_t> RIndexSpectrum() const;
00112 std::map<Double_t, Double_t> AbsLengthSpectrum() const;
00113 std::map<Double_t, Double_t> RayleighSpectrum() const;
00114
00115 std::map<std::string, std::map<Double_t, Double_t> > SurfaceReflectances() const;
00116 std::map<std::string, std::map<Double_t, Double_t> > SurfaceReflectanceDiffuseFractions() const;
00117
00118 private:
00119
00120 std::vector< Double_t > fEfield;
00121 Double_t fTemperature;
00122 Double_t fElectronlifetime;
00123 Double_t fRadiationLength;
00124
00125 Double_t fArgon39DecayRate;
00126
00127
00128 Double_t fZ;
00129 Double_t fA;
00130 Double_t fI;
00131 Double_t fSa;
00132 Double_t fSk;
00133 Double_t fSx0;
00134 Double_t fSx1;
00135 Double_t fScbar;
00136
00137
00138
00139 std::vector<Double_t> fFastScintSpectrum;
00140 std::vector<Double_t> fFastScintEnergies;
00141 std::vector<Double_t> fSlowScintSpectrum;
00142 std::vector<Double_t> fSlowScintEnergies;
00143 std::vector<Double_t> fRIndexSpectrum;
00144 std::vector<Double_t> fRIndexEnergies;
00145 std::vector<Double_t> fAbsLengthSpectrum;
00146 std::vector<Double_t> fAbsLengthEnergies;
00147 std::vector<Double_t> fRayleighSpectrum;
00148 std::vector<Double_t> fRayleighEnergies;
00149
00150 bool fScintByParticleType;
00151
00152 Double_t fProtonScintYield;
00153 Double_t fProtonScintYieldRatio;
00154 Double_t fMuonScintYield;
00155 Double_t fMuonScintYieldRatio;
00156 Double_t fPionScintYield;
00157 Double_t fPionScintYieldRatio;
00158 Double_t fKaonScintYield;
00159 Double_t fKaonScintYieldRatio;
00160 Double_t fElectronScintYield;
00161 Double_t fElectronScintYieldRatio;
00162 Double_t fAlphaScintYield;
00163 Double_t fAlphaScintYieldRatio;
00164
00165 Double_t fScintYield;
00166 Double_t fScintResolutionScale;
00167 Double_t fScintFastTimeConst;
00168 Double_t fScintSlowTimeConst;
00169 Double_t fScintYieldRatio;
00170 Double_t fScintBirksConstant;
00171
00172 bool fEnableCerenkovLight;
00173
00174 std::vector<std::string> fReflectiveSurfaceNames;
00175 std::vector<Double_t> fReflectiveSurfaceEnergies;
00176 std::vector<std::vector<Double_t> > fReflectiveSurfaceReflectances;
00177 std::vector<std::vector<Double_t> > fReflectiveSurfaceDiffuseFractions;
00178
00179 };
00180 }
00181 #endif
00182
00183