source: JEM-EUSO/esaf_cc_at_lal/packages/simulation/radiativetransfer/include/LowtranRadiativeProcessesCalculator.hh @ 114

Last change on this file since 114 was 114, checked in by moretto, 11 years ago

actual version of ESAF at CCin2p3

File size: 4.0 KB
Line 
1// ESAF : Euso Simulation and Analysis Framework
2// $Id: LowtranRadiativeProcessesCalculator.hh 2764 2006-11-15 14:15:25Z moreggia $
3// Sylvain Moreggia created Jan, 29 2004
4
5#ifndef __LOWTRANRADIATIVEPROCESSESCALCULATOR_HH_
6#define __LOWTRANRADIATIVEPROCESSESCALCULATOR_HH_
7
8#include "euso.hh"
9#include "RadiativeProcessesCalculator.hh"
10
11class EsafDirection;
12class BunchOfPhotons;
13class SinglePhoton;
14struct LowtranTransferOutput;
15class Ground;
16class DetectorGeometry;
17class ListPhotonsInAtmosphere;
18
19class LowtranRadiativeProcessesCalculator : public RadiativeProcessesCalculator {
20public:
21    // ctor
22    LowtranRadiativeProcessesCalculator();
23
24    // dtor
25    virtual ~LowtranRadiativeProcessesCalculator();
26
27    // Pre-process for bunch transmission
28    // Initialization of tables for a step by step transfer process
29    void PreProcess(const BunchOfPhotons&);
30   
31    // Preprocess for SinglePhoton list propagation
32    void MakeVerticalDatacard(const Ground*,Double_t);
33       
34    // Preprocess for SinglePhoton list propagation, in case RT decoupled mode is used
35    void MakeTrackToDetectorDatacard(const Ground* ground, const EarthVector& detector, const ListPhotonsInAtmosphere& track);
36   
37    // Total transmission between singlephoton position and finalpos (EUSO() by default)
38    // Details of transmission components stored into coeff[4] if required
39    virtual Double_t Trans(const SinglePhoton&, const EarthVector& finalpos, Double_t* coeff=0) const;
40   
41    // Total transmission between two positions (for bunches)
42    virtual Double_t Trans(const BunchOfPhotons&,const EarthVector&,vector<Double_t*>&) const;
43
44    // get ready for next event
45    void Reset();
46
47
48private:
49
50    // Change of frame to match lowtran
51    // v1 is the reference, v2 is the transformed one
52    EarthVector InLowtranFrame(const EarthVector&,const EarthVector&) const;
53
54    // Call lowtran (100 wavelength processed)
55    void CallLowtran100(const EarthVector&,const EarthVector&,struct LowtranTransferOutput&) const;
56
57    // Clean fLocalCeff
58    void CleanBuffer(string);
59   
60    // Interpolation for step by step processes
61    Double_t Interpolate(Int_t,Int_t,const EarthVector&) const;
62   
63    // Interpolation of transmission coefficients as a function of wavelength
64    Double_t InterpolWl(string,Double_t,Double_t,Double_t,Double_t,Double_t) const;
65   
66    // switch on/off fVertical flag
67    inline void SetVertical(Bool_t vert=true) {fVertical = vert;}
68       
69   
70                                                     
71    Bool_t fFlag;                                         // to know if PreProcess(BunchOfPhotons) has been run
72    Bool_t fVertical;                                     // tell if fToDetectorCoeff for vertical path (otherwise along track)
73    EarthVector fInitPos;                                 // position where transmission tables start
74    Int_t fNbwl;                                          // nb of wavelength treated for the bunch process
75    Float_t fWlArray[100];                                // wavelengths treated by lowtran
76    vector<vector<vector<Double_t> >*> fAlongTrackCoeff;  // 3D-list [Nbstep][4][fNbwl] of transmission (4 kinds) along track
77    vector<vector<vector<Double_t> >*> fToDetectorCoeff;  // 3D-list [nbstep][4][fNbwl] of VERTICAL transmission to detector
78    const ListPhotonsInAtmosphere* fTrack;                // copy of the list containing the light track (used in single propagation)
79    EarthVector fImpact;                                  // track impact for SinglePhoton transmission
80    Double_t fStep_along_track;                           // step for lowtran datacard along track (used by BunchRT)
81    Double_t fStep_detector;                              // step for lowtran datacard to detector
82    Double_t fDetectorAlt;                                // detector altitude (for fToDetectorCoeff[][][] datacard)
83   
84    mutable Double_t fNbSinglesFarFromTrack;              // should be less than fNbSinglesCorrected of 02_CS propagators (DEBUG var.)
85
86    ClassDef(LowtranRadiativeProcessesCalculator,0)
87};
88
89#endif  /* __LOWTRANRADIATIVEPROCESSESCALCULATOR_HH_ */
90
Note: See TracBrowser for help on using the repository browser.