Main Page   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   File Members  

SiTracker.cxx

Go to the documentation of this file.
00001 // $Id: SiTracker.cxx,v 1.9 2001/05/18 05:13:29 lsrea Exp $
00002 //
00003 // Implmentation of the SiTracker class.
00004 
00005 #include "instrument/SiTracker.h"
00006 
00007 #include "instrument/SiDetector.h"
00008 #include "xml/IFileManager.h"
00009 #include "xml/IFile.h"
00010 
00011 // implementation of static members
00012 int SiTracker::num_trays;
00013 double SiTracker::tray_spacing;
00014 double SiTracker::z_first_plane;
00015 xml::IFile::doubleVector SiTracker::s_conv_rad_len;
00016 double SiTracker::si_thickness;
00017 double SiTracker::mod_width;
00018 double SiTracker::panel_thickness;
00019 double SiTracker::foot_thickness;
00020 double SiTracker::electronics_gap;
00021 const char* SiTracker::s_conv_mat;
00022 const char* SiTracker::s_color;
00023 
00024 #include <string>
00025 using std::string;
00026 
00027 // static variable implementation
00028 const GlastDetector::_PersistKey SiTracker::classPersistKey 
00029 = GlastDetector::_PersistKey( "SiTracker" );
00030 
00031 namespace {
00032 
00033   bool sitrackerPersistFlag 
00034     = GlastDetector::addPersistence ( SiTracker::classPersistKey, 
00035                                       new SiTracker::_Factory     );
00036   bool sitrackerParamLoad 
00037     = xml::IFileManager::loadParams(SiTracker::loadParameters);
00038 };
00039 
00040 SiTracker::SiTracker () {
00041 }
00042 
00043 SiTracker::~SiTracker () {
00044 }
00045 
00046 // "persistence" constructor - XML  (DOM api)
00047 SiTracker::SiTracker(const DOM_Element& elem) : GlastDetector(elem) {
00048 }
00049 
00050 // "persist" - create XML (i.e., DOM in-memeory hierarchy) "persistence"
00051 DOM_Element SiTracker::persist(DOM_Element& parent) const {
00052   DOM_Element newElem = GlastDetector::persist(parent);
00053   return newElem;
00054 }
00055 
00056 // visit - attach to an SiDetector object
00057 void SiTracker::visit(SiDetector* d) {
00058   addChild(d);
00059 }
00060 
00061 // accept - accept a DetectorVisitor
00062 void SiTracker::accept(DetectorVisitor& v) {
00063   v.visit(this);
00064   GlastDetector::accept(v);
00065 }
00066 
00067 
00068 // loadParameters - load in static parameters 
00069 static xml::IFile::doubleVector outside_rad_len; // this guy added for testing
00070 
00071 void  SiTracker::loadParameters(xml::IFile& ini)
00072 {
00073   mod_width       = ini.getDouble("glast", "mod_width");
00074   si_thickness    = ini.getDouble("tracker", "si_thickness");
00075   tray_spacing    = ini.getDouble("tracker", "tray_spacing");
00076   z_first_plane   = ini.getDouble("tracker", "z_first_plane");
00077   foot_thickness  = ini.getDouble("tracker", "foot_thickness");
00078   electronics_gap = ini.getDouble("tracker", "electronics_gap");
00079 
00080   num_trays =     ini.getInt(   "tracker", "num_trays");
00081   s_conv_rad_len = ini.getDoubleVector("tracker",  "conv_rad_len");
00082 
00083   // Tracker study: allow for possible entry to describe outer layers
00084   if (ini.contains("tracker", "outside_rad_len") ){
00085     outside_rad_len = ini.getDoubleVector("tracker", "outside_rad_len");
00086   } else {
00087     outside_rad_len = ini.getDoubleVector("tracker", "conv_rad_len");
00088   }
00089 
00090   int i;
00091   for (i = s_conv_rad_len.size(); i < num_trays; ++i) {
00092     s_conv_rad_len.push_back(s_conv_rad_len.back());
00093   }
00094 
00095   for (i = outside_rad_len.size(); i < num_trays; ++i) {
00096     outside_rad_len.push_back(outside_rad_len.back());
00097   }
00098 
00099   panel_thickness=ini.getDouble("tracker", "panel_thickness");
00100   s_conv_mat =    ini.getString("tracker", "conv_mat");
00101   s_color =       ini.getString("tracker", "color", "orange");
00102 }
00103 
00104 // layer: layer number, 0 at bottom of tracker
00105 // tower: tower number, 0-15
00106 double SiTracker::convRadLen(int layer, int tower)
00107 { 
00108   bool inside = tower==5 || tower==6 || tower == 9 || tower==10;
00109   return inside? s_conv_rad_len[layer] : outside_rad_len[layer]; 
00110 }    

Generated at Wed Nov 21 12:22:39 2001 by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000