// VTrackGenerator.cpp #include "VTrackGenerator.h" #include #include #include "trfbase/Surface.h" #include "trfbase/VTrack.h" using std::ostream; using std::endl; using trf::TrackVector; using trf::VTrack; using trf::VTrackGenerator; //********************************************************************** // output stream void VTrackGenerator:: ostr(ostream& stream) const { stream << "Lower limit: " << _min << endl; stream << "Upper limit: " << _max << endl; stream << "Surface: " << *_psrf << endl; RandomGenerator::raw_ostr(stream); } //********************************************************************** // Constructor. // Use assert to check that max > min. VTrackGenerator::VTrackGenerator(const Surface& srf, const TrackVector& min, const TrackVector& max) : _psrf(srf.new_pure_surface()), _min(min), _max(max) { for ( int i=0; i<5; ++i ) assert( _min(i) <= _max(i) ); } //********************************************************************** // Copy constructor. VTrackGenerator::VTrackGenerator(const VTrackGenerator& rhs) : RandomGenerator(rhs), _min(rhs._min), _max(rhs._max), _psrf(rhs._psrf) { } //********************************************************************** // Destructor. VTrackGenerator::~VTrackGenerator() { } //********************************************************************** // Generate a new track. User must delete. VTrack* VTrackGenerator::new_track() { TrackVector vec; for ( int i=0; i<5; ++i ) vec(i) = flat( _min(i), _max(i) ); VTrack* ptrv = new VTrack(_psrf,vec); // If the direction is not set, make it forward if ( ptrv->is_forward() ) return ptrv; if ( ptrv->is_backward() ) return ptrv; ptrv->set_forward(); return ptrv; } //**********************************************************************