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 | |
---|
11 | class EsafDirection; |
---|
12 | class BunchOfPhotons; |
---|
13 | class SinglePhoton; |
---|
14 | struct LowtranTransferOutput; |
---|
15 | class Ground; |
---|
16 | class DetectorGeometry; |
---|
17 | class ListPhotonsInAtmosphere; |
---|
18 | |
---|
19 | class LowtranRadiativeProcessesCalculator : public RadiativeProcessesCalculator { |
---|
20 | public: |
---|
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 | |
---|
48 | private: |
---|
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 | |
---|