00001
00002
00003 #include "VisFramework/VisEventSetup/interface/VisTrackerGeometryTwig.h"
00004 #include "VisFramework/VisEventSetup/interface/VisEventSetupService.h"
00005 #include "Iguana/Models/interface/IgTextRep.h"
00006 #include "Iguana/GLModels/interface/Ig3DRep.h"
00007 #include "Iguana/GLModels/interface/IgLegoRep.h"
00008 #include "Iguana/GLModels/interface/IgRPhiRep.h"
00009 #include "Iguana/GLModels/interface/IgRZRep.h"
00010 #include "Iguana/Studio/interface/IgQtLock.h"
00011 #include <classlib/utils/DebugAids.h>
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 VisTrackerGeometryTwig::VisTrackerGeometryTwig (IgState *state, IgTwig *parent,
00024 const std::string &name )
00025 : VisQueuedTwig (state, parent, name),
00026 m_3dDet (NULL),
00027 m_rzDet (NULL),
00028 m_rphiDet (NULL),
00029 m_3Ddone (false),
00030 m_rzdone (false),
00031 m_rphidone (false),
00032 m_annotate (state, lat::CreateCallback (this, &VisTrackerGeometryTwig::invalidate))
00033 {}
00034
00036 VisTrackerGeometryTwig::~VisTrackerGeometryTwig (void)
00037 {
00038 if (m_3dDet != NULL) m_3dDet->unref ();
00039 if (m_rzDet != NULL) m_rzDet->unref ();
00040 if (m_rphiDet != NULL) m_rphiDet->unref ();
00041 }
00042
00043 void
00044 VisTrackerGeometryTwig::invalidate (void)
00045 {
00046 if (m_3dDet != NULL) m_3dDet->unref ();
00047 if (m_rzDet != NULL) m_rzDet->unref ();
00048 if (m_rphiDet != NULL) m_rphiDet->unref ();
00049 m_3Ddone = false;
00050 m_rzdone = false;
00051 m_rphidone = false;
00052
00053 VisQueuedTwig::onBaseInvalidate ();
00054 }
00055
00056 void
00057 VisTrackerGeometryTwig::onNewEvent (const edm::Event &event,
00058 const edm::EventSetup &eventSetup)
00059 {
00060
00061 VisQueuedTwig::onNewEvent (event, eventSetup);
00062
00063 VisEventSetupService *esService = VisEventSetupService::get (state ());
00064 ASSERT (esService);
00065
00066 if (esService->trackerGeomChanged ())
00067 invalidate ();
00068 }
00069
00070 void
00071 VisTrackerGeometryTwig::update (IgTextRep *rep)
00072 {
00073
00074 VisQueuedTwig::update (rep);
00075
00076
00077 std::ostringstream text;
00078 text << "CMS Tracker Geometry: ";
00079 text << this->name () << "<br>";
00080
00081 text << "<table width='100%' border=1>"
00082 << "<TR align = center>"
00083 << "<TH>#</TH>"
00084 << "<TH>Det ID</TH>"
00085 << "<TH>Position</TH>"
00086 << "</TR>";
00087
00088 VisEventSetupService *esService = VisEventSetupService::get (state ());
00089 ASSERT (esService);
00090
00091 text << esService->trackerTextRep (this->name ());
00092 text << "</table>";
00093
00094 IgQtLock ();
00095 rep->setText (text.str ());
00096 }
00097
00098 void
00099 VisTrackerGeometryTwig::update (Ig3DRep *rep)
00100 {
00101
00102 VisQueuedTwig::update (rep);
00103
00104 IgQtLock ();
00105 rep->clear ();
00106
00107 if (! m_3Ddone)
00108 {
00109 VisEventSetupService *esService = VisEventSetupService::get (state ());
00110 ASSERT (esService);
00111
00112 m_3dDet = esService->buildTracker (VisEventSetupService::FullDet, this->name ());
00113
00114 if (m_3dDet == NULL) return;
00115
00116 if (m_annotate.value ())
00117 {
00118 SoSeparator *sep = esService->annotateTracker (VisEventSetupService::FullDet, this->name ());
00119 if (sep != NULL) m_3dDet->addChild (sep);
00120 }
00121
00122 m_3dDet->ref ();
00123 m_3Ddone = true;
00124 }
00125 rep->node ()->addChild (m_3dDet);
00126 }
00127
00128 void
00129 VisTrackerGeometryTwig::update (IgRPhiRep *rep)
00130 {
00131
00132 VisQueuedTwig::update (rep);
00133
00134 IgQtLock ();
00135 rep->clear ();
00136
00137 if (! m_rphidone)
00138 {
00139 VisEventSetupService *esService = VisEventSetupService::get (state ());
00140 ASSERT (esService);
00141
00142 m_rphiDet = esService->buildTracker (VisEventSetupService::RPhiDet, this->name ());
00143
00144 if (m_rphiDet == NULL) return;
00145
00146 if (m_annotate.value ())
00147 {
00148 SoSeparator *sep = esService->annotateTracker (VisEventSetupService::RPhiDet, this->name ());
00149 if (sep != NULL) m_rphiDet->addChild (sep);
00150 }
00151
00152 m_rphiDet->ref ();
00153 m_rphidone = true;
00154 }
00155 rep->node ()->addChild (m_rphiDet);
00156 }
00157
00158 void
00159 VisTrackerGeometryTwig::update (IgRZRep *rep)
00160 {
00161
00162 VisQueuedTwig::update (rep);
00163
00164 IgQtLock ();
00165 rep->clear ();
00166
00167 if (! m_rzdone)
00168 {
00169 VisEventSetupService *esService = VisEventSetupService::get (state ());
00170 ASSERT (esService);
00171
00172 m_rzDet = esService->buildTracker (VisEventSetupService::RZDet, this->name ());
00173
00174 if (m_rzDet == NULL) return;
00175
00176 if (m_annotate.value ())
00177 {
00178 SoSeparator *sep = esService->annotateTracker (VisEventSetupService::RZDet, this->name ());
00179 if (sep != NULL) m_rzDet->addChild (sep);
00180 }
00181
00182 m_rzDet->ref ();
00183 m_rzdone = true;
00184 }
00185 rep->node ()->addChild (m_rzDet);
00186 }