1 #include "TFlukaCerenkov.h"
3 Double_t TFlukaCerenkov::fgGlobalMaximumEfficiency = 0.;
5 ClassImp(TFlukaCerenkov);
8 TFlukaCerenkov::TFlukaCerenkov()
14 fAbsorptionCoefficient(0),
15 fQuantumEfficiency(0),
17 fMaximumEfficiency(0.)
19 // Default constructor
23 TFlukaCerenkov::TFlukaCerenkov(Int_t npckov, Float_t *ppckov, Float_t *absco, Float_t *effic, Float_t *rindex)
27 fEnergy = new Float_t[fSamples];
28 fWaveLength = new Float_t[fSamples];
29 fAbsorptionCoefficient = new Float_t[fSamples];
30 fRefractionIndex = new Float_t[fSamples];
31 fQuantumEfficiency = new Float_t[fSamples];
33 for (Int_t i = 0; i < fSamples; i++) {
34 fEnergy[i] = ppckov[i];
35 fWaveLength[i] = khc / ppckov[i];
37 fAbsorptionCoefficient[i] = 1./ absco[i];
39 fAbsorptionCoefficient[i] = 1.e15;
41 fRefractionIndex[i] = rindex[i];
42 fQuantumEfficiency[i] = effic[i];
44 // Find local maximum quantum efficiency
45 if (effic[i] > fMaximumEfficiency) fMaximumEfficiency = effic[i];
47 // Flag is sensitive if quantum efficiency 0 < eff < 1 for at least one value.
48 if (effic[i] < 1. && effic[i] > 0.) fIsSensitive = 1;
50 // Find global maximum quantum efficiency
51 if (fMaximumEfficiency > GetGlobalMaximumEfficiency()) {
52 SetGlobalMaximumEfficiency(fMaximumEfficiency);
54 printf("Maximum eff. %f\n", GetGlobalMaximumEfficiency());
59 Float_t TFlukaCerenkov::GetAbsorptionCoefficient(Float_t energy)
62 // Get AbsorptionCoefficient for given energy
64 return Interpolate(energy, fEnergy, fAbsorptionCoefficient);
68 Float_t TFlukaCerenkov::GetRefractionIndex(Float_t energy)
71 // Get RefractionIndex for given energy
73 return Interpolate(energy, fEnergy, fRefractionIndex);
77 Float_t TFlukaCerenkov::GetQuantumEfficiency(Float_t energy)
80 // Get QuantumEfficiency for given energy
82 return Interpolate(energy, fEnergy, fQuantumEfficiency);
87 Float_t TFlukaCerenkov::GetAbsorptionCoefficientByWaveLength(Float_t wavelength)
90 // Get AbsorptionCoefficient for given wavelength
92 Float_t energy = khc / wavelength;
93 return Interpolate(energy, fEnergy, fAbsorptionCoefficient);
97 Float_t TFlukaCerenkov::GetRefractionIndexByWaveLength(Float_t wavelength)
100 // Get RefractionIndex for given wavelenth
102 Float_t energy = khc / wavelength;
103 return Interpolate(energy, fEnergy, fRefractionIndex);
106 Float_t TFlukaCerenkov::GetQuantumEfficiencyByWaveLength(Float_t wavelength)
109 // Get QuantumEfficiency for given wavelength
111 Float_t energy = khc / wavelength;
112 return Interpolate(energy, fEnergy, fQuantumEfficiency);
115 Float_t TFlukaCerenkov::Interpolate(Float_t value, Float_t* array1, Float_t* array2)
118 // Interpolate array values
120 if (value < array1[0] && value >= array1[fSamples - 1]) {
121 Warning("Interpolate()", "Photon energy out of range. Returning 0.");
125 Int_t i = TMath::BinarySearch(fSamples, array1, value);
126 if (i == (fSamples-1)) {
129 return (array2[i] + (array2[i+1] - array2[i]) / (array1[i+1] - array1[i]) * (value - array1[i]));