// ESAF : Euso Simulation and Analysis Framework // $Id: BunchRadiativeTransfer.hh,v 1.20 2005/05/10 15:34:24 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" class PhotonsInAtmosphere; class ListPhotonsInAtmosphere; class ListPhotonsOnPupil; class BunchOfPhotons; class Ground; class ClearSkyPropagator; class InCloudsPropagator; 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 size_t fNbBunch; // number of bunches to handle Double_t fNbTot; // total number of photons to handle // // handling of detector geometry (defined in Detector part) // const DetectorGeometry* fDetGeom; // copy of the object defined in Detector part const DetectorGeometry* GetDetGeometry() const; inline EarthVector EUSO() const {return GetDetGeometry()->GetPos();} //inline EarthVector EUSO() const {EarthVector det(0,0,0); return det;} // when detector at ground inline Double_t EusoRadius() const {return GetDetGeometry()->GetRadius();} // Returns the solid angle made by Euso pupil as seen from a position in the atmosphere inline Double_t EusoOmega(const EarthVector& pos) const {return GetDetGeometry()->SolidAngle(pos);} ClassDef(BunchRadiativeTransfer,0) }; inline const DetectorGeometry* BunchRadiativeTransfer::GetDetGeometry() const { if(!fDetGeom) Msg(EsafMsg::Panic) << "DetectorGeometry not defined" << MsgDispatch; return fDetGeom; } #endif /* __BUNCHRADIATIVETRANSFER_HH_ */