// $Id: AlongTrack_CSPropagator.hh,v 1.5 2005/05/02 17:21:49 moreggia Exp $ // Author: Sylvain Moreggia 2004/09/29 /***************************************************************************** * ESAF: Euso Simulation and Analysis Framework * * * * Id: AlongTrack_CSPropagator * * Package: RadiativeTransfer * * Coordinator: Sylvain Moreggia * * * *****************************************************************************/ #ifndef __ALONGTRACK_CSPROPAGATOR_HH__ #define __ALONGTRACK_CSPROPAGATOR_HH__ #include "euso.hh" #include "O2_ClearSkyPropagator.hh" //////////////////////////////////////////////////////////////////////////////// // // // AlongTrack_CSPropagator // // // // same as O2_ClearSkyPropagator, but considers that all the bunches have the // // same direction, which is track direction // // // // MUST BE CALLED if light created ALONG A TRACK, otherwise it fails // // FIRST BUNCH propagated MUST BE at the track origin, otherwise it fails too // // // // Cerenkov backscattering is thus simulated, and lowtran tables calculated // // only once along the shower track // // // //////////////////////////////////////////////////////////////////////////////// class AlongTrack_CSPropagator : public O2_ClearSkyPropagator { public: // ctor (should not be used) AlongTrack_CSPropagator(); // ctor, copy RadiatvieTransfer ground description AlongTrack_CSPropagator(const Ground*); // dtor virtual ~AlongTrack_CSPropagator(); // Transport a BunchOfPhotons in clear sky conditions // generates SinglePhotons all along the travel (filling ListPhotonsInAtmosphere) virtual Medium Go(BunchOfPhotons&,ListPhotonsInAtmosphere&) const; // get ready for next event virtual void Reset(); private: // Called for the first treated bunch, set fFlag and fImpact, Call RadiativeProcessesCalculator::PreProcess() void PreProcess(const BunchOfPhotons&) const; // Propagate the bunch void Propagate(BunchOfPhotons&,ListPhotonsInAtmosphere&) const; // Check if bunches are along a track, with first at the track beginning Bool_t IsAlongTrack(const BunchOfPhotons&) const; mutable Bool_t fFlag; // flag to know if preprocess has been run mutable Medium fFinal_medium; // medium where final impact occurs mutable BunchOfPhotons* fFirstBunch; // copy the first bunch to run IsAlongTrack() method // contains the calculated FinalImpact ClassDef(AlongTrack_CSPropagator,0) }; #endif /* __ALONGTRACK_CSPROPAGATOR_HH__ */