// $Id: MCRadiativeTransfer.hh,v 1.8 2005/11/03 12:01:33 moreggia Exp $ // Author: Sylvain Moreggia 2005/08/16 /***************************************************************************** * ESAF: Euso Simulation and Analysis Framework * * * * Id: MCRadiativeTransfer * * Package: radiativetransfer * * Coordinator: Sylvain Moreggia * * * *****************************************************************************/ #ifndef __MCRADIATIVETRANSFER_HH__ #define __MCRADIATIVETRANSFER_HH__ #include "euso.hh" #include "RadiativeTransfer.hh" #include "DetectorGeometry.hh" #include "EarthVector.hh" #include "SinglePhotonPropagator.hh" //////////////////////////////////////////////////////////////////////////////// // // // MCRadiativeTransfer // // // // Detector Solid Angle applied to reduce nb of photons to propagate // // then a full MC simu is done // // // // NB : aerosols not simulated in this propagation mode // // // //////////////////////////////////////////////////////////////////////////////// class PhotonsInAtmosphere; class ListPhotonsInAtmosphere; class ListPhotonsOnPupil; class BunchOfPhotons; class Ground; class ClearSkyPropagator; class InCloudsPropagator; class SinglePhoton; class LowtranRadiativeProcessesCalculator; class EEvent; class MCRadiativeTransfer : public RadiativeTransfer { public: MCRadiativeTransfer(); virtual ~MCRadiativeTransfer(); // 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,MCRadiativeTransfer) private: // Get photons directly emitted within the Euso solid angle // stored in fTotalList, THEY WILL NOT UNDERGO SCATTERING SIMU void DirectToEuso(const BunchOfPhotons&); // Detector solid angle is applied here -> the resulting photons will be propagated // Photon features are set here (lambda, position, direction) void PhotonsInOmega(const BunchOfPhotons&); // calculate Omega max according to the position of light track maximum void SetOmegaMax(const EarthVector&); // Final phase of the transfer : propagation of the SinglePhotons // always uses LowtranCalculator, to get ozone effect void PropagateToDetector(); 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 // STORE SINGLEPHOTONS AFTER THEIR SCATTERING SIMU (and before last transfer to detector) SinglePhotonPropagator* fPropagator; // propagator for scattering simulation LowtranRadiativeProcessesCalculator* fLowToDetec; // calculator for last transmission to detector vector fTempList; // photons kept here during scattering simu. Then copied in fTotalList size_t fNbBunch; // number of bunches to handle Double_t fNbTot; // total number of photons created by LightSource Double_t fNbSingles; // total nb of photons to propagate Int_t fScatOrder; // scattering order to be simulated Double_t fMaxPhaseFunction; // to normalize all the phase function Double_t fOmegaMax; // factor which determines nb of photons to be simulated // copy of detector geometry defined in Detector part inline virtual void CopyDetectorGeometry(const DetectorGeometry* dg); ClassDef(MCRadiativeTransfer,0) }; inline void MCRadiativeTransfer::CopyDetectorGeometry(const DetectorGeometry* dg) { // // set DetectorGeometry for the propagator // fDetGeom = dg; fPropagator->CopyDetectorGeometry(fDetGeom,fDecoupled,fDetAtGrnd); } #endif /* __MCRADIATIVETRANSFER_HH__ */