00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include <boost/bind.hpp>
00016
00017
00018
00019 #include "TEveManager.h"
00020 #include "TEveTrackPropagator.h"
00021 #include "TGLViewer.h"
00022 #include "TEveViewer.h"
00023
00024 #include "Fireworks/Core/interface/CmsShowCommon.h"
00025 #include "Fireworks/Core/interface/FWEveView.h"
00026 #include "Fireworks/Core/interface/Context.h"
00027
00028
00029
00030
00031
00032 CmsShowCommon::CmsShowCommon(fireworks::Context* c):
00033 FWConfigurableParameterizable(2),
00034 m_context(c),
00035 m_trackBreak(this, " ", 2l, 0l, 2l),
00036 m_drawBreakPoints(this, "Show y=0 points as markers", false),
00037 m_backgroundColor(this, "backgroundColIdx", 1l, 0l, 1000l),
00038 m_gamma(this, "Brightness", 0l, -15l, 15l),
00039 m_geomTransparency2D(this, "Transparency 2D", long(colorManager()->geomTransparency(true)), 0l, 100l),
00040 m_geomTransparency3D(this, "Transparency 3D", long(colorManager()->geomTransparency(false)), 0l, 100l),
00041 m_energyScale(new FWViewEnergyScale("global", 2))
00042 {
00043
00044 m_trackBreak.addEntry(0, "Jump to proper hemisphere");
00045 m_trackBreak.addEntry(1, "Stay on first point side");
00046 m_trackBreak.addEntry(2, "Stay on last point side");
00047
00048
00049 char name[32];
00050 for (int i = 0; i < kFWGeomColorSize; ++i)
00051 {
00052 snprintf(name, 31, "GeometryColor %d ", i);
00053 m_geomColors[i] = new FWLongParameter(this, name , long(colorManager()->geomColor(FWGeomColorIndex(i))), 1000l, 1100l);
00054 }
00055
00056 m_trackBreak.changed_.connect(boost::bind(&CmsShowCommon::setTrackBreakMode, this));
00057 m_drawBreakPoints.changed_.connect(boost::bind(&CmsShowCommon::setDrawBreakMarkers, this));
00058 m_gamma.changed_.connect(boost::bind(&CmsShowCommon::setGamma, this));
00059 }
00060
00061 CmsShowCommon::~CmsShowCommon()
00062 {
00063 }
00064
00065
00066 const FWColorManager* CmsShowCommon::colorManager() const
00067 {
00068 return m_context->colorManager();
00069 }
00070
00071
00072
00073
00074
00075 void
00076 CmsShowCommon::setTrackBreakMode()
00077 {
00078 if (m_context->getTrackPropagator()->GetProjTrackBreaking() != m_trackBreak.value())
00079 {
00080 m_context->getTrackPropagator()->SetProjTrackBreaking(m_trackBreak.value());
00081 m_context->getTrackerTrackPropagator()->SetProjTrackBreaking(m_trackBreak.value());
00082 m_context->getMuonTrackPropagator()->SetProjTrackBreaking(m_trackBreak.value());
00083 gEve->Redraw3D();
00084 }
00085 }
00086
00087
00088 void
00089 CmsShowCommon::setDrawBreakMarkers()
00090 {
00091 if (m_context->getTrackPropagator()->GetRnrPTBMarkers() != m_drawBreakPoints.value())
00092 {
00093 m_context->getTrackPropagator()->SetRnrPTBMarkers(m_drawBreakPoints.value());
00094 m_context->getTrackerTrackPropagator()->SetRnrPTBMarkers(m_drawBreakPoints.value());
00095 m_context->getMuonTrackPropagator()->SetRnrPTBMarkers(m_drawBreakPoints.value());
00096 gEve->Redraw3D();
00097 }
00098 }
00099
00100 void
00101 CmsShowCommon::setGamma()
00102 {
00103 m_context->colorManager()->setBrightness(m_gamma.value());
00104 }
00105
00106 void
00107 CmsShowCommon::switchBackground()
00108 {
00109 m_context->colorManager()->switchBackground();
00110 m_backgroundColor.set(colorManager()->background());
00111 }
00112
00113 void
00114 CmsShowCommon::setGeomColor(FWGeomColorIndex cidx, Color_t iColor)
00115 {
00116 m_geomColors[cidx]->set(iColor);
00117 m_context->colorManager()->setGeomColor(cidx, iColor);
00118 }
00119
00120 void
00121 CmsShowCommon::setGeomTransparency(int iTransp, bool projected)
00122 {
00123 if (projected)
00124 m_geomTransparency2D.set(iTransp);
00125 else
00126 m_geomTransparency3D.set(iTransp);
00127
00128 m_context->colorManager()->setGeomTransparency(iTransp, projected);
00129 }
00130
00131
00132
00133 namespace
00134 {
00135 void addGLColorToConfig(const char* cname, TGLColor& c, FWConfiguration& oTo)
00136 {
00137 FWConfiguration pc;
00138
00139 std::ostringstream sRed;
00140 sRed << (int)c.GetRed();
00141 pc.addKeyValue("Red", sRed.str());
00142
00143 std::ostringstream sGreen;
00144 sGreen << (int)c.GetGreen();
00145 pc.addKeyValue("Green", sGreen.str());
00146
00147 std::ostringstream sBlue;
00148 sBlue << (int)c.GetBlue();
00149 pc.addKeyValue("Blue", sBlue.str());
00150
00151 oTo.addKeyValue(cname, pc, true);
00152 }
00153
00154 void setGLColorFromConfig(TGLColor& d, const FWConfiguration* iFrom )
00155 {
00156 if (!iFrom) return;
00157 d.Arr()[0] = atoi(iFrom->valueForKey("Red")->value().c_str());
00158 d.Arr()[1] = atoi(iFrom->valueForKey("Green")->value().c_str());
00159 d.Arr()[2] = atoi(iFrom->valueForKey("Blue")->value().c_str());
00160
00161 }
00162 }
00163
00164 void
00165 CmsShowCommon::addTo(FWConfiguration& oTo) const
00166 {
00167 m_backgroundColor.set(int(colorManager()->background()));
00168
00169 FWConfigurableParameterizable::addTo(oTo);
00170 m_energyScale->addTo(oTo);
00171
00172 if (gEve)
00173 {
00174 TGLViewer* v = gEve->GetDefaultGLViewer();
00175 addGLColorToConfig("SelectionColorLight", v->RefLightColorSet().Selection(1), oTo);
00176 addGLColorToConfig("HighlightColorLight", v->RefLightColorSet().Selection(3), oTo);
00177 addGLColorToConfig("SelectionColorDark", v->RefDarkColorSet().Selection(1), oTo);
00178 addGLColorToConfig("HighlightColorDark", v->RefDarkColorSet().Selection(3), oTo);
00179 }
00180 }
00181
00182 void
00183 CmsShowCommon::setFrom(const FWConfiguration& iFrom)
00184 {
00185 for(const_iterator it =begin(), itEnd = end();
00186 it != itEnd;
00187 ++it) {
00188 (*it)->setFrom(iFrom);
00189 }
00190
00191
00192 if (iFrom.valueForKey("ScaleMode"))
00193 {
00194 long mode = atol(iFrom.valueForKey("ScaleMode")->value().c_str());
00195
00196 float convert;
00197 if (iFrom.valueForKey("EnergyToLength [GeV/m]"))
00198 convert = atof(iFrom.valueForKey("EnergyToLength [GeV/m]")->value().c_str());
00199 else
00200 convert = atof(iFrom.valueForKey("ValueToHeight [GeV/m]")->value().c_str());
00201
00202 float maxH;
00203 if (iFrom.valueForKey("MaximumLength [m]"))
00204 maxH = atof(iFrom.valueForKey("MaximumLength [m]")->value().c_str());
00205 else
00206 maxH = atof(iFrom.valueForKey("MaxTowerH [m]")->value().c_str());
00207
00208 int et = atoi(iFrom.valueForKey("PlotEt")->value().c_str());
00209 m_energyScale->SetFromCmsShowCommonConfig(mode, convert, maxH, et);
00210 }
00211
00212
00213 FWColorManager* cm = m_context->colorManager();
00214 cm->setBackgroundAndBrightness( FWColorManager::BackgroundColorIndex(m_backgroundColor.value()), m_gamma.value());
00215
00216
00217 cm->setGeomTransparency( m_geomTransparency2D.value(), true);
00218 cm->setGeomTransparency( m_geomTransparency3D.value(), false);
00219
00220 for (int i = 0; i < kFWGeomColorSize; ++i)
00221 cm->setGeomColor(FWGeomColorIndex(i), m_geomColors[i]->value());
00222
00223 if (gEve)
00224 {
00225 TGLViewer* v = gEve->GetDefaultGLViewer();
00226 setGLColorFromConfig(v->RefLightColorSet().Selection(1), iFrom.valueForKey("SelectionColorLight"));
00227 setGLColorFromConfig(v->RefLightColorSet().Selection(3), iFrom.valueForKey("HighlightColorLight"));
00228 setGLColorFromConfig(v->RefDarkColorSet().Selection(1), iFrom.valueForKey("SelectionColorDark"));
00229 setGLColorFromConfig(v->RefDarkColorSet().Selection(3), iFrom.valueForKey("HighlightColorDark"));
00230 }
00231 }