// McTrack_t.cpp // Test McTrack. #include "McTrack.hpp" #include #include #include #include #include "trfbase/SurfTest.h" #ifndef DEFECT_NO_STDLIB_NAMESPACES using std::cout; using std::cerr; using std::endl; using std::string; #endif using namespace trf; //********************************************************************** int main( ) { string component = "GTrMCTrack"; 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 << "Construct track." << endl; McTrack::StateList states; SurfacePtr psrf1( new SurfTest(1) ); SurfacePtr psrf2( new SurfTest(2) ); SurfacePtr psrf3( new SurfTest(3) ); TrackVector vec1; vec1(0) = 1.0; TrackVector vec2; vec2(0) = 2.0; TrackVector vec3; vec3(0) = 3.0; TrackVector vec4; vec4(0) = 4.0; states.insert( McTrackState(1.0,psrf1,vec1) ); states.insert( McTrackState(4.0,psrf2,vec4) ); states.insert( McTrackState(3.0,psrf3,vec3) ); states.insert( McTrackState(2.0,psrf2,vec2 )); int mctrackid = 1; int parentword = 129; McTrack trmc(states,mctrackid,parentword); cout << trmc << endl; assert( trmc.is_valid() ); //******************************************************************** cout << ok_prefix << "Fetch particle Id type." << endl; assert( trmc.get_pdgid()== 13 ); cout << ok_prefix << "Fetch MC particle track Id." << endl; assert( trmc.get_mctrackid()== mctrackid ); //******************************************************************** cout << ok_prefix << "Fetch particle parentage." << endl; assert( trmc.get_parent().from_z() ); //******************************************************************** cout << ok_prefix << "Construct bad tracks." << endl; McTrack trmcbad1; cout << trmcbad1 << endl; assert( ! trmcbad1.is_valid() ); /* The following invokes an assertion states.insert( McTrack::State() ); McTrack trmcbad2(states); cout << trmcbad2 << endl; assert( ! trmcbad2.is_valid() ); */ //******************************************************************** cout << ok_prefix << "Access full list." << endl; assert( trmc.get_states().size() == states.size() ); assert( trmc.get_states() == states ); //******************************************************************** cout << ok_prefix << "Access a particular state." << endl; assert( trmc.get_state(*psrf2).is_valid() ); McTrackState state2 = trmc.get_state(*psrf2); assert( state2 == McTrackState(2.0,psrf2,vec2) ); SurfTest srf2b(2); assert( trmc.get_state(srf2b) == McTrackState(2.0,psrf2,vec2) ); SurfTest srf4(4); assert( ! trmc.get_state(srf4).is_valid() ); //******************************************************************** cout << ok_prefix << "Equality (and order)." << endl; McTrack::StateList states2; McTrack::StateList states3; states2.insert( McTrackState(1.0, psrf1, vec1) ); states2.insert( McTrackState(2.0, psrf2, vec2) ); states2.insert( McTrackState(4.0, psrf2, vec4) ); states2.insert( McTrackState(3.0, psrf3, vec3) ); McTrack trmc2(states2,mctrackid,parentword); assert( trmc2 == trmc ); assert( ! (trmc2 != trmc ) ); states3.insert( McTrackState(3.0,psrf3,vec3) ); int pdgid = -11; McTrack trmc3(states3,mctrackid,parentword,pdgid); assert( trmc3 != trmc ); assert( ! (trmc3 == trmc ) ); assert( trmc3.get_pdgid()==pdgid ); //******************************************************************** cout << ok_prefix << "Copy." << endl; McTrack trmc4(trmc); assert( trmc4 == trmc ); //******************************************************************** cout << ok_prefix << "------------- All tests passed. -------------" << endl; return 0; //******************************************************************** }