CMS 3D CMS Logo

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:
28  ~FWRPCDigiProxyBuilder() override {}
29 
31 
32 private:
34  void build(const FWEventItem* iItem, TEveElementList* product, const FWViewContext*) override;
37 };
38 
39 void
40 FWRPCDigiProxyBuilder::build(const FWEventItem* iItem, TEveElementList* product, const FWViewContext*)
41 {
42  const RPCDigiCollection* digis = nullptr;
43 
44  iItem->get(digis);
45 
46  if ( ! digis )
47  {
48  fwLog(fwlog::kWarning)<<"Failed to get RPCDigis"<<std::endl;
49  return;
50  }
51  const FWGeometry *geom = iItem->getGeom();
52 
53  for ( RPCDigiCollection::DigiRangeIterator dri = digis->begin(), driEnd = digis->end();
54  dri != driEnd; ++dri )
55  {
56  unsigned int rawid = (*dri).first.rawId();
57  const RPCDigiCollection::Range& range = (*dri).second;
58 
59  if( ! geom->contains( rawid ))
60  {
61  fwLog( fwlog::kWarning ) << "Failed to get geometry of RPC roll with detid: "
62  << rawid << std::endl;
63 
64  TEveCompound* compound = createCompound();
65  setupAddElement( compound, product );
66 
67  continue;
68  }
69 
70  const float* parameters = geom->getParameters( rawid );
71  float nStrips = parameters[0];
72  float halfStripLength = parameters[1]*0.5;
73  float pitch = parameters[2];
74  float offset = -0.5*nStrips*pitch;
75 
76  for( RPCDigiCollection::const_iterator dit = range.first;
77  dit != range.second; ++dit )
78  {
79  TEveStraightLineSet* stripDigiSet = new TEveStraightLineSet;
80  stripDigiSet->SetLineWidth(3);
81  setupAddElement( stripDigiSet, product );
82 
83  int strip = (*dit).strip();
84  float centreOfStrip = (strip-0.5)*pitch + offset;
85 
86  float localPointTop[3] =
87  {
88  centreOfStrip, halfStripLength, 0.0
89  };
90 
91  float localPointBottom[3] =
92  {
93  centreOfStrip, -halfStripLength, 0.0
94  };
95 
96  float globalPointTop[3];
97  float globalPointBottom[3];
98 
99  geom->localToGlobal( rawid, localPointTop, globalPointTop, localPointBottom, globalPointBottom );
100 
101  stripDigiSet->AddLine(globalPointTop[0], globalPointTop[1], globalPointTop[2],
102  globalPointBottom[0], globalPointBottom[1], globalPointBottom[2]);
103  }
104  }
105 }
106 
109 
#define REGISTER_PROXYBUILDER_METHODS()
#define REGISTER_FWPROXYBUILDER(_name_, _type_, _purpose_, _view_)
const FWRPCDigiProxyBuilder & operator=(const FWRPCDigiProxyBuilder &)=delete
static const int kAllRPZBits
Definition: FWViewType.h:58
const float * getParameters(unsigned int id) const
Definition: FWGeometry.cc:302
void setupAddElement(TEveElement *el, TEveElement *parent, bool set_color=true) const
void get(const T *&oData) const
Definition: FWEventItem.h:85
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:334
bool contains(unsigned int id) const
Definition: FWGeometry.h:110
#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:683