#include <VisSimulation/VisSimHits/interface/VisSimTrackTwig.h>
Public Member Functions | |
virtual void | cutChanged (void) |
virtual void | onNewEvent (const edm::Event &event, const edm::EventSetup &eventSetup) |
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) |
VisSimTrackTwig (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 | |
VisSimTrackAnnotation | m_annot |
VisPtCut | m_cut |
std::string | m_friendlyName |
std::string | m_instanceName |
std::string | m_moduleLabel |
std::string | m_processName |
std::string | m_text |
VisSimTrackTime | m_time |
std::vector< SimTrack > | m_tracks |
std::vector< SimVertex > | m_vertices |
Definition at line 23 of file VisSimTrackTwig.h.
VisSimTrackTwig::VisSimTrackTwig | ( | 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 59 of file VisSimTrackTwig.cc.
References createThisTwig(), edm::TypeID::friendlyClassName(), DBSPlugin::get(), and VisTwigFactroyService::registerTwig().
00064 : VisQueuedTwig (state, parent, name), 00065 m_text (name), 00066 m_friendlyName (friendlyName), 00067 m_moduleLabel (moduleLabel), 00068 m_instanceName (instanceName), 00069 m_processName (processName), 00070 m_cut (state, lat::CreateCallback (this, &VisSimTrackTwig::cutChanged)), 00071 m_annot (state, lat::CreateCallback (this, &VisSimTrackTwig::cutChanged)), 00072 m_time (state, lat::CreateCallback (this, &VisSimTrackTwig::cutChanged)) 00073 { 00074 VisTwigFactroyService *tfService = VisTwigFactroyService::get (state); 00075 if (! tfService) 00076 { 00077 tfService = new VisTwigFactroyService (state); 00078 } 00079 edm::TypeID simTracksID (typeid (edm::SimTrackContainer)); 00080 tfService->registerTwig (simTracksID.friendlyClassName (), &createThisTwig); 00081 }
Definition at line 84 of file VisSimTrackTwig.cc.
References IgRepSet::invalidate(), and IgTwig::SELF_MASK.
00085 { IgRepSet::invalidate (this, SELF_MASK); }
void VisSimTrackTwig::onNewEvent | ( | const edm::Event & | event, | |
const edm::EventSetup & | eventSetup | |||
) | [virtual] |
Reimplemented from VisQueuedTwig.
Definition at line 88 of file VisSimTrackTwig.cc.
References arg, c, e, exception, i, edm::Event::id(), m_friendlyName, m_instanceName, m_moduleLabel, VisQueuedTwig::m_onCmsException, VisQueuedTwig::m_onError, VisQueuedTwig::m_onException, VisQueuedTwig::m_onUnhandledException, m_processName, m_text, m_tracks, m_vertices, VisQueuedTwig::onBaseInvalidate(), and VisQueuedTwig::onNewEvent().
00090 { 00091 // Get debugging dump. 00092 VisQueuedTwig::onNewEvent (event, eventSetup); 00093 00094 m_tracks.clear (); 00095 m_vertices.clear (); 00096 00097 m_text = (QString ("Run # %1, event # %2") 00098 .arg (event.id ().run ()) 00099 .arg (event.id ().event ()).latin1 ()); 00100 00101 std::vector<edm::Handle<edm::SimTrackContainer> > trackCollections; 00102 std::vector<edm::Handle<edm::SimVertexContainer> > vertexCollections; 00103 00104 try 00105 { 00106 if ((! m_friendlyName.empty ()) || (! m_moduleLabel.empty ()) || (! m_instanceName.empty ()) || (! m_processName.empty ())) 00107 { 00108 VisEventSelector visSel (m_friendlyName, m_moduleLabel, m_instanceName, m_processName); 00109 event.getMany (visSel, trackCollections); 00110 } 00111 else 00112 { 00113 event.getManyByType (trackCollections); 00114 } 00115 event.getManyByType (vertexCollections); 00116 } 00117 catch (cms::Exception& e) 00118 { 00119 if (this->m_onCmsException) 00120 this->m_onCmsException (&e); 00121 } 00122 catch (lat::Error &e) 00123 { 00124 if (this->m_onError) 00125 this->m_onError (&e); 00126 } 00127 catch (std::exception &e) 00128 { 00129 if (this->m_onException) 00130 this->m_onException (&e); 00131 } 00132 catch (...) 00133 { 00134 if (this->m_onUnhandledException) 00135 this->m_onUnhandledException (); 00136 } 00137 00138 if (! trackCollections.empty ()) 00139 { 00140 for (std::vector<edm::Handle<edm::SimTrackContainer> >::iterator i = trackCollections.begin (), iEnd = trackCollections.end (); 00141 i != iEnd; ++i) 00142 { 00143 const edm::SimTrackContainer& c = *(*i); 00144 00145 for (std::vector<SimTrack>::const_iterator isimt = c.begin (), isimtEnd = c.end (); 00146 isimt != isimtEnd; ++isimt) 00147 { 00148 m_tracks.push_back ((*isimt)); 00149 } 00150 } 00151 } 00152 00153 if (! vertexCollections.empty ()) 00154 { 00155 for (std::vector<edm::Handle<edm::SimVertexContainer> >::iterator i = vertexCollections.begin (), iEnd = vertexCollections.end (); 00156 i != iEnd; ++i) 00157 { 00158 const edm::SimVertexContainer& c = *(*i); 00159 00160 for (std::vector<SimVertex>::const_iterator isimv = c.begin (), isimvEnd = c.end (); 00161 isimv != isimvEnd; ++isimv) 00162 { 00163 m_vertices.push_back ((*isimv)); 00164 } 00165 } 00166 } 00167 00168 VisQueuedTwig::onBaseInvalidate (); 00169 }
Reimplemented from VisQueuedTwig.
Definition at line 724 of file VisSimTrackTwig.cc.
References Ig3DBaseRep::clear(), IgSoSimpleTrajectory::controlPoints, e, exception, IgParticleChar::getByName(), i, IgSoIdealTrack::initialise(), label, m_annot, m_cut, VisQueuedTwig::m_onCmsException, VisQueuedTwig::m_onError, VisQueuedTwig::m_onException, VisQueuedTwig::m_onUnhandledException, m_time, m_tracks, m_vertices, IgSoSimpleTrajectory::markerPoints, Ig3DBaseRep::node(), IgSoIdealTrack::radius, track, VisQueuedTwig::update(), and VisActiveConfigurable< T >::value().
00725 { 00726 // Get debugging dump. 00727 VisQueuedTwig::update (rep); 00728 IgQtLock (); 00729 rep->clear (); 00730 00731 if ((! m_tracks.empty ())) 00732 { 00733 SoSeparator *sep = new SoSeparator; // global 00734 00735 try 00736 { 00737 for (std::vector<SimTrack>::const_iterator i = m_tracks.begin (), iEnd = m_tracks.end (); i != iEnd; ++i) 00738 { 00739 float pt = (*i).momentum ().Pt(); 00740 if (pt > m_cut.value ()) 00741 { 00742 double x0 = 0.0; 00743 double y0 = 0.0; 00744 double z0 = 0.0; 00745 00746 if (! (*i).noVertex ()) 00747 { 00748 int vInd = (*i).vertIndex (); 00749 x0 = (m_vertices.at (vInd)).position ().x () / 100.0; 00750 y0 = (m_vertices.at (vInd)).position ().y () / 100.0; 00751 z0 = (m_vertices.at (vInd)).position ().z () / 100.0; 00752 } 00753 00754 IgSoIdealTrack *kit = new IgSoIdealTrack; 00755 00756 SoSeparator *labelSep = new SoSeparator; 00757 QString label; 00758 SoText2 *trackLabel = new SoText2; 00759 SoTranslation *trackLabelTranslation = new SoTranslation; 00760 00761 SbVec3f pos = SbVec3f ((*i).trackerSurfacePosition ().x () / 100.0, 00762 (*i).trackerSurfacePosition ().y () / 100.0, 00763 (*i).trackerSurfacePosition ().z () / 100.0); 00764 trackLabelTranslation->translation = pos; 00765 00766 labelSep->addChild (trackLabelTranslation); 00767 labelSep->addChild (trackLabel); 00768 00769 switch ((*i).type ()) 00770 { 00771 case 13: 00772 kit->initialise (x0, y0, z0, 00773 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00774 m_time.value (), IgParticleChar::getByName ("muon")); 00775 kit->radius = 25.0; 00776 label = QString ("mu %1 GeV").arg (pt, 0, 'g', 2); 00777 trackLabel->string = label.latin1 (); 00778 00779 sep->addChild (kit); 00780 break; 00781 case -13: 00782 kit->initialise (x0, y0, z0, 00783 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00784 m_time.value (), IgParticleChar::getByName ("antimuon")); 00785 kit->radius = 25.0; 00786 00787 label = QString ("mu- %1 GeV").arg (pt, 0, 'g', 2); 00788 trackLabel->string = label.latin1 (); 00789 00790 sep->addChild (kit); 00791 break; 00792 case 11: 00793 kit->initialise (x0, y0, z0, 00794 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00795 m_time.value (), IgParticleChar::getByName ("electron")); 00796 00797 label = QString ("e- %1 GeV").arg (pt, 0, 'g', 2); 00798 trackLabel->string = label.latin1 (); 00799 00800 sep->addChild (kit); 00801 break; 00802 case -11: 00803 kit->initialise (x0, y0, z0, 00804 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00805 m_time.value (), IgParticleChar::getByName ("positron")); 00806 00807 label = QString ("e+ %1 GeV").arg (pt, 0, 'g', 2); 00808 trackLabel->string = label.latin1 (); 00809 00810 sep->addChild (kit); 00811 break; 00812 case 211: 00813 kit->initialise (x0, y0, z0, 00814 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00815 m_time.value (), IgParticleChar::getByName ("antipion")); 00816 00817 label = QString ("pi+ %1 GeV").arg (pt, 0, 'g', 2); 00818 trackLabel->string = label.latin1 (); 00819 00820 sep->addChild (kit); 00821 break; 00822 case -211: 00823 kit->initialise (x0, y0, z0, 00824 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00825 m_time.value (), IgParticleChar::getByName ("pion")); 00826 00827 label = QString ("pi- %1 GeV").arg (pt, 0, 'g', 2); 00828 trackLabel->string = label.latin1 (); 00829 00830 sep->addChild (kit); 00831 break; 00832 case 2212: 00833 kit->initialise (x0, y0, z0, 00834 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00835 m_time.value (), IgParticleChar::getByName ("proton")); 00836 00837 label = QString ("p %1 GeV").arg (pt, 0, 'g', 2); 00838 trackLabel->string = label.latin1 (); 00839 00840 sep->addChild (kit); 00841 break; 00842 case -2212: 00843 kit->initialise (x0, y0, z0, 00844 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00845 m_time.value (), IgParticleChar::getByName ("antiproton")); 00846 00847 label = QString ("pbar %1 GeV").arg (pt, 0, 'g', 2); 00848 trackLabel->string = label.latin1 (); 00849 00850 sep->addChild (kit); 00851 break; 00852 case 130: 00853 kit->initialise (x0, y0, z0, 00854 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00855 m_time.value (), IgParticleChar::getByName ("kplus")); 00856 00857 label = QString ("Kl %1 GeV").arg (pt, 0, 'g', 2); 00858 break; 00859 case 310: 00860 kit->initialise (x0, y0, z0, 00861 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00862 m_time.value (), IgParticleChar::getByName ("kplus")); 00863 00864 label = QString ("Ks %1 GeV").arg (pt, 0, 'g', 2); 00865 break; 00866 case 321: 00867 kit->initialise (x0, y0, z0, 00868 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00869 m_time.value (), IgParticleChar::getByName ("kplus")); 00870 00871 label = QString ("K+ %1 GeV").arg (pt, 0, 'g', 2); 00872 trackLabel->string = label.latin1 (); 00873 00874 sep->addChild (kit); 00875 break; 00876 case -321: 00877 kit->initialise (x0, y0, z0, 00878 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00879 m_time.value (), IgParticleChar::getByName ("kminus")); 00880 00881 label = QString ("K- %1 GeV").arg (pt, 0, 'g', 2); 00882 trackLabel->string = label.latin1 (); 00883 00884 sep->addChild (kit); 00885 break; 00886 case 3312: 00887 kit->initialise (x0, y0, z0, 00888 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00889 m_time.value (), IgParticleChar::getByName ("ximinus")); 00890 00891 label = QString ("Xi- %1 GeV").arg (pt, 0, 'g', 2); 00892 trackLabel->string = label.latin1 (); 00893 00894 sep->addChild (kit); 00895 break; 00896 case -3122: 00897 break; 00898 case 2112: //"neutron" 00899 case -2112: //"antineutron" 00900 case 22: //"gamma" 00901 { 00902 SoSeparator *gammas = new SoSeparator; 00903 SoMaterial *gammaMaterial = new SoMaterial; 00904 gammaMaterial->ambientColor.setValue (0.000, 0.000, 0.000); 00905 gammaMaterial->diffuseColor.setValue (1.000, 1.000, 0.000); 00906 gammaMaterial->emissiveColor.setValue (1.000, 1.000, 0.000); 00907 gammaMaterial->specularColor.setValue (0.000, 0.000, 0.000); 00908 gammaMaterial->shininess = 0.0; 00909 gammaMaterial->transparency = 0.0; 00910 gammas->addChild (gammaMaterial); 00911 00912 IgSoSimpleTrajectory *track = new IgSoSimpleTrajectory; 00913 00914 track->controlPoints.set1Value (0, SbVec3f (x0, y0, z0)); 00915 track->markerPoints.set1Value (0, SbVec3f (x0, y0, z0)); 00916 00917 track->controlPoints.set1Value (1, pos); 00918 track->markerPoints.set1Value (1, pos); 00919 gammas->addChild (track); 00920 00921 sep->addChild (gammas); 00922 00923 break; 00924 } 00925 default: 00926 break; 00927 } 00928 if (m_annot.value () == true) 00929 { 00930 sep->addChild (labelSep); 00931 } 00932 } 00933 } 00934 } 00935 catch (cms::Exception& e) 00936 { 00937 if (this->m_onCmsException) 00938 this->m_onCmsException (&e); 00939 } 00940 catch (lat::Error &e) 00941 { 00942 if (this->m_onError) 00943 this->m_onError (&e); 00944 } 00945 catch (std::exception &e) 00946 { 00947 if (this->m_onException) 00948 this->m_onException (&e); 00949 } 00950 catch (...) 00951 { 00952 if (this->m_onUnhandledException) 00953 this->m_onUnhandledException (); 00954 } 00955 00956 rep->node ()->addChild (sep); 00957 } 00958 }
Reimplemented from VisQueuedTwig.
Definition at line 485 of file VisSimTrackTwig.cc.
References Ig3DBaseRep::clear(), IgSoSimpleTrajectory::controlPoints, e, exception, IgParticleChar::getByName(), i, IgSoIdealTrack::initialise(), label, m_annot, m_cut, VisQueuedTwig::m_onCmsException, VisQueuedTwig::m_onError, VisQueuedTwig::m_onException, VisQueuedTwig::m_onUnhandledException, m_time, m_tracks, m_vertices, IgSoSimpleTrajectory::markerPoints, Ig3DBaseRep::node(), IgSoIdealTrack::radius, track, VisQueuedTwig::update(), and VisActiveConfigurable< T >::value().
00486 { 00487 // Get debugging dump. 00488 VisQueuedTwig::update (rep); 00489 IgQtLock (); 00490 rep->clear (); 00491 00492 if ((! m_tracks.empty ())) 00493 { 00494 SoSeparator *sep = new SoSeparator; // global 00495 00496 try 00497 { 00498 for (std::vector<SimTrack>::const_iterator i = m_tracks.begin (), iEnd = m_tracks.end (); i != iEnd; ++i) 00499 { 00500 float pt = (*i).momentum ().Pt(); 00501 if (pt > m_cut.value ()) 00502 { 00503 double x0 = 0.0; 00504 double y0 = 0.0; 00505 double z0 = 0.0; 00506 00507 if (! (*i).noVertex ()) 00508 { 00509 int vInd = (*i).vertIndex (); 00510 x0 = (m_vertices.at (vInd)).position ().x () / 100.0; 00511 y0 = (m_vertices.at (vInd)).position ().y () / 100.0; 00512 z0 = (m_vertices.at (vInd)).position ().z () / 100.0; 00513 } 00514 00515 IgSoIdealTrack *kit = new IgSoIdealTrack; 00516 00517 00518 SoSeparator *labelSep = new SoSeparator; 00519 QString label; 00520 SoText2 *trackLabel = new SoText2; 00521 SoTranslation *trackLabelTranslation = new SoTranslation; 00522 00523 SbVec3f pos = SbVec3f ((*i).trackerSurfacePosition ().x () / 100.0, 00524 (*i).trackerSurfacePosition ().y () / 100.0, 00525 (*i).trackerSurfacePosition ().z () / 100.0); 00526 trackLabelTranslation->translation = pos; 00527 00528 labelSep->addChild (trackLabelTranslation); 00529 labelSep->addChild (trackLabel); 00530 00531 00532 switch ((*i).type ()) 00533 { 00534 case 13: 00535 kit->initialise (x0, y0, z0, 00536 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00537 m_time.value (), IgParticleChar::getByName ("muon")); 00538 kit->radius = 25.0; 00539 label = QString ("mu %1 GeV").arg (pt, 0, 'g', 2); 00540 trackLabel->string = label.latin1 (); 00541 00542 sep->addChild (kit); 00543 break; 00544 case -13: 00545 kit->initialise (x0, y0, z0, 00546 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00547 m_time.value (), IgParticleChar::getByName ("antimuon")); 00548 kit->radius = 25.0; 00549 00550 label = QString ("mu- %1 GeV").arg (pt, 0, 'g', 2); 00551 trackLabel->string = label.latin1 (); 00552 00553 sep->addChild (kit); 00554 break; 00555 case 11: 00556 kit->initialise (x0, y0, z0, 00557 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00558 m_time.value (), IgParticleChar::getByName ("electron")); 00559 00560 label = QString ("e- %1 GeV").arg (pt, 0, 'g', 2); 00561 trackLabel->string = label.latin1 (); 00562 00563 sep->addChild (kit); 00564 break; 00565 case -11: 00566 kit->initialise (x0, y0, z0, 00567 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00568 m_time.value (), IgParticleChar::getByName ("positron")); 00569 00570 label = QString ("e+ %1 GeV").arg (pt, 0, 'g', 2); 00571 trackLabel->string = label.latin1 (); 00572 00573 sep->addChild (kit); 00574 break; 00575 case 211: 00576 kit->initialise (x0, y0, z0, 00577 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00578 m_time.value (), IgParticleChar::getByName ("antipion")); 00579 00580 label = QString ("pi+ %1 GeV").arg (pt, 0, 'g', 2); 00581 trackLabel->string = label.latin1 (); 00582 00583 sep->addChild (kit); 00584 break; 00585 case -211: 00586 kit->initialise (x0, y0, z0, 00587 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00588 m_time.value (), IgParticleChar::getByName ("pion")); 00589 00590 label = QString ("pi- %1 GeV").arg (pt, 0, 'g', 2); 00591 trackLabel->string = label.latin1 (); 00592 00593 sep->addChild (kit); 00594 break; 00595 case 2212: 00596 kit->initialise (x0, y0, z0, 00597 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00598 m_time.value (), IgParticleChar::getByName ("proton")); 00599 00600 label = QString ("p %1 GeV").arg (pt, 0, 'g', 2); 00601 trackLabel->string = label.latin1 (); 00602 00603 sep->addChild (kit); 00604 break; 00605 case -2212: 00606 kit->initialise (x0, y0, z0, 00607 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00608 m_time.value (), IgParticleChar::getByName ("antiproton")); 00609 00610 label = QString ("pbar %1 GeV").arg (pt, 0, 'g', 2); 00611 trackLabel->string = label.latin1 (); 00612 00613 sep->addChild (kit); 00614 break; 00615 case 130: 00616 kit->initialise (x0, y0, z0, 00617 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00618 m_time.value (), IgParticleChar::getByName ("kplus")); 00619 00620 label = QString ("Kl %1 GeV").arg (pt, 0, 'g', 2); 00621 break; 00622 case 310: 00623 kit->initialise (x0, y0, z0, 00624 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00625 m_time.value (), IgParticleChar::getByName ("kplus")); 00626 00627 label = QString ("Ks %1 GeV").arg (pt, 0, 'g', 2); 00628 break; 00629 case 321: 00630 kit->initialise (x0, y0, z0, 00631 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00632 m_time.value (), IgParticleChar::getByName ("kplus")); 00633 00634 label = QString ("K+ %1 GeV").arg (pt, 0, 'g', 2); 00635 trackLabel->string = label.latin1 (); 00636 00637 sep->addChild (kit); 00638 break; 00639 case -321: 00640 kit->initialise (x0, y0, z0, 00641 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00642 m_time.value (), IgParticleChar::getByName ("kminus")); 00643 00644 label = QString ("K- %1 GeV").arg (pt, 0, 'g', 2); 00645 trackLabel->string = label.latin1 (); 00646 00647 sep->addChild (kit); 00648 break; 00649 case 3312: 00650 kit->initialise (x0, y0, z0, 00651 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00652 m_time.value (), IgParticleChar::getByName ("ximinus")); 00653 00654 label = QString ("Xi- %1 GeV").arg (pt, 0, 'g', 2); 00655 trackLabel->string = label.latin1 (); 00656 00657 sep->addChild (kit); 00658 break; 00659 case -3122: 00660 break; 00661 case 2112: //"neutron" 00662 case -2112: //"antineutron" 00663 case 22: //"gamma" 00664 { 00665 SoSeparator *gammas = new SoSeparator; 00666 SoMaterial *gammaMaterial = new SoMaterial; 00667 gammaMaterial->ambientColor.setValue (0.000, 0.000, 0.000); 00668 gammaMaterial->diffuseColor.setValue (1.000, 1.000, 0.000); 00669 gammaMaterial->emissiveColor.setValue (1.000, 1.000, 0.000); 00670 gammaMaterial->specularColor.setValue (0.000, 0.000, 0.000); 00671 gammaMaterial->shininess = 0.0; 00672 gammaMaterial->transparency = 0.0; 00673 gammas->addChild (gammaMaterial); 00674 00675 IgSoSimpleTrajectory *track = new IgSoSimpleTrajectory; 00676 00677 track->controlPoints.set1Value (0, SbVec3f (x0, y0, z0)); 00678 track->markerPoints.set1Value (0, SbVec3f (x0, y0, z0)); 00679 00680 track->controlPoints.set1Value (1, pos); 00681 track->markerPoints.set1Value (1, pos); 00682 gammas->addChild (track); 00683 00684 sep->addChild (gammas); 00685 00686 break; 00687 } 00688 default: 00689 break; 00690 } 00691 if (m_annot.value () == true) 00692 { 00693 sep->addChild (labelSep); 00694 } 00695 } 00696 } 00697 } 00698 catch (cms::Exception& e) 00699 { 00700 if (this->m_onCmsException) 00701 this->m_onCmsException (&e); 00702 } 00703 catch (lat::Error &e) 00704 { 00705 if (this->m_onError) 00706 this->m_onError (&e); 00707 } 00708 catch (std::exception &e) 00709 { 00710 if (this->m_onException) 00711 this->m_onException (&e); 00712 } 00713 catch (...) 00714 { 00715 if (this->m_onUnhandledException) 00716 this->m_onUnhandledException (); 00717 } 00718 00719 rep->node ()->addChild (sep); 00720 } 00721 }
Reimplemented from VisQueuedTwig.
Definition at line 478 of file VisSimTrackTwig.cc.
References VisQueuedTwig::update().
00479 { 00480 // Get debugging dump. 00481 VisQueuedTwig::update (rep); 00482 }
Reimplemented from VisQueuedTwig.
Definition at line 241 of file VisSimTrackTwig.cc.
References Ig3DBaseRep::clear(), IgSoSimpleTrajectory::controlPoints, e, exception, IgParticleChar::getByName(), i, IgSoIdealTrack::initialise(), label, m_annot, m_cut, VisQueuedTwig::m_onCmsException, VisQueuedTwig::m_onError, VisQueuedTwig::m_onException, VisQueuedTwig::m_onUnhandledException, m_time, m_tracks, m_vertices, IgSoSimpleTrajectory::markerPoints, Ig3DBaseRep::node(), IgSoIdealTrack::radius, track, VisQueuedTwig::update(), and VisActiveConfigurable< T >::value().
00242 { 00243 // Get debugging dump. 00244 VisQueuedTwig::update (rep); 00245 IgQtLock (); 00246 rep->clear (); 00247 00248 if ((! m_tracks.empty ())) 00249 { 00250 SoSeparator *sep = new SoSeparator; // global 00251 00252 try 00253 { 00254 for (std::vector<SimTrack>::const_iterator i = m_tracks.begin (), iEnd = m_tracks.end (); i != iEnd; ++i) 00255 { 00256 float pt = (*i).momentum ().Pt(); 00257 if (pt > m_cut.value ()) 00258 { 00259 double x0 = 0.0; 00260 double y0 = 0.0; 00261 double z0 = 0.0; 00262 00263 if (! (*i).noVertex ()) 00264 { 00265 int vInd = (*i).vertIndex (); 00266 x0 = (m_vertices.at (vInd)).position ().x () / 100.0; 00267 y0 = (m_vertices.at (vInd)).position ().y () / 100.0; 00268 z0 = (m_vertices.at (vInd)).position ().z () / 100.0; 00269 } 00270 00271 IgSoIdealTrack *kit = new IgSoIdealTrack; 00272 00273 SoSeparator *labelSep = new SoSeparator; 00274 QString label; 00275 SoText2 *trackLabel = new SoText2; 00276 SoTranslation *trackLabelTranslation = new SoTranslation; 00277 00278 SbVec3f pos = SbVec3f ((*i).trackerSurfacePosition ().x () / 100.0, 00279 (*i).trackerSurfacePosition ().y () / 100.0, 00280 (*i).trackerSurfacePosition ().z () / 100.0); 00281 trackLabelTranslation->translation = pos; 00282 00283 labelSep->addChild (trackLabelTranslation); 00284 labelSep->addChild (trackLabel); 00285 00286 switch ((*i).type ()) 00287 { 00288 case 13: 00289 kit->initialise (x0, y0, z0, 00290 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00291 m_time.value (), IgParticleChar::getByName ("muon")); 00292 kit->radius = 25.0; 00293 label = QString ("mu %1 GeV").arg (pt, 0, 'g', 2); 00294 trackLabel->string = label.latin1 (); 00295 00296 sep->addChild (kit); 00297 break; 00298 case -13: 00299 kit->initialise (x0, y0, z0, 00300 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00301 m_time.value (), IgParticleChar::getByName ("antimuon")); 00302 kit->radius = 25.0; 00303 00304 label = QString ("mu- %1 GeV").arg (pt, 0, 'g', 2); 00305 trackLabel->string = label.latin1 (); 00306 00307 sep->addChild (kit); 00308 break; 00309 case 11: 00310 kit->initialise (x0, y0, z0, 00311 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00312 m_time.value (), IgParticleChar::getByName ("electron")); 00313 00314 label = QString ("e- %1 GeV").arg (pt, 0, 'g', 2); 00315 trackLabel->string = label.latin1 (); 00316 00317 sep->addChild (kit); 00318 break; 00319 case -11: 00320 kit->initialise (x0, y0, z0, 00321 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00322 m_time.value (), IgParticleChar::getByName ("positron")); 00323 00324 label = QString ("e+ %1 GeV").arg (pt, 0, 'g', 2); 00325 trackLabel->string = label.latin1 (); 00326 00327 sep->addChild (kit); 00328 break; 00329 case 211: 00330 kit->initialise (x0, y0, z0, 00331 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00332 m_time.value (), IgParticleChar::getByName ("antipion")); 00333 00334 label = QString ("pi+ %1 GeV").arg (pt, 0, 'g', 2); 00335 trackLabel->string = label.latin1 (); 00336 00337 sep->addChild (kit); 00338 break; 00339 case -211: 00340 kit->initialise (x0, y0, z0, 00341 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00342 m_time.value (), IgParticleChar::getByName ("pion")); 00343 00344 label = QString ("pi- %1 GeV").arg (pt, 0, 'g', 2); 00345 trackLabel->string = label.latin1 (); 00346 00347 sep->addChild (kit); 00348 break; 00349 case 2212: 00350 kit->initialise (x0, y0, z0, 00351 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00352 m_time.value (), IgParticleChar::getByName ("proton")); 00353 00354 label = QString ("p %1 GeV").arg (pt, 0, 'g', 2); 00355 trackLabel->string = label.latin1 (); 00356 00357 sep->addChild (kit); 00358 break; 00359 case -2212: 00360 kit->initialise (x0, y0, z0, 00361 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00362 m_time.value (), IgParticleChar::getByName ("antiproton")); 00363 00364 label = QString ("pbar %1 GeV").arg (pt, 0, 'g', 2); 00365 trackLabel->string = label.latin1 (); 00366 00367 sep->addChild (kit); 00368 break; 00369 case 130: 00370 kit->initialise (x0, y0, z0, 00371 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00372 m_time.value (), IgParticleChar::getByName ("kplus")); 00373 00374 label = QString ("Kl %1 GeV").arg (pt, 0, 'g', 2); 00375 break; 00376 case 310: 00377 kit->initialise (x0, y0, z0, 00378 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00379 m_time.value (), IgParticleChar::getByName ("kplus")); 00380 00381 label = QString ("Ks %1 GeV").arg (pt, 0, 'g', 2); 00382 break; 00383 case 321: 00384 kit->initialise (x0, y0, z0, 00385 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00386 m_time.value (), IgParticleChar::getByName ("kplus")); 00387 00388 label = QString ("K+ %1 GeV").arg (pt, 0, 'g', 2); 00389 trackLabel->string = label.latin1 (); 00390 00391 sep->addChild (kit); 00392 break; 00393 case -321: 00394 kit->initialise (x0, y0, z0, 00395 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00396 m_time.value (), IgParticleChar::getByName ("kminus")); 00397 00398 label = QString ("K- %1 GeV").arg (pt, 0, 'g', 2); 00399 trackLabel->string = label.latin1 (); 00400 00401 sep->addChild (kit); 00402 break; 00403 case 3312: 00404 kit->initialise (x0, y0, z0, 00405 (*i).momentum ().x (), (*i).momentum ().y (), (*i).momentum ().z (), 00406 m_time.value (), IgParticleChar::getByName ("ximinus")); 00407 00408 label = QString ("Xi- %1 GeV").arg (pt, 0, 'g', 2); 00409 trackLabel->string = label.latin1 (); 00410 00411 sep->addChild (kit); 00412 break; 00413 case -3122: 00414 break; 00415 case 2112: //"neutron" 00416 case -2112: //"antineutron" 00417 case 22: //"gamma" 00418 { 00419 SoSeparator *gammas = new SoSeparator; 00420 SoMaterial *gammaMaterial = new SoMaterial; 00421 gammaMaterial->ambientColor.setValue (0.000, 0.000, 0.000); 00422 gammaMaterial->diffuseColor.setValue (1.000, 1.000, 0.000); 00423 gammaMaterial->emissiveColor.setValue (1.000, 1.000, 0.000); 00424 gammaMaterial->specularColor.setValue (0.000, 0.000, 0.000); 00425 gammaMaterial->shininess = 0.0; 00426 gammaMaterial->transparency = 0.0; 00427 gammas->addChild (gammaMaterial); 00428 00429 IgSoSimpleTrajectory *track = new IgSoSimpleTrajectory; 00430 00431 track->controlPoints.set1Value (0, SbVec3f (x0, y0, z0)); 00432 track->markerPoints.set1Value (0, SbVec3f (x0, y0, z0)); 00433 00434 track->controlPoints.set1Value (1, pos); 00435 track->markerPoints.set1Value (1, pos); 00436 gammas->addChild (track); 00437 00438 sep->addChild (gammas); 00439 00440 break; 00441 } 00442 default: 00443 break; 00444 } 00445 if (m_annot.value () == true) 00446 { 00447 sep->addChild (labelSep); 00448 } 00449 } 00450 } 00451 } 00452 catch (cms::Exception& e) 00453 { 00454 if (this->m_onCmsException) 00455 this->m_onCmsException (&e); 00456 } 00457 catch (lat::Error &e) 00458 { 00459 if (this->m_onError) 00460 this->m_onError (&e); 00461 } 00462 catch (std::exception &e) 00463 { 00464 if (this->m_onException) 00465 this->m_onException (&e); 00466 } 00467 catch (...) 00468 { 00469 if (this->m_onUnhandledException) 00470 this->m_onUnhandledException (); 00471 } 00472 00473 rep->node ()->addChild (sep); 00474 } 00475 }
Reimplemented from VisQueuedTwig.
Definition at line 172 of file VisSimTrackTwig.cc.
References e, exception, i, m_cut, VisQueuedTwig::m_onCmsException, VisQueuedTwig::m_onError, VisQueuedTwig::m_onException, VisQueuedTwig::m_onUnhandledException, m_tracks, IgTextRep::setText(), VisQueuedTwig::update(), and VisActiveConfigurable< T >::value().
00173 { 00174 // Get debugging dump. 00175 VisQueuedTwig::update (rep); 00176 00177 // Prepare property description. 00178 std::ostringstream text; 00179 text << "Total " << m_tracks.size () << " sim tracks.<br>"; 00180 text << "Above " << m_cut.value () << " GeV: <br>"; 00181 00182 text << "<table width='100%' border=1>" 00183 << "<TR align = center>" 00184 << "<TH>Number</TH>" 00185 << "<TH>Track ID</TH>" 00186 << "<TH>Momentum</TH>" 00187 << "<TH>Hep PDT code</TH>" 00188 << "<TH>Vertex ID</TH>" 00189 << "</TR>"; 00190 text << setiosflags (std::ios::showpoint | std::ios::fixed); 00191 text.setf (std::ios::right, std::ios::adjustfield); 00192 00193 if ((! m_tracks.empty ())) 00194 { 00195 int nTracks = 0; 00196 try 00197 { 00198 for (std::vector<SimTrack>::const_iterator i = m_tracks.begin (), iEnd = m_tracks.end (); i != iEnd; ++i) 00199 { 00200 float pt = (*i).momentum ().Pt(); 00201 if (pt > m_cut.value ()) 00202 { 00203 text << "<TR align = right>" 00204 << "<TD>" << std::setw (3) << nTracks++ << "</TD>" 00205 << "<TD>" << std::setw (3) << double ((*i).trackId ()) << "</TD>" 00206 << "<TD>" << std::setw (3) << pt << "</TD>" 00207 << "<TD>" << std::setw (3) << (*i).type () << "</TD>" 00208 << "<TD>" << std::setw (3) << (*i).vertIndex () << "</TD></TR>"; 00209 } 00210 } 00211 } 00212 catch (cms::Exception& e) 00213 { 00214 if (this->m_onCmsException) 00215 this->m_onCmsException (&e); 00216 } 00217 catch (lat::Error &e) 00218 { 00219 if (this->m_onError) 00220 this->m_onError (&e); 00221 } 00222 catch (std::exception &e) 00223 { 00224 if (this->m_onException) 00225 this->m_onException (&e); 00226 } 00227 catch (...) 00228 { 00229 if (this->m_onUnhandledException) 00230 this->m_onUnhandledException (); 00231 } 00232 } 00233 text << "</table>"; 00234 00235 // Send it over. 00236 IgQtLock (); 00237 rep->setText (text.str ()); 00238 }
VisPtCut VisSimTrackTwig::m_cut [private] |
std::string VisSimTrackTwig::m_friendlyName [private] |
std::string VisSimTrackTwig::m_instanceName [private] |
std::string VisSimTrackTwig::m_moduleLabel [private] |
std::string VisSimTrackTwig::m_processName [private] |
std::string VisSimTrackTwig::m_text [private] |
VisSimTrackTime VisSimTrackTwig::m_time [private] |
std::vector<SimTrack> VisSimTrackTwig::m_tracks [private] |
std::vector<SimVertex> VisSimTrackTwig::m_vertices [private] |