// HTrackGenerator_t.cpp #include "HTrackGenerator.h" #include #include #include #include #include "objstream/ObjData.hpp" #include "trfbase/VTrackGenerator.h" #include "trfbase/HitGenerator.h" #include "trfbase/Hit.h" #include "trfbase/SurfTest.h" #include "trfbase/HitTest.h" #include "trfbase/TrackVector.h" #include "trfbase/VTrack.h" #include "trfbase/PropStat.h" #include "trfbase/PropDirected.h" #include "trffit/HTrack.h" #include "ptr/DeletePolicy.h" using std::cout; using std::cerr; using std::endl; using std::string; using namespace trf; //********************************************************************** class HitGeneratorTest : public HitGenerator { private: SurfTest _srf; double _min; double _max; public: HitGeneratorTest(const SurfTest& srf) : _srf(srf) { }; const Surface& get_surface() const { return _srf; }; Cluster* new_cluster(const VTrack& trv) { int npred = int( flat(1.0,10.0) ); return new ClusterTest(_srf,npred); }; }; //********************************************************************** ObjPtr create(const ObjData& data); class PropTest : public PropDirected { public: // static methods // Return the type name. static TypeName get_type_name() { return "PropTest"; } // Return the creator. static ObjCreator get_creator() { return create; } // Return the type. static Type get_static_type() { return get_creator(); } private: void ostr(ostream& stream) const { stream << "Test propagator"; }; public: // Return the type. Type get_type() const { return get_static_type(); }; ObjData write_data() const { return ObjData("PropTest"); } Propagator* new_propagator() const { return new PropTest(); }; PropStat vec_dir_prop(VTrack& trv, const Surface& srf, PropDir dir, TrackDerivative* pder=0) const { PropStat pstat; pstat.set_forward(); return pstat; }; PropStat err_dir_prop(ETrack& tre, const Surface& srf, PropDir dir, TrackDerivative* pder) const { PropStat pstat; pstat.set_forward(); return pstat; }; }; // Creator. ObjPtr create(const ObjData& data) { assert( data.get_object_type() == "PropTest" ); if ( data.get_object_type() != "PropTest" ) return ObjPtr(0); return ObjPtr( new PropTest ); } //********************************************************************** int main( ) { string component = "HTrackGenerator"; string ok_prefix = component + " (I): "; string error_prefix = component + " test (E): "; cout << ok_prefix << "---------- Testing component " + component + ". ----------" << endl; // Make sure assert is enabled. bool assert_flag = false; assert ( ( assert_flag = true, assert_flag ) ); if ( ! assert_flag ) { cerr << "Assert is disabled" << endl; return 1; } //******************************************************************** cout << ok_prefix << "Test constructor." << endl; ObjTable::register_type(); // construct VTrack generator SurfTest stest(1); TrackVector vec; vec(0) = 1.0; vec(1) = 2.0; vec(2) = 3.0; vec(3) = 4.0; vec(4) = 5.0; VTrack trv( SurfacePtr(stest.new_pure_surface()), vec ); // Construct list of Hit generators. HTrackGenerator::HitGeneratorList hgens; hgens.push_back( HTrackGenerator::HitGeneratorPtr( new HitGeneratorTest(SurfTest(2)) ) ); hgens.push_back( HTrackGenerator::HitGeneratorPtr( new HitGeneratorTest(SurfTest(4)) ) ); hgens.push_back( HTrackGenerator::HitGeneratorPtr( new HitGeneratorTest(SurfTest(6)) ) ); hgens.push_back( HTrackGenerator::HitGeneratorPtr( new HitGeneratorTest(SurfTest(8)) ) ); // Construct track error matrix. TrackError terr; terr(0,0) = 0.01; terr(1,1) = 0.02; terr(2,2) = 0.03; terr(3,3) = 0.04; terr(4,4) = 0.05; // Construct propagator. PropTest prop; // construct generator HTrackGenerator gen(hgens,prop,stest,terr); //******************************************************************** cout << ok_prefix << "Generate tracks." << endl; Ptr ptrh( gen.new_track(trv) ); assert( ptrh.pointer() != 0 ); cout << *ptrh << endl; assert( ptrh->get_hits().size() == 4 ); assert( ptrh->get_track().get_surface()->pure_equal(stest) ); //******************************************************************** cout << ok_prefix << "------------- All tests passed. -------------" << endl; return 0; //******************************************************************** }