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
81 std::vector<std::pair<DetId, float>> clusterDetIds = iData.
hitsAndFractions();
84 TEveBoxSet *hex_boxset =
new TEveBoxSet();
86 hex_boxset->UseSingleColor();
87 hex_boxset->SetPickable(
true);
88 hex_boxset->Reset(TEveBoxSet::kBT_Hex,
true, 64);
89 hex_boxset->SetAntiFlick(
true);
92 TEveBoxSet *boxset =
new TEveBoxSet();
94 boxset->UseSingleColor();
95 boxset->SetPickable(
true);
96 boxset->Reset(TEveBoxSet::kBT_FreeBox,
true, 64);
97 boxset->SetAntiFlick(
true);
99 for (
std::vector<std::pair<DetId, float>>::iterator it = clusterDetIds.begin(), itEnd = clusterDetIds.end();
102 const uint8_t
type = ((it->first >> 28) & 0xF);
105 if (corners ==
nullptr)
109 if (iData.
algo() == 8 || (type >= 8 && type <= 10)) {
113 const bool z = (it->first >> 25) & 0x1;
122 if (parameters ==
nullptr || shapes ==
nullptr)
125 const int total_points = parameters[0];
126 const bool isScintillator = (total_points == 4);
141 if (ll != ((it->first >> (isScintillator ? 17 : 20)) & 0x1F))
146 if (iData.
seed().
rawId() == it->first.rawId()) {
147 TEveStraightLineSet *marker =
new TEveStraightLineSet;
148 marker->SetLineWidth(1);
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};
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);
161 oItemHolder.AddElement(marker);
163 TEveStraightLineSet *position_marker =
new TEveStraightLineSet;
164 position_marker->SetLineWidth(2);
165 position_marker->SetLineColor(kOrange);
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());
173 oItemHolder.AddElement(position_marker);
177 fmin((
item()->getConfig()->value<bool>(
"Cluster(0)/RecHit(1)") ?
hitmap->at(it->first)->energy()
184 if (isScintillator) {
185 const int total_vertices = 3 * total_points;
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];
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];
197 boxset->AddBox(&pnts[0]);
200 : boxset->DigitColor(64, 64, 64);
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, 90.0, shapes[3]);
215 : hex_boxset->DigitColor(64, 64, 64);
225 std::vector<float> pnts(24);
227 boxset->AddBox(&pnts[0]);
232 hex_boxset->RefitPlex();
234 hex_boxset->CSCTakeAnyParentAsMaster();
236 hex_boxset->CSCApplyMainColorToMatchingChildren();
237 hex_boxset->CSCApplyMainTransparencyToMatchingChildren();
238 hex_boxset->SetMainColor(
item()->modelInfo(iIndex).displayProperties().color());
239 hex_boxset->SetMainTransparency(
item()->defaultDisplayProperties().transparency());
241 oItemHolder.AddElement(hex_boxset);
247 boxset->CSCTakeAnyParentAsMaster();
249 boxset->CSCApplyMainColorToMatchingChildren();
250 boxset->CSCApplyMainTransparencyToMatchingChildren();
251 boxset->SetMainColor(
item()->modelInfo(iIndex).displayProperties().color());
252 boxset->SetMainTransparency(
item()->defaultDisplayProperties().transparency());
254 oItemHolder.AddElement(boxset);
const math::XYZPoint & position() const
cluster centroid position
const float * getParameters(unsigned int id) const
static constexpr uint8_t gradient_steps
constexpr uint32_t rawId() const
get the raw id
const FWEventItem * item() const
AlgoId algo() const
algorithm identifier
const float * getShapePars(unsigned int id) const
const std::vector< std::pair< DetId, float > > & hitsAndFractions() const
double energy() const
cluster energy
static constexpr uint8_t gradient[3][gradient_steps]
const_reference_type get(ProductID id, size_t idx) const
void energyTower3DCorners(const float *corners, float scale, std::vector< float > &, bool reflect=false)
edm::Handle< edm::ValueMap< std::pair< float, float > > > TimeValueMapHandle
DetId seed() const
return DetId of seed
const float * getCorners(unsigned int id) const
const FWGeometry * getGeom() const
std::unordered_map< DetId, const HGCRecHit * > * hitmap