]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TFluka/TFlukaCerenkov.h
Option to force low energy neutron transport.
[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     TFlukaCerenkov(Int_t npckov, Float_t *ppckov, Float_t *absco, Float_t *effic, Float_t *rindex, Float_t* rfl);
33     virtual Float_t   GetAbsorptionCoefficient(Float_t energy);
34     virtual Float_t   GetQuantumEfficiency(Float_t energy);
35     virtual Float_t   GetRefractionIndex(Float_t energy);
36     virtual Float_t   GetReflectivity(Float_t energy);    
37     virtual Float_t   GetAbsorptionCoefficientByWaveLength(Float_t energy);
38     virtual Float_t   GetQuantumEfficiencyByWaveLength(Float_t energy);
39     virtual Float_t   GetRefractionIndexByWaveLength(Float_t energy);
40     virtual Float_t   GetReflectivityByWaveLength(Float_t energy);
41     virtual Float_t   GetMinimumEnergy()     {return fEnergy[0];}
42     virtual Float_t   GetMaximumEnergy()     {return fEnergy[fSamples-1];}
43     virtual Float_t   GetMinimumWavelength() {return khc / fEnergy[fSamples-1];}
44     virtual Float_t   GetMaximumWavelength() {return khc / fEnergy[0];}
45     virtual Int_t     GetNSamples()          {return fSamples;}
46     virtual Bool_t    IsMetal()              {return fIsMetal;}
47     virtual Bool_t    IsSensitive()          {return fIsSensitive;}
48     virtual Double_t  GetMaximumEfficiency() const             {return fMaximumEfficiency;}
49     static  Double_t  GetGlobalMaximumEfficiency()             {return fgGlobalMaximumEfficiency;}
50     static  void      SetGlobalMaximumEfficiency(Double_t eff) {fgGlobalMaximumEfficiency = eff;}
51
52  protected:
53
54     virtual Float_t  Interpolate(Float_t energy, Float_t* array1, Float_t* array2);
55
56  protected:
57     Int_t        fSamples;                  // Number of sampling points
58     Bool_t       fIsMetal;                  // Flag for metals
59     Bool_t       fIsSensitive;              // Flag for metals  
60     Float_t*     fEnergy;                   // [fSamples] Energy                 (GeV) 
61     Float_t*     fWaveLength;               // [fSamples] Wafelength             (cm)
62     Float_t*     fAbsorptionCoefficient;    // [fSamples] Absorption Coefficient (1/cm)
63     Float_t*     fQuantumEfficiency;        // [fSamples] Quantum efficiency
64     Float_t*     fRefractionIndex;          // [fSamples] Refraction Index
65     Float_t*     fReflectivity;             // [fSamples] Reflectivity
66     Double_t     fMaximumEfficiency;        // Local maximum quantum efficiency
67     // static 
68     static Double_t fgGlobalMaximumEfficiency; // Global maximum quantum efficiency
69
70  private:
71     // Copy constructor and operator= declared but not implemented (-Weff++ flag)
72     TFlukaCerenkov(const TFlukaCerenkov&);
73     TFlukaCerenkov& operator=(const TFlukaCerenkov&);
74
75     ClassDef(TFlukaCerenkov, 1)          // CerenkovProperties
76 };
77         
78 #endif
79