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)
 
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 ()
 
- Public Member Functions inherited from FWSimpleProxyBuilder
 FWSimpleProxyBuilder (const std::type_info &iType)
 
 ~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
 
 FWCaloClusterProxyBuilder (const FWCaloClusterProxyBuilder &)=delete
 
const FWCaloClusterProxyBuilderoperator= (const FWCaloClusterProxyBuilder &)=delete
 
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< 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 void *iData, unsigned int iIndex, TEveElement &oItemHolder, const FWViewContext *context) 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 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::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 uint8_t gradient [3][gradient_steps]
 
static uint8_t gradient_steps
 

Detailed Description

Definition at line 11 of file FWCaloClusterProxyBuilder.cc.

Constructor & Destructor Documentation

FWCaloClusterProxyBuilder::FWCaloClusterProxyBuilder ( void  )
inline

Definition at line 13 of file FWCaloClusterProxyBuilder.cc.

13 {}
FWCaloClusterProxyBuilder::~FWCaloClusterProxyBuilder ( void  )
inlineoverride

Definition at line 14 of file FWCaloClusterProxyBuilder.cc.

14 {}
FWCaloClusterProxyBuilder::FWCaloClusterProxyBuilder ( const FWCaloClusterProxyBuilder )
privatedelete

Member Function Documentation

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(), beam_dqm_sourceclient-live_cfg::cerr, enableTimeFilter, edm::EventBase::getByLabel(), FWEventItem::getConfig(), FWEventItem::getEvent(), heatmap, edm::HandleBase::isValid(), FWProxyBuilderBase::item(), FWProxyBuilderBase::layer(), SiStripPI::max, 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 }
edm::Handle< edm::ValueMap< float > > TimeValueMapHandle
FWProxyBuilderConfiguration * getConfig() const
Definition: FWEventItem.h:150
const FWEventItem * item() const
T min(T a, T b)
Definition: MathUtil.h:58
bool isValid() const
Definition: HandleBase.h:70
const edm::EventBase * getEvent() const
Definition: FWEventItem.h:131
bool getByLabel(InputTag const &, Handle< T > &) const
Definition: EventBase.h:92
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(), constexpr, 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, CosmicsPD_Skims::radius, DetId::rawId(), saturation_energy, reco::CaloCluster::seed(), ntuplemaker::time, timeUpperBound, TimeValueMapHandle, testProducerWithPsetDescEmpty_cfi::x1, z, z_minus, and z_plus.

74  {
76  const float time = TimeValueMapHandle->get(iIndex);
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
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 
164  const float energy = fmin(
165  (item()->getConfig()->value<bool>("Cluster(0)/RecHit(1)") ? hitmap[it->first]->energy() : iData.energy()) /
167  1.0f);
168  const uint8_t colorFactor = gradient_steps * energy;
169 
170  // Scintillator
171  if (isScintillator) {
172  const int total_vertices = 3 * total_points;
173 
174  std::vector<float> pnts(24);
175  for (int i = 0; i < total_points; ++i) {
176  pnts[i * 3 + 0] = corners[i * 3];
177  pnts[i * 3 + 1] = corners[i * 3 + 1];
178  pnts[i * 3 + 2] = corners[i * 3 + 2];
179 
180  pnts[(i * 3 + 0) + total_vertices] = corners[i * 3];
181  pnts[(i * 3 + 1) + total_vertices] = corners[i * 3 + 1];
182  pnts[(i * 3 + 2) + total_vertices] = corners[i * 3 + 2] + shapes[3];
183  }
184  boxset->AddBox(&pnts[0]);
185  if (heatmap) {
186  energy ? boxset->DigitColor(gradient[0][colorFactor], gradient[1][colorFactor], gradient[2][colorFactor])
187  : boxset->DigitColor(64, 64, 64);
188  }
189 
190  h_box = true;
191  }
192  // Silicon
193  else {
194  constexpr int offset = 9;
195 
196  float centerX = (corners[6] + corners[6 + offset]) / 2;
197  float centerY = (corners[7] + corners[7 + offset]) / 2;
198  float radius = fabs(corners[6] - corners[6 + offset]) / 2;
199  hex_boxset->AddHex(TEveVector(centerX, centerY, corners[2]), radius, 90.0, shapes[3]);
200  if (heatmap) {
201  energy ? hex_boxset->DigitColor(gradient[0][colorFactor], gradient[1][colorFactor], gradient[2][colorFactor])
202  : hex_boxset->DigitColor(64, 64, 64);
203  }
204 
205  h_hex = true;
206  }
207  }
208  // Not HGCal
209  else {
210  h_box = true;
211 
212  std::vector<float> pnts(24);
213  fireworks::energyTower3DCorners(corners, (*it).second, pnts);
214  boxset->AddBox(&pnts[0]);
215  }
216  }
217 
218  if (h_hex) {
219  hex_boxset->RefitPlex();
220 
221  hex_boxset->CSCTakeAnyParentAsMaster();
222  if (!heatmap) {
223  hex_boxset->CSCApplyMainColorToMatchingChildren();
224  hex_boxset->CSCApplyMainTransparencyToMatchingChildren();
225  hex_boxset->SetMainColor(item()->modelInfo(iIndex).displayProperties().color());
226  hex_boxset->SetMainTransparency(item()->defaultDisplayProperties().transparency());
227  }
228  oItemHolder.AddElement(hex_boxset);
229  }
230 
231  if (h_box) {
232  boxset->RefitPlex();
233 
234  boxset->CSCTakeAnyParentAsMaster();
235  if (!heatmap) {
236  boxset->CSCApplyMainColorToMatchingChildren();
237  boxset->CSCApplyMainTransparencyToMatchingChildren();
238  boxset->SetMainColor(item()->modelInfo(iIndex).displayProperties().color());
239  boxset->SetMainTransparency(item()->defaultDisplayProperties().transparency());
240  }
241  oItemHolder.AddElement(boxset);
242  }
243 }
edm::Handle< edm::ValueMap< float > > TimeValueMapHandle
type
Definition: HCALResponse.h:21
const float * getParameters(unsigned int id) const
Definition: FWGeometry.cc:416
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
const FWEventItem * item() const
AlgoId algo() const
algorithm identifier
Definition: CaloCluster.h:189
const float * getShapePars(unsigned int id) const
Definition: FWGeometry.cc:427
const std::vector< std::pair< DetId, float > > & hitsAndFractions() const
Definition: CaloCluster.h:209
double f[11][100]
double energy() const
cluster energy
Definition: CaloCluster.h:148
bool isValid() const
Definition: HandleBase.h:70
const_reference_type get(ProductID id, size_t idx) const
Definition: ValueMap.h:144
void energyTower3DCorners(const float *corners, float scale, std::vector< float > &, bool reflect=false)
DetId seed() const
return DetId of seed
Definition: CaloCluster.h:218
const float * getCorners(unsigned int id) const
Definition: FWGeometry.cc:405
const FWGeometry * getGeom() const
Definition: FWEventItem.cc:548
#define constexpr
const std::string & FWCaloClusterProxyBuilder::classPurpose ( )
static

Definition at line 245 of file FWCaloClusterProxyBuilder.cc.

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

Definition at line 245 of file FWCaloClusterProxyBuilder.cc.

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

Definition at line 245 of file FWCaloClusterProxyBuilder.cc.

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

Definition at line 245 of file FWCaloClusterProxyBuilder.cc.

const FWCaloClusterProxyBuilder& FWCaloClusterProxyBuilder::operator= ( const FWCaloClusterProxyBuilder )
privatedelete
const std::string& FWCaloClusterProxyBuilder::purpose ( ) const
inline
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().

Referenced by Vispa.Plugins.EdmBrowser.EventContentView.EventContentView::_addRow(), Vispa.Views.TableView.TableView::_createItem(), Vispa.Views.PropertyView.PropertyView::addCategory(), and Vispa.Views.PropertyView.PropertyView::append().

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 }
FWProxyBuilderConfiguration * getConfig() const
Definition: FWEventItem.h:150
void setItem(const FWEventItem *iItem) override
FWGenericParameter< T > * assertParam(const std::string &name, T def)
const std::string& FWCaloClusterProxyBuilder::typeName ( ) const
inline
const std::string& FWCaloClusterProxyBuilder::view ( ) const
inline

Member Data Documentation

bool FWCaloClusterProxyBuilder::enableTimeFilter
private

Definition at line 26 of file FWCaloClusterProxyBuilder.cc.

Referenced by build().

bool FWCaloClusterProxyBuilder::heatmap
private

Definition at line 23 of file FWCaloClusterProxyBuilder.cc.

Referenced by build().

long FWCaloClusterProxyBuilder::layer
private
double FWCaloClusterProxyBuilder::saturation_energy
private

Definition at line 22 of file FWCaloClusterProxyBuilder.cc.

Referenced by build().

double FWCaloClusterProxyBuilder::timeLowerBound
private

Definition at line 20 of file FWCaloClusterProxyBuilder.cc.

Referenced by build().

double FWCaloClusterProxyBuilder::timeUpperBound
private

Definition at line 20 of file FWCaloClusterProxyBuilder.cc.

Referenced by build().

edm::Handle<edm::ValueMap<float> > FWCaloClusterProxyBuilder::TimeValueMapHandle
private

Definition at line 19 of file FWCaloClusterProxyBuilder.cc.

Referenced by build().

bool FWCaloClusterProxyBuilder::z_minus
private

Definition at line 25 of file FWCaloClusterProxyBuilder.cc.

Referenced by build().

bool FWCaloClusterProxyBuilder::z_plus
private

Definition at line 24 of file FWCaloClusterProxyBuilder.cc.

Referenced by build().