// GtrTimPropagator.cpp // One and only one of these symbols should be defined. #undef GtrTimPropagator_uses_ConstantMagneticField #undef GtrTimPropagator_uses_MagField #define GtrTimPropagator_uses_MCField #include "GtrTimPropagator.hpp" #ifdef GtrTimPropagator_uses_ConstantMagneticField #include "mag_field/ConstantMagneticField.hpp" #endif #ifdef GtrTimPropagator_uses_MagField #include #include "mag_field/MagField.hpp" #endif #ifdef GtrTimPropagator_uses_MCField #include "mag_field/MCField.hpp" #endif #include "tim_interface/TIMPropagator.hpp" using namespace trf; //********************************************************************** // Static variables. PropagatorPtr GtrTimPropagator::_pprop(0); //********************************************************************** // Methods. //********************************************************************** const PropagatorPtr& GtrTimPropagator::get_propagator() { if ( _pprop == 0 ) { _pprop = PropagatorPtr(new TIMPropagator); #ifdef GtrTimPropagator_uses_ConstantMagneticField CartesianPointVector bfield_direction(0., 0., 0., 0., 0., -1); double bfield = 2.0; ConstantMagneticField* pfield = new ConstantMagneticField(bfield_direction, bfield); #endif #ifdef GtrTimPropagator_uses_MagField std::ifstream data("d0mag_001.data"); bool succesful_file_open = data; assert(succesful_file_open); MagField* pfield = new MagField(data); #endif #ifdef GtrTimPropagator_uses_MCField MCField* pfield = new MCField(); #endif TIMPropagator::setMagneticField(pfield); } return _pprop; } //**********************************************************************