// // $Id: SiChannelGeometer_t.cpp,v 1.16 2005/05/10 21:51:30 shfu Exp $ // // File: test_channel.cpp // Purpose: // Created: 10-MAR-1998 Emanuela Barberis // // Jan 30, 2005 by Shaohua Fu // added Layer0 // SFL0_Jan_2005 // // $Revision: 1.16 $ // // // Include files #include #include #include #include #include #include #include "edm/Event.hpp" #include #include #include #include #include #include using namespace std; using namespace dgs; using namespace edm; using namespace rcp; static int ver=-1; namespace edm { class Event; } static int testVersion_extern(const edm::Event& evtDummy) { return ver; } static int testVersion(const edm::Event& evtDummy) { static int count=0; return count++; } int main() { /* // to avoid test failure // SFL0_May_2005 // User interfaces to the SMT geometry SiChannelGeometer::load_map(false); //build default base geometry using RCP RCPManager* rcpman = RCPManager::instance(); d0_Ref siref; d0_Ref siref_const; SiGeometer* SiG; SiChannelGeometer* SiCG; try { string base = "SiBaseGeometry"; RCP SiDefaultRCP = rcpman->extract("silicon_geometry",base); siref = SiBaseGeometry::build_default(&SiDefaultRCP); siref_const = D0_CONST_REFCONV((SiBaseGeometry))(siref); //pass this version to the geometer SiG = SiGeometer::get_instance(); SiG->refresh(siref_const); //now build the default channel geometry using the RCP string channel = "SiChannelGeometry"; RCP channel_map = rcpman->extract("silicon_geometry",channel); SiCG = SiChannelGeometer::get_instance(); SiCG->refresh(&channel_map); } catch(runtime_error mistake) { std::cerr << "--> Caught error: " << mistake.what() << endl; return(1); } for (int i=1; i<=6; i++) { // std::cout << " ladder #:" << i << endl; //int nview = SiCG->get_view_count(5,1,i); // cmt.out SFL0_Jan_2005 int nview = SiCG->get_view_count(0,5,1,i); // added SFL0_Jan_2005 // std::cout << " number of views:" << nview << endl; //const SiStrips* test_d=SiCG->get_ladder_strips(5,1,i,2); // cmt.out SFL0_Jan_2005 const SiStrips* test_d=SiCG->get_ladder_strips(0,5,1,i,2); // added SFL0_Jan_2005 // std::cout << " pitch:" << test_d->get_pitch() << endl; // std::cout << " stereo:" << test_d->get_stereo_angle() << endl; // std::cout << " strip0:" << test_d->get_strip0() << endl; // std::cout << " view:" << test_d->get_view() << endl; } // // Example of how to access the dimensions of a given detector // // #ifdef UNBLOCK_OUTPUT std::cout << "null -12. 12. -12. 12. " << endl; std::cout << "set dmod 2" << endl; std::cout << "line -12. 0. 12. 0." << endl; std::cout << "line -0. -12. 0. 12." << endl; std::cout << "set dmod 1" << endl; std::cout << "set pmci 2" << endl; std::cout << "set ksiz 0.2" << endl; // float nd=(siref_const->get_end(1)->get_disk(2)->get_wedgeholder_count())*(siref_const->get_end(1)->get_disk(2)->get_wedgeholder(j)->get_wedge_count()); for (int j=1; j<=48 ; j++) { // cout << "nd, j: " << nd << " " << j << endl; float w1=SiG->get_wedge(1,1,j)->get_hw1size(); float w2=SiG->get_wedge(1,1,j)->get_hw2size(); float h=SiG->get_wedge(1,1,j)->get_hhsize(); float x00=SiG->get_wedge(1,1,j)->local_to_global(CartesianCoordinate(w1,0.,-h)).x(); float y00=SiG->get_wedge(1,1,j)->local_to_global(CartesianCoordinate(w1,0.,-h)).y(); float z00=SiG->get_wedge(1,1,j)->local_to_global(CartesianCoordinate(w1,0.,-h)).z(); float x10=SiG->get_wedge(1,1,j)->local_to_global(CartesianCoordinate(-w1,0.,-h)).x(); float y10=SiG->get_wedge(1,1,j)->local_to_global(CartesianCoordinate(-w1,0.,-h)).y(); float z10=SiG->get_wedge(1,1,j)->local_to_global(CartesianCoordinate(w1,0.,-h)).z(); float x01=SiG->get_wedge(1,1,j)->local_to_global(CartesianCoordinate(w2,0.,h)).x(); float y01=SiG->get_wedge(1,1,j)->local_to_global(CartesianCoordinate(w2,0.,h)).y(); float z01=SiG->get_wedge(1,1,j)->local_to_global(CartesianCoordinate(w2,0.,-h)).z(); float x11=SiG->get_wedge(1,1,j)->local_to_global(CartesianCoordinate(-w2,0.,h)).x(); float y11=SiG->get_wedge(1,1,j)->local_to_global(CartesianCoordinate(-w2,0.,h)).y(); float z11=SiG->get_wedge(1,1,j)->local_to_global(CartesianCoordinate(w2,0.,-h)).z(); std::cout << "line " << x00 << " " << y00 << " " << x10 << " " << y10 << endl; std::cout << "line " << x10 << " " << y10 << " " << x11 << " " << y11 << endl; std::cout << "line " << x11 << " " << y11 << " " << x01 << " " << y01 << endl; std::cout << "line " << x01 << " " << y01 << " " << x00 << " " << y00 << endl; std::cout << "set pmci 2" << endl; std::cout << "key " << x00 << " " << y00 << " 20 ' '" << endl; std::cout << "set pmci 3" << endl; std::cout << "key " << x10 << " " << y10 << " 20 ' '" << endl; std::cout << "set pmci 3" << endl; std::cout << "key " << x11 << " " << y11 << " 20 ' '" << endl; std::cout << "set pmci 2" << endl; std::cout << "key " << x01 << " " << y01 << " 20 ' '" << endl; } #endif // Test the auto version checking by installing a fake version checker RCP vrcp = rcpman->extract("silicon_geometry","smt_version_matching"); vector compare = vrcp.getVRCP("channel_versions"); edm::Event* pevt = new Event; if( SiCG->smt_data_version_function(testVersion) ) return 1; vector dataTags; SiCG->absRefresh(true,1,dataTags,pevt); if( SiCG->id() != compare[0].getRCPID() ) return 1; SiCG->absRefresh(true,1,dataTags,pevt); if( SiCG->id() != compare[1].getRCPID() ) return 1; SiCG->absRefresh(true,1,dataTags,pevt); if( SiCG->id() != compare[2].getRCPID() ) return 1; SiCG->absRefresh(true,1,dataTags,pevt); if( SiCG->id() != compare[3].getRCPID() ) return 1; const Event* a=0; assert( testVersion_extern(*a) == -1); ver=0; assert( testVersion_extern(*a) == 0 ); ver=1; assert( testVersion_extern(*a) == 1 ); ver=2; assert( testVersion_extern(*a) == 2 ); assert(SiCG->smt_data_version_function(testVersion_extern) == testVersion); // tests that it doesn't crash even when input tags vector is empty const int size = compare.size(); for(int i =-1 ; i < size ; ++i) { ver=i; SiCG->absRefresh(true,1,dataTags,pevt); assert( SiCG->id() == compare[(i<0?size-1:i)].getRCPID() ); } dataTags.push_back("p00.00.00"); dataTags.push_back("p00.00.00"); dataTags.push_back("p00.00.00"); // tests default behavior ( no history chunk is present) for(int i=-1;i < size;++i) { ver=i; SiCG->absRefresh(true,1,dataTags,pevt); assert( SiCG->id() == compare[(i<0?size-1:i)].getRCPID() ); } // tests p07, the version has to be 2 ( if datachunk is -1 or 3 ) dataTags[1] = "p07.00.00"; for(int i=-1;i < size;++i) { ver=i; SiCG->absRefresh(true,1,dataTags,pevt); int chk = (i<0?size-1:i); if( i == -1 || i >= 3 ) chk=2; assert( SiCG->id() == compare[chk].getRCPID() ); } // tests p08 , the version has to be 3 ( if datachunk is -1 or 3 ) dataTags[1] = "p08.00.00"; for(int i=-1;i < size;++i) { ver=i; SiCG->absRefresh(true,1,dataTags,pevt); int chk = (i<0?size-1:i); if( i == -1 || i >= 3 ) chk=3; assert( SiCG->id() == compare[chk].getRCPID() ); } // tests p>8 , the version has to be 3 ( if datachunk is -1 or 3 ) dataTags[1] = "p09.00.00"; for(int i=-1;i < size;++i) { ver=i; SiCG->absRefresh(true,1,dataTags,pevt); int chk = (i<0?size-1:i); if( i == -1 || i >= 3 ) chk=3; assert( SiCG->id() == compare[chk].getRCPID() ); } // tests p < 07 , the version has to be 2 ( if datachunk is -1 or 3 ) dataTags[1] = "p01.00.00"; for(int i=-1;i < size;++i) { ver=i; SiCG->absRefresh(true,1,dataTags,pevt); int chk = (i<0?size-1:i); if( i == -1 || i >= 3 ) chk=2; assert( SiCG->id() == compare[chk].getRCPID() ); } // tests p03 , the version has to be 0 ( if datachunk is -1 or 3 ) dataTags[1] = "p03.00.00"; for(int i=-1;i < size;++i) { ver=i; SiCG->absRefresh(true,1,dataTags,pevt); int chk = (i<0?size-1:i); if( i == -1 || i >= 3 ) chk=0; assert( SiCG->id() == compare[chk].getRCPID() ); } // tests t134 , the version has to be 3 ( if datachunk is -1 or 3 ) dataTags[1] = "t01.34.00"; for(int i=-1;i < size;++i) { ver=i; SiCG->absRefresh(true,1,dataTags,pevt); int chk = (i<0?size-1:i); if( i == -1 || i >= 3 ) chk=3; assert( SiCG->id() == compare[chk].getRCPID() ); } // tests t > 134 , the version has to be 3 ( if datachunk is -1 or 3 ) dataTags[1] = "t01.38.00"; for(int i=-1;i < size;++i) { ver=i; SiCG->absRefresh(true,1,dataTags,pevt); int chk = (i<0?size-1:i); if( i == -1 || i >= 3 ) chk=3; assert( SiCG->id() == compare[chk].getRCPID() ); } // tests t > 207 , the version has to be 4 ( if datachunk is -1 or 3 ) dataTags[1] = "t02.07.00"; for(int i=-1;i < size;++i) { ver=i; SiCG->absRefresh(true,1,dataTags,pevt); int chk = (i<0?size-1:i); if( i == -1 || i >= 3 ) chk=4; assert( SiCG->id() == compare[chk].getRCPID() ); } // tests t > 209 , the version has to be 5 ( if datachunk is -1 or 3 ) dataTags[1] = "t02.09.00"; for(int i=-1;i < size;++i) { ver=i; SiCG->absRefresh(true,1,dataTags,pevt); int chk = (i<0?size-1:i); if( i == -1 || i >= 3 ) chk=5; assert( SiCG->id() == compare[chk].getRCPID() ); } // tests p > 12 , the version has to be 5 ( if datachunk is -1 or 3 ) dataTags[1] = "p12.00.00"; for(int i=-1;i < size;++i) { ver=i; SiCG->absRefresh(true,1,dataTags,pevt); int chk = (i<0?size-1:i); if( i == -1 || i >= 3 ) chk=5; assert( SiCG->id() == compare[chk].getRCPID() ); } // tests p > 10 , the version has to be 3 ( if datachunk is -1 or 3 ) dataTags[1] = "p10.14.00"; for(int i=-1;i < size;++i) { ver=i; SiCG->absRefresh(true,1,dataTags,pevt); int chk = (i<0?size-1:i); if( i == -1 || i >= 3 ) chk=3; assert( SiCG->id() == compare[chk].getRCPID() ); } // tests p > 10 , the version has to be 3 ( if datachunk is -1 or 3 ) dataTags[1] = "p10.13.00"; for(int i=-1;i < size;++i) { ver=i; SiCG->absRefresh(true,1,dataTags,pevt); int chk = (i<0?size-1:i); if( i == -1 || i >= 3 ) chk=3; assert( SiCG->id() == compare[chk].getRCPID() ); } // tests p > 10 , the version has to be 3 ( if datachunk is -1 or 3 ) dataTags[1] = "p10.13.00"; for(int i=-1;i < size;++i) { ver=i; SiCG->absRefresh(true,1,dataTags,pevt); int chk = (i<0?size-1:i); if( i == -1 || i >= 3 ) chk=3; assert( SiCG->id() == compare[chk].getRCPID() ); } // Data is 5 dataTags[1] = "t01.33.00"; for(int i=-1;i < size;++i) { ver=i; SiCG->absRefresh(false,1,dataTags,pevt); int chk = (i<0?size-1:i); chk=6; assert( SiCG->id() == compare[chk].getRCPID() ); } // tests incorrectly formed version string. DEfault behavior dataTags[1] = "t00.3i.00"; for(int i=-1;i < size;++i) { ver=i; SiCG->absRefresh(true,1,dataTags,pevt); int chk = (i<0?size-1:i); assert( SiCG->id() == compare[chk].getRCPID() ); } // tests incorrectly formed version string. Default behavior dataTags[1] = "t01.30."; for(int i=-1;i < size;++i) { ver=i; SiCG->absRefresh(true,1,dataTags,pevt); int chk = (i<0?size-1:i); assert( SiCG->id() == compare[chk].getRCPID() ); } dataTags[1] = "p10.10.00"; SiCG->absRefresh(true,1,dataTags,pevt); int sub_vers = SiCG->get_subversion(); assert( sub_vers == 3 ); dataTags[1] = "p11.10.00"; SiCG->absRefresh(true,1,dataTags,pevt); sub_vers = SiCG->get_subversion(); assert( sub_vers == 2 ); dataTags[1] = "p12.01.00"; SiCG->absRefresh(true,1,dataTags,pevt); sub_vers = SiCG->get_subversion(); assert( sub_vers == 2 ); dataTags[1] = "p12.02.00"; SiCG->absRefresh(true,1,dataTags,pevt); sub_vers = SiCG->get_subversion(); assert( sub_vers == 0 ); dataTags[1] = "t02.26.00"; SiCG->absRefresh(true,1,dataTags,pevt); sub_vers = SiCG->get_subversion(); assert( sub_vers == 2 ); dataTags[1] = "t02.27.00"; SiCG->absRefresh(true,1,dataTags,pevt); sub_vers = SiCG->get_subversion(); assert( sub_vers == 0 ); */ // to avoid test failure // SFL0_May_2005 // Done return(0); }