Local and global quantum efficiency maxima are stored.
[u/mrichter/AliRoot.git] / TFluka / TFlukaCerenkov.h
1 #ifndef TFLUKACERENKOV
2 #define TFLUKACERENKOV
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 /* $Id$ */
8
9 ///////////////////////////////////////////////////////////////////////////////
10 //                                                                           //
11 //                                                                           //
12 // Class that gives access to optical properties for Cerenkov photon         //
13 // production and transport                                                  //
14 //                                                                           //
15 //                                                                           //
16 ///////////////////////////////////////////////////////////////////////////////
17
18
19 #include <TObject.h>
20 #include <TMath.h>
21
22 const Double_t khc = 2. * TMath::Pi() * 0.1973269602e-13; // GeV cm 
23
24
25 class TFlukaCerenkov : public TObject
26 {
27
28 public:
29    // constructors
30     TFlukaCerenkov();
31     TFlukaCerenkov(Int_t npckov, Float_t *ppckov, Float_t *absco, Float_t *effic, Float_t *rindex);
32     virtual Float_t   GetAbsorptionCoefficient(Float_t energy);
33     virtual Float_t   GetQuantumEfficiency(Float_t energy);
34     virtual Float_t   GetRefractionIndex(Float_t energy);
35     virtual Float_t   GetAbsorptionCoefficientByWaveLength(Float_t energy);
36     virtual Float_t   GetQuantumEfficiencyByWaveLength(Float_t energy);
37     virtual Float_t   GetRefractionIndexByWaveLength(Float_t energy);
38     virtual Float_t   GetMinimumEnergy()     {return fEnergy[0];}
39     virtual Float_t   GetMaximumEnergy()     {return fEnergy[fSamples-1];}
40     virtual Float_t   GetMinimumWavelength() {return khc / fEnergy[fSamples-1];}
41     virtual Float_t   GetMaximumWavelength() {return khc / fEnergy[0];}
42     virtual Int_t     GetNSamples()          {return fSamples;}
43     virtual Bool_t    IsMetal()              {return fIsMetal;}
44     virtual Bool_t    IsSensitive()          {return fIsSensitive;}
45     virtual Double_t  GetMaximumEfficiency() const             {return fMaximumEfficiency;}
46     static  Double_t  GetGlobalMaximumEfficiency()             {return fgGlobalMaximumEfficiency;}
47     static  void      SetGlobalMaximumEfficiency(Double_t eff) {fgGlobalMaximumEfficiency = eff;}
48  protected:
49     virtual Float_t  Interpolate(Float_t energy, Float_t* array1, Float_t* array2);
50     
51  protected:
52     Int_t        fSamples;                  // Number of sampling points
53     Bool_t       fIsMetal;                  // Flag for metals
54     Bool_t       fIsSensitive;              // Flag for metals  
55     Float_t*     fEnergy;                   // [fSamples] Energy                 (GeV) 
56     Float_t*     fWaveLength;               // [fSamples] Wafelength             (cm)
57     Float_t*     fAbsorptionCoefficient;    // [fSamples] Absorption Coefficient (1/cm)
58     Float_t*     fQuantumEfficiency;        // [fSamples] Quantum efficiency
59     Float_t*     fRefractionIndex;          // [fSamples] Refraction Index
60     Double_t     fMaximumEfficiency;        // Local maximum quantum efficiency
61     // static 
62     static Double_t fgGlobalMaximumEfficiency; // Global maximum quantum efficiency
63     
64     ClassDef(TFlukaCerenkov, 1)          // CerenkovProperties
65 };
66         
67 #endif
68