CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
FWRPCDigiProxyBuilder.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: Muon
4 // Class : FWRPCDigiProxyBuilder
5 //
6 // Implementation:
7 // <Notes on implementation>
8 //
9 // Original Author: mccauley
10 // Created: Sun Jan 6 23:57:00 EST 2008
11 //
12 
13 #include "TEveStraightLineSet.h"
14 #include "TEveCompound.h"
15 #include "TEveGeoNode.h"
16 
21 
23 
25 {
26 public:
29 
31 
32 private:
33  virtual void build(const FWEventItem* iItem, TEveElementList* product, const FWViewContext*) override;
36 };
37 
38 void
39 FWRPCDigiProxyBuilder::build(const FWEventItem* iItem, TEveElementList* product, const FWViewContext*)
40 {
41  const RPCDigiCollection* digis = 0;
42 
43  iItem->get(digis);
44 
45  if ( ! digis )
46  {
47  fwLog(fwlog::kWarning)<<"Failed to get RPCDigis"<<std::endl;
48  return;
49  }
50  const FWGeometry *geom = iItem->getGeom();
51 
52  for ( RPCDigiCollection::DigiRangeIterator dri = digis->begin(), driEnd = digis->end();
53  dri != driEnd; ++dri )
54  {
55  unsigned int rawid = (*dri).first.rawId();
56  const RPCDigiCollection::Range& range = (*dri).second;
57 
58  if( ! geom->contains( rawid ))
59  {
60  fwLog( fwlog::kWarning ) << "Failed to get geometry of RPC roll with detid: "
61  << rawid << std::endl;
62 
63  TEveCompound* compound = createCompound();
64  setupAddElement( compound, product );
65 
66  continue;
67  }
68 
69  const float* parameters = geom->getParameters( rawid );
70  float nStrips = parameters[0];
71  float halfStripLength = parameters[1]*0.5;
72  float pitch = parameters[2];
73  float offset = -0.5*nStrips*pitch;
74 
75  for( RPCDigiCollection::const_iterator dit = range.first;
76  dit != range.second; ++dit )
77  {
78  TEveStraightLineSet* stripDigiSet = new TEveStraightLineSet;
79  stripDigiSet->SetLineWidth(3);
80  setupAddElement( stripDigiSet, product );
81 
82  int strip = (*dit).strip();
83  float centreOfStrip = (strip-0.5)*pitch + offset;
84 
85  float localPointTop[3] =
86  {
87  centreOfStrip, halfStripLength, 0.0
88  };
89 
90  float localPointBottom[3] =
91  {
92  centreOfStrip, -halfStripLength, 0.0
93  };
94 
95  float globalPointTop[3];
96  float globalPointBottom[3];
97 
98  geom->localToGlobal( rawid, localPointTop, globalPointTop, localPointBottom, globalPointBottom );
99 
100  stripDigiSet->AddLine(globalPointTop[0], globalPointTop[1], globalPointTop[2],
101  globalPointBottom[0], globalPointBottom[1], globalPointBottom[2]);
102  }
103  }
104 }
105 
108 
dictionary parameters
Definition: Parameters.py:2
#define REGISTER_FWPROXYBUILDER(_name_, _type_, _purpose_, _view_)
static const int kAllRPZBits
Definition: FWViewType.h:58
const float * getParameters(unsigned int id) const
Definition: FWGeometry.cc:293
void setupAddElement(TEveElement *el, TEveElement *parent, bool set_color=true) const
void get(const T *&oData) const
Definition: FWEventItem.h:84
static const int kAll3DBits
Definition: FWViewType.h:59
void localToGlobal(unsigned int id, const float *local, float *global, bool translatep=true) const
Definition: FWGeometry.cc:325
bool contains(unsigned int id) const
Definition: FWGeometry.h:98
unsigned int offset(bool)
const FWRPCDigiProxyBuilder & operator=(const FWRPCDigiProxyBuilder &)
#define fwLog(_level_)
Definition: fwLog.h:50
std::vector< RPCDigi >::const_iterator const_iterator
TEveCompound * createCompound(bool set_color=true, bool propagate_color_to_all_children=false) const
std::pair< const_iterator, const_iterator > Range
const FWGeometry * getGeom() const
Definition: FWEventItem.cc:681