// ESAF : Euso Simulation and Analysis Framework // $Id: LowtranRadiativeProcessesCalculator.hh,v 1.16 2005/05/10 15:34:24 moreggia Exp $ // Sylvain Moreggia created Jan, 29 2004 #ifndef __LOWTRANRADIATIVEPROCESSESCALCULATOR_HH_ #define __LOWTRANRADIATIVEPROCESSESCALCULATOR_HH_ #include "euso.hh" #include "RadiativeProcessesCalculator.hh" class EsafDirection; class BunchOfPhotons; class SinglePhoton; struct LowtranTransferOutput; class Ground; class DetectorGeometry; class ListPhotonsInAtmosphere; class LowtranRadiativeProcessesCalculator : public RadiativeProcessesCalculator { public: // ctor LowtranRadiativeProcessesCalculator(); // dtor virtual ~LowtranRadiativeProcessesCalculator(); // Pre-process for bunch transmission // Initialization of tables for a step by step transfer process void PreProcess(const BunchOfPhotons&); // Preprocess for SinglePhoton list propagation void PreProcessSingles(const Ground*,const EarthVector&,const ListPhotonsInAtmosphere&); // Total transmission between singlephoton position and finalpos (EUSO() by default) virtual Double_t Trans(const SinglePhoton&, const EarthVector& finalpos) const; // Total transmission between two positions (for bunches) virtual void Trans(const BunchOfPhotons&,const EarthVector&,vector&) const; // get ready for next event void Reset(); private: // Change of frame to match lowtran // v1 is the reference, v2 is the transformed one EarthVector InLowtranFrame(const EarthVector&,const EarthVector&) const; // Call lowtran (100 wavelength processed) void CallLowtran100(const EarthVector&,const EarthVector&,struct LowtranTransferOutput&) const; // Clean fLocalCeff void CleanBuffer(string); // Interpolation for step by step processes Double_t Interpolate(Int_t,Int_t,const EarthVector&) const; // Interpolation of transmission coefficients as a function of wavelength Double_t InterpolWl(string,Double_t,Double_t,Double_t,Double_t,Double_t) const; Bool_t fFlag; // to know if PreProcess(BunchOfPhotons) has been run EarthVector fInitPos; // position where transmission tables start Int_t fNbwl; // nb of wavelength treated for the bunch process Float_t fWlArray[100]; // wavelengths treated by lowtran vector >*> fAlongTrackCoeff; // 3D-list [Nbstep][4][fNbwl] of transmission (4 kinds) along track vector fToDetectorCoeff; // 2D-list [nbstep][fNbwl] of transmission (only total trans) const ListPhotonsInAtmosphere* fTrack; // copy of the list containing the light track (used in single propagation) EarthVector fImpact; // track impact for SinglePhoton transmission Double_t fStep; // step for lowtran calculations ClassDef(LowtranRadiativeProcessesCalculator,0) }; #endif /* __LOWTRANRADIATIVEPROCESSESCALCULATOR_HH_ */