#include <MdcDetector.h>
Public Member Functions | |
MdcDetector () | |
~MdcDetector () | |
const MdcSWire * | Wire (unsigned id) const |
const MdcSWire * | Wire (const Identifier &id) const |
const MdcSWire * | Wire (unsigned lyrid, unsigned wirid) const |
const MdcLayer * | Layer (unsigned id) const |
const MdcLayer * | Layer (const Identifier &id) const |
MdcLayer * | getMdcLayer (int laynum) const |
const MdcLayer * | firstLayer () const |
const MdcLayer * | lastLayer () const |
const MdcLayer * | nextLayer (int lay) const |
const MdcLayer * | prevLayer (int lay) const |
const MdcLayer * | nextLayer (const MdcLayer *layer) const |
const MdcLayer * | prevLayer (const MdcLayer *layer) const |
const MdcSuperLayer * | SuperLayer (unsigned id) const |
const MdcSuperLayer * | firstSlay (void) const |
const MdcSuperLayer * | lastSlay (void) const |
const MdcSuperLayer * | firstSlayInView (int iview) const |
const MdcSuperLayer * | lastSlayInView (int iview) const |
int | nSuper () const |
int | nLayer () const |
int | nAxialSuper (void) const |
int | nStereoSuper (int iview) const |
void | Dump () |
Static Public Member Functions | |
static MdcDetector * | instance (bool doSag) |
static MdcDetector * | instance () |
Private Member Functions | |
void | buildpointers (void) |
void | buildSuperLayers (void) |
Private Attributes | |
MdcSWire ** | _senseWire |
MdcLayer ** | _dclayer |
int | _wires_in_layer [43] |
const MdcLayer * | _nextlay [43] |
const MdcLayer * | _nextlayinvw [43] |
const MdcLayer * | _prevlay [43] |
const MdcLayer * | _prevlayinvw [43] |
MdcSuperLayer ** | _slayList |
const MdcSuperLayer * | _firstSlayInView [3] |
const MdcSuperLayer * | _lastSlayInView [3] |
const MdcSuperLayer * | _firstSlay |
const MdcSuperLayer * | _lastSlay |
int | _version |
bool | _debug |
int | _firstLayer |
int | _nSWire |
int | _nLayer |
int | _firstSlayNum |
int | _lastSlayNum |
int | _nSlay |
int | _nAxSlay |
int | _nSterSlay [2] |
Static Private Attributes | |
static MdcDetector * | _myself = 0 |
static bool | _doSag = false |
Definition at line 19 of file MdcDetector.h.
MdcDetector::MdcDetector | ( | ) |
Definition at line 29 of file MdcDetector.cxx.
References _dclayer, _doSag, _nLayer, _nSlay, _nSWire, _senseWire, _slayList, _wires_in_layer, buildpointers(), buildSuperLayers(), MdcGeomSvc::getLayerSize(), MdcGeomSvc::getSuperLayerSize(), MdcGeomSvc::getWireSize(), Layer(), MdcGeomSvc::Layer(), MdcGeoLayer::NCell(), MdcLayer::rMid(), and MdcGeomSvc::Wire().
Referenced by instance().
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 | ( | ) |
Definition at line 96 of file MdcDetector.cxx.
References _dclayer, _nLayer, _nSlay, _nSWire, _senseWire, and _slayList.
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 }
void MdcDetector::buildpointers | ( | void | ) | [private] |
Definition at line 116 of file MdcDetector.cxx.
References _nextlay, _nextlayinvw, _nLayer, _prevlay, _prevlayinvw, Layer(), and MdcLayer::view().
Referenced by MdcDetector().
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] |
Definition at line 169 of file MdcDetector.cxx.
References _firstSlay, _firstSlayInView, _firstSlayNum, _lastSlay, _lastSlayInView, _lastSlayNum, _layPerSL, _nAxSlay, _nLayer, _nSlay, _nSterSlay, _slayList, MdcSuperLayer::addLayer(), firstSlayInView(), getMdcLayer(), MdcSuperLayer::layer(), next, EvtCyclic3::prev(), MdcSuperLayer::setNextInView(), MdcSuperLayer::setPrevInView(), MdcSuperLayer::updateInfo(), and MdcLayer::view().
Referenced by MdcDetector().
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 | ( | ) |
const MdcLayer* MdcDetector::firstLayer | ( | ) | const [inline] |
Definition at line 36 of file MdcDetector.h.
References Layer().
Referenced by MdcTrackList::pickHits().
00036 { return Layer(0); }
const MdcSuperLayer* MdcDetector::firstSlay | ( | void | ) | const [inline] |
Definition at line 46 of file MdcDetector.h.
References _firstSlay.
Referenced by MdcSegFinder::createSegs(), MdcSegGrouperSt::resetComb(), MdcSegGrouperCsmc::resetComb(), and MdcSegGrouperAx::resetComb().
00046 {return _firstSlay;}
const MdcSuperLayer* MdcDetector::firstSlayInView | ( | int | iview | ) | const [inline] |
Definition at line 48 of file MdcDetector.h.
References _firstSlayInView.
Referenced by buildSuperLayers().
00049 {return _firstSlayInView[iview+1];}
MdcLayer* MdcDetector::getMdcLayer | ( | int | laynum | ) | const [inline] |
Definition at line 35 of file MdcDetector.h.
References _dclayer.
Referenced by buildSuperLayers(), and Wire().
00035 { return _dclayer[laynum]; }
MdcDetector * MdcDetector::instance | ( | ) | [static] |
Definition at line 21 of file MdcDetector.cxx.
References _myself, and MdcDetector().
Referenced by MdcxTrackFinder::beginRun(), MdcxCosmicSewer::beginRun(), MdcTrkRecon::beginRun(), MdcMergeDups::beginRun(), MdcMakeHits::beginRun(), MdcHoughFinder::beginRun(), HoughValidUpdate::beginRun(), MdcNavigation::beginRun(), instance(), and MdcxFindSegs::MdcxFindSegs().
00022 { 00023 if( 0 == _myself ) { 00024 _myself = new MdcDetector(); 00025 } 00026 return _myself; 00027 }
MdcDetector * MdcDetector::instance | ( | bool | doSag | ) | [static] |
const MdcLayer* MdcDetector::lastLayer | ( | ) | const [inline] |
Definition at line 37 of file MdcDetector.h.
References _nLayer, and Layer().
Referenced by MdcTrackList::pickHits().
const MdcSuperLayer* MdcDetector::lastSlay | ( | void | ) | const [inline] |
const MdcSuperLayer* MdcDetector::lastSlayInView | ( | int | iview | ) | const [inline] |
Definition at line 50 of file MdcDetector.h.
References _lastSlayInView.
Referenced by MdcSegList::resetSeed().
00051 {return _lastSlayInView[iview+1];}
const MdcLayer * MdcDetector::Layer | ( | const Identifier & | id | ) | const |
Definition at line 260 of file MdcDetector.cxx.
References Layer(), and MdcID::layer().
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] |
Definition at line 33 of file MdcDetector.h.
References _dclayer.
Referenced by buildpointers(), MdcHoughFinder::digiToHots(), HoughValidUpdate::digiToHots(), MdcHoughFinder::digiToHots2(), HoughValidUpdate::digiToHots2(), MdcTrkRecon::fillEvent(), MdcTrkRecon::fillTrackList(), firstLayer(), lastLayer(), Layer(), MdcDetector(), MdcHit::MdcHit(), MdcHitMapGuts::MdcHitMapGuts(), MdcNavigation::poca(), MdcSegData::poisonHits(), MdcxTrackFinder::printTrack(), MdcxHit::process(), MdcxFindSegs::process(), and MdcMergeDups::testByOverlapHit().
00033 { return _dclayer[id]; }
int MdcDetector::nAxialSuper | ( | void | ) | const [inline] |
const MdcLayer* MdcDetector::nextLayer | ( | int | lay | ) | const [inline] |
Definition at line 38 of file MdcDetector.h.
References _nextlay.
Referenced by MdcTrackList::pickHits().
00038 { return _nextlay[lay]; }
int MdcDetector::nLayer | ( | void | ) | const [inline] |
Definition at line 54 of file MdcDetector.h.
References _nLayer.
Referenced by MdcHoughFinder::execute(), MdcSegData::poisonHits(), and MdcxFindSegs::process().
00054 { return _nLayer;}
int MdcDetector::nStereoSuper | ( | int | iview | ) | const [inline] |
Definition at line 56 of file MdcDetector.h.
References _nSterSlay.
00057 { return iview == 0 ? 0 : _nSterSlay[(iview+1)/2]; }
int MdcDetector::nSuper | ( | ) | const [inline] |
Definition at line 53 of file MdcDetector.h.
References _nSlay.
Referenced by MdcTrkRecon::beginRun(), MdcTrkRecon::fillSegList(), MdcSegGrouperSt::fillWithSegs(), MdcSegGrouperCsmc::fillWithSegs(), MdcSegGrouperAx::fillWithSegs(), MdcxFindSegs::initWireGroups(), MdcSegGrouper::MdcSegGrouper(), MdcSegGrouperSt::plotStereo(), MdcxFindSegs::process(), MdcSegGrouperSt::resetList(), MdcSegGrouperCsmc::storePar(), and MdcSegGrouperAx::storePar().
00053 { return _nSlay; }
const MdcLayer* MdcDetector::prevLayer | ( | int | lay | ) | const [inline] |
Definition at line 39 of file MdcDetector.h.
References _prevlay.
Referenced by MdcTrackList::pickHits().
00039 { return _prevlay[lay]; }
const MdcSuperLayer* MdcDetector::SuperLayer | ( | unsigned | id | ) | const [inline] |
Definition at line 45 of file MdcDetector.h.
References _slayList.
Referenced by MdcxFindSegs::initWireGroups(), and MdcxFindSegs::process().
00045 { return _slayList[id];}
const MdcSWire* MdcDetector::Wire | ( | unsigned | lyrid, | |
unsigned | wirid | |||
) | const [inline] |
Definition at line 30 of file MdcDetector.h.
References getMdcLayer(), and MdcLayer::getWire().
00031 { return getMdcLayer(lyrid)->getWire(wirid); }
const MdcSWire * MdcDetector::Wire | ( | const Identifier & | id | ) | const |
Definition at line 245 of file MdcDetector.cxx.
References MdcID::layer(), Wire(), and MdcID::wire().
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] |
Definition at line 28 of file MdcDetector.h.
References _senseWire.
Referenced by MdcHit::MdcHit(), and Wire().
00028 { return _senseWire[id];}
MdcLayer** MdcDetector::_dclayer [private] |
Definition at line 69 of file MdcDetector.h.
Referenced by getMdcLayer(), Layer(), MdcDetector(), and ~MdcDetector().
bool MdcDetector::_debug [private] |
Definition at line 83 of file MdcDetector.h.
bool MdcDetector::_doSag = false [static, private] |
int MdcDetector::_firstLayer [private] |
Definition at line 84 of file MdcDetector.h.
const MdcSuperLayer* MdcDetector::_firstSlay [private] |
const MdcSuperLayer* MdcDetector::_firstSlayInView[3] [private] |
Definition at line 76 of file MdcDetector.h.
Referenced by buildSuperLayers(), and firstSlayInView().
int MdcDetector::_firstSlayNum [private] |
const MdcSuperLayer* MdcDetector::_lastSlay [private] |
const MdcSuperLayer* MdcDetector::_lastSlayInView[3] [private] |
Definition at line 77 of file MdcDetector.h.
Referenced by buildSuperLayers(), and lastSlayInView().
int MdcDetector::_lastSlayNum [private] |
MdcDetector * MdcDetector::_myself = 0 [static, private] |
int MdcDetector::_nAxSlay [private] |
const MdcLayer* MdcDetector::_nextlay[43] [private] |
const MdcLayer* MdcDetector::_nextlayinvw[43] [private] |
int MdcDetector::_nLayer [private] |
Definition at line 86 of file MdcDetector.h.
Referenced by buildpointers(), buildSuperLayers(), lastLayer(), MdcDetector(), nLayer(), and ~MdcDetector().
int MdcDetector::_nSlay [private] |
Definition at line 89 of file MdcDetector.h.
Referenced by buildSuperLayers(), MdcDetector(), nSuper(), and ~MdcDetector().
int MdcDetector::_nSterSlay[2] [private] |
int MdcDetector::_nSWire [private] |
const MdcLayer* MdcDetector::_prevlay[43] [private] |
const MdcLayer* MdcDetector::_prevlayinvw[43] [private] |
MdcSWire** MdcDetector::_senseWire [private] |
Definition at line 68 of file MdcDetector.h.
Referenced by MdcDetector(), Wire(), and ~MdcDetector().
MdcSuperLayer** MdcDetector::_slayList [private] |
Definition at line 75 of file MdcDetector.h.
Referenced by buildSuperLayers(), MdcDetector(), SuperLayer(), and ~MdcDetector().
int MdcDetector::_version [private] |
Definition at line 82 of file MdcDetector.h.
int MdcDetector::_wires_in_layer[43] [private] |