// SimpleCFTDetectorSimulator_t.cpp #include "SimpleCFTDetectorSimulator.h" #include #include #include #include "trfutil/trfstream.h" #include "SimpleCFTDetector.h" #include "trflayer/Layer.h" #include "trfcyl/SurfCylinder.h" #include "trfbase/VTrack.h" #include "trfutil/RandomRegistry.h" using std::cout; using std::cerr; using std::endl; using std::string; using std::list; using namespace trf; //********************************************************************** int main( ) { string component = "SimpleCFTDetectorSimulator"; 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 << trf_format; cout << ok_prefix << "Construct." << endl; DetectorPtr pdet; pdet = new SimpleCFTDetector; cout << *pdet << endl; SimpleCFTDetectorSimulator dsim(pdet); //******************************************************************** cout << ok_prefix << "Check the layers." << endl; assert( dsim.get_generators().size() == 16 ); list names; names.push_back( "CFTX1" ); names.push_back( "CFTX2" ); names.push_back( "CFTX3" ); names.push_back( "CFTX4" ); names.push_back( "CFTX5" ); names.push_back( "CFTX6" ); names.push_back( "CFTX7" ); names.push_back( "CFTX8" ); names.push_back( "CFTU1" ); names.push_back( "CFTU2" ); names.push_back( "CFTU3" ); names.push_back( "CFTU4" ); names.push_back( "CFTV1" ); names.push_back( "CFTV2" ); names.push_back( "CFTV3" ); names.push_back( "CFTV4" ); list::const_iterator iname; for ( iname=names.begin(); iname!=names.end(); ++iname ) { string name = *iname; cout << name << endl; assert( pdet->is_assigned(name) ); const Layer& lyr = pdet->get_layer(*iname); cout << lyr << endl; } //******************************************************************** cout << ok_prefix << "Register random state." << endl; RandomRegistry reg; assert( reg.get_generator_count() == 0 ); dsim.register_generators(reg); cout << "------------------ Simulator ----------------" << endl; cout << dsim << endl; assert( reg.get_generator_count() == 16 ); int state = reg.record(); cout << "------------------ Registry -----------------" << endl; cout << reg << endl; assert( state == 0 ); //******************************************************************** cout << ok_prefix << "Add some clusters." << endl; VTrack trv( SurfacePtr(new SurfCylinder(1.0)) ); dsim.add_clusters(trv); dsim.add_clusters(trv); dsim.add_clusters(trv); for ( iname=names.begin(); iname!=names.end(); ++iname ) { cout << *iname << endl; const Layer& lyr = pdet->get_layer(*iname); cout << lyr << endl; cout << lyr.get_clusters().size() << endl; assert( lyr.get_clusters().size() == 3 ); } // Save a cluster. ClusterPtr pclu1 = pdet->get_layer("CFTX4").get_clusters().front(); //******************************************************************** cout << ok_prefix << "Drop clusters." << endl; dsim.drop_clusters(); for ( iname=names.begin(); iname!=names.end(); ++iname ) { cout << *iname << endl; const Layer& lyr = pdet->get_layer(*iname); cout << lyr << endl; assert( lyr.get_clusters().size() == 0 ); } //******************************************************************** cout << ok_prefix << "Verify next set of clusters is different." << endl; dsim.add_clusters(trv); dsim.add_clusters(trv); dsim.add_clusters(trv); ClusterPtr pclu2 = pdet->get_layer("CFTX4").get_clusters().front(); assert( *pclu2 != *pclu1 ); cout << dsim << endl; //******************************************************************** cout << ok_prefix << "Reset state and verify cluster is reproduced"; cout << endl; reg.set(0); cout << "------------------ Simulator ----------------" << endl; cout << dsim << endl; cout << "------------------ Registry -----------------" << endl; cout << reg << endl; dsim.drop_clusters(); dsim.add_clusters(trv); dsim.add_clusters(trv); dsim.add_clusters(trv); cout << *pdet << endl; ClusterPtr pclu3 = pdet->get_layer("CFTX4").get_clusters().front(); assert( *pclu3 == *pclu1 ); //******************************************************************** cout << ok_prefix << "------------- All tests passed. -------------" << endl; return 0; //******************************************************************** }