CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
FWCaloClusterProxyBuilder Class Reference
Inheritance diagram for FWCaloClusterProxyBuilder:
FWHeatmapProxyBuilderTemplate< reco::CaloCluster > FWSimpleProxyBuilder FWProxyBuilderBase

Public Member Functions

 FWCaloClusterProxyBuilder (void)
 
 FWCaloClusterProxyBuilder (const FWCaloClusterProxyBuilder &)=delete
 
const FWCaloClusterProxyBuilderoperator= (const FWCaloClusterProxyBuilder &)=delete
 
const std::string & purpose () const
 
const std::string & typeName () const
 
const std::string & view () const
 
 ~FWCaloClusterProxyBuilder (void) override
 
- Public Member Functions inherited from FWHeatmapProxyBuilderTemplate< reco::CaloCluster >
 FWHeatmapProxyBuilderTemplate ()
 
 FWHeatmapProxyBuilderTemplate (const FWHeatmapProxyBuilderTemplate &)=delete
 
const FWHeatmapProxyBuilderTemplateoperator= (const FWHeatmapProxyBuilderTemplate &)=delete
 
- Public Member Functions inherited from FWSimpleProxyBuilder
 FWSimpleProxyBuilder (const std::type_info &iType)
 
 FWSimpleProxyBuilder (const FWSimpleProxyBuilder &)=delete
 
const FWSimpleProxyBuilderoperator= (const FWSimpleProxyBuilder &)=delete
 
 ~FWSimpleProxyBuilder () override
 
- Public Member Functions inherited from FWProxyBuilderBase
void build ()
 
virtual bool canHandle (const FWEventItem &)
 
const fireworks::Contextcontext () const
 
TEveElementList * createProduct (FWViewType::EType, const FWViewContext *)
 
 FWProxyBuilderBase ()
 
bool getHaveWindow () const
 
virtual bool havePerViewProduct (FWViewType::EType) const
 
virtual bool haveSingleProduct () const
 
const FWEventItemitem () const
 
virtual void itemBeingDestroyed (const FWEventItem *)
 
void itemChanged (const FWEventItem *)
 
int layer () const
 
void modelChanges (const FWModelIds &)
 
void removePerViewProduct (FWViewType::EType, const FWViewContext *vc)
 
void scaleChanged (const FWViewContext *)
 
void setHaveWindow (bool iFlag)
 
virtual void setInteractionList (FWInteractionList *, const std::string &)
 
void setupAddElement (TEveElement *el, TEveElement *parent, bool set_color=true) const
 
void setupElement (TEveElement *el, bool color=true) const
 
virtual bool willHandleInteraction () const
 
virtual ~FWProxyBuilderBase ()
 

Static Public Member Functions

static const std::string & classPurpose ()
 
static const std::string & classRegisterTypeName ()
 
static const std::string & classTypeName ()
 
static const std::string & classView ()
 
- Static Public Member Functions inherited from FWSimpleProxyBuilder
static std::string typeOfBuilder ()
 Used by the plugin system to determine how the proxy uses the data from FWEventItem. More...
 
- Static Public Member Functions inherited from FWProxyBuilderBase
static bool representsSubPart ()
 
static std::string typeOfBuilder ()
 Used by the plugin system to determine how the proxy uses the data from FWEventItem. More...
 

Private Member Functions

void build (const FWEventItem *iItem, TEveElementList *product, const FWViewContext *vc) override
 
void build (const reco::CaloCluster &iData, unsigned int iIndex, TEveElement &oItemHolder, const FWViewContext *) override
 
void setItem (const FWEventItem *iItem) override
 

Private Attributes

bool enableTimeFilter
 
bool heatmap
 
long layer
 
double saturation_energy
 
double timeLowerBound
 
double timeUpperBound
 
edm::Handle< edm::ValueMap< std::pair< float, float > > > TimeValueMapHandle
 
bool z_minus
 
bool z_plus
 

Additional Inherited Members

- Protected Types inherited from FWProxyBuilderBase
typedef std::vector< Product * >::iterator Product_it
 
- Protected Member Functions inherited from FWHeatmapProxyBuilderTemplate< reco::CaloCluster >
void build (const FWEventItem *iItem, TEveElementList *product, const FWViewContext *vc) override
 
void build (const FWEventItem *iItem, TEveElementList *product, const FWViewContext *) override
 
virtual void build (const void *, unsigned int iIndex, TEveElement &iItemHolder, const FWViewContext *)=0
 
void build (const void *iData, unsigned int iIndex, TEveElement &oItemHolder, const FWViewContext *context) override
 
virtual void buildViewType (const void *, unsigned int iIndex, TEveElement &iItemHolder, FWViewType::EType, const FWViewContext *)=0
 
void buildViewType (const FWEventItem *iItem, TEveElementList *product, FWViewType::EType viewType, const FWViewContext *) override
 
void buildViewType (const void *iData, unsigned int iIndex, TEveElement &oItemHolder, FWViewType::EType viewType, const FWViewContext *context) override
 
virtual void buildViewType (const reco::CaloCluster &iData, unsigned int iIndex, TEveElement &oItemHolder, FWViewType::EType viewType, const FWViewContext *)
 
const reco::CaloClustermodelData (int index)
 
void setItem (const FWEventItem *iItem) override
 
- Protected Member Functions inherited from FWSimpleProxyBuilder
void build ()
 
virtual void build (const FWEventItem *iItem, TEveElementList *product, const FWViewContext *)
 
virtual void buildViewType (const FWEventItem *iItem, TEveElementList *, FWViewType::EType, const FWViewContext *)
 
void buildViewType (const FWEventItem *iItem, TEveElementList *product, FWViewType::EType viewType, const FWViewContext *) override
 
void clean () override
 
- Protected Member Functions inherited from FWProxyBuilderBase
virtual void cleanLocal ()
 
TEveCompound * createCompound (bool set_color=true, bool propagate_color_to_all_children=false) const
 
 FWProxyBuilderBase (const FWProxyBuilderBase &)
 
void increaseComponentTransparency (unsigned int index, TEveElement *holder, const std::string &name, Char_t transpOffset)
 
virtual void localModelChanges (const FWModelId &iId, TEveElement *iCompound, FWViewType::EType viewType, const FWViewContext *vc)
 
virtual void modelChanges (const FWModelIds &, Product *)
 
const FWProxyBuilderBaseoperator= (const FWProxyBuilderBase &)
 
virtual void scaleProduct (TEveElementList *parent, FWViewType::EType, const FWViewContext *vc)
 
- Protected Attributes inherited from FWHeatmapProxyBuilderTemplate< reco::CaloCluster >
std::unordered_map< DetId, const HGCRecHit *> * hitmap
 
- Protected Attributes inherited from FWSimpleProxyBuilder
FWSimpleProxyHelper m_helper
 
- Protected Attributes inherited from FWProxyBuilderBase
std::vector< Product * > m_products
 
- Static Protected Attributes inherited from FWHeatmapProxyBuilderTemplate< reco::CaloCluster >
static constexpr uint8_t gradient [3][gradient_steps]
 
static constexpr uint8_t gradient_steps
 

Detailed Description

Definition at line 11 of file FWCaloClusterProxyBuilder.cc.

Constructor & Destructor Documentation

◆ FWCaloClusterProxyBuilder() [1/2]

FWCaloClusterProxyBuilder::FWCaloClusterProxyBuilder ( void  )
inline

Definition at line 13 of file FWCaloClusterProxyBuilder.cc.

13 {}

◆ ~FWCaloClusterProxyBuilder()

FWCaloClusterProxyBuilder::~FWCaloClusterProxyBuilder ( void  )
inlineoverride

Definition at line 14 of file FWCaloClusterProxyBuilder.cc.

14 {}

◆ FWCaloClusterProxyBuilder() [2/2]

FWCaloClusterProxyBuilder::FWCaloClusterProxyBuilder ( const FWCaloClusterProxyBuilder )
delete

Member Function Documentation

◆ build() [1/2]

void FWCaloClusterProxyBuilder::build ( const FWEventItem iItem,
TEveElementList *  product,
const FWViewContext vc 
)
overrideprivatevirtual

Reimplemented from FWProxyBuilderBase.

Definition at line 50 of file FWCaloClusterProxyBuilder.cc.

References FWProxyBuilderBase::build(), DMR_cfg::cerr, enableTimeFilter, edm::EventBase::getByLabel(), FWEventItem::getConfig(), FWEventItem::getEvent(), heatmap, edm::HandleBase::isValid(), FWProxyBuilderBase::item(), FWProxyBuilderBase::layer(), SiStripPI::max, SiStripPI::min, saturation_energy, timeLowerBound, timeUpperBound, TimeValueMapHandle, FWProxyBuilderConfiguration::value(), z_minus, and z_plus.

50  {
51  iItem->getEvent()->getByLabel(edm::InputTag("hgcalLayerClusters", "timeLayerCluster"), TimeValueMapHandle);
53  timeLowerBound = std::min(item()->getConfig()->value<double>("TimeLowerBound(ns)"),
54  item()->getConfig()->value<double>("TimeUpperBound(ns)"));
55  timeUpperBound = std::max(item()->getConfig()->value<double>("TimeLowerBound(ns)"),
56  item()->getConfig()->value<double>("TimeUpperBound(ns)"));
57  } else {
58  std::cerr << "Warning: couldn't locate 'timeLayerCluster' ValueMap in root file." << std::endl;
59  }
60 
61  layer = item()->getConfig()->value<long>("Layer");
62  saturation_energy = item()->getConfig()->value<double>("EnergyCutOff");
63  heatmap = item()->getConfig()->value<bool>("Heatmap");
64  z_plus = item()->getConfig()->value<bool>("Z+");
65  z_minus = item()->getConfig()->value<bool>("Z-");
66  enableTimeFilter = item()->getConfig()->value<bool>("EnableTimeFilter");
67 
68  FWHeatmapProxyBuilderTemplate::build(iItem, product, vc);
69 }
FWProxyBuilderConfiguration * getConfig() const
Definition: FWEventItem.h:150
bool getByLabel(InputTag const &, Handle< T > &) const
Definition: EventBase.h:97
const edm::EventBase * getEvent() const
Definition: FWEventItem.h:131
edm::Handle< edm::ValueMap< std::pair< float, float > > > TimeValueMapHandle
bool isValid() const
Definition: HandleBase.h:70
const FWEventItem * item() const

◆ build() [2/2]

void FWCaloClusterProxyBuilder::build ( const reco::CaloCluster iData,
unsigned int  iIndex,
TEveElement &  oItemHolder,
const FWViewContext  
)
overrideprivatevirtual

iIndex is the index where iData is found in the container from which it came iItemHolder is the object to which you add your own objects which inherit from TEveElement

Reimplemented from FWHeatmapProxyBuilderTemplate< reco::CaloCluster >.

Definition at line 71 of file FWCaloClusterProxyBuilder.cc.

References reco::CaloCluster::algo(), enableTimeFilter, HCALHighEnergyHPDFilter_cfi::energy, reco::CaloCluster::energy(), fireworks::energyTower3DCorners(), f, edm::ValueMap< T >::get(), FWGeometry::getCorners(), FWEventItem::getGeom(), FWGeometry::getParameters(), FWGeometry::getShapePars(), FWHeatmapProxyBuilderTemplate< reco::CaloCluster >::gradient, FWHeatmapProxyBuilderTemplate< reco::CaloCluster >::gradient_steps, heatmap, FWHeatmapProxyBuilderTemplate< reco::CaloCluster >::hitmap, reco::CaloCluster::hitsAndFractions(), mps_fire::i, edm::HandleBase::isValid(), FWProxyBuilderBase::item(), FWProxyBuilderBase::layer(), hltrates_dqm_sourceclient-live_cfg::offset, reco::CaloCluster::position(), CosmicsPD_Skims::radius, DetId::rawId(), saturation_energy, reco::CaloCluster::seed(), protons_cff::time, timeUpperBound, TimeValueMapHandle, trackerHitRTTI::vector, testProducerWithPsetDescEmpty_cfi::x1, z, z_minus, and z_plus.

74  {
76  const float time = TimeValueMapHandle->get(iIndex).first;
77  if (time < timeLowerBound || time > timeUpperBound)
78  return;
79  }
80 
81  std::vector<std::pair<DetId, float>> clusterDetIds = iData.hitsAndFractions();
82 
83  bool h_hex(false);
84  TEveBoxSet *hex_boxset = new TEveBoxSet();
85  if (!heatmap)
86  hex_boxset->UseSingleColor();
87  hex_boxset->SetPickable(true);
88  hex_boxset->Reset(TEveBoxSet::kBT_Hex, true, 64);
89  hex_boxset->SetAntiFlick(true);
90 
91  bool h_box(false);
92  TEveBoxSet *boxset = new TEveBoxSet();
93  if (!heatmap)
94  boxset->UseSingleColor();
95  boxset->SetPickable(true);
96  boxset->Reset(TEveBoxSet::kBT_FreeBox, true, 64);
97  boxset->SetAntiFlick(true);
98 
99  for (std::vector<std::pair<DetId, float>>::iterator it = clusterDetIds.begin(), itEnd = clusterDetIds.end();
100  it != itEnd;
101  ++it) {
102  const uint8_t type = ((it->first >> 28) & 0xF);
103 
104  const float *corners = item()->getGeom()->getCorners(it->first);
105  if (corners == nullptr)
106  continue;
107 
108  // HGCal
109  if (iData.algo() == 8 || (type >= 8 && type <= 10)) {
110  if (heatmap && hitmap->find(it->first) == hitmap->end())
111  continue;
112 
113  const bool z = (it->first >> 25) & 0x1;
114 
115  // discard everything thats not at the side that we are intersted in
116  if (((z_plus & z_minus) != 1) && (((z_plus | z_minus) == 0) || !(z == z_minus || z == !z_plus)))
117  continue;
118 
119  const float *parameters = item()->getGeom()->getParameters(it->first);
120  const float *shapes = item()->getGeom()->getShapePars(it->first);
121 
122  if (parameters == nullptr || shapes == nullptr)
123  continue;
124 
125  const int total_points = parameters[0];
126  const bool isScintillator = (total_points == 4);
127 
128  uint8_t ll = layer;
129  if (layer > 0) {
130  if (layer > 28) {
131  if (type == 8) {
132  continue;
133  }
134  ll -= 28;
135  } else {
136  if (type != 8) {
137  continue;
138  }
139  }
140 
141  if (ll != ((it->first >> (isScintillator ? 17 : 20)) & 0x1F))
142  continue;
143  }
144 
145  // seed and cluster position
146  if (iData.seed().rawId() == it->first.rawId()) {
147  TEveStraightLineSet *marker = new TEveStraightLineSet;
148  marker->SetLineWidth(1);
149 
150  // center of RecHit
151  const float center[3] = {corners[total_points * 3 + 0],
152  corners[total_points * 3 + 1],
153  corners[total_points * 3 + 2] + shapes[3] * 0.5f};
154 
155  // draw 3D cross
156  const float crossScale = 1.0f + fmin(iData.energy(), 5.0f);
157  marker->AddLine(center[0] - crossScale, center[1], center[2], center[0] + crossScale, center[1], center[2]);
158  marker->AddLine(center[0], center[1] - crossScale, center[2], center[0], center[1] + crossScale, center[2]);
159  marker->AddLine(center[0], center[1], center[2] - crossScale, center[0], center[1], center[2] + crossScale);
160 
161  oItemHolder.AddElement(marker);
162 
163  TEveStraightLineSet *position_marker = new TEveStraightLineSet;
164  position_marker->SetLineWidth(2);
165  position_marker->SetLineColor(kOrange);
166  auto const &pos = iData.position();
167  const float position_crossScale = crossScale * 0.5;
168  position_marker->AddLine(
169  pos.x() - position_crossScale, pos.y(), pos.z(), pos.x() + position_crossScale, pos.y(), pos.z());
170  position_marker->AddLine(
171  pos.x(), pos.y() - position_crossScale, pos.z(), pos.x(), pos.y() + position_crossScale, pos.z());
172 
173  oItemHolder.AddElement(position_marker);
174  }
175 
176  const float energy =
177  fmin((item()->getConfig()->value<bool>("Cluster(0)/RecHit(1)") ? hitmap->at(it->first)->energy()
178  : iData.energy()) /
180  1.0f);
181  const uint8_t colorFactor = gradient_steps * energy;
182 
183  // Scintillator
184  if (isScintillator) {
185  const int total_vertices = 3 * total_points;
186 
187  std::vector<float> pnts(24);
188  for (int i = 0; i < total_points; ++i) {
189  pnts[i * 3 + 0] = corners[i * 3];
190  pnts[i * 3 + 1] = corners[i * 3 + 1];
191  pnts[i * 3 + 2] = corners[i * 3 + 2];
192 
193  pnts[(i * 3 + 0) + total_vertices] = corners[i * 3];
194  pnts[(i * 3 + 1) + total_vertices] = corners[i * 3 + 1];
195  pnts[(i * 3 + 2) + total_vertices] = corners[i * 3 + 2] + shapes[3];
196  }
197  boxset->AddBox(&pnts[0]);
198  if (heatmap) {
199  energy ? boxset->DigitColor(gradient[0][colorFactor], gradient[1][colorFactor], gradient[2][colorFactor])
200  : boxset->DigitColor(64, 64, 64);
201  }
202 
203  h_box = true;
204  }
205  // Silicon
206  else {
207  constexpr int offset = 9;
208 
209  float centerX = (corners[6] + corners[6 + offset]) / 2;
210  float centerY = (corners[7] + corners[7 + offset]) / 2;
211  float radius = fabs(corners[6] - corners[6 + offset]) / 2;
212  hex_boxset->AddHex(TEveVector(centerX, centerY, corners[2]), radius, shapes[2], shapes[3]);
213  if (heatmap) {
214  energy ? hex_boxset->DigitColor(gradient[0][colorFactor], gradient[1][colorFactor], gradient[2][colorFactor])
215  : hex_boxset->DigitColor(64, 64, 64);
216  }
217 
218  h_hex = true;
219  }
220  }
221  // Not HGCal
222  else {
223  h_box = true;
224 
225  std::vector<float> pnts(24);
226  fireworks::energyTower3DCorners(corners, (*it).second, pnts);
227  boxset->AddBox(&pnts[0]);
228  }
229  }
230 
231  if (h_hex) {
232  hex_boxset->RefitPlex();
233 
234  hex_boxset->CSCTakeAnyParentAsMaster();
235  if (!heatmap) {
236  hex_boxset->CSCApplyMainColorToMatchingChildren();
237  hex_boxset->CSCApplyMainTransparencyToMatchingChildren();
238  hex_boxset->SetMainColor(item()->modelInfo(iIndex).displayProperties().color());
239  hex_boxset->SetMainTransparency(item()->defaultDisplayProperties().transparency());
240  }
241  oItemHolder.AddElement(hex_boxset);
242  }
243 
244  if (h_box) {
245  boxset->RefitPlex();
246 
247  boxset->CSCTakeAnyParentAsMaster();
248  if (!heatmap) {
249  boxset->CSCApplyMainColorToMatchingChildren();
250  boxset->CSCApplyMainTransparencyToMatchingChildren();
251  boxset->SetMainColor(item()->modelInfo(iIndex).displayProperties().color());
252  boxset->SetMainTransparency(item()->defaultDisplayProperties().transparency());
253  }
254  oItemHolder.AddElement(boxset);
255  }
256 }
const math::XYZPoint & position() const
cluster centroid position
Definition: CaloCluster.h:154
const std::vector< std::pair< DetId, float > > & hitsAndFractions() const
Definition: CaloCluster.h:210
AlgoId algo() const
algorithm identifier
Definition: CaloCluster.h:190
const_reference_type get(ProductID id, size_t idx) const
Definition: ValueMap.h:144
DetId seed() const
return DetId of seed
Definition: CaloCluster.h:219
const float * getCorners(unsigned int id) const
Definition: FWGeometry.cc:439
double f[11][100]
static constexpr uint8_t gradient[3][gradient_steps]
double energy() const
cluster energy
Definition: CaloCluster.h:149
void energyTower3DCorners(const float *corners, float scale, std::vector< float > &, bool reflect=false)
edm::Handle< edm::ValueMap< std::pair< float, float > > > TimeValueMapHandle
const FWGeometry * getGeom() const
Definition: FWEventItem.cc:548
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
const float * getShapePars(unsigned int id) const
Definition: FWGeometry.cc:461
bool isValid() const
Definition: HandleBase.h:70
const float * getParameters(unsigned int id) const
Definition: FWGeometry.cc:450
const FWEventItem * item() const
std::unordered_map< DetId, const HGCRecHit *> * hitmap

◆ classPurpose()

const std::string & FWCaloClusterProxyBuilder::classPurpose ( )
static

Definition at line 258 of file FWCaloClusterProxyBuilder.cc.

◆ classRegisterTypeName()

const std::string & FWCaloClusterProxyBuilder::classRegisterTypeName ( )
static

Definition at line 258 of file FWCaloClusterProxyBuilder.cc.

◆ classTypeName()

const std::string & FWCaloClusterProxyBuilder::classTypeName ( )
static

Definition at line 258 of file FWCaloClusterProxyBuilder.cc.

◆ classView()

const std::string & FWCaloClusterProxyBuilder::classView ( )
static

Definition at line 258 of file FWCaloClusterProxyBuilder.cc.

◆ operator=()

const FWCaloClusterProxyBuilder& FWCaloClusterProxyBuilder::operator= ( const FWCaloClusterProxyBuilder )
delete

◆ purpose()

const std::string& FWCaloClusterProxyBuilder::purpose ( ) const
inline

Definition at line 16 of file FWCaloClusterProxyBuilder.cc.

◆ setItem()

void FWCaloClusterProxyBuilder::setItem ( const FWEventItem iItem)
overrideprivatevirtual

Reimplemented from FWProxyBuilderBase.

Definition at line 40 of file FWCaloClusterProxyBuilder.cc.

References FWProxyBuilderConfiguration::assertParam(), FWEventItem::getConfig(), and FWHeatmapProxyBuilderTemplate< T >::setItem().

40  {
42  if (iItem) {
43  iItem->getConfig()->assertParam("Cluster(0)/RecHit(1)", false);
44  iItem->getConfig()->assertParam("EnableTimeFilter", false);
45  iItem->getConfig()->assertParam("TimeLowerBound(ns)", 0.01, 0.0, 75.0);
46  iItem->getConfig()->assertParam("TimeUpperBound(ns)", 0.01, 0.0, 75.0);
47  }
48 }
void setItem(const FWEventItem *iItem) override
FWProxyBuilderConfiguration * getConfig() const
Definition: FWEventItem.h:150
FWGenericParameter< T > * assertParam(const std::string &name, T def)

◆ typeName()

const std::string& FWCaloClusterProxyBuilder::typeName ( ) const
inline

Definition at line 16 of file FWCaloClusterProxyBuilder.cc.

◆ view()

const std::string& FWCaloClusterProxyBuilder::view ( ) const
inline

Definition at line 16 of file FWCaloClusterProxyBuilder.cc.

Member Data Documentation

◆ enableTimeFilter

bool FWCaloClusterProxyBuilder::enableTimeFilter
private

Definition at line 29 of file FWCaloClusterProxyBuilder.cc.

Referenced by build().

◆ heatmap

bool FWCaloClusterProxyBuilder::heatmap
private

Definition at line 26 of file FWCaloClusterProxyBuilder.cc.

Referenced by build().

◆ layer

long FWCaloClusterProxyBuilder::layer
private

◆ saturation_energy

double FWCaloClusterProxyBuilder::saturation_energy
private

Definition at line 25 of file FWCaloClusterProxyBuilder.cc.

Referenced by build().

◆ timeLowerBound

double FWCaloClusterProxyBuilder::timeLowerBound
private

Definition at line 23 of file FWCaloClusterProxyBuilder.cc.

Referenced by build().

◆ timeUpperBound

double FWCaloClusterProxyBuilder::timeUpperBound
private

Definition at line 23 of file FWCaloClusterProxyBuilder.cc.

Referenced by build().

◆ TimeValueMapHandle

edm::Handle<edm::ValueMap<std::pair<float, float> > > FWCaloClusterProxyBuilder::TimeValueMapHandle
private

Definition at line 22 of file FWCaloClusterProxyBuilder.cc.

Referenced by build().

◆ z_minus

bool FWCaloClusterProxyBuilder::z_minus
private

Definition at line 28 of file FWCaloClusterProxyBuilder.cc.

Referenced by build().

◆ z_plus

bool FWCaloClusterProxyBuilder::z_plus
private

Definition at line 27 of file FWCaloClusterProxyBuilder.cc.

Referenced by build().