CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
FWRPZView.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: Core
4 // Class : FWRPZView
5 //
6 // Implementation:
7 // <Notes on implementation>
8 //
9 // Original Author: Chris Jones
10 // Created: Tue Feb 19 10:33:25 EST 2008
11 // $Id: FWRPZView.cc,v 1.46 2011/10/15 02:33:30 amraktad Exp $
12 //
13 
14 // system include files
15 #include <stdexcept>
16 #include <boost/bind.hpp>
17 #include <boost/shared_ptr.hpp>
18 
19 #include "TGLViewer.h"
20 #include "TGLScenePad.h"
21 #include "TEveManager.h"
22 #include "TEveElement.h"
23 #include "TEveScene.h"
24 #include "TEveProjections.h"
25 #include "TEveProjectionAxes.h"
26 #include "TGLabel.h"
27 #include "TEveProjectionManager.h"
28 
30 #define protected public
31 #include "TEveCalo.h"
32 #undef protected
33 
34 // user include files
44 
45 
46 const float FWRPZView::s_distortF = 0.001;
47 const float FWRPZView::s_distortFInv = 1000;
48 //
49 // constructors and destructor
50 //
51 FWRPZView::FWRPZView(TEveWindowSlot* iParent, FWViewType::EType id) :
52  FWEveView(iParent, id, 7),
53  m_geometryList(0),
54  m_projMgr(0),
55  m_axes(0),
56 
57  m_calo(0),
58 
59  m_showPixelBarrel(this, "Show Pixel Barrel", false ),
60  m_showPixelEndcap(this, "Show Pixel Endcap", false),
61  m_showTrackerBarrel(this, "Show Tracker Barrel", false ),
62  m_showTrackerEndcap(this, "Show Tracker Endcap", false),
63 
64  m_shiftOrigin(this,"Shift origin to beam-spot", false),
65  m_fishEyeDistortion(this,"Distortion",0., 0., 100.),
66  m_fishEyeR(this,"FixedRadius",(double)fireworks::Context::caloR1(), 0.0, 150.0),
67 
68  m_caloDistortion(this,"Calo compression",1.0,0.01,10.),
69  m_muonDistortion(this,"Muon compression",0.2,0.01,10.),
70  m_showProjectionAxes(this,"Show projection axis", false),
71  m_projectionAxesLabelSize(this,"Projection axis label size", 0.015, 0.001, 0.2),
72  m_compressMuon(this,"Compress detectors",false),
73  m_showHF(0),
74  m_showEndcaps(0)
75 {
76  TEveProjection::EPType_e projType = (id == FWViewType::kRhoZ) ? TEveProjection::kPT_RhoZ : TEveProjection::kPT_RPhi;
77 
78  m_projMgr = new TEveProjectionManager(projType);
79  m_projMgr->IncDenyDestroy();
80  m_projMgr->SetImportEmpty(kTRUE);
81 
82  m_projMgr->GetProjection()->SetDistortion(m_fishEyeDistortion.value()*s_distortF);
83  m_projMgr->GetProjection()->SetFixR(m_fishEyeR.value());
84 
85 #ifdef TEVEPROJECTIONS_DISPLACE_ORIGIN_MODE
86  m_projMgr->GetProjection()->SetDisplaceOrigin( m_shiftOrigin.value());
87 #endif
88 
89  if ( id == FWViewType::kRhoPhi || id == FWViewType::kRhoPhiPF) {
90  m_projMgr->GetProjection()->AddPreScaleEntry(0, fireworks::Context::caloR1(), 1.0);
91  m_projMgr->GetProjection()->AddPreScaleEntry(0, 300, 0.2);
92  } else {
93  m_projMgr->GetProjection()->AddPreScaleEntry(0, fireworks::Context::caloR1(), 1.0);
94  m_projMgr->GetProjection()->AddPreScaleEntry(1, 310, 1.0);
95  m_projMgr->GetProjection()->AddPreScaleEntry(0, 370, 0.2);
96  m_projMgr->GetProjection()->AddPreScaleEntry(1, 580, 0.2);
97  }
98 
99 
100  // camera
101  viewerGL()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
102  if ( TGLOrthoCamera* camera = dynamic_cast<TGLOrthoCamera*>( &(viewerGL()->CurrentCamera()) ) ) {
103  camera->SetZoomMax(1e6);
104  }
105  geoScene()->GetGLScene()->SetSelectable(kFALSE);
106 
107  m_axes = new TEveProjectionAxes(m_projMgr);
108  m_axes->SetRnrState(m_showProjectionAxes.value());
109  m_axes->SetLabelSize(m_projectionAxesLabelSize.value());
110  m_showProjectionAxes.changed_.connect(boost::bind(&FWRPZView::showProjectionAxes,this));
112  eventScene()->AddElement(m_axes);
113 
114  if ( id != FWViewType::kRhoZ ) {
115  m_showEndcaps = new FWBoolParameter(this,"Include EndCaps", true);
116  m_showEndcaps->changed_.connect( boost::bind(&FWRPZView::setEtaRng, this) );
117  m_showHF = new FWBoolParameter(this,"Include HF", true);
118  m_showHF->changed_.connect( boost::bind(&FWRPZView::setEtaRng, this) );
119  }
120 
121  m_shiftOrigin.changed_.connect(boost::bind(&FWRPZView::doShiftOriginToBeamSpot,this));
122 
123  m_fishEyeDistortion.changed_.connect(boost::bind(&FWRPZView::doFishEyeDistortion,this));
124 
125  m_fishEyeR.changed_.connect(boost::bind(&FWRPZView::doFishEyeDistortion,this));
126 
127  m_caloDistortion.changed_.connect(boost::bind(&FWRPZView::doPreScaleDistortion,this));
128  m_muonDistortion.changed_.connect(boost::bind(&FWRPZView::doPreScaleDistortion,this));
129  m_compressMuon.changed_.connect(boost::bind(&FWRPZView::doCompression,this,_1));
130 }
131 
133 {
134  m_calo->Destroy();
135  m_projMgr->DecDenyDestroy();
136 }
137 
138 //
139 // member functions
140 //
141 
142 TEveCaloViz*
144 {
145  return static_cast<TEveCaloViz*>(m_calo);
146 }
147 
148 void
150 {
152 
154  m_geometryList->IncDenyDestroy();
156  TEveElement* p = m_projMgr->ImportElements(m_geometryList);
157  geoScene()->AddElement(p);
158 
159  TEveCaloData* data = context().getCaloData();
160 
161  TEveCalo3D* calo3d = new TEveCalo3D(data);
162 
163  m_calo = static_cast<TEveCalo2D*> (m_projMgr->ImportElements(calo3d, eventScene()));
164 
165  if (typeId() == FWViewType::kRhoPhiPF)
166  m_calo->SetBarrelRadius(177);
167  else
168  m_calo->SetBarrelRadius(context().caloR1(false));
169 
170  m_calo->SetEndCapPos(context().caloZ1(false));
171  m_calo->SetAutoRange(false);
172  m_calo->SetScaleAbs(true);
173 
178 
179 }
180 
181 void
183 {
184  if (context().getBeamSpot())
185  {
186  FWBeamSpot& b = *(context().getBeamSpot());
187  fwLog(fwlog::kDebug) << Form("%s::eventBegin Set projection center (%f, %f, %f) \n", typeName().c_str(), b.x0(), b.y0(), b.z0());
188 
189  // projection center
190  TEveVector center(b.x0(), b.y0(), b.z0());
191  m_projMgr->GetProjection()->SetCenter(center);
192 
193  // camera move
194  TGLCamera& cam = viewerGL()->CurrentCamera();
195  cam.SetExternalCenter(true);
196  if (typeId() != FWViewType::kRhoZ)
197  {
198  double r = TMath::Sqrt( b.x0()*b.x0() + b.y0()*b.y0());
199  cam.SetCenterVec(b.z0(), TMath::Sign(r, b.y0()), 0);
200  }
201  else
202  {
203  cam.SetCenterVec(b.x0(), b.y0(), b.z0());
204  }
205  }
206 }
207 
208 void
210 {
212  viewerGL()->RequestDraw();
213 }
214 
215 void
217 {
218 #ifdef TEVEPROJECTIONS_DISPLACE_ORIGIN_MODE
219 
220  TEveProjection* p = m_projMgr->GetProjection();
221  if (p->GetDisplaceOrigin() != m_shiftOrigin.value())
222  {
223  p->SetDisplaceOrigin( m_shiftOrigin.value());
224  m_projMgr->ProjectChildren();
225  gEve->Redraw3D();
226  }
227 #endif
228 }
229 
230 void
231 FWRPZView::shiftOrigin(TEveVector& center)
232 {
233 #ifdef TEVEPROJECTIONS_DISPLACE_ORIGIN_MODE
234  // re-project with new center
235  m_projMgr->GetProjection()->SetCenter(center);
236  m_projMgr->ProjectChildren();
237 
238  // draw projected center
239  float* pc = m_projMgr->GetProjection()->GetProjectedCenter();
240  viewerGL()->CurrentCamera().SetExternalCenter(true);
241  viewerGL()->CurrentCamera().SetCenterVec(pc[0], pc[1], pc[2]);
242  viewerGL()->SetDrawCameraCenter(true);
243 
244  gEve->Redraw3D();
245 #endif
246 }
247 
248 void
250 {
251  // set center back to beam spot
252 
253 #ifdef TEVEPROJECTIONS_DISPLACE_ORIGIN_MODE
254  FWBeamSpot& b = *(context().getBeamSpot());
255  TEveVector center(b.x0(), b.y0(), b.z0());
256  m_projMgr->GetProjection()->SetCenter(center);
257 
258  m_projMgr->ProjectChildren();
259  gEve->Redraw3D();
260 #endif
261 }
262 
263 
264 void
266 {
267  TEveProjection* p = m_projMgr->GetProjection();
268  if (p->GetDistortion() != m_fishEyeDistortion.value()*s_distortFInv)
269  p->SetDistortion(m_fishEyeDistortion.value()*s_distortF);
270  if (p->GetFixR() != m_fishEyeR.value())
271  p->SetFixR(m_fishEyeR.value());
272 
273  m_projMgr->ProjectChildren();
274  gEve->Redraw3D();
275 }
276 
277 void
279 {
281  m_projMgr->GetProjection()->ChangePreScaleEntry(0,1,m_caloDistortion.value());
282  m_projMgr->GetProjection()->ChangePreScaleEntry(0,2,m_muonDistortion.value());
283  } else {
284  m_projMgr->GetProjection()->ChangePreScaleEntry(0,1,m_caloDistortion.value());
285  m_projMgr->GetProjection()->ChangePreScaleEntry(0,2,m_muonDistortion.value());
286  m_projMgr->GetProjection()->ChangePreScaleEntry(1,1,m_caloDistortion.value());
287  m_projMgr->GetProjection()->ChangePreScaleEntry(1,2,m_muonDistortion.value());
288  }
289  m_projMgr->UpdateName();
290  m_projMgr->ProjectChildren();
291  gEve->Redraw3D();
292 }
293 
294 void
296 {
297  m_projMgr->GetProjection()->SetUsePreScale(flag);
298  m_projMgr->UpdateName();
299  m_projMgr->ProjectChildren();
300  gEve->Redraw3D();
301 }
302 
303 void
304 FWRPZView::importElements(TEveElement* iChildren, float iLayer, TEveElement* iProjectedParent)
305 {
306  float oldLayer = m_projMgr->GetCurrentDepth();
307  m_projMgr->SetCurrentDepth(iLayer);
308  //make sure current depth is reset even if an exception is thrown
309  boost::shared_ptr<TEveProjectionManager> sentry(m_projMgr,
310  boost::bind(&TEveProjectionManager::SetCurrentDepth,
311  _1,oldLayer));
312  m_projMgr->ImportElements(iChildren,iProjectedParent);
313 }
314 
315 
316 void
318 {
319  FWEveView::addTo(iTo);
320  TGLOrthoCamera* camera = dynamic_cast<TGLOrthoCamera*>( &(viewerGL()->CurrentCamera()) );
321  if (camera) addToOrthoCamera(camera, iTo);
322 }
323 
324 void
326 {
327  FWEveView::setFrom(iFrom);
328 
329  TGLOrthoCamera* camera = dynamic_cast<TGLOrthoCamera*>( &(viewerGL()->CurrentCamera()) );
330  if (camera) setFromOrthoCamera(camera, iFrom);
331 
332  if (iFrom.version() < 7)
333  {
334  const FWConfiguration* value = iFrom.valueForKey("Show projection axes");
335  if (value)
336  m_showProjectionAxes.set(value->value() == "1");
337  }
338 }
339 
340 void
342 {
343  if (typeId() != FWViewType::kRhoZ)
344  {
345  // rng controllers only in RhoPhi
346  double eta_range = context().caloMaxEta();
347  if (!m_showHF->value() ) eta_range = 3.0;
348  if (!m_showEndcaps->value() ) eta_range = context().caloTransEta();
349  m_calo->SetEta(-eta_range,eta_range);
350  }
351 
353 }
354 
355 void
357 {
358  if (! m_calo->GetData()->Empty())
359  {
360  m_calo->AssertCellIdCache();
361  Float_t sumEt, sumE;
362  TEveCaloData::CellData_t cellData;
363  typedef std::vector<TEveCaloData::vCellId_t*> vBinCells_t;
364  typedef std::vector<TEveCaloData::vCellId_t*>::iterator vBinCells_i;
365 
366  vBinCells_t cellLists = m_calo->fCellLists;
367  for (vBinCells_i it = cellLists.begin(); it != cellLists.end(); it++)
368  {
369  TEveCaloData::vCellId_t* binCells = *it;
370  if (binCells) {
371  sumEt = 0; sumE = 0;
372  TEveCaloData::vCellId_i a = binCells->end();
373 
374  for (TEveCaloData::vCellId_i k = binCells->begin(); k != a; ++k)
375  {
376  m_calo->GetData()->GetCellData((*k), cellData);
377  sumEt += cellData.Value(true);
378  sumE += cellData.Value(false);
379  }
380  // printf("vote sum %f %f \n", sumEt , sumE);
381  context().voteMaxEtAndEnergy(sumEt, sumE);
382  }
383  }
384  }
385 }
386 
388 {
389  m_axes->SetRnrState(m_showProjectionAxes.value());
390  gEve->Redraw3D();
391  viewerGL()->RequestDraw();
392 }
393 
395 {
396  m_axes->SetLabelSize(m_projectionAxesLabelSize.value());
397  viewerGL()->RequestDraw();
398 }
399 
400 void
402 {
404 
405  ViewerParameterGUI& det = gui.requestTab("Detector");;
410 
411 #ifdef TEVEPROJECTIONS_DISPLACE_ORIGIN_MODE
412  gui.requestTab("Projection").addParam(&m_shiftOrigin);
413 #endif
414 
415  gui.requestTab("Projection").
416  addParam(&m_showProjectionAxes).
417  addParam(&m_projectionAxesLabelSize).
418  separator();
419 
420  TGCompositeFrame* f = gui.getTabContainer();
421 
422  f->AddFrame(new TGLabel(f, "FishEye:"));
424  addParam(&m_fishEyeR).
425  separator();
426 
427  f->AddFrame(new TGLabel(f, "PreScales:"));
428 
429  gui.requestTab("Projection").
430  addParam(&m_compressMuon).
431  addParam(&m_muonDistortion).
432  addParam(&m_caloDistortion);
433 
434 
436  {
437  gui.requestTab("Calo").
438  addParam(m_showHF).
439  addParam(m_showEndcaps);
440  }
441 }
442 
static float caloTransEta()
Definition: Context.cc:230
void doShiftOriginToBeamSpot()
Definition: FWRPZView.cc:216
void addToOrthoCamera(TGLOrthoCamera *, FWConfiguration &) const
Definition: FWEveView.cc:405
void doFishEyeDistortion()
Definition: FWRPZView.cc:265
virtual void populateController(ViewerParameterGUI &) const
Definition: FWRPZView.cc:401
long int flag
Definition: mlp_lapack.h:47
FWBoolParameter m_shiftOrigin
Definition: FWRPZView.h:98
TEveScene * eventScene()
Definition: FWEveView.h:76
FWBoolParameter m_showProjectionAxes
Definition: FWRPZView.h:104
double x0() const
Definition: FWBeamSpot.cc:30
FWRPZView(TEveWindowSlot *iParent, FWViewType::EType)
Definition: FWRPZView.cc:51
virtual TEveCaloViz * getEveCalo() const
Definition: FWRPZView.cc:143
TEveCalo2D * m_calo
Definition: FWRPZView.h:88
double z0() const
Definition: FWBeamSpot.cc:40
double y0() const
Definition: FWBeamSpot.cc:35
virtual void setContext(const fireworks::Context &)
Definition: FWRPZView.cc:149
FWDoubleParameter m_projectionAxesLabelSize
Definition: FWRPZView.h:105
virtual void populateController(ViewerParameterGUI &) const
Definition: FWEveView.cc:543
void voteMaxEtAndEnergy(float Et, float energy) const
Definition: Context.cc:185
ViewerParameterGUI & requestTab(const char *)
virtual void setFrom(const FWConfiguration &)
Definition: FWEveView.cc:356
const std::string & typeName() const
Definition: FWViewBase.cc:121
unsigned int version() const
virtual void setupEnergyScale()
Definition: FWEveView.cc:299
TEveProjectionAxes * m_axes
Definition: FWRPZView.h:87
TGLViewer * viewerGL() const
Definition: FWEveView.cc:198
sigc::signal< void, T > changed_
FWParameters::Bool FWBoolParameter
Definition: FWParameters.h:39
FWBoolParameter * m_showHF
Definition: FWRPZView.h:108
virtual void eventEnd()
Definition: FWEveView.cc:247
TEveProjectionManager * m_projMgr
Definition: FWRPZView.h:86
FWDoubleParameter m_fishEyeR
Definition: FWRPZView.h:100
void resetOrigin()
Definition: FWRPZView.cc:249
float caloR1()
Definition: FWPFGeom.h:21
void initStdGeoElements(const FWViewType::EType id)
void doCompression(bool)
Definition: FWRPZView.cc:295
FWBeamSpot * getBeamSpot() const
Definition: Context.h:79
virtual void setFrom(const FWConfiguration &)
Definition: FWRPZView.cc:325
void setEtaRng()
Definition: FWRPZView.cc:341
virtual void voteCaloMaxVal()
Definition: FWRPZView.cc:356
FWBoolParameter m_showTrackerBarrel
Definition: FWRPZView.h:95
void showProjectionAxes()
Definition: FWRPZView.cc:387
static float caloR1(bool offset=true)
Definition: Context.cc:210
double f[11][100]
void importElements(TEveElement *iProjectableChild, float layer, TEveElement *iProjectedParent=0)
Definition: FWRPZView.cc:304
TEveCaloDataHist * getCaloData() const
Definition: Context.h:81
virtual void addTo(FWConfiguration &) const
Definition: FWRPZView.cc:317
FWBoolParameter m_compressMuon
Definition: FWRPZView.h:106
FWRPZViewGeometry * m_geometryList
Definition: FWRPZView.h:85
int k[5][pyjets_maxn]
void shiftOrigin(TEveVector &center)
Definition: FWRPZView.cc:231
const std::string & value(unsigned int iIndex=0) const
const fireworks::Context & context()
Definition: FWEveView.h:65
virtual ~FWRPZView()
Definition: FWRPZView.cc:132
virtual void eventBegin()
Definition: FWRPZView.cc:182
#define fwLog(_level_)
Definition: fwLog.h:51
void doPreScaleDistortion()
Definition: FWRPZView.cc:278
FWBoolParameter * m_showEndcaps
Definition: FWRPZView.h:109
float caloZ1()
Definition: FWPFGeom.h:22
static const float s_distortFInv
Definition: FWRPZView.h:83
double b
Definition: hdecay.h:120
void showTrackerBarrel(bool)
FWDoubleParameter m_fishEyeDistortion
Definition: FWRPZView.h:99
TEveScene * geoScene()
Definition: FWEveView.h:77
ViewerParameterGUI & addParam(const FWParameterBase *)
FWBoolParameter m_showTrackerEndcap
Definition: FWRPZView.h:96
TGCompositeFrame * getTabContainer()
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
static double caloMaxEta()
Definition: Context.cc:240
double a
Definition: hdecay.h:121
FWDoubleParameter m_muonDistortion
Definition: FWRPZView.h:103
FWBoolParameter m_showPixelEndcap
Definition: FWRPZView.h:94
FWDoubleParameter m_caloDistortion
Definition: FWRPZView.h:102
void showTrackerEndcap(bool)
const FWConfiguration * valueForKey(const std::string &iKey) const
FWBoolParameter m_showPixelBarrel
Definition: FWRPZView.h:93
virtual void eventEnd()
Definition: FWRPZView.cc:209
void setFromOrthoCamera(TGLOrthoCamera *, const FWConfiguration &)
Definition: FWEveView.cc:425
virtual void addTo(FWConfiguration &) const
Definition: FWEveView.cc:338
static const float s_distortF
Definition: FWRPZView.h:82
void projectionAxesLabelSize()
Definition: FWRPZView.cc:394
virtual void setContext(const fireworks::Context &x)
Definition: FWEveView.cc:267
FWViewType::EType typeId() const
Definition: FWViewBase.h:42