Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

MdcDetector Class Reference

#include <MdcDetector.h>

List of all members.

Public Member Functions

void Dump ()
void Dump ()
const MdcLayerfirstLayer () const
const MdcLayerfirstLayer () const
const MdcSuperLayerfirstSlay (void) const
const MdcSuperLayerfirstSlay (void) const
const MdcSuperLayerfirstSlayInView (int iview) const
const MdcSuperLayerfirstSlayInView (int iview) const
MdcLayergetMdcLayer (int laynum) const
MdcLayergetMdcLayer (int laynum) const
const MdcLayerlastLayer () const
const MdcLayerlastLayer () const
const MdcSuperLayerlastSlay (void) const
const MdcSuperLayerlastSlay (void) const
const MdcSuperLayerlastSlayInView (int iview) const
const MdcSuperLayerlastSlayInView (int iview) const
const MdcLayerLayer (const Identifier &id) const
const MdcLayerLayer (unsigned id) const
const MdcLayerLayer (const Identifier &id) const
const MdcLayerLayer (unsigned id) const
 MdcDetector ()
 MdcDetector ()
int nAxialSuper (void) const
int nAxialSuper (void) const
const MdcLayernextLayer (const MdcLayer *layer) const
const MdcLayernextLayer (int lay) const
const MdcLayernextLayer (const MdcLayer *layer) const
const MdcLayernextLayer (int lay) const
int nLayer () const
int nLayer () const
int nStereoSuper (int iview) const
int nStereoSuper (int iview) const
int nSuper () const
int nSuper () const
const MdcLayerprevLayer (const MdcLayer *layer) const
const MdcLayerprevLayer (int lay) const
const MdcLayerprevLayer (const MdcLayer *layer) const
const MdcLayerprevLayer (int lay) const
const MdcSuperLayerSuperLayer (unsigned id) const
const MdcSuperLayerSuperLayer (unsigned id) const
const MdcSWireWire (unsigned lyrid, unsigned wirid) const
const MdcSWireWire (const Identifier &id) const
const MdcSWireWire (unsigned id) const
const MdcSWireWire (unsigned lyrid, unsigned wirid) const
const MdcSWireWire (const Identifier &id) const
const MdcSWireWire (unsigned id) const
 ~MdcDetector ()
 ~MdcDetector ()

Static Public Member Functions

MdcDetectorinstance ()
MdcDetectorinstance (bool doSag)
MdcDetectorinstance ()
MdcDetectorinstance (bool doSag)

Private Member Functions

void buildpointers (void)
void buildpointers (void)
void buildSuperLayers (void)
void buildSuperLayers (void)

Private Attributes

MdcLayer ** _dclayer
MdcLayer ** _dclayer
bool _debug
int _firstLayer
const MdcSuperLayer_firstSlay
const MdcSuperLayer_firstSlay
const MdcSuperLayer_firstSlayInView [3]
const MdcSuperLayer_firstSlayInView [3]
int _firstSlayNum
const MdcSuperLayer_lastSlay
const MdcSuperLayer_lastSlay
const MdcSuperLayer_lastSlayInView [3]
const MdcSuperLayer_lastSlayInView [3]
int _lastSlayNum
int _nAxSlay
const MdcLayer_nextlay [43]
const MdcLayer_nextlay [43]
const MdcLayer_nextlayinvw [43]
const MdcLayer_nextlayinvw [43]
int _nLayer
int _nSlay
int _nSterSlay [2]
int _nSWire
const MdcLayer_prevlay [43]
const MdcLayer_prevlay [43]
const MdcLayer_prevlayinvw [43]
const MdcLayer_prevlayinvw [43]
MdcSWire ** _senseWire
MdcSWire ** _senseWire
MdcSuperLayer ** _slayList
MdcSuperLayer ** _slayList
int _version
int _wires_in_layer [43]

Static Private Attributes

bool _doSag = false
MdcDetector_myself
MdcDetector_myself = 0


Constructor & Destructor Documentation

MdcDetector::MdcDetector  ) 
 

00030 {
00031 
00032   std::cout << " +---------------------------------------------------+\n"
00033     << " |  Creating Mdc Geometry information                |\n"
00034     << " +---------------------------------------------------+\n";    
00035 
00036   IService* ser;
00037   StatusCode sc = Gaudi::svcLocator()->getService("MdcGeomSvc",ser);
00038   if (!sc.isSuccess())
00039     std::cout <<" MdcDetector::Could not open Geometry Service"<<std::endl;
00040   MdcGeomSvc *mdcsvc = dynamic_cast<MdcGeomSvc*> (ser);
00041   if(!mdcsvc) std::cout <<"MdcDetector::Could not open Geometry Service"<<std::endl;
00042 
00043   _nSWire = mdcsvc->getWireSize();
00044   _nLayer = mdcsvc->getLayerSize();
00045   _nSlay  = mdcsvc->getSuperLayerSize();
00046 
00047   _senseWire = new MdcSWire* [_nSWire];
00048   _dclayer   = new MdcLayer* [_nLayer];
00049   _slayList  = new MdcSuperLayer* [_nSlay];
00050 
00051   // build the sense wires
00052   for( int iwire = 0; iwire < _nSWire; iwire++ ) {
00053     const MdcGeoWire *geowir = mdcsvc->Wire(iwire);
00054     HepPoint3D eastP = geowir->Backward()/10.0;
00055     HepPoint3D westP = geowir->Forward() /10.0;
00056     //std::cout<< "wire ("<<geowir->Layer()<<","<<geowir->Cell()<<") east "<<eastP <<",west " <<westP << std::endl;//yzhang debug
00057     double sag=0.;
00058     if(_doSag) sag = geowir->Sag()/10.;//mm->cm
00059 
00060     //std::cout<<"sag = "<<sag<<" "<< geowir->Sag()<<std::endl;
00061     _senseWire[iwire] = new MdcSWire(eastP, westP, sag, geowir->Id(), geowir->Cell());
00062 
00063 
00064   }
00065 
00066   // build sense wire layers
00067   for( int ilay = 0; ilay < _nLayer; ilay++ ) {
00068     const MdcGeoLayer *geolay = mdcsvc->Layer(ilay);
00069     int nwir = geolay->NCell();
00070     int firstwir = geolay->Wirst();
00071     _dclayer[ilay] = new MdcLayer(ilay, nwir, &_senseWire[firstwir],*this);
00072     _wires_in_layer[ilay] = nwir;
00073   }
00074 
00075   // build pointers to make navigation faster
00076   buildpointers();
00077 
00078   // do superlayers
00079   // --------------
00080   buildSuperLayers();
00081   // set nominal cell height for each layer!!!! check!!!!
00082   double rOther;
00083   for(int ilay = 0; ilay < _nLayer; ilay++) {
00084     if( ilay == 0) {
00085       rOther = Layer(ilay + 1)->rMid();
00086     } else {
00087       rOther = Layer(ilay - 1)->rMid();
00088     }
00089     double height = fabs(Layer(ilay)->rMid() - rOther);
00090     const_cast<MdcLayer*>(Layer(ilay))->setCellHeight(height);
00091   }
00092 }

MdcDetector::~MdcDetector  ) 
 

00097 {
00098   for( int iwire = 0; iwire < _nSWire; iwire++ ) {
00099     delete _senseWire[iwire];
00100   }
00101   for( int ilay = 0; ilay < _nLayer; ilay++ ) {
00102     delete _dclayer[ilay];
00103   }
00104   for( int islay =0; islay < _nSlay; islay++ ) {
00105     _slayList[islay]->print(std::cout);
00106     delete _slayList[islay];
00107   }
00108 
00109   delete [] _senseWire;
00110   delete [] _dclayer;
00111   delete [] _slayList;
00112 }

MdcDetector::MdcDetector  ) 
 

MdcDetector::~MdcDetector  ) 
 


Member Function Documentation

void MdcDetector::buildpointers void   )  [private]
 

void MdcDetector::buildpointers void   )  [private]
 

00117 {
00118   // first layers
00119   //  for (int index=0; index<lastLayNum()-firstLayNum()+1; index++) {
00120   for (int index=0; index<_nLayer; index++) {
00121     // initialize
00122     _nextlay[index]=0; _prevlay[index]=0; 
00123     _nextlayinvw[index]=0; _prevlayinvw[index]=0;
00124     //    int layi=index+firstLayNum();
00125 
00126     //    if ( !existDet(layi) ) {
00127     //      ErrMsg(fatal) << " layer # " << layi << " does not exist!" <<endmsg;
00128     //    }
00129     //    _dclayer[index] = dchLayer(layi);
00130 
00131     //next and previous pointers
00132     //    if (existDet(layi+1)) { _nextlay[index] = dchLayer(layi+1); }
00133     //    if (existDet(layi-1)) { _prevlay[index] = _dclayer[index-1]; }
00134 
00135     if ( index + 1 < _nLayer ) { _nextlay[index] = Layer(index+1); }
00136     if ( index > 0                  ) { _prevlay[index] = Layer(index-1); }
00137 
00138     //next in view pointer
00139     //    int iview=dchLayer(layi)->view();
00140     int iview = Layer(index)->view();
00141     int jndex;
00142     //    for (jndex=index+1; jndex<lastLayNum()-firstLayNum()+1; jndex++) {
00143     for (jndex=index+1; jndex<_nLayer; jndex++) {
00144       //      int layj=jndex+firstLayNum();
00145       //      if ( !existDet(layj) ) {
00146       //        ErrMsg(fatal) << " layer # " << layj << " does not exist!" <<endmsg;
00147       //      }
00148       if ( iview != Layer(jndex)->view() ) continue;
00149       _nextlayinvw[index] = Layer(jndex+1);
00150       break;
00151     } //(int jndex=index+1; _dclayer[jndex].Exist(); jndex++) 
00152 
00153     //prev in view pointer
00154     for (jndex=index-1; jndex>=0 ; jndex--) {
00155       //      int layj=jndex+firstLayNum();
00156       //      if ( !existDet(layj) ) {
00157       //        ErrMsg(fatal) << " layer # " << layj << " does not exist!" <<endmsg;
00158       //      }
00159       if ( iview!=Layer(jndex)->view() ) continue;
00160       _prevlayinvw[index] = Layer(jndex);
00161       break;
00162     } //(int jndex=index+1; _dclayer[jndex].exist(); jndex++) 
00163 
00164   } //(int index=0; _dclayer[index].exist(); index++)
00165   }

void MdcDetector::buildSuperLayers void   )  [private]
 

void MdcDetector::buildSuperLayers void   )  [private]
 

00170     {
00171       // some initializations
00172       _nAxSlay = 0;
00173       _nSterSlay[0] = _nSterSlay[1] = 0;
00174 
00175       //  _nSlay = _nLayer/_layPerSL;
00176 
00177       _firstSlayNum = 1;
00178       _lastSlayNum = _nSlay;
00179       //  _slayList = new MdcSuperLayer*[_nSlay];
00180 
00181       // initialize pointers 
00182       _firstSlayInView[0] = _firstSlayInView[1] =_firstSlayInView[2] = 0;
00183       _lastSlayInView[0] = _lastSlayInView[1] =_lastSlayInView[2] = 0;
00184 
00185       int islay;
00186 
00187       // build the SuperLayers
00188       for (islay = 0; islay < _nSlay; islay++) {
00189         //    MdcSuperLayer* superlay = new MdcSuperLayer("Dch SuperLayer",1001+islay);
00190         MdcSuperLayer* superlay = new MdcSuperLayer(islay);
00191         //    *_dchslayerset += *superlay;
00192         _slayList[islay] = superlay;
00193       } 
00194       _firstSlay = _slayList[0];
00195       _lastSlay = _slayList[_nSlay-1];
00196 
00197       // set pointers to Layers in SuperLayers
00198       //  for (int lay=firstLayNum(); lay<=lastLayNum(); lay++) {
00199       for (int lay = 0; lay < _nLayer; lay++) {
00200         int superlayer = lay / _layPerSL;
00201         int index = lay % _layPerSL;
00202         _slayList[superlayer]->addLayer(index,getMdcLayer(lay)); 
00203       }
00204       // update SuperLayer data members
00205       MdcSuperLayer* oldSlayByView[3] = {0,0,0};
00206 
00207       for (islay = 0; islay < _nSlay; islay++) {
00208         const MdcSuperLayer* prev = 0;
00209         const MdcSuperLayer* next = 0;
00210         //    const MdcSuperLayer* prevInView = 0;
00211         //    const MdcSuperLayer* nextInView = 0;
00212 
00213         // SuperLayer view
00214         int iview = _slayList[islay]->layer(0)->view();
00215         int viewIndex = iview+1;
00216         // count SuperLayer types
00217         if ( iview == 0 ) _nAxSlay++;
00218         else if ( iview == -1 ) _nSterSlay[0]++;
00219         else if ( iview == 1 ) _nSterSlay[1]++;
00220 
00221         // build pointer links
00222         if ( islay > 0 ) prev = _slayList[islay - 1];
00223         if ( islay < _nSlay-1 ) next = _slayList[islay + 1];
00224 
00225         // fill first and last SuperLayer pointers
00226         if (firstSlayInView(iview) == 0) _firstSlayInView[viewIndex] =
00227           _slayList[islay];
00228         _lastSlayInView[viewIndex] = _slayList[islay];
00229 
00230         _slayList[islay]->updateInfo(prev, next);
00231         // now the poiters to SuperLayers of the same view
00232         if (oldSlayByView[viewIndex] != 0) {
00233           oldSlayByView[viewIndex]->setNextInView(_slayList[islay]);
00234           _slayList[islay]->setPrevInView(oldSlayByView[viewIndex]);
00235         }
00236 
00237         oldSlayByView[viewIndex] = _slayList[islay];
00238       }
00239     }

void MdcDetector::Dump  ) 
 

void MdcDetector::Dump  ) 
 

const MdcLayer* MdcDetector::firstLayer void   )  const [inline]
 

00036 { return Layer(0); }

const MdcLayer* MdcDetector::firstLayer  )  const [inline]
 

00036 { return Layer(0); }

const MdcSuperLayer* MdcDetector::firstSlay void   )  const [inline]
 

00046 {return _firstSlay;}

const MdcSuperLayer* MdcDetector::firstSlay void   )  const [inline]
 

00046 {return _firstSlay;}

const MdcSuperLayer* MdcDetector::firstSlayInView int  iview  )  const [inline]
 

00049     {return _firstSlayInView[iview+1];}

const MdcSuperLayer* MdcDetector::firstSlayInView int  iview  )  const [inline]
 

00049     {return _firstSlayInView[iview+1];}

MdcLayer* MdcDetector::getMdcLayer int  laynum  )  const [inline]
 

00035 { return _dclayer[laynum]; }

MdcLayer* MdcDetector::getMdcLayer int  laynum  )  const [inline]
 

00035 { return _dclayer[laynum]; }

MdcDetector* MdcDetector::instance  )  [static]
 

MdcDetector* MdcDetector::instance bool  doSag  )  [static]
 

MdcDetector * MdcDetector::instance  )  [static]
 

00022 {
00023   if( 0 == _myself ) {
00024     _myself = new MdcDetector();
00025   }
00026   return _myself;
00027 } 

MdcDetector * MdcDetector::instance bool  doSag  )  [static]
 

00016                                              {
00017   _doSag = doSag;
00018   return instance();
00019 }

const MdcLayer* MdcDetector::lastLayer void   )  const [inline]
 

00037 { return Layer(_nLayer - 1); }

const MdcLayer* MdcDetector::lastLayer  )  const [inline]
 

00037 { return Layer(_nLayer - 1); }

const MdcSuperLayer* MdcDetector::lastSlay void   )  const [inline]
 

00047 {return _lastSlay;}

const MdcSuperLayer* MdcDetector::lastSlay void   )  const [inline]
 

00047 {return _lastSlay;}

const MdcSuperLayer* MdcDetector::lastSlayInView int  iview  )  const [inline]
 

00051     {return _lastSlayInView[iview+1];}

const MdcSuperLayer* MdcDetector::lastSlayInView int  iview  )  const [inline]
 

00051     {return _lastSlayInView[iview+1];}

const MdcLayer* MdcDetector::Layer const Identifier id  )  const
 

const MdcLayer* MdcDetector::Layer unsigned  id  )  const [inline]
 

00033 { return _dclayer[id]; }

const MdcLayer * MdcDetector::Layer const Identifier id  )  const
 

00261       {
00262         unsigned layerid = MdcID::layer(id);
00263         return Layer(layerid);
00264         //  if (layerid < fLayers.size())
00265         //         return fLayers[layerid];
00266         //
00267         //         return 0;
00268       }

const MdcLayer* MdcDetector::Layer unsigned  id  )  const [inline]
 

00033 { return _dclayer[id]; }

int MdcDetector::nAxialSuper void   )  const [inline]
 

00055 {return _nAxSlay;}

int MdcDetector::nAxialSuper void   )  const [inline]
 

00055 {return _nAxSlay;}

const MdcLayer* MdcDetector::nextLayer const MdcLayer layer  )  const [inline]
 

00041     { return _nextlay[layer->layNum()]; } 

const MdcLayer* MdcDetector::nextLayer int  lay  )  const [inline]
 

00038 { return _nextlay[lay]; }

const MdcLayer* MdcDetector::nextLayer const MdcLayer layer  )  const [inline]
 

00041     { return _nextlay[layer->layNum()]; } 

const MdcLayer* MdcDetector::nextLayer int  lay  )  const [inline]
 

00038 { return _nextlay[lay]; }

int MdcDetector::nLayer void   )  const [inline]
 

00054 { return _nLayer;}

int MdcDetector::nLayer void   )  const [inline]
 

00054 { return _nLayer;}

int MdcDetector::nStereoSuper int  iview  )  const [inline]
 

00057     { return iview == 0 ? 0 : _nSterSlay[(iview+1)/2]; }

int MdcDetector::nStereoSuper int  iview  )  const [inline]
 

00057     { return iview == 0 ? 0 : _nSterSlay[(iview+1)/2]; }

int MdcDetector::nSuper  )  const [inline]
 

00053 { return _nSlay; }

int MdcDetector::nSuper  )  const [inline]
 

00053 { return _nSlay; }

const MdcLayer* MdcDetector::prevLayer const MdcLayer layer  )  const [inline]
 

00043     { return _prevlay[layer->layNum()]; } 

const MdcLayer* MdcDetector::prevLayer int  lay  )  const [inline]
 

00039 { return _prevlay[lay]; }

const MdcLayer* MdcDetector::prevLayer const MdcLayer layer  )  const [inline]
 

00043     { return _prevlay[layer->layNum()]; } 

const MdcLayer* MdcDetector::prevLayer int  lay  )  const [inline]
 

00039 { return _prevlay[lay]; }

const MdcSuperLayer* MdcDetector::SuperLayer unsigned  id  )  const [inline]
 

00045 { return _slayList[id];}

const MdcSuperLayer* MdcDetector::SuperLayer unsigned  id  )  const [inline]
 

00045 { return _slayList[id];}

const MdcSWire* MdcDetector::Wire unsigned  lyrid,
unsigned  wirid
const [inline]
 

00031     { return getMdcLayer(lyrid)->getWire(wirid); }  

const MdcSWire* MdcDetector::Wire const Identifier id  )  const
 

const MdcSWire* MdcDetector::Wire unsigned  id  )  const [inline]
 

00028 { return _senseWire[id];}

const MdcSWire* MdcDetector::Wire unsigned  lyrid,
unsigned  wirid
const [inline]
 

00031     { return getMdcLayer(lyrid)->getWire(wirid); }  

const MdcSWire * MdcDetector::Wire const Identifier id  )  const
 

00246       {
00247         int  wire = MdcID::wire(id);
00248         int  layer= MdcID::layer(id);
00249         return Wire(layer, wire);
00250         //  unsigned wireid= Layer(layer)->Wirst()+wire;
00251         //  if( wireid < fWires.size()){
00252         //          return fWires[wireid];
00253         //  }
00254         //  else {
00255         //  return 0;
00256         //  }
00257       }

const MdcSWire* MdcDetector::Wire unsigned  id  )  const [inline]
 

00028 { return _senseWire[id];}


Member Data Documentation

MdcLayer** MdcDetector::_dclayer [private]
 

MdcLayer** MdcDetector::_dclayer [private]
 

bool MdcDetector::_debug [private]
 

bool MdcDetector::_doSag = false [static, private]
 

int MdcDetector::_firstLayer [private]
 

const MdcSuperLayer* MdcDetector::_firstSlay [private]
 

const MdcSuperLayer* MdcDetector::_firstSlay [private]
 

const MdcSuperLayer* MdcDetector::_firstSlayInView[3] [private]
 

const MdcSuperLayer* MdcDetector::_firstSlayInView[3] [private]
 

int MdcDetector::_firstSlayNum [private]
 

const MdcSuperLayer* MdcDetector::_lastSlay [private]
 

const MdcSuperLayer* MdcDetector::_lastSlay [private]
 

const MdcSuperLayer* MdcDetector::_lastSlayInView[3] [private]
 

const MdcSuperLayer* MdcDetector::_lastSlayInView[3] [private]
 

int MdcDetector::_lastSlayNum [private]
 

MdcDetector* MdcDetector::_myself [static, private]
 

MdcDetector * MdcDetector::_myself = 0 [static, private]
 

int MdcDetector::_nAxSlay [private]
 

const MdcLayer* MdcDetector::_nextlay[43] [private]
 

const MdcLayer* MdcDetector::_nextlay[43] [private]
 

const MdcLayer* MdcDetector::_nextlayinvw[43] [private]
 

const MdcLayer* MdcDetector::_nextlayinvw[43] [private]
 

int MdcDetector::_nLayer [private]
 

int MdcDetector::_nSlay [private]
 

int MdcDetector::_nSterSlay [private]
 

int MdcDetector::_nSWire [private]
 

const MdcLayer* MdcDetector::_prevlay[43] [private]
 

const MdcLayer* MdcDetector::_prevlay[43] [private]
 

const MdcLayer* MdcDetector::_prevlayinvw[43] [private]
 

const MdcLayer* MdcDetector::_prevlayinvw[43] [private]
 

MdcSWire** MdcDetector::_senseWire [private]
 

MdcSWire** MdcDetector::_senseWire [private]
 

MdcSuperLayer** MdcDetector::_slayList [private]
 

MdcSuperLayer** MdcDetector::_slayList [private]
 

int MdcDetector::_version [private]
 

int MdcDetector::_wires_in_layer [private]
 


The documentation for this class was generated from the following files:
Generated on Wed Feb 2 16:25:05 2011 for BOSS6.5.5 by  doxygen 1.3.9.1