![]() |
![]() |
#include <VisSimulation/VisSimHits/interface/VisPSimHitTwig.h>
Public Member Functions | |
virtual void | onNewEvent (const edm::Event &event, const edm::EventSetup &eventSetup) |
virtual void | twigChanged (void) |
virtual void | update (IgRZRep *rep) |
virtual void | update (IgRPhiRep *rep) |
virtual void | update (IgLegoRep *rep) |
virtual void | update (Ig3DRep *rep) |
virtual void | update (IgTextRep *rep) |
VisPSimHitTwig (IgState *state, IgTwig *parent, const std::string &name="", const std::string &friendlyName="", const std::string &moduleLabel="", const std::string &instanceName="", const std::string &processName="") | |
Private Attributes | |
VisSimHitConnect | m_connect |
std::string | m_friendlyName |
std::vector< PSimHit > | m_hits |
std::string | m_instanceName |
std::string | m_moduleLabel |
std::string | m_processName |
std::string | m_text |
Definition at line 20 of file VisPSimHitTwig.h.
VisPSimHitTwig::VisPSimHitTwig | ( | IgState * | state, | |
IgTwig * | parent, | |||
const std::string & | name = "" , |
|||
const std::string & | friendlyName = "" , |
|||
const std::string & | moduleLabel = "" , |
|||
const std::string & | instanceName = "" , |
|||
const std::string & | processName = "" | |||
) |
Definition at line 64 of file VisPSimHitTwig.cc.
References createThisTwig(), edm::TypeID::friendlyClassName(), DBSPlugin::get(), and VisTwigFactroyService::registerTwig().
00069 : VisQueuedTwig (state, parent, name), 00070 m_text (name), 00071 m_friendlyName (friendlyName), 00072 m_moduleLabel (moduleLabel), 00073 m_instanceName (instanceName), 00074 m_processName (processName), 00075 m_connect (state, lat::CreateCallback (this, &VisPSimHitTwig::twigChanged)) 00076 { 00077 VisTwigFactroyService *tfService = VisTwigFactroyService::get (state); 00078 if (! tfService) 00079 { 00080 tfService = new VisTwigFactroyService (state); 00081 } 00082 edm::TypeID caloJetsID (typeid (edm::PSimHitContainer)); 00083 tfService->registerTwig (caloJetsID.friendlyClassName (), &createThisTwig); 00084 }
void VisPSimHitTwig::onNewEvent | ( | const edm::Event & | event, | |
const edm::EventSetup & | eventSetup | |||
) | [virtual] |
Reimplemented from VisQueuedTwig.
Definition at line 91 of file VisPSimHitTwig.cc.
References cms::Exception::append(), arg, edm::Event::bunchCrossing(), c, e, exception, i, edm::Event::id(), IgRepSet::invalidate(), edm::Event::luminosityBlock(), m_friendlyName, m_hits, m_instanceName, m_moduleLabel, VisQueuedTwig::m_onCmsException, VisQueuedTwig::m_onError, VisQueuedTwig::m_onException, VisQueuedTwig::m_onUnhandledException, m_processName, m_text, IgSimpleTwig::name(), VisQueuedTwig::onNewEvent(), edm::Event::orbitNumber(), IgTwig::SELF_MASK, and IgTwig::STRUCTURE_MASK.
00093 { 00094 // Get debugging dump. 00095 VisQueuedTwig::onNewEvent (event, eventSetup); 00096 00097 m_hits.clear (); 00098 m_text = (QString ("Run %1, Event %2, LS %3, Orbit %4, BX %5") 00099 .arg (event.id ().run ()) 00100 .arg (event.id ().event ()) 00101 .arg (event.luminosityBlock ()) 00102 .arg (event.orbitNumber ()) 00103 .arg (event.bunchCrossing ()) 00104 .latin1 ()); 00105 00106 std::vector<edm::Handle<edm::PSimHitContainer> > hitCollections; 00107 00108 try 00109 { 00110 if ((! m_friendlyName.empty ()) || (! m_moduleLabel.empty ()) || (! m_instanceName.empty ()) || (! m_processName.empty ())) 00111 { 00112 VisEventSelector visSel (m_friendlyName, m_moduleLabel, m_instanceName, m_processName); 00113 event.getMany (visSel, hitCollections); 00114 } 00115 } 00116 catch (cms::Exception& e) 00117 { 00118 e.append (" from VisPSimHitTwig::onNewEvent "); 00119 e.append (this->name ()); 00120 00121 if (this->m_onCmsException) 00122 this->m_onCmsException (&e); 00123 } 00124 catch (lat::Error &e) 00125 { 00126 if (this->m_onError) 00127 this->m_onError (&e); 00128 } 00129 catch (std::exception &e) 00130 { 00131 if (this->m_onException) 00132 this->m_onException (&e); 00133 } 00134 catch (...) 00135 { 00136 if (this->m_onUnhandledException) 00137 this->m_onUnhandledException (); 00138 } 00139 00140 if (! hitCollections.empty ()) 00141 { 00142 for (std::vector<edm::Handle<edm::PSimHitContainer> >::iterator i = hitCollections.begin (), iEnd = hitCollections.end (); i != iEnd; ++i) 00143 { 00144 const edm::PSimHitContainer& c = *(*i); 00145 QString sizeStr = (QString ("%1").arg (c.size ())); 00146 QString nameStr = QString (this->name ()); 00147 int ib = nameStr.find ("["); 00148 int ie = nameStr.find ("]"); 00149 nameStr.replace (ib + 1, ie - 1, sizeStr); 00150 00151 this->name (nameStr); 00152 00153 for (std::vector<PSimHit>::const_iterator isim = c.begin (), isimEnd = c.end (); 00154 isim != isimEnd; ++isim) 00155 { 00156 m_hits.push_back ((*isim)); 00157 } 00158 } 00159 } 00160 00161 IgRepSet::invalidate (this, IgTwig::SELF_MASK | IgTwig::STRUCTURE_MASK); 00162 }
Definition at line 87 of file VisPSimHitTwig.cc.
References IgRepSet::invalidate(), and IgTwig::SELF_MASK.
00088 { IgRepSet::invalidate (this, SELF_MASK); }
Reimplemented from VisQueuedTwig.
Definition at line 485 of file VisPSimHitTwig.cc.
References cms::Exception::append(), ASSERT, e, Ig3DBaseModel::encode(), end, exception, DBSPlugin::get(), i, label, m_connect, m_hits, VisQueuedTwig::m_onCmsException, VisQueuedTwig::m_onError, VisQueuedTwig::m_onException, VisQueuedTwig::m_onUnhandledException, DetId::Muon, Ig3DBaseRep::node(), VisQueuedTwig::state(), VisEventSetupService::toGlobal(), track, DetId::Tracker, VisQueuedTwig::update(), VisActiveConfigurable< T >::value(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().
00486 { 00487 // Get debugging dump. 00488 VisQueuedTwig::update (rep); 00489 00490 if (! m_hits.empty ()) 00491 { 00492 SoMaterial *mat = new SoMaterial; 00493 mat->diffuseColor.setValue (0.0, 0.0, 1.0); 00494 mat->emissiveColor.setValue(0.0, 0.0, 1.0); 00495 00496 SoDrawStyle *drawStyle = new SoDrawStyle; 00497 drawStyle->pointSize = 6.0; 00498 00499 SoSeparator *sep = new SoSeparator; // global 00500 sep->addChild (mat); 00501 sep->addChild (drawStyle); 00502 00503 VisEventSetupService *esService = VisEventSetupService::get (state ()); 00504 ASSERT (esService); 00505 00506 try 00507 { 00508 typedef std::map<int, std::vector <SbVec3f> > VisParticleMap; 00509 VisParticleMap pmap; 00510 00511 for (std::vector<PSimHit>::const_iterator i = m_hits.begin (); i != m_hits.end (); ++i) 00512 { 00513 int ptype = (*i).trackId (); 00514 00515 VisParticleMap::iterator mit = pmap.find (ptype); 00516 00517 if (mit == pmap.end ()) 00518 { 00519 std::vector<SbVec3f> vec; 00520 bool done = pmap.insert (VisParticleMap::value_type (ptype, vec)).second; 00521 if (done) 00522 { 00523 mit = pmap.find (ptype); 00524 } 00525 } 00526 00527 if (mit == pmap.end ()) 00528 { 00529 throw std::runtime_error ("Cannot find particle type in the map!"); 00530 } 00531 DetId id = (*i).detUnitId (); 00532 if (! id.null () && (id.det () == DetId::Tracker || id.det () == DetId::Muon)) 00533 { 00534 GlobalPoint pos = esService->toGlobal ((*i).localPosition (), id); 00535 (mit->second).push_back (SbVec3f (pos.x () / 100.0, pos.y () / 100.0, pos.z () / 100.0)); 00536 } 00537 } 00538 if (! pmap.empty ()) 00539 { 00540 for (VisParticleMap::const_iterator mit = pmap.begin (); mit != pmap.end (); ++mit) 00541 { 00542 SoSeparator *trackSep = new SoSeparator; 00543 00544 QString label = QString ("ID = %1") 00545 .arg (mit->first); 00546 00547 trackSep->setName (Ig3DBaseModel::encode (label.prepend ("Track with "))); 00548 00549 SoVertexProperty *vertices = new SoVertexProperty; 00550 int nVrtx = 0; 00551 00552 for (std::vector<SbVec3f>::const_iterator vit = (mit->second).begin (); vit != (mit->second).end (); ++vit) 00553 { 00554 vertices->vertex.set1Value (nVrtx++, (*vit)); 00555 } 00556 00557 vertices->vertex.setNum (nVrtx); 00558 SoPointSet *points = new SoPointSet; 00559 points->vertexProperty.setValue (vertices); 00560 points->numPoints.setValue (nVrtx); 00561 trackSep->addChild (points); 00562 00563 if (m_connect.value ()) 00564 { 00565 SoLineSet *track = new SoLineSet; 00566 track->vertexProperty.setValue (vertices); 00567 track->numVertices.setValue (nVrtx); 00568 trackSep->addChild (track); 00569 } 00570 00571 sep->addChild (trackSep); 00572 } 00573 } 00574 } 00575 catch (cms::Exception& e) 00576 { 00577 e.append (" from VisPSimHitTwig::update(IgRZRep*) "); 00578 e.append (this->name ()); 00579 00580 if (this->m_onCmsException) 00581 this->m_onCmsException (&e); 00582 } 00583 catch (lat::Error &e) 00584 { 00585 if (this->m_onError) 00586 this->m_onError (&e); 00587 } 00588 catch (std::exception &e) 00589 { 00590 if (this->m_onException) 00591 this->m_onException (&e); 00592 } 00593 catch (...) 00594 { 00595 if (this->m_onUnhandledException) 00596 this->m_onUnhandledException (); 00597 } 00598 rep->node ()->addChild (sep); 00599 } 00600 }
Reimplemented from VisQueuedTwig.
Definition at line 367 of file VisPSimHitTwig.cc.
References cms::Exception::append(), ASSERT, e, Ig3DBaseModel::encode(), end, exception, DBSPlugin::get(), i, label, m_connect, m_hits, VisQueuedTwig::m_onCmsException, VisQueuedTwig::m_onError, VisQueuedTwig::m_onException, VisQueuedTwig::m_onUnhandledException, DetId::Muon, Ig3DBaseRep::node(), VisQueuedTwig::state(), VisEventSetupService::toGlobal(), track, DetId::Tracker, VisQueuedTwig::update(), VisActiveConfigurable< T >::value(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().
00368 { 00369 // Get debugging dump. 00370 VisQueuedTwig::update (rep); 00371 00372 if (! m_hits.empty ()) 00373 { 00374 SoMaterial *mat = new SoMaterial; 00375 mat->diffuseColor.setValue (0.0, 0.0, 1.0); 00376 mat->emissiveColor.setValue(0.0, 0.0, 1.0); 00377 00378 SoDrawStyle *drawStyle = new SoDrawStyle; 00379 drawStyle->pointSize = 6.0; 00380 00381 SoSeparator *sep = new SoSeparator; // global 00382 sep->addChild (mat); 00383 sep->addChild (drawStyle); 00384 00385 VisEventSetupService *esService = VisEventSetupService::get (state ()); 00386 ASSERT (esService); 00387 00388 try 00389 { 00390 typedef std::map<int, std::vector <SbVec3f> > VisParticleMap; 00391 VisParticleMap pmap; 00392 00393 for (std::vector<PSimHit>::const_iterator i = m_hits.begin (); i != m_hits.end (); ++i) 00394 { 00395 int ptype = (*i).trackId (); 00396 00397 VisParticleMap::iterator mit = pmap.find (ptype); 00398 00399 if (mit == pmap.end ()) 00400 { 00401 std::vector<SbVec3f> vec; 00402 bool done = pmap.insert (VisParticleMap::value_type (ptype, vec)).second; 00403 if (done) 00404 { 00405 mit = pmap.find (ptype); 00406 } 00407 } 00408 00409 if (mit == pmap.end ()) 00410 { 00411 throw std::runtime_error ("Cannot find particle type in the map!"); 00412 } 00413 DetId id = (*i).detUnitId (); 00414 if (! id.null () && (id.det () == DetId::Tracker || id.det () == DetId::Muon)) 00415 { 00416 GlobalPoint pos = esService->toGlobal ((*i).localPosition (), id); 00417 (mit->second).push_back (SbVec3f (pos.x () / 100.0, pos.y () / 100.0, pos.z () / 100.0)); 00418 } 00419 } 00420 if (! pmap.empty ()) 00421 { 00422 for (VisParticleMap::const_iterator mit = pmap.begin (); mit != pmap.end (); ++mit) 00423 { 00424 SoSeparator *trackSep = new SoSeparator; 00425 00426 QString label = QString ("ID = %1") 00427 .arg (mit->first); 00428 00429 trackSep->setName (Ig3DBaseModel::encode (label.prepend ("Track with "))); 00430 00431 SoVertexProperty *vertices = new SoVertexProperty; 00432 int nVrtx = 0; 00433 00434 for (std::vector<SbVec3f>::const_iterator vit = (mit->second).begin (); vit != (mit->second).end (); ++vit) 00435 { 00436 vertices->vertex.set1Value (nVrtx++, (*vit)); 00437 } 00438 00439 vertices->vertex.setNum (nVrtx); 00440 SoPointSet *points = new SoPointSet; 00441 points->vertexProperty.setValue (vertices); 00442 points->numPoints.setValue (nVrtx); 00443 trackSep->addChild (points); 00444 00445 if (m_connect.value ()) 00446 { 00447 SoLineSet *track = new SoLineSet; 00448 track->vertexProperty.setValue (vertices); 00449 track->numVertices.setValue (nVrtx); 00450 trackSep->addChild (track); 00451 } 00452 00453 sep->addChild (trackSep); 00454 } 00455 } 00456 } 00457 catch (cms::Exception& e) 00458 { 00459 e.append (" from VisPSimHitTwig::update(IgRPhiRep*) "); 00460 e.append (this->name ()); 00461 00462 if (this->m_onCmsException) 00463 this->m_onCmsException (&e); 00464 } 00465 catch (lat::Error &e) 00466 { 00467 if (this->m_onError) 00468 this->m_onError (&e); 00469 } 00470 catch (std::exception &e) 00471 { 00472 if (this->m_onException) 00473 this->m_onException (&e); 00474 } 00475 catch (...) 00476 { 00477 if (this->m_onUnhandledException) 00478 this->m_onUnhandledException (); 00479 } 00480 rep->node ()->addChild (sep); 00481 } 00482 }
Reimplemented from VisQueuedTwig.
Definition at line 360 of file VisPSimHitTwig.cc.
References VisQueuedTwig::update().
00361 { 00362 // Get debugging dump. 00363 VisQueuedTwig::update (rep); 00364 }
Reimplemented from VisQueuedTwig.
Definition at line 240 of file VisPSimHitTwig.cc.
References cms::Exception::append(), ASSERT, Ig3DBaseRep::clear(), e, Ig3DBaseModel::encode(), end, exception, DBSPlugin::get(), i, label, m_connect, m_hits, VisQueuedTwig::m_onCmsException, VisQueuedTwig::m_onError, VisQueuedTwig::m_onException, VisQueuedTwig::m_onUnhandledException, DetId::Muon, Ig3DBaseRep::node(), VisQueuedTwig::state(), VisEventSetupService::toGlobal(), track, DetId::Tracker, VisQueuedTwig::update(), VisActiveConfigurable< T >::value(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().
00241 { 00242 // Get debugging dump. 00243 VisQueuedTwig::update (rep); 00244 IgQtLock (); 00245 rep->clear (); 00246 00247 if (! m_hits.empty ()) 00248 { 00249 SoMaterial *mat = new SoMaterial; 00250 mat->diffuseColor.setValue (0.0, 0.0, 1.0); 00251 mat->emissiveColor.setValue(0.0, 0.0, 1.0); 00252 00253 SoDrawStyle *drawStyle = new SoDrawStyle; 00254 drawStyle->pointSize = 6.0; 00255 00256 SoSeparator *sep = new SoSeparator; // global 00257 sep->addChild (mat); 00258 sep->addChild (drawStyle); 00259 00260 VisEventSetupService *esService = VisEventSetupService::get (state ()); 00261 ASSERT (esService); 00262 00263 try 00264 { 00265 typedef std::map<int, std::vector <SbVec3f> > VisParticleMap; 00266 VisParticleMap pmap; 00267 00268 for (std::vector<PSimHit>::const_iterator i = m_hits.begin (); i != m_hits.end (); ++i) 00269 { 00270 int ptype = (*i).trackId (); 00271 00272 VisParticleMap::iterator mit = pmap.find (ptype); 00273 00274 if (mit == pmap.end ()) 00275 { 00276 std::vector<SbVec3f> vec; 00277 bool done = pmap.insert (VisParticleMap::value_type (ptype, vec)).second; 00278 if (done) 00279 { 00280 mit = pmap.find (ptype); 00281 } 00282 } 00283 00284 if (mit == pmap.end ()) 00285 { 00286 throw std::runtime_error ("Cannot find particle type in the map!"); 00287 } 00288 DetId id = (*i).detUnitId (); 00289 if (! id.null () && (id.det () == DetId::Tracker || id.det () == DetId::Muon)) 00290 { 00291 GlobalPoint pos = esService->toGlobal ((*i).localPosition (), id); 00292 (mit->second).push_back (SbVec3f (pos.x () / 100.0, pos.y () / 100.0, pos.z () / 100.0)); 00293 } 00294 } 00295 if (! pmap.empty ()) 00296 { 00297 for (VisParticleMap::const_iterator mit = pmap.begin (); mit != pmap.end (); ++mit) 00298 { 00299 SoSeparator *trackSep = new SoSeparator; 00300 00301 QString label = QString ("ID = %1") 00302 .arg (mit->first); 00303 00304 trackSep->setName (Ig3DBaseModel::encode (label.prepend ("Track with "))); 00305 00306 SoVertexProperty *vertices = new SoVertexProperty; 00307 int nVrtx = 0; 00308 00309 for (std::vector<SbVec3f>::const_iterator vit = (mit->second).begin (); vit != (mit->second).end (); ++vit) 00310 { 00311 vertices->vertex.set1Value (nVrtx++, (*vit)); 00312 } 00313 00314 vertices->vertex.setNum (nVrtx); 00315 SoPointSet *points = new SoPointSet; 00316 points->vertexProperty.setValue (vertices); 00317 points->numPoints.setValue (nVrtx); 00318 trackSep->addChild (points); 00319 00320 if (m_connect.value ()) 00321 { 00322 SoLineSet *track = new SoLineSet; 00323 track->vertexProperty.setValue (vertices); 00324 track->numVertices.setValue (nVrtx); 00325 trackSep->addChild (track); 00326 } 00327 00328 sep->addChild (trackSep); 00329 } 00330 } 00331 } 00332 catch (cms::Exception& e) 00333 { 00334 e.append (" from VisPSimHitTwig::update(Ig3DRep*) "); 00335 e.append (this->name ()); 00336 00337 if (this->m_onCmsException) 00338 this->m_onCmsException (&e); 00339 } 00340 catch (lat::Error &e) 00341 { 00342 if (this->m_onError) 00343 this->m_onError (&e); 00344 } 00345 catch (std::exception &e) 00346 { 00347 if (this->m_onException) 00348 this->m_onException (&e); 00349 } 00350 catch (...) 00351 { 00352 if (this->m_onUnhandledException) 00353 this->m_onUnhandledException (); 00354 } 00355 rep->node ()->addChild (sep); 00356 } 00357 }
Reimplemented from VisQueuedTwig.
Definition at line 165 of file VisPSimHitTwig.cc.
References e, exception, i, m_hits, VisQueuedTwig::m_onCmsException, VisQueuedTwig::m_onError, VisQueuedTwig::m_onException, VisQueuedTwig::m_onUnhandledException, m_text, IgTextRep::setText(), and VisQueuedTwig::update().
00166 { 00167 // Get debugging dump. 00168 VisQueuedTwig::update (rep); 00169 00170 // Prepare property description. 00171 std::ostringstream text; 00172 text << "Total " << m_hits.size () << " hits from "; 00173 text << m_text << "<br>"; 00174 00175 text << "<br>"; 00176 00177 text << "<table width='100%' border=1>" 00178 << "<TR align = center>" 00179 << "<TH>Number</TH>" 00180 << "<TH>Position</TH>" 00181 << "<TH>Energy loss</TH>" 00182 << "<TH>DetID</TH>" 00183 << "<TH>Track ID</TH>" 00184 << "<TH>Time of flight</TH>" 00185 << "<TH>Particle type</TH>" 00186 << "<TH>Process type</TH>" 00187 << "</TR>"; 00188 text << setiosflags (std::ios::showpoint | std::ios::fixed); 00189 text.setf (std::ios::right, std::ios::adjustfield); 00190 00191 if ((! m_hits.empty ())) 00192 { 00193 int nHits = 0; 00194 try 00195 { 00196 for (std::vector<PSimHit>::const_iterator i = m_hits.begin (); i != m_hits.end (); ++i) 00197 { 00198 text << "<TR align = right>" 00199 << "<TD>" << std::setw (3) << nHits++ << "</TD>" 00200 << "<TD>" << (*i).localPosition ().x () << ", " 00201 << (*i).localPosition ().y () << ", " 00202 << (*i).localPosition ().z () << "; Phi "<< (*i).localPosition ().phi () << "</TD>" 00203 << "<TD>" << std::setw (6) << std::setprecision (3) << (*i).energyLoss () << "</TD>" 00204 << "<TD>" << std::setw (6) << std::setprecision (3) << (*i).detUnitId () << "</TD>" 00205 << "<TD>" << std::setw (6) << std::setprecision (3) << (*i).trackId () << "</TD>" 00206 << "<TD>" << std::setw (6) << std::setprecision (3) << (*i).timeOfFlight () << "</TD>" 00207 << "<TD>" << std::setw (6) << std::setprecision (3) << (*i).particleType () << "</TD>" 00208 << "<TD>" << std::setw (6) << std::setprecision (3) << (*i).processType () << "</TD></TR>"; 00209 } 00210 } 00211 catch (cms::Exception& e) 00212 { 00213 if (this->m_onCmsException) 00214 this->m_onCmsException (&e); 00215 } 00216 catch (lat::Error &e) 00217 { 00218 if (this->m_onError) 00219 this->m_onError (&e); 00220 } 00221 catch (std::exception &e) 00222 { 00223 if (this->m_onException) 00224 this->m_onException (&e); 00225 } 00226 catch (...) 00227 { 00228 if (this->m_onUnhandledException) 00229 this->m_onUnhandledException (); 00230 } 00231 text << "</table>"; 00232 } 00233 00234 // Send it over. 00235 IgQtLock (); 00236 rep->setText (text.str ()); 00237 }
VisSimHitConnect VisPSimHitTwig::m_connect [private] |
std::string VisPSimHitTwig::m_friendlyName [private] |
std::vector<PSimHit> VisPSimHitTwig::m_hits [private] |
std::string VisPSimHitTwig::m_instanceName [private] |
std::string VisPSimHitTwig::m_moduleLabel [private] |
std::string VisPSimHitTwig::m_processName [private] |
std::string VisPSimHitTwig::m_text [private] |