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 // $Id: FWRPCDigiProxyBuilder.cc,v 1.14 2010/09/07 15:46:48 yana Exp $
12 //
13 
14 #include "TEveStraightLineSet.h"
15 #include "TEveCompound.h"
16 #include "TEveGeoNode.h"
17 
22 
24 
26 {
27 public:
30 
32 
33 private:
34  virtual void build(const FWEventItem* iItem, TEveElementList* product, const FWViewContext*);
37 };
38 
39 void
40 FWRPCDigiProxyBuilder::build(const FWEventItem* iItem, TEveElementList* product, const FWViewContext*)
41 {
42  const RPCDigiCollection* digis = 0;
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 
dictionary parameters
Definition: Parameters.py:2
#define REGISTER_FWPROXYBUILDER(_name_, _type_, _purpose_, _view_)
void strip(std::string &input, const std::string &blanks=" \n\t")
Definition: stringTools.cc:16
static const int kAllRPZBits
Definition: FWViewType.h:59
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:85
void localToGlobal(unsigned int id, const float *local, float *global) const
Definition: FWGeometry.cc:325
static const int kAll3DBits
Definition: FWViewType.h:60
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:51
std::vector< DigiType >::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