// // $Id: ChannelGeometry_t.cpp,v 1.11 2002/02/20 22:23:37 mayorov Exp $ // // File: test_channel.cc // Purpose: Test CFT Channel Geometry // Created: 17-DEC-1997 Harry L. Melanson // // $Name: $ // // // Include files #include #include #include #include #include "d0om/d0_Ref.hpp" #include "rcp/RCPManager.hpp" #include "rcp/RCP.hpp" #include "cft_util/CFTDetector.hpp" #include "cft_geometry/base/CftBaseGeometry.hpp" #include "cft_geometry/base/CftGeometer.hpp" #include "cft_geometry/channel/CftChannelGeometry.hpp" #include "cft_geometry/channel/CftChannelDoublet.hpp" using namespace std; using edm::RCPManager; using edm::RCP; using namespace dgs; /** Base Geometry test program This program tests the base geometry classes. */ int main() { cout << "Testing cft_geometry/channel component" << endl; CftGeometer* cft_gm; // Cft Geometer CftChannelGeometry* cft_channel; // Channel Geometry try { // // Build default base geometry using RCP // RCPManager* rcpman = RCPManager::instance(); RCP rcp_base = rcpman->extract("cft_geometry","CftBaseGeometry"); d0_Ref cft_base = CftBaseGeometry::build_default(&rcp_base); d0_Ref cft_base_const; cft_base_const = D0_CONST_REFCONV((CftBaseGeometry)) (cft_base); // // Pass a const version to the Geometer // cft_gm = CftGeometer::get_instance(); cft_gm->refresh(cft_base_const); // // Build default channel geometry using RCP // cout << "Attach Channel RCP" << endl; RCP rcp_channel = rcpman->extract("cft_geometry","CftChannelGeometry"); cout << "Get Channel Geometer" << endl; cft_channel = CftChannelGeometry::get_instance(); cout << "Build default Channel geometry" << endl; cft_channel->absRefresh(&rcp_channel); } catch(runtime_error mistake) { cerr << "ERROR: " << mistake.what() << endl; return(1); } // // Get default channel geometer and create default geometry // cout << "Get CftChannelGeometry" << endl; // // Get pointers to doublets // int num_doublets = cft_gm->get_doublet_count(); cout << "Test doublets, count = " << num_doublets << endl; CftChannelDoublet* doublet; CFTDoubletList dbls = CFTDetector::all_doublets(); CFTDoubletList::const_iterator idbl; for (idbl = dbls.begin(); idbl != dbls.end(); ++idbl) { CFTDoublet dbl = *idbl; cout << endl << "-----------------------------------------" << endl; cout << "Doublet " << CFTDetector::name(dbl) << endl; doublet = cft_channel->get_doublet(dbl); // // Exercise doublet interfaces // cout << " nfiber = " << doublet->nfibers(); cout << std::fixed<nfibers()*2; cout << " fiber " << n-1; cout << " r = " <get_fiber_r(n-1,0.0) << endl; cout << " "; cout << " approx r = " <get_fiber_r_approx(n-1,0.0) << endl; cout << " "; cout << " ideal r = " <get_fiber_r_ideal(n-1,0.0) << endl; cout << " "; cout << " phi = " <get_fiber_phi(n-1,0.0) << " at z = 0.0" << endl; cout << " "; cout << " approx phi = " <get_fiber_phi_approx(n-1,0.0) << " at z = 0.0" << endl; cout << " "; cout << " ideal phi = " <get_fiber_phi_ideal(n-1,0.0) << " at z = 0.0" << endl; cout << " fiber " << n; cout << " r = " <get_fiber_r(n,0.0) << endl; cout << " "; cout << " approx r = " <get_fiber_r_approx(n,0.0) << endl; cout << " "; cout << " ideal r = " <get_fiber_r_ideal(n,0.0) << endl; cout << " "; cout << " phi = " <get_fiber_phi(n,0.0) << " at z = 0.0" << endl; cout << " "; cout << " approx phi = "<get_fiber_phi_approx(n,0.0) << " at z = 0.0" << endl; cout << " "; cout << " ideal phi = " <get_fiber_phi_ideal(n,0.0) << " at z = 0.0" << endl; double nn = doublet->nfibers()*2 - 1; cout << " fiber " << nn; cout << " r = " <get_r(nn,0.0) << " "; cout << " phi = " <get_phi(nn,0.0) << " at z = 0.0"; cout << endl; nn = nn + 0.5; cout << " fiber " << nn; cout << " r = " <get_r(nn,0.0) << " "; cout << " phi = " <get_phi(nn,0.0) << " at z = 0.0"; cout << endl; nn = nn + 0.5; cout << " fiber " << nn; cout << " r = " << doublet->get_r(nn,0.0) << " "; cout << " phi = " << doublet->get_phi(nn,0.0) << " at z = 0.0"; cout << endl; } return 0; }