// HitXYPlane1Generator.cpp #include "HitXYPlane1Generator.h" #include #include "HitXYPlane1.h" #include "trfbase/VTrack.h" #include "trfutil/trfstream.h" using namespace trf; //********************************************************************** // output stream void HitXYPlane1Generator::ostr(ostream& stream) const { stream << begin_object ; stream << "Surface: " << _sxyp << new_line; stream << "V slope: " << _wv <<" Z slope: " << _wz<< new_line; stream << "Measurement error (davz): " << _davz << new_line; RandomGenerator::raw_ostr(stream); stream << end_object; } //********************************************************************** // Constructor. HitXYPlane1Generator:: HitXYPlane1Generator(double dist, double phi, double wv, double wz, double davz ) : HitGenerator(), _sxyp(dist,phi), _wv(wv), _wz(wz), _davz(davz) { assert( _davz >= 0.0 ); } //********************************************************************** // Constructor with seed. HitXYPlane1Generator::HitXYPlane1Generator( double dist, double phi, double wv, double wz, double davz, long seed) : HitGenerator(seed), _sxyp(dist,phi), _wv(wv), _wz(wz), _davz(davz) { assert( _davz >= 0.0 ); } //********************************************************************** // Copy constructor. HitXYPlane1Generator::HitXYPlane1Generator(const HitXYPlane1Generator& rhs) : HitGenerator(rhs), _sxyp(rhs._sxyp), _wv(rhs._wv), _wz(rhs._wz), _davz(rhs._davz) { assert( _davz >= 0.0 ); } //********************************************************************** // Destructor. HitXYPlane1Generator::~HitXYPlane1Generator() { } //********************************************************************** // Generate a new cluster. // Caller must delete. // Return 0 for failure. Cluster* HitXYPlane1Generator::new_cluster(const VTrack& trv) { // Create cluster pointer. Cluster* pclu = 0; // Check track has been propagated to the surface. assert( _sxyp.pure_equal( *trv.get_surface() ) ); if ( ! _sxyp.pure_equal( *trv.get_surface() ) ) return pclu; // calculate avz. double v_track = trv.get_vector()(SurfXYPlane::IV); double z_track = trv.get_vector()(SurfXYPlane::IZ); double avz = _wv*v_track + _wz*z_track + _davz*gauss(); // construct cluster double dist = _sxyp.get_parameter(SurfXYPlane::DISTNORM); double phi = _sxyp.get_parameter(SurfXYPlane::NORMPHI); pclu = new ClusXYPlane1(dist, phi, _wv, _wz, avz, _davz ); return pclu; } //**********************************************************************