00001
00002 #include "VisFramework/VisFrameworkBase/interface/debug.h"
00003
00004 #include "FWCore/Framework/interface/Event.h"
00005 #include "FWCore/Framework/interface/EventSetup.h"
00006 #include "FWCore/Framework/interface/Selector.h"
00007 #include "VisReco/VisCustomTracker/interface/VisCuTkGeometryTwig.h"
00008 #include "VisReco/VisCustomTracker/interface/VisCuTracker.h"
00009 #include "VisReco/VisCustomTracker/interface/VisCuTkMapWindow.h"
00010 #include "VisReco/VisCustomTracker/interface/VisCuTkSlWindow.h"
00011 #include "VisReco/VisCustomTracker/interface/VisCuTkLayerSlWindow.h"
00012 #include "VisReco/VisCustomTracker/interface/VisCuTkBuilder.h"
00013 #include "VisReco/VisCustomTracker/interface/VisCuCmsTracker.h"
00014 #include "VisReco/VisCustomTracker/interface/VisCuTkModuleMap.h"
00015 #include "VisReco/VisCustomTracker/interface/VisCuTkModule.h"
00016 #include "VisReco/VisCustomTracker/interface/VisCuTrackerDigi.h"
00017 #include "VisReco/VisCustomTracker/interface/VisCuTrackerCluster.h"
00018 #include "VisReco/VisCustomTracker/interface/VisCuTrackerSimHit.h"
00019 #include "VisReco/VisCustomTracker/interface/VisCuTrackerRecHit.h"
00020 #include "DataFormats/TrackReco/interface/Track.h"
00021 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00022
00023 #include "Geometry/CommonDetUnit/interface/GeomDetType.h"
00024 #include "Geometry/CommonDetUnit/interface/GeomDetUnit.h"
00025 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
00026 #include "Iguana/Studio/interface/IgQtLock.h"
00027 #include "Iguana/Framework/interface/IgRepSet.h"
00028 #include "Iguana/Models/interface/IgTextRep.h"
00029 #include "Iguana/GLModels/interface/Ig3DRep.h"
00030 #include "Iguana/GLModels/interface/IgRPhiRep.h"
00031 #include "Iguana/GLModels/interface/IgRZRep.h"
00032 #include <Inventor/nodes/SoSeparator.h>
00033
00034 #include <iostream>
00035 #include <iomanip>
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 using namespace edm;
00048
00049 VisCuTkGeometryTwig::VisCuTkGeometryTwig (IgState *state, IgTwig *parent,
00050 const std::string &name
00051 )
00052
00053
00054 : VisQueuedTwig (state, parent, name),
00055 m_TrackerGeometry(0),
00056 m_cacheID_geo(0),
00057 m_cacheID_cab(0),
00058 m_name (name),
00059 m_done (false),
00060 m_3Ddone (false),
00061 alreadySelected (false),
00062 m_rzdone (false),
00063 m_rphidone (false),
00064 tr(0),
00065 tkMap(0),
00066 winTkMap(0),
00067 winTkSl(0),
00068 m_track(state, lat::CreateCallback (this, &VisCuTkGeometryTwig::configChanged))
00069 {
00070 digidraw=0;
00071 clusterdraw=0;
00072 rechitdraw=0;
00073 simhitdraw=0;
00074 pset=VisConfigurationService::pSet();
00075 if(!pset)
00076 {
00077 edm::ParameterSet p;
00078 VisConfigurationService *visService = new VisConfigurationService(p);
00079 pset = visService->pSet();
00080 delete visService;
00081 }
00082 }
00083
00084 VisCuTkGeometryTwig::~VisCuTkGeometryTwig (void)
00085 {
00086 if (m_3Ddone) {m_3dDet->unref ();digi3d->unref();cluster3d->unref();rechit3d->unref();simhit3d->unref();}
00087 if (m_rzdone) m_rzDet->unref ();
00088 if (m_rphidone) m_rphiDet->unref ();
00089 }
00090
00091 void
00092 VisCuTkGeometryTwig::onNewEvent (const edm::Event &event,
00093 const edm::EventSetup &eventSetup)
00094 {
00095 LOG (1, trace, LFfwvis, "VisCuTkGeometryTwig[" << name ()
00096 << "]::onNewEvent()\n");
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106 accessingDb = pset->getUntrackedParameter<std::string>("accessDbConnection", "false");
00107 autoIntegrate = pset->getUntrackedParameter<bool>("autoIntegrate", false);
00108 signalToIntegrate = pset->getUntrackedParameter<std::string>("signalToIntegrate", "strip");
00109 trackProducerName = pset->getUntrackedParameter<std::string>("trackProducer", "cosmictrackfinder");
00110 trackLabelName = pset->getUntrackedParameter<std::string>("trackLabel", "");
00111 crossedModulesOnly = pset->getUntrackedParameter<std::string>("crossedModulesOnly", "false");
00112
00113 eventSetup.get<TrackerDigiGeometryRecord> ().get (m_pDD);
00114
00115 if (accessingDb=="false"){
00116 m_TrackerGeometry = const_cast<TrackerGeometry*> (m_pDD.product());
00117 }
00118 else{
00119 if (m_cacheID_cab != eventSetup.get<SiStripDetCablingRcd>().cacheIdentifier()
00120 ||
00121 m_cacheID_geo != eventSetup.get<TrackerDigiGeometryRecord>().cacheIdentifier()){
00122 m_done=false;
00123 m_3Ddone=false;
00124 m_rzdone=false;
00125 m_rphidone=false;
00126 if(tkMap!=0 ){
00127
00128 for(unsigned int i=0; i<tr->components(); i++){
00129 VisCuTkSubDetector* subDetector = tr->getComponent(i+1);
00130 for(unsigned int j=0; j<subDetector->components(); j++ ){
00131 VisCuTkPartDetector* partDetector = subDetector->getComponent(j+1);
00132 for(unsigned int k=0; k<partDetector->components(); k++ ){
00133 VisCuTkLayer* layer = partDetector->getComponent(k+1);
00134 if(layer->getSlWindow()!=0 )delete layer->getSlWindow();
00135 }
00136 }
00137 }
00138 delete tr;
00139
00140 }
00141 tkMap=0;
00142
00143 digidraw=0;
00144
00145 clusterdraw=0;
00146
00147 rechitdraw=0;
00148
00149 simhitdraw=0;
00150 VisCuTkModuleMap::moduleMap.clear();
00151
00152 m_cacheID_cab = eventSetup.get<SiStripDetCablingRcd>().cacheIdentifier();
00153 m_cacheID_geo = eventSetup.get<TrackerDigiGeometryRecord>().cacheIdentifier();
00154
00155 eventSetup.get<SiStripDetCablingRcd>().get( m_SiStripDetCabling );
00156 std::vector<uint32_t> vdetId;
00157 m_SiStripDetCabling->addActiveDetectorsRawIds(vdetId);
00158
00159
00160
00161 if (m_TrackerGeometry!=0)
00162 delete m_TrackerGeometry;
00163
00164 m_TrackerGeometry = new TrackerGeometry;
00165 for (TrackingGeometry::DetUnitContainer::const_iterator idet = m_pDD->detUnits().begin();
00166 idet != m_pDD->detUnits().end(); idet++){
00167
00168 if (::binary_search(vdetId.begin(),vdetId.end(),(*idet)->geographicalId().rawId())){
00169 m_TrackerGeometry->addDetUnit(*idet);
00170
00171 }
00172 }
00173 }
00174 }
00175
00176 if (! m_done)
00177 {
00178 VisQueuedTwig::onBaseInvalidate ();
00179
00180 if(tkMap==0){
00181 tkMap= new VisCuTkBuilder();
00182 tkMap->create();
00183
00184 tkMap->fill(m_TrackerGeometry);
00185 tr = tkMap->tracker();
00186 ASSERT (tr);
00187 map<const GeomDetUnit * , VisCuTkModule *>::iterator imod;
00188 for (imod=VisCuTkModuleMap::moduleMap.begin();imod != VisCuTkModuleMap::moduleMap.end(); imod++){
00189 VisCuTkModule* mod = imod->second;
00190 mod->digi_start=0;
00191 mod->digi_size=0;
00192 mod->cluster_start=0;
00193 mod->cluster_size=0;
00194 mod->rechit_start=0;
00195 mod->rechit_size=0;
00196 mod->simhit_start=0;
00197 mod->simhit_size=0;
00198 }
00199 if(winTkMap!=0){
00200 winTkMap->setTracker(tr);
00201 winTkMap->setEvent(event,eventSetup);
00202 cout << "winTkMap updated "<<endl;
00203 }
00204 if(winTkSl!=0){
00205 winTkSl->setTracker(tr);
00206 winTkSl->setMap(winTkMap->map);
00207 winTkSl->drawall();
00208 cout << "winTkSl update "<<endl;
00209 if(tr->type==2)winTkSl->drawall();
00210 }
00211 }
00212 if(digidraw==0){
00213 digidraw = new VisCuTrackerDigi();
00214 digidraw->setTracker(tr);
00215 digidraw->setEvent(event,eventSetup);
00216 cout << "digidraw created "<<endl;
00217 }
00218 if(clusterdraw==0){
00219 clusterdraw = new VisCuTrackerCluster();
00220 clusterdraw->setTracker(tr);
00221 clusterdraw->setEvent(event,eventSetup);
00222 cout << "clusterdraw created "<<endl;
00223 }
00224 if(rechitdraw==0){
00225 rechitdraw = new VisCuTrackerRecHit();
00226 rechitdraw->setTracker(tr);
00227 rechitdraw->setEvent(event,eventSetup);
00228 cout << "rechitdraw created "<<endl;
00229 }
00230 if(simhitdraw==0){
00231 simhitdraw = new VisCuTrackerSimHit();
00232 simhitdraw->setTracker(tr);
00233 simhitdraw->setEvent(event,eventSetup);
00234 cout << "simhitdraw created "<<endl;
00235 }
00236 if(winTkMap==0){
00237 winTkMap = new VisCuTkMapWindow(0,0,0, this, simhitdraw, digidraw, clusterdraw, rechitdraw);
00238 winTkMap->setTracker(tr);
00239 winTkMap->setEvent(event,eventSetup);
00240 winTkMap->setGeometry(500,0,2000,1200);
00241 ASSERT (winTkMap);
00242 cout << "winTkMap created "<<endl;
00243 winTkMap->show();
00244 }
00245 if(winTkSl==0){
00246 winTkSl = new VisCuTkSlWindow(0,0,0,this);
00247 winTkSl->setTracker(tr);
00248 winTkSl->setMap(winTkMap->map);
00249 ASSERT (winTkSl);
00250 cout << "winTkSl created "<<endl;
00251 winTkSl->show();
00252 if(tr->type==2)winTkSl->drawall();
00253
00254 if(autoIntegrate){winTkSl->drawall(); winTkMap->drawall(); winTkMap->separate(); winTkMap->integSign();
00255 if(signalToIntegrate=="strip")winTkMap->drawDigi();else winTkMap->drawCluster();}
00256 }
00257 previous_event = event.id().event();
00258 m_done = true;
00259 storeTracks(event);
00260 IgRepSet::invalidate (this, SELF_MASK);
00261 }else {
00262 int pe = event.id().event();
00263 if(previous_event!=pe){
00264 previous_event = pe;
00265 map<const GeomDetUnit * , VisCuTkModule *>::iterator imod;
00266 for (imod=VisCuTkModuleMap::moduleMap.begin();imod != VisCuTkModuleMap::moduleMap.end(); imod++){
00267 VisCuTkModule* mod = imod->second;
00268 mod->digi_start=0;
00269 mod->digi_size=0;
00270 mod->cluster_start=0;
00271 mod->cluster_size=0;
00272 mod->rechit_start=0;
00273 mod->rechit_size=0;
00274 mod->simhit_start=0;
00275 mod->simhit_size=0;
00276 }
00277
00278 if(tr->type==3)winTkSl->notifyEvent();
00279 storeTracks(event);
00280 if(tr->type==3) selectCrossedModules();
00281 if(digidraw!=0) digidraw->setEvent(event,eventSetup);
00282 if(clusterdraw!=0) clusterdraw->setEvent(event,eventSetup);
00283 if(rechitdraw!=0) rechitdraw->setEvent(event,eventSetup);
00284 if(simhitdraw!=0) simhitdraw->setEvent(event,eventSetup);
00285 if(winTkMap!=0) winTkMap->setEvent(event,eventSetup);
00286 IgRepSet::invalidate (this, SELF_MASK);
00287 }
00288 }
00289 }
00290
00291 void
00292 VisCuTkGeometryTwig::update (IgTextRep *rep)
00293 {
00294
00295 VisQueuedTwig::update (rep);
00296
00297 if (! m_done) return;
00298 if (! m_pDD.isValid ()) return;
00299 if(tr==0) return;
00300 int count=0;
00301 map<const GeomDetUnit * , VisCuTkModule *>::iterator imod;
00302 for (imod=VisCuTkModuleMap::moduleMap.begin();imod != VisCuTkModuleMap::moduleMap.end(); imod++){
00303 VisCuTkModule* mod = imod->second;
00304 if(mod->isVisible()&&!mod->notInUse())count++;
00305 }
00306
00307 std::ostringstream text;
00308
00309 text << "<b>CMS Tracker Geometry: </b>";
00310
00311 text << m_name << "<br>";
00312
00313 text << " Geometry node for CmsDigiTracker is " << &(*m_pDD) << "<br>";
00314
00315 for (imod=VisCuTkModuleMap::moduleMap.begin();imod != VisCuTkModuleMap::moduleMap.end(); imod++){
00316 VisCuTkModule* mod = imod->second;
00317 if(mod->isVisible()&&!mod->notInUse())
00318 {
00319 Surface::GlobalPoint pos = mod->detUnit->surface ().position ();
00320 text << "<br>" <<mod->getName() << "<br>";
00321 if(winTkMap!=0&&winTkMap->drawdigi){
00322 std::string signaltext;
00323 signaltext = digidraw->updatetext(mod);
00324 text << signaltext;}
00325 if(winTkMap!=0&&winTkMap->drawcluster){
00326 std::string signaltext;
00327 signaltext = clusterdraw->updatetext(mod);
00328 text << signaltext;}
00329 if(winTkMap!=0&&winTkMap->drawrechit){
00330 std::string signaltext;
00331 signaltext = rechitdraw->updatetext(mod);
00332 text << signaltext;}
00333 if(winTkMap!=0&&winTkMap->drawsimhits){
00334 std::string signaltext;
00335 signaltext = simhitdraw->updatetext(mod);
00336 text << signaltext;}
00337 }
00338 }
00339
00340 IgQtLock ();
00341 rep->setText (text.str ());
00342 }
00343
00344 void
00345 VisCuTkGeometryTwig::update (Ig3DRep *rep)
00346 {
00347
00348 VisQueuedTwig::update (rep);
00349 if (! m_done) return;
00350 if (! m_pDD.isValid ()) return;
00351 if(tr->type!=3)alreadySelected=false;
00352 else { if(!alreadySelected) {alreadySelected=true;
00353 for (std::vector<VisCuTkModule *>::iterator imod = selectedModules.begin(); imod != selectedModules.end(); ++imod)
00354 {
00355 VisCuTkModule * mod = (*imod);
00356 if (winTkSl!=0)if(!mod->isVisible())mod->setVisible();
00357 }
00358 }
00359 }
00360 IgQtLock ();
00361 rep->clear ();
00362 m_3dDet=0;digi3d=0;cluster3d=0;rechit3d=0;simhit3d=0;
00363 m_3dDet = buildDet (VisTrackingGeometry::FullDet, m_TrackerGeometry, VisCuTracker::subDetector (m_name));
00364 if(winTkMap!=0&&winTkMap->drawdigi)digi3d = digidraw->update(VisTrackingGeometry::FullDet);
00365 if(winTkMap!=0&&winTkMap->drawcluster)cluster3d = clusterdraw->update(VisTrackingGeometry::FullDet);
00366 if(winTkMap!=0&&winTkMap->drawrechit)rechit3d = rechitdraw->update(VisTrackingGeometry::FullDet);
00367 if(winTkMap!=0&&winTkMap->drawsimhits)simhit3d = simhitdraw->update(VisTrackingGeometry::FullDet);
00368 if(!m_3Ddone){
00369 m_3dDet->ref();
00370 if(winTkMap!=0&&winTkMap->drawdigi)digi3d->ref ();
00371 if(winTkMap!=0&&winTkMap->drawcluster)cluster3d->ref ();
00372 if(winTkMap!=0&&winTkMap->drawrechit)rechit3d->ref ();
00373 if(winTkMap!=0&&winTkMap->drawsimhits)simhit3d->ref ();
00374 m_3Ddone = true;
00375 }
00376 if(m_3dDet!=0)rep->node ()->addChild (m_3dDet);
00377 if(winTkMap!=0&&winTkMap->drawdigi&&digi3d!=0)rep->node ()->addChild (digi3d);
00378 if(winTkMap!=0&&winTkMap->drawcluster&&cluster3d!=0)rep->node ()->addChild (cluster3d);
00379 if(winTkMap!=0&&winTkMap->drawrechit&&rechit3d!=0)rep->node ()->addChild (rechit3d);
00380 if(winTkMap!=0&&winTkMap->drawsimhits&&simhit3d!=0)rep->node ()->addChild (simhit3d);
00381 }
00382
00383 void
00384 VisCuTkGeometryTwig::update (IgRPhiRep *rep)
00385 {
00386
00387 VisQueuedTwig::update (rep);
00388
00389 if (! m_done) return;
00390 if (! m_pDD.isValid ()) return;
00391
00392 IgQtLock ();
00393 rep->clear ();
00394 m_rphiDet=0;digi3d=0;cluster3d=0;rechit3d=0;simhit3d=0;
00395 m_rphiDet = buildDet (VisTrackingGeometry::RPhiDet, m_TrackerGeometry, VisCuTracker::subDetector (m_name));
00396 if(winTkMap!=0&&winTkMap->drawdigi)digi3d = digidraw->update(VisTrackingGeometry::RPhiDet);
00397 if(winTkMap!=0&&winTkMap->drawcluster)cluster3d = clusterdraw->update(VisTrackingGeometry::RPhiDet);
00398 if(winTkMap!=0&&winTkMap->drawrechit)rechit3d = rechitdraw->update(VisTrackingGeometry::RPhiDet);
00399 if(winTkMap!=0&&winTkMap->drawsimhits)simhit3d = simhitdraw->update(VisTrackingGeometry::RPhiDet);
00400 if (! m_rphidone)
00401 {
00402 m_rphiDet->ref ();
00403 if(winTkMap!=0&&winTkMap->drawdigi)digi3d->ref ();
00404 if(winTkMap!=0&&winTkMap->drawcluster)cluster3d->ref ();
00405 if(winTkMap!=0&&winTkMap->drawrechit)rechit3d->ref ();
00406 if(winTkMap!=0&&winTkMap->drawsimhits)simhit3d->ref ();
00407 m_rphidone = true;
00408 }
00409 if(m_3dDet!=0)rep->node ()->addChild (m_rphiDet);
00410 if(winTkMap!=0&&winTkMap->drawdigi&&digi3d!=0)rep->node ()->addChild (digi3d);
00411 if(winTkMap!=0&&winTkMap->drawcluster&&cluster3d!=0)rep->node ()->addChild (cluster3d);
00412 if(winTkMap!=0&&winTkMap->drawrechit&&rechit3d!=0)rep->node ()->addChild (rechit3d);
00413 if(winTkMap!=0&&winTkMap->drawsimhits&&simhit3d!=0)rep->node ()->addChild (simhit3d);
00414 }
00415
00416
00417 void
00418 VisCuTkGeometryTwig::update (IgRZRep *rep)
00419 {
00420
00421 VisQueuedTwig::update (rep);
00422
00423 if (! m_done) return;
00424 if (! m_pDD.isValid ()) return;
00425
00426 IgQtLock ();
00427 rep->clear ();
00428 m_rzDet=0;digi3d=0;cluster3d=0;rechit3d=0;simhit3d=0;
00429 m_rzDet = buildDet (VisTrackingGeometry::RZDet, m_TrackerGeometry, VisCuTracker::subDetector (m_name));
00430 if(winTkMap!=0&&winTkMap->drawdigi)digi3d = digidraw->update(VisTrackingGeometry::RZDet);
00431 if(winTkMap!=0&&winTkMap->drawcluster)cluster3d = clusterdraw->update(VisTrackingGeometry::RZDet);
00432 if(winTkMap!=0&&winTkMap->drawrechit)rechit3d = rechitdraw->update(VisTrackingGeometry::RZDet);
00433 if(winTkMap!=0&&winTkMap->drawsimhits)simhit3d = simhitdraw->update(VisTrackingGeometry::RZDet);
00434
00435 if (! m_rzdone)
00436 {
00437 m_rzDet->ref ();
00438 if(winTkMap!=0&&winTkMap->drawdigi)digi3d->ref ();
00439 if(winTkMap!=0&&winTkMap->drawcluster)cluster3d->ref ();
00440 if(winTkMap!=0&&winTkMap->drawrechit)rechit3d->ref ();
00441 if(winTkMap!=0&&winTkMap->drawsimhits)simhit3d->ref ();
00442 m_rzdone = true;
00443 }
00444 if(m_3dDet!=0)rep->node ()->addChild (m_rzDet);
00445 if(winTkMap!=0&&winTkMap->drawdigi&&digi3d!=0)rep->node ()->addChild (digi3d);
00446 if(winTkMap!=0&&winTkMap->drawcluster&&cluster3d!=0)rep->node ()->addChild (cluster3d);
00447 if(winTkMap!=0&&winTkMap->drawrechit&&rechit3d!=0)rep->node ()->addChild (rechit3d);
00448 if(winTkMap!=0&&winTkMap->drawsimhits&&simhit3d!=0)rep->node ()->addChild (simhit3d);
00449 }
00450
00451 void
00452 VisCuTkGeometryTwig::configChanged (void)
00453 {
00454 if(tkMap==0 ||winTkSl==0)return;
00455 selectCrossedModules();
00456 winTkSl->repaintAll();
00457
00458 }
00459
00460 void
00461 VisCuTkGeometryTwig::selectCrossedModules ()
00462 {
00463 if(tkMap==0 ||winTkSl==0)return;
00464 if(crossedModulesOnly=="true" && tr->type==3){
00465
00466 winTkSl->notifyEvent();
00467 selectedModules.clear();
00468 unsigned int tracks_size = m_tracks.size ();
00469 int nselected = 0;
00470 if (tracks_size > 0)
00471 {
00472 for (unsigned int nt = 0; nt < tracks_size; nt++)
00473 {
00474 if (m_track.value() < 0 || m_track.value() == nt){
00475 std::vector<VisCuTkModule * > myModules = m_trackModules[nt];
00476 for (std::vector<VisCuTkModule *>::iterator imod = myModules.begin(); imod != myModules.end(); ++imod)
00477 {
00478 VisCuTkModule * mod = (*imod);
00479 nselected++;
00480 if (winTkSl!=0)if(!mod->isVisible())mod->setVisible();
00481 }
00482
00483 }
00484 }
00485 if(m_track.value() >= 0)std::cout<<nselected<<" modules hit by track" << m_track.value() <<std::endl;else std::cout<<nselected<<" modules hit by tracks" << std::endl;
00486 }
00487 }
00488 }
00489
00490 void
00491 VisCuTkGeometryTwig::storeTracks(const edm::Event &event)
00492
00493 {
00494 m_tracks.clear ();
00495 m_trackModules.clear ();
00496 if(crossedModulesOnly=="true"){
00497 bool notracks=true;
00498 edm::Handle<reco::TrackCollection> trackCollection;
00499 try
00500 {
00501 event.getByLabel(trackProducerName,trackLabelName,trackCollection);
00502 notracks=false;
00503 }
00504 catch (...)
00505 {
00506 cout << "no tracks type"<<trackProducerName<<"/"<<trackLabelName<< " in event" << endl;
00507 }
00508 if(!notracks){
00509 int nt = 0;
00510 for (reco::TrackCollection::const_iterator track = trackCollection->begin (); track != trackCollection->end (); track++)
00511 {
00512 m_tracks.push_back (*track);
00513 std::vector<VisCuTkModule * > myModules;
00514 for (trackingRecHit_iterator it = track->recHitsBegin (); it != track->recHitsEnd (); it++)
00515 {
00516 if (!((*it)->geographicalId ().null ())) {
00517 VisCuTkModule * mod;
00518 DetId detIdObject = (*it)->geographicalId ();
00519 unsigned int id = detIdObject.rawId();
00520 const GeomDet *gd = dynamic_cast<const GeomDet*>(m_pDD->idToDet(detIdObject));
00521 if(gd !=0){
00522 std::vector<const GeomDet*> comp = gd->components();
00523 if(comp.empty()){
00524
00525 const GeomDetUnit * geoUnit = dynamic_cast<const GeomDetUnit*>(m_pDD->idToDetUnit( detIdObject ));
00526 if(geoUnit!=0){
00527 mod = VisCuTkModuleMap::moduleMap[geoUnit];
00528 myModules.push_back(mod);
00529 }
00530 }
00531 if(comp.size()==2){
00532
00533 const GeomDetUnit * geoUnit1 = dynamic_cast<const GeomDetUnit*>(comp[0]);
00534 if(geoUnit1!=0){
00535 mod = VisCuTkModuleMap::moduleMap[geoUnit1];
00536 myModules.push_back(mod);
00537 }
00538 const GeomDetUnit * geoUnit2 = dynamic_cast<const GeomDetUnit*>(comp[1]);
00539 if(geoUnit2!=0){
00540 mod = VisCuTkModuleMap::moduleMap[geoUnit2];
00541 myModules.push_back(mod);
00542 }
00543 }
00544 if(comp.size()==1 || comp.size()>2) std::cout<<"module " << id << " intersected by rechit not found!"<<std::endl;
00545
00546 }else std::cout<<"module " << id << " intersected by rechit not found!"<<std::endl;
00547 }
00548 }
00549 nt++;
00550 m_trackModules.push_back (myModules);
00551 }
00552 }
00553 }
00554 }
00555