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, hcalRecHitTable_cff::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, reco::CaloCluster::hgcal_em, reco::CaloCluster::hgcal_had, 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(), hcalRecHitTable_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() == reco::CaloCluster::hgcal_em || iData.algo() == reco::CaloCluster::hgcal_had ||
110  (type >= 8 && type <= 10)) {
111  if (heatmap && hitmap->find(it->first) == hitmap->end())
112  continue;
113 
114  const bool z = (it->first >> 25) & 0x1;
115 
116  // discard everything thats not at the side that we are intersted in
117  if (((z_plus & z_minus) != 1) && (((z_plus | z_minus) == 0) || !(z == z_minus || z == !z_plus)))
118  continue;
119 
120  const float *parameters = item()->getGeom()->getParameters(it->first);
121  const float *shapes = item()->getGeom()->getShapePars(it->first);
122 
123  if (parameters == nullptr || shapes == nullptr)
124  continue;
125 
126  const int total_points = parameters[0];
127  const bool isScintillator = (total_points == 4);
128 
129  uint8_t ll = layer;
130  if (layer > 0) {
131  if (layer > 28) {
132  if (type == 8) {
133  continue;
134  }
135  ll -= 28;
136  } else {
137  if (type != 8) {
138  continue;
139  }
140  }
141 
142  if (ll != ((it->first >> (isScintillator ? 17 : 20)) & 0x1F))
143  continue;
144  }
145 
146  // seed and cluster position
147  if (iData.seed().rawId() == it->first.rawId()) {
148  TEveStraightLineSet *marker = new TEveStraightLineSet;
149  marker->SetLineWidth(1);
150 
151  // center of RecHit
152  const float center[3] = {corners[total_points * 3 + 0],
153  corners[total_points * 3 + 1],
154  corners[total_points * 3 + 2] + shapes[3] * 0.5f};
155 
156  // draw 3D cross
157  const float crossScale = 1.0f + fmin(iData.energy(), 5.0f);
158  marker->AddLine(center[0] - crossScale, center[1], center[2], center[0] + crossScale, center[1], center[2]);
159  marker->AddLine(center[0], center[1] - crossScale, center[2], center[0], center[1] + crossScale, center[2]);
160  marker->AddLine(center[0], center[1], center[2] - crossScale, center[0], center[1], center[2] + crossScale);
161 
162  oItemHolder.AddElement(marker);
163 
164  TEveStraightLineSet *position_marker = new TEveStraightLineSet;
165  position_marker->SetLineWidth(2);
166  position_marker->SetLineColor(kOrange);
167  auto const &pos = iData.position();
168  const float position_crossScale = crossScale * 0.5;
169  position_marker->AddLine(
170  pos.x() - position_crossScale, pos.y(), pos.z(), pos.x() + position_crossScale, pos.y(), pos.z());
171  position_marker->AddLine(
172  pos.x(), pos.y() - position_crossScale, pos.z(), pos.x(), pos.y() + position_crossScale, pos.z());
173 
174  oItemHolder.AddElement(position_marker);
175  }
176 
177  const float energy =
178  fmin((item()->getConfig()->value<bool>("Cluster(0)/RecHit(1)") ? hitmap->at(it->first)->energy()
179  : iData.energy()) /
181  1.0f);
182  const uint8_t colorFactor = gradient_steps * energy;
183 
184  // Scintillator
185  if (isScintillator) {
186  const int total_vertices = 3 * total_points;
187 
188  std::vector<float> pnts(24);
189  for (int i = 0; i < total_points; ++i) {
190  pnts[i * 3 + 0] = corners[i * 3];
191  pnts[i * 3 + 1] = corners[i * 3 + 1];
192  pnts[i * 3 + 2] = corners[i * 3 + 2];
193 
194  pnts[(i * 3 + 0) + total_vertices] = corners[i * 3];
195  pnts[(i * 3 + 1) + total_vertices] = corners[i * 3 + 1];
196  pnts[(i * 3 + 2) + total_vertices] = corners[i * 3 + 2] + shapes[3];
197  }
198  boxset->AddBox(&pnts[0]);
199  if (heatmap) {
200  energy ? boxset->DigitColor(gradient[0][colorFactor], gradient[1][colorFactor], gradient[2][colorFactor])
201  : boxset->DigitColor(64, 64, 64);
202  }
203 
204  h_box = true;
205  }
206  // Silicon
207  else {
208  constexpr int offset = 9;
209 
210  float centerX = (corners[6] + corners[6 + offset]) / 2;
211  float centerY = (corners[7] + corners[7 + offset]) / 2;
212  float radius = fabs(corners[6] - corners[6 + offset]) / 2;
213  hex_boxset->AddHex(TEveVector(centerX, centerY, corners[2]), radius, shapes[2], shapes[3]);
214  if (heatmap) {
215  energy ? hex_boxset->DigitColor(gradient[0][colorFactor], gradient[1][colorFactor], gradient[2][colorFactor])
216  : hex_boxset->DigitColor(64, 64, 64);
217  }
218 
219  h_hex = true;
220  }
221  }
222  // Not HGCal
223  else {
224  h_box = true;
225 
226  std::vector<float> pnts(24);
227  fireworks::energyTower3DCorners(corners, (*it).second, pnts);
228  boxset->AddBox(&pnts[0]);
229  }
230  }
231 
232  if (h_hex) {
233  hex_boxset->RefitPlex();
234 
235  hex_boxset->CSCTakeAnyParentAsMaster();
236  if (!heatmap) {
237  hex_boxset->CSCApplyMainColorToMatchingChildren();
238  hex_boxset->CSCApplyMainTransparencyToMatchingChildren();
239  hex_boxset->SetMainColor(item()->modelInfo(iIndex).displayProperties().color());
240  hex_boxset->SetMainTransparency(item()->defaultDisplayProperties().transparency());
241  }
242  oItemHolder.AddElement(hex_boxset);
243  }
244 
245  if (h_box) {
246  boxset->RefitPlex();
247 
248  boxset->CSCTakeAnyParentAsMaster();
249  if (!heatmap) {
250  boxset->CSCApplyMainColorToMatchingChildren();
251  boxset->CSCApplyMainTransparencyToMatchingChildren();
252  boxset->SetMainColor(item()->modelInfo(iIndex).displayProperties().color());
253  boxset->SetMainTransparency(item()->defaultDisplayProperties().transparency());
254  }
255  oItemHolder.AddElement(boxset);
256  }
257 }
const math::XYZPoint & position() const
cluster centroid position
Definition: CaloCluster.h:153
const std::vector< std::pair< DetId, float > > & hitsAndFractions() const
Definition: CaloCluster.h:209
AlgoId algo() const
algorithm identifier
Definition: CaloCluster.h:189
const_reference_type get(ProductID id, size_t idx) const
Definition: ValueMap.h:144
DetId seed() const
return DetId of seed
Definition: CaloCluster.h:218
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:148
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 259 of file FWCaloClusterProxyBuilder.cc.

◆ classRegisterTypeName()

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

Definition at line 259 of file FWCaloClusterProxyBuilder.cc.

◆ classTypeName()

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

Definition at line 259 of file FWCaloClusterProxyBuilder.cc.

◆ classView()

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

Definition at line 259 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().