CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
FWJetProxyBuilder.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: Calo
4 // Class : FWJetProxyBuilder
5 //
6 // Implementation:
7 // <Notes on implementation>
8 //
9 // Original Author: Chris Jones
10 // Created: Tue Dec 2 14:17:03 EST 2008
11 //
12 
13 #include "TEveJetCone.h"
14 #include "TEveScalableStraightLineSet.h"
15 
20 // user include files
28 
30 
31 namespace fireworks {
32 
33 struct jetScaleMarker : public scaleMarker {
34  jetScaleMarker(TEveScalableStraightLineSet* ls, float et, float e, const FWViewContext* vc):
35  scaleMarker(ls, et, e, vc) , m_text(0) {}
36 
38 };
39 }
40 
41 static const std::string kJetLabelsRhoPhiOn("Draw Labels in RhoPhi View");
42 static const std::string kJetLabelsRhoZOn("Draw Labels in RhoZ View");
43 static const std::string kJetOffset("Label Offset");
44 
45 
47 {
48 public:
50  virtual ~FWJetProxyBuilder();
51 
52  virtual bool havePerViewProduct(FWViewType::EType) const { return true; }
53  virtual bool haveSingleProduct() const { return false; } // different view types
54  virtual void cleanLocal();
55 
56  virtual void setItem(const FWEventItem* iItem)
57  {
59  if (iItem) {
60  iItem->getConfig()->assertParam(kJetLabelsRhoPhiOn, false);
61  iItem->getConfig()->assertParam(kJetLabelsRhoZOn, false);
62  iItem->getConfig()->assertParam(kJetOffset, 2.1, 1.0, 5.0);
63  }
64  }
65 
67 
68 protected:
69  virtual void buildViewType(const reco::Jet& iData, unsigned int iIndex, TEveElement& oItemHolder, FWViewType::EType type , const FWViewContext*);
70 
71 
72  virtual void localModelChanges(const FWModelId& iId, TEveElement* iCompound,
73  FWViewType::EType viewType, const FWViewContext* vc);
74 
75  virtual void scaleProduct(TEveElementList* parent, FWViewType::EType, const FWViewContext* vc);
76 
77 private:
78  typedef std::vector<fireworks::jetScaleMarker> Lines_t;
79 
80  FWJetProxyBuilder( const FWJetProxyBuilder& ); // stop default
81  const FWJetProxyBuilder& operator=( const FWJetProxyBuilder& ); // stop default
82 
83  TEveElementList* requestCommon();
85 
86  TEveElementList* m_common;
87 
88  std::vector<fireworks::jetScaleMarker> m_lines;
89 };
90 
91 
92 //______________________________________________________________________________
94  m_common(0)
95 {
96  m_common = new TEveElementList( "common electron scene" );
97  m_common->IncDenyDestroy();
98 }
99 
101 {
102  m_common->DecDenyDestroy();
103 }
104 
105 TEveElementList*
107 {
108  if( m_common->HasChildren() == false )
109  {
110  for (int i = 0; i < static_cast<int>(item()->size()); ++i)
111  {
112  TEveJetCone* cone = fireworks::makeEveJetCone(modelData(i), context());
113 
114  m_common->AddElement(cone);
115  cone->SetFillColor(item()->defaultDisplayProperties().color());
116  cone->SetLineColor(item()->defaultDisplayProperties().color());
117 
118  }
119  }
120  return m_common;
121 }
122 
123 void
124 FWJetProxyBuilder::buildViewType(const reco::Jet& iData, unsigned int iIndex, TEveElement& oItemHolder, FWViewType::EType type , const FWViewContext* vc)
125 {
126  // add cone from shared pool
127  TEveElementList* cones = requestCommon();
128  TEveElement::List_i coneIt = cones->BeginChildren();
129  std::advance(coneIt, iIndex);
130 
132  setupAddElement( *coneIt, &oItemHolder );
133  (*coneIt)->SetMainTransparency(TMath::Min(100, 80 + dp.transparency() / 5));
134 
135 
136  // scale markers in projected views
137  if (FWViewType::isProjected(type))
138  {
139  m_lines.push_back(fireworks::jetScaleMarker(new TEveScalableStraightLineSet("jetline"), iData.et(), iData.energy(), vc));
140  fireworks::jetScaleMarker& markers = m_lines.back();
141 
142  float size = 1.f; // values are saved in scale
143  double theta = iData.theta();
144  double phi = iData.phi();
145 
146  if ( type == FWViewType::kRhoZ )
147  {
148  static const float_t offr = 4;
149  float r_ecal = context().caloR1() + offr;
150  float z_ecal = context().caloZ1() + offr/tan(context().caloTransAngle());
151  double r(0);
152  if ( theta < context().caloTransAngle() || M_PI-theta < context().caloTransAngle())
153  {
154  z_ecal = context().caloZ2() + offr/tan(context().caloTransAngle());
155  r = z_ecal/fabs(cos(theta));
156  }
157  else
158  {
159  r = r_ecal/sin(theta);
160  }
161 
162  markers.m_ls->SetScaleCenter( 0., (phi>0 ? r*fabs(sin(theta)) : -r*fabs(sin(theta))), r*cos(theta) );
163  markers.m_ls->AddLine( 0., (phi>0 ? r*fabs(sin(theta)) : -r*fabs(sin(theta))), r*cos(theta),
164  0., (phi>0 ? (r+size)*fabs(sin(theta)) : -(r+size)*fabs(sin(theta))), (r+size)*cos(theta) );
165  }
166  else
167  {
168  float ecalR = context().caloR1() + 4;
169  markers.m_ls->SetScaleCenter(ecalR*cos(phi), ecalR*sin(phi), 0);
170  markers.m_ls->AddLine(ecalR*cos(phi), ecalR*sin(phi), 0, (ecalR+size)*cos(phi), (ecalR+size)*sin(phi), 0);
171  }
172 
173  markers.m_ls->SetLineWidth(4);
174  markers.m_ls->SetLineColor(dp.color());
175  FWViewEnergyScale* caloScale = vc->getEnergyScale();
176  markers.m_ls->SetScale(caloScale->getScaleFactor3D()*(caloScale->getPlotEt() ? iData.et() : iData.energy()));
177 
178  if ((type == FWViewType::kRhoZ && item()->getConfig()->value<bool>(kJetLabelsRhoZOn))||
179  (type == FWViewType::kRhoPhi && item()->getConfig()->value<bool>(kJetLabelsRhoPhiOn) ) )
180  {
181  markers.m_text = new FWEveText(Form("%.1f", vc->getEnergyScale()->getPlotEt() ? iData.et() : iData.energy()));
182  markers.m_text->SetMainColor( item()->defaultDisplayProperties().color());
183  setTextPos(markers, vc, type);
184  }
185 
186 
187  markers.m_ls->SetMarkerColor(markers.m_ls->GetMainColor());
188  setupAddElement( markers.m_ls, &oItemHolder );
189  if (markers.m_text) setupAddElement( markers.m_text, &oItemHolder , false);
190 
191  }
192  context().voteMaxEtAndEnergy(iData.et(), iData.energy());
193 
194 }
195 
196 void
197 FWJetProxyBuilder::localModelChanges(const FWModelId& iId, TEveElement* iCompound,
198  FWViewType::EType viewType, const FWViewContext* vc)
199 {
200  increaseComponentTransparency(iId.index(), iCompound, "TEveJetCone", 80);
201 
202  for (Lines_t::iterator i = m_lines.begin(); i!= m_lines.end(); ++ i)
203  {
204  TEveStraightLineSetProjected* projLineSet = (TEveStraightLineSetProjected*)(*(*i).m_ls->BeginProjecteds());
205  if (projLineSet) projLineSet->UpdateProjection();
206  }
207 }
208 
209 
210 void
212 {
213  m_lines.clear();
214  m_common->DestroyElements();
215 }
216 
217 void
219 {
220  for (Lines_t::iterator i = m_lines.begin(); i!= m_lines.end(); ++ i)
221  {
222  if (vc == (*i).m_vc)
223  {
224  float value = vc->getEnergyScale()->getPlotEt() ? (*i).m_et : (*i).m_energy;
225 
226  (*i).m_ls->SetScale(vc->getEnergyScale()->getScaleFactor3D() * value );
227  if ((*i).m_text)
228  {
229  (*i).m_text->SetText(Form("%.1f", value));
230  setTextPos(*i, vc, type);
231  }
232  TEveStraightLineSetProjected* projLineSet = (TEveStraightLineSetProjected*)(*(*i).m_ls->BeginProjecteds());
233  projLineSet->UpdateProjection();
234  }
235  }
236 }
237 
238 
240 {
241  TEveChunkManager::iterator li( s.m_ls->GetLinePlex() );
242  li.next();
243  TEveStraightLineSet::Line_t &l = * ( TEveStraightLineSet::Line_t* ) li();
244  TEveVector v(l.fV2[0] - l.fV1[0], l.fV2[1] - l.fV1[1], l.fV2[2] - l.fV1[2] );
245  v.Normalize();
246 
247 
248  double off = item()->getConfig()->value<double>(kJetOffset) -1;
249  float value = vc->getEnergyScale()->getPlotEt() ? s.m_et : s.m_energy;
250  double trs = off * 130 * value/context().getMaxEnergyInEvent(vc->getEnergyScale()->getPlotEt());
251  v *= trs;
252 
253  float x = l.fV1[0] + v[0];
254  float y = l.fV1[1] + v[1];
255  float z = l.fV1[2] + v[2];
256 
258  s.m_text->RefMainTrans().SetPos(x, y, z);
259  if ((s.m_text)->BeginProjecteds() != (s.m_text)->EndProjecteds()) {
260  FWEveTextProjected* textProjected = (FWEveTextProjected*)(*(s.m_text)->BeginProjecteds());
261  textProjected->UpdateProjection();
262  }
263 
264 }
265 
const FWJetProxyBuilder & operator=(const FWJetProxyBuilder &)
type
Definition: HCALResponse.h:21
virtual double energy() const GCC11_FINAL
energy
const fireworks::Context & context() const
FWProxyBuilderConfiguration * getConfig() const
Definition: FWEventItem.h:165
float getScaleFactor3D() const
virtual double et() const GCC11_FINAL
transverse energy
int i
Definition: DBlmapReader.cc:9
const FWDisplayProperties & defaultDisplayProperties() const
Definition: FWEventItem.cc:451
#define REGISTER_FWPROXYBUILDER(_name_, _type_, _purpose_, _view_)
virtual void UpdateProjection()
float m_offsetZ
list parent
Definition: dbtoconf.py:74
static const std::string kJetLabelsRhoPhiOn("Draw Labels in RhoPhi View")
static const int kAllRPZBits
Definition: FWViewType.h:58
Base class for all types of Jets.
Definition: Jet.h:20
void voteMaxEtAndEnergy(float Et, float energy) const
Definition: Context.cc:184
void setupAddElement(TEveElement *el, TEveElement *parent, bool set_color=true) const
jetScaleMarker(TEveScalableStraightLineSet *ls, float et, float e, const FWViewContext *vc)
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
FWViewEnergyScale * getEnergyScale() const
Geom::Theta< T > theta() const
static float caloZ2(bool offset=true)
Definition: Context.cc:224
virtual double theta() const GCC11_FINAL
momentum polar angle
virtual void setItem(const FWEventItem *iItem)
std::vector< fireworks::jetScaleMarker > Lines_t
static const std::string kJetOffset("Label Offset")
float float float z
const FWEventItem * item() const
static const int kAll3DBits
Definition: FWViewType.h:59
Color_t color() const
static bool isProjected(int)
Definition: FWViewType.cc:128
virtual void cleanLocal()
virtual float phi() const GCC11_FINAL
momentum azimuthal angle
Char_t transparency() const
int index() const
Definition: FWModelId.h:49
virtual void setItem(const FWEventItem *iItem)
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
static float caloR1(bool offset=true)
Definition: Context.cc:209
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
static const std::string kJetLabelsRhoZOn("Draw Labels in RhoZ View")
float getMaxEnergyInEvent(bool isEt) const
Definition: Context.cc:200
virtual bool havePerViewProduct(FWViewType::EType) const
TEveElementList * m_common
FWGenericParameter< T > * assertParam(const std::string &name, T def)
virtual bool haveSingleProduct() const
#define M_PI
Definition: BFit3D.cc:3
size_t size() const
Definition: FWEventItem.cc:548
auto dp
Definition: deltaR.h:24
virtual void buildViewType(const reco::Jet &iData, unsigned int iIndex, TEveElement &oItemHolder, FWViewType::EType type, const FWViewContext *)
TEveScalableStraightLineSet * m_ls
Definition: scaleMarker.h:37
virtual void localModelChanges(const FWModelId &iId, TEveElement *iCompound, FWViewType::EType viewType, const FWViewContext *vc)
static float caloZ1(bool offset=true)
Definition: Context.cc:219
std::vector< fireworks::jetScaleMarker > m_lines
virtual void scaleProduct(TEveElementList *parent, FWViewType::EType, const FWViewContext *vc)
TEveElementList * requestCommon()
volatile std::atomic< bool > shutdown_flag false
Definition: DDAxes.h:10
tuple size
Write out results.
void setTextPos(fireworks::jetScaleMarker &s, const FWViewContext *vc, FWViewType::EType)
void increaseComponentTransparency(unsigned int index, TEveElement *holder, const std::string &name, Char_t transpOffset)
TEveJetCone * makeEveJetCone(const reco::Jet &iData, const fireworks::Context &context)
bool getPlotEt() const
Definition: DDAxes.h:10