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

Tower.cxx

Go to the documentation of this file.
00001 // $Header: /nfs/slac/g/glast/ground/cvs/instrument/src/Tower.cxx,v 1.7 2000/12/11 19:43:07 burnett Exp $
00002 //  Author: Toby Burnett
00003 //
00004 // Implementation of the Tower class.
00005 
00006 #include "instrument/Tower.h"
00007 
00008 #include "instrument/SiTracker.h"
00009 #include "instrument/Calorimeter.h"
00010 #include "instrument/DetectorConverter.h"
00011 #include "xml/IFileManager.h"
00012 #include "xml/IFile.h"
00013 #include "xml/Dom.h"
00014 
00015 #include <strstream>
00016 #include <iomanip>
00017 
00018 typedef std::vector<double> doubleVector;
00019 
00020 // static member implementations
00021 double      Tower::mod_width;
00022 double      Tower::wall_thickness;
00023 double      Tower::wall_width;
00024 double      Tower::wall_gap;
00025 const char* Tower::wall_material;
00026 const char* Tower::wall_color;
00027 double      Tower::tray_spacing;
00028 double      Tower::cal_tracker_gap;
00029 int         Tower::num_trays;
00030 int         Tower::align;
00031 const GlastDetector::_PersistKey    Tower::classPersistKey = GlastDetector::_PersistKey("Tower");
00032 
00033 // class key implmentations
00034 namespace {
00035   bool towerLoadParams = xml::IFileManager::loadParams(Tower::loadParameters);
00036   bool towerPersistFlag = 
00037     xml::PersistentObject::addPersistence(
00038                                      Tower::classPersistKey, 
00039                                      new Tower::_Factory);
00040 };
00041 
00042 // using namespace std;
00043 
00044 Tower::Tower ()
00045   : m_module_id(0), m_tracker(0), m_calorimeter(0)
00046 {}
00047 
00048 Tower::Tower (idents::ModuleId id) 
00049   : m_module_id(id), m_tracker(0), m_calorimeter(0)
00050 {}
00051 
00052 // copy constructor
00053 Tower::Tower (const Tower& t) 
00054   : m_module_id(t.m_module_id), m_tracker(new SiTracker(*t.m_tracker))
00055   , m_calorimeter(new Calorimeter(*t.m_calorimeter))
00056 {
00057   addChild(m_tracker);
00058   addChild(m_calorimeter);
00059 }
00060 
00061 // "persistence" constructor - re-instantiate based on (in-memeory) XML spec
00062 Tower::Tower (const DOM_Element& elem)
00063   : GlastDetector(elem) {
00064   m_module_id = 
00065       idents::ModuleId(atoi(xml::Dom::transToChar(elem.getAttribute("module_id"))));
00066   for (iterator it = begin(); it != end(); ++it)    (*it)->accept(*this);
00067 }
00068 
00069 // persist - write to a persistence XML spec (DOM in-memory).
00070 DOM_Element  Tower::persist(DOM_Element& parent) const {
00071   DOM_Element newElem = GlastDetector::persist(parent);
00072   xml::Dom::addAttribute(newElem, "module_id", m_module_id);
00073   return newElem;
00074 }
00075 
00076 // destructor
00077 Tower::~Tower () {
00078 }
00079 
00080 // visit - visit the various components to assign pointers
00081 void Tower::visit(Calorimeter* c) {
00082   m_calorimeter = c;
00083   addChild(c);
00084 }
00085 void Tower::visit(SiTracker* s) {
00086   m_tracker = s;
00087   addChild(s);
00088 }
00089 // printOn - print all internals (formatted)
00090 void
00091 Tower::printOn(std::ostream& out) const {
00092   out << "\nTower id : " << m_module_id;
00093   out << "\nTracker : ";
00094   m_tracker->printOn(out);
00095   out << "\nCalorimeter : ";
00096   m_calorimeter->printOn(out);
00097 }
00098 // accept - implement the visitor chain
00099 void
00100 Tower::accept(DetectorVisitor &v) {
00101   v.visit(this);
00102   GlastDetector::accept(v);
00103 }
00104 
00105 // accept for a reading visitor
00106 void Tower::accept(DetectorConverter &v) const{
00107   v.forward(*this);
00108   GlastDetector::accept(v);
00109 }
00110 
00111 // loadParameters - load parameters in from an IFile structure
00112 void 
00113 Tower::loadParameters (xml::IFile& ini){
00114   mod_width =       ini.getDouble("glast", "mod_width");
00115   wall_gap =        ini.getDouble("walls", "gap");
00116   wall_thickness =  ini.getDouble("walls", "thickness");
00117   wall_width =      ini.getDouble("walls", "width");
00118   wall_material =   ini.getString("walls", "material");
00119   wall_color    =   ini.getString("walls", "color", "black");
00120   cal_tracker_gap = ini.getDouble("glast", "cal_tracker_gap");
00121   tray_spacing =    ini.getDouble("tracker", "tray_spacing");
00122   num_trays =       ini.getInt("tracker", "num_trays");
00123   align =           ini.getInt("veto", "align", 0);
00124 }

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