// ESAF : Euso Simulation and Analysis Framework // $Id: BunchRadiativeTransfer.hh,v 1.27 2005/10/27 13:54:35 moreggia Exp $ // Sylvain Moreggia created Jan, 15 2004 // // Transfers bunches of photons // #ifndef __BUNCHRADIATIVETRANSFER_HH_ #define __BUNCHRADIATIVETRANSFER_HH_ #include "euso.hh" #include "RadiativeTransfer.hh" #include "DetectorGeometry.hh" #include "EarthVector.hh" #include "ClearSkyPropagator.hh" #include "InCloudsPropagator.hh" class PhotonsInAtmosphere; class ListPhotonsInAtmosphere; class ListPhotonsOnPupil; class BunchOfPhotons; class Ground; class LowtranRadiativeProcessesCalculator; class EEvent; class BunchRadiativeTransfer : public RadiativeTransfer { public: // ctor BunchRadiativeTransfer(); // dtor virtual ~BunchRadiativeTransfer(); // Transfer photons in atmosphere, return a list of photons on Euso pupil virtual PhotonsOnPupil* Get(PhotonsInAtmosphere*, const DetectorGeometry* dg); // get ready for next event void Reset(); EsafConfigClass(RadiativeTransfer,BunchRadiativeTransfer) private: // Get photons directly emitted within the Euso solid angle void DirectToEuso(const BunchOfPhotons&) const; // Propagation of a bunch through the atmosphere void BunchPropagation( BunchOfPhotons& ); virtual void GroundReflection(const BunchOfPhotons&) const; // Process of a bunch reaching ground // Final phase of the transfer : propagation of the SinglePhotons void PropagationOfSingles(); // SinglePhoton generation (BunchOfPhotons portion which is created within EUSO solid angle) void GenerateDirectSingles(const BunchOfPhotons&,Int_t) const; // Creates SinglePhoton objects (called by the Reflect(..) method) virtual void GenerateReflectedSingles(Int_t,const BunchOfPhotons&) const; ListPhotonsOnPupil* fPhotons; // keep in memory the list returned to detector ListPhotonsInAtmosphere* fTotalList; // pointer on the list created by LightSource module // _must not be reset nor deleted_ by the present class ClearSkyPropagator* fCSpropag; // propagator for clear sky conditions InCloudsPropagator* fICpropag; // propagator for cloudy conditions LowtranRadiativeProcessesCalculator* fLowToDetec; // calculator for last transmission to detector size_t fNbBunch; // number of bunches to handle Double_t fNbTot; // total number of photons to handle // copy of detector geometry defined in Detector part inline virtual void CopyDetectorGeometry(const DetectorGeometry* dg); ClassDef(BunchRadiativeTransfer,0) }; inline void BunchRadiativeTransfer::CopyDetectorGeometry(const DetectorGeometry* dg) { // // set DetectorGeometry for the propagator // fDetGeom = dg; fCSpropag->CopyDetectorGeometry(fDetGeom,fDecoupled,fDetAtGrnd); //GRNDetec fICpropag->CopyDetectorGeometry(fDetGeom,fDecoupled,fDetAtGrnd); } #endif /* __BUNCHRADIATIVETRANSFER_HH_ */