// ETrack_t.cpp // Test ETrack. #include "ETrack.h" #include #include #include #include #include "trfutil/trfstream.h" #include "SurfTest.h" using std::cout; using std::cerr; using std::endl; using std::string; using trf::trf_format; using trf::SurfacePtr; using trf::TrackError; using trf::TrackVector; using trf::ETrack; //********************************************************************** int main( ) { string ok_prefix = "ETrack test (I): "; string error_prefix = "ETrack test (E): "; cout << ok_prefix << "------- Testing component TrkVec. -------" << endl; //******************************************************************** cout << ok_prefix << "Test constructors." << endl; cout << trf_format; ETrack tre0; cout << tre0 << endl; SurfacePtr psrf1( new SurfTest(123) ); ETrack tre1(psrf1); tre1.set_forward(); cout << tre1 << endl; TrackVector vec; vec(0) = 1.0; vec(1) = 2.0; vec(2) = 3.0; vec(3) = 4.0; vec(4) = 5.0; TrackError err; err(0,0) = 0.1; err(0,1) = -0.021; err(1,1) = 0.2; err(2,0) = 0.031; err(2,1) = 0.032; err(2,2) = 0.3; err(0,3) = -0.041; err(1,3) = -0.042; err(2,3) = -0.043; err(3,3) = 0.4; err(4,0) = 0.051; err(4,1) = 0.052; err(4,2) = 0.053; err(4,3) = 0.054; err(4,4) = 0.5; ETrack tre2(psrf1,vec,err,TSD_BACKWARD); cout << tre2 << endl; //******************************************************************** cout << ok_prefix << "Test equality and inequality." << endl; assert( tre2 != tre1 ); assert( tre1 == tre1 ); assert( tre2 == tre2 ); //******************************************************************** cout << ok_prefix << "Test copy constructor." << endl; ETrack tre3(tre2); cout << tre2 << endl; cout << tre3 << endl; assert( tre2 == tre3 ); //******************************************************************** cout << ok_prefix << "Test VTrack constructor." << endl; VTrack trv5(psrf1,vec); ETrack tre5(trv5,err); cout << tre5 << endl; assert( tre5 == tre2 ); //******************************************************************** cout << ok_prefix << "Test assignment." << endl; tre1 = tre2; cout << tre2 << endl; cout << tre1 << endl; assert( tre2 == tre1 ); tre0 = tre1; cout << tre0 << endl; assert( tre0 == tre1 ); //******************************************************************** cout << ok_prefix << "Test error access." << endl; TrackError err2 = tre1.get_error(); cout << err << endl; assert( err2 == err ); int i, j; for (i=0; i<5; ++i) err2(i,i) = 2.0*err2(i,i); ETrack tre4(psrf1,vec,err2); cout << err2 << endl; tre2 = tre1; tre2.set_error(err2); cout << tre2 << endl; assert( tre2 != tre1 ); assert( tre2 == tre4 ); for (i=0; i<5; ++i) for (j=0; j<5; ++j) assert( tre2.get_error(i,j) == err2(i,j) ); //******************************************************************** cout << ok_prefix << "Test chi-square difference." << endl; VTrack trv_no_err( tre1.get_surface(), tre1.get_vector() ); tre2 = tre1; TrackVector vec2 = tre2.get_vector(); for (j=0; j<5; ++j) vec2(j) += sqrt(0.1*vec2(j)); tre2.set_vector(vec2); cout << tre1 << endl; cout << tre2 << endl; double diff0 = chisq_diff( tre1, tre1 ); double diff1 = chisq_diff( tre2, tre1 ); double diff2 = chisq_diff( tre2, trv_no_err ); double diff3 = chisq_diff( trv_no_err, tre2 ); cout << "Both with error: " << diff1 << endl; cout << "With and without: " << diff2 << endl; cout << "Without and with: " << diff3 << endl; double diff00 = abs(diff0); double diff12 = abs(2.0*diff1-diff2); double diff23 = abs(diff2-diff3); double eps = 1.e-10; assert( diff00 < eps ); assert( diff12 < eps ); assert( diff23 < eps ); //******************************************************************** cout << ok_prefix << "------------- All tests passed. -------------" << endl; return 0; }