From 64d08eda4c931c1d08066b3263f8fd4c9b04dcb4 Mon Sep 17 00:00:00 2001 From: Christos Papageorgakis Date: Thu, 3 Dec 2020 11:25:57 -0600 Subject: [PATCH 01/15] First commit for Tracksters proxy --- Fireworks/Calo/plugins/BuildFile.xml | 2 + .../Calo/plugins/FWTracksterProxyBuilder.cc | 72 +++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc diff --git a/Fireworks/Calo/plugins/BuildFile.xml b/Fireworks/Calo/plugins/BuildFile.xml index 31efc8e655dcc..1054a54c5017d 100644 --- a/Fireworks/Calo/plugins/BuildFile.xml +++ b/Fireworks/Calo/plugins/BuildFile.xml @@ -5,12 +5,14 @@ + + diff --git a/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc b/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc new file mode 100644 index 0000000000000..ea1c48f8e2b3d --- /dev/null +++ b/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc @@ -0,0 +1,72 @@ +#include "Fireworks/Core/interface/BuilderUtils.h" +#include "Fireworks/Core/interface/CmsShowCommon.h" +#include "Fireworks/Core/interface/Context.h" +#include "Fireworks/Core/interface/fwLog.h" +#include "Fireworks/Core/interface/FWParameters.h" +#include "Fireworks/Core/interface/FWColorManager.h" +#include "Fireworks/Core/interface/FWEventItem.h" +#include "Fireworks/Core/interface/FWGeometry.h" +#include "Fireworks/Core/interface/FWSimpleProxyBuilderTemplate.h" +#include "Fireworks/Core/interface/FWProxyBuilderConfiguration.h" +#include "Fireworks/Vertices/interface/TEveEllipsoid.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "DataFormats/VertexReco/interface/VertexFwd.h" +#include "DataFormats/HGCalReco/interface/Trackster.h" +#include "DataFormats/Math/interface/Vector3D.h" + +#include "TEvePointSet.h" +#include "TMatrixDEigen.h" +#include "TMatrixDSym.h" +#include "TDecompSVD.h" +#include "TVectorD.h" +#include "TEveTrans.h" +#include "TEveTrack.h" +#include "TEveTrackPropagator.h" +#include "TEveStraightLineSet.h" +#include "TGeoSphere.h" +#include "TEveGeoNode.h" +#include "TEveVSDStructs.h" +#include "TEveBoxSet.h" +#include "TEveGeoShape.h" + +class FWTracksterProxyBuilder : public FWSimpleProxyBuilderTemplate { +public: + FWTracksterProxyBuilder(void) {} + ~FWTracksterProxyBuilder(void) override {} + + REGISTER_PROXYBUILDER_METHODS(); + +private: + FWTracksterProxyBuilder(const FWTracksterProxyBuilder &) = delete; // stop default + const FWTracksterProxyBuilder &operator=(const FWTracksterProxyBuilder &) = delete; // stop default + + void build(const ticl::Trackster &iData, + unsigned int iIndex, + TEveElement &oItemHolder, + const FWViewContext *) override; +}; + +void FWTracksterProxyBuilder::build(const ticl::Trackster &iData, + unsigned int iIndex, + TEveElement &oItemHolder, + const FWViewContext *) { + const ticl::Trackster &trackster = iData; + const ticl::Trackster::Vector &barycenter = trackster.barycenter(); + + TEveGeoManagerHolder gmgr(TEveGeoShape::GetGeoMangeur()); + TEveEllipsoid* eveEllipsoid = new TEveEllipsoid("Ellipsoid", Form("Ellipsoid %d", iIndex)); + eveEllipsoid->RefPos().Set(barycenter.x(), barycenter.y(), barycenter.z()); + eveEllipsoid->SetScale(1.0); + eveEllipsoid->SetLineWidth(2); + setupAddElement(eveEllipsoid, &oItemHolder); + eveEllipsoid->SetMainTransparency(TMath::Min(100, 80 + item()->defaultDisplayProperties().transparency() / 5)); + Color_t color = item()->getConfig()->value("Ellipse Color Index"); + // eveEllipsoid->SetFillColor(item()->defaultDisplayProperties().color()); + // eveEllipsoid->SetLineColor(item()->defaultDisplayProperties().color()); + eveEllipsoid->SetMainColor(color + context().colorManager()->offsetOfLimitedColors()); +} + +REGISTER_FWPROXYBUILDER(FWTracksterProxyBuilder, + ticl::Trackster, + "Trackster", + FWViewType::k3DBit | FWViewType::kAllRPZBits); From d2033f32deecab396e3e7954d3d3cb6a0601db12 Mon Sep 17 00:00:00 2001 From: Christos Papageorgakis Date: Sat, 5 Dec 2020 19:49:12 -0600 Subject: [PATCH 02/15] First working version of Tracksters proxy --- .../Calo/plugins/FWTracksterProxyBuilder.cc | 47 +++++-------------- 1 file changed, 12 insertions(+), 35 deletions(-) diff --git a/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc b/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc index ea1c48f8e2b3d..cb47f2418a4fa 100644 --- a/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc +++ b/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc @@ -1,32 +1,8 @@ -#include "Fireworks/Core/interface/BuilderUtils.h" -#include "Fireworks/Core/interface/CmsShowCommon.h" -#include "Fireworks/Core/interface/Context.h" -#include "Fireworks/Core/interface/fwLog.h" -#include "Fireworks/Core/interface/FWParameters.h" -#include "Fireworks/Core/interface/FWColorManager.h" -#include "Fireworks/Core/interface/FWEventItem.h" -#include "Fireworks/Core/interface/FWGeometry.h" #include "Fireworks/Core/interface/FWSimpleProxyBuilderTemplate.h" -#include "Fireworks/Core/interface/FWProxyBuilderConfiguration.h" -#include "Fireworks/Vertices/interface/TEveEllipsoid.h" -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" #include "DataFormats/HGCalReco/interface/Trackster.h" -#include "DataFormats/Math/interface/Vector3D.h" -#include "TEvePointSet.h" -#include "TMatrixDEigen.h" -#include "TMatrixDSym.h" -#include "TDecompSVD.h" -#include "TVectorD.h" #include "TEveTrans.h" -#include "TEveTrack.h" -#include "TEveTrackPropagator.h" -#include "TEveStraightLineSet.h" #include "TGeoSphere.h" -#include "TEveGeoNode.h" -#include "TEveVSDStructs.h" -#include "TEveBoxSet.h" #include "TEveGeoShape.h" class FWTracksterProxyBuilder : public FWSimpleProxyBuilderTemplate { @@ -52,18 +28,19 @@ void FWTracksterProxyBuilder::build(const ticl::Trackster &iData, const FWViewContext *) { const ticl::Trackster &trackster = iData; const ticl::Trackster::Vector &barycenter = trackster.barycenter(); - - TEveGeoManagerHolder gmgr(TEveGeoShape::GetGeoMangeur()); - TEveEllipsoid* eveEllipsoid = new TEveEllipsoid("Ellipsoid", Form("Ellipsoid %d", iIndex)); - eveEllipsoid->RefPos().Set(barycenter.x(), barycenter.y(), barycenter.z()); - eveEllipsoid->SetScale(1.0); - eveEllipsoid->SetLineWidth(2); + const std::array &eigenvalues = trackster.eigenvalues(); + const double theta = barycenter.Theta(); + const double phi = barycenter.Phi(); + + auto eveEllipsoid = new TEveGeoShape("Ellipsoid"); + auto sphere = new TGeoSphere(0., 5.); + eveEllipsoid->SetShape(sphere); + eveEllipsoid->SetMainColor(kCyan); + eveEllipsoid->InitMainTrans(); + eveEllipsoid->RefMainTrans().Move3PF(barycenter.x(), barycenter.y(), barycenter.z()); + eveEllipsoid->RefMainTrans().SetRotByAnyAngles(theta,phi,0.,"xzy"); + eveEllipsoid->RefMainTrans().SetScale(eigenvalues[2], eigenvalues[1], eigenvalues[0]); setupAddElement(eveEllipsoid, &oItemHolder); - eveEllipsoid->SetMainTransparency(TMath::Min(100, 80 + item()->defaultDisplayProperties().transparency() / 5)); - Color_t color = item()->getConfig()->value("Ellipse Color Index"); - // eveEllipsoid->SetFillColor(item()->defaultDisplayProperties().color()); - // eveEllipsoid->SetLineColor(item()->defaultDisplayProperties().color()); - eveEllipsoid->SetMainColor(color + context().colorManager()->offsetOfLimitedColors()); } REGISTER_FWPROXYBUILDER(FWTracksterProxyBuilder, From 878621d1e85290d0075ba9bb7a9a6b6c5b0bcbd8 Mon Sep 17 00:00:00 2001 From: Christos Papageorgakis Date: Sat, 5 Dec 2020 20:06:55 -0600 Subject: [PATCH 03/15] Remove unecessary lines --- Fireworks/Calo/plugins/BuildFile.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/Fireworks/Calo/plugins/BuildFile.xml b/Fireworks/Calo/plugins/BuildFile.xml index 1054a54c5017d..31efc8e655dcc 100644 --- a/Fireworks/Calo/plugins/BuildFile.xml +++ b/Fireworks/Calo/plugins/BuildFile.xml @@ -5,14 +5,12 @@ - - From bc1b207994a16417097b9bb1b6aae976d855c3f0 Mon Sep 17 00:00:00 2001 From: Christos Papageorgakis Date: Fri, 11 Dec 2020 19:43:53 -0600 Subject: [PATCH 04/15] Apply code formatting --- Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc b/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc index cb47f2418a4fa..17b58984451fa 100644 --- a/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc +++ b/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc @@ -23,9 +23,9 @@ class FWTracksterProxyBuilder : public FWSimpleProxyBuilderTemplate &eigenvalues = trackster.eigenvalues(); @@ -38,7 +38,7 @@ void FWTracksterProxyBuilder::build(const ticl::Trackster &iData, eveEllipsoid->SetMainColor(kCyan); eveEllipsoid->InitMainTrans(); eveEllipsoid->RefMainTrans().Move3PF(barycenter.x(), barycenter.y(), barycenter.z()); - eveEllipsoid->RefMainTrans().SetRotByAnyAngles(theta,phi,0.,"xzy"); + eveEllipsoid->RefMainTrans().SetRotByAnyAngles(theta, phi, 0., "xzy"); eveEllipsoid->RefMainTrans().SetScale(eigenvalues[2], eigenvalues[1], eigenvalues[0]); setupAddElement(eveEllipsoid, &oItemHolder); } From 6c3fe24da42809252a2359c32204bd7262ac2c28 Mon Sep 17 00:00:00 2001 From: Christos Papageorgakis Date: Fri, 11 Dec 2020 19:49:38 -0600 Subject: [PATCH 05/15] First commit --- .../plugins/FWTracksterHitsProxyBuilder.cc | 296 ++++++++++++++++++ 1 file changed, 296 insertions(+) create mode 100644 Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc diff --git a/Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc b/Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc new file mode 100644 index 0000000000000..0580b2df5ed9a --- /dev/null +++ b/Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc @@ -0,0 +1,296 @@ +#include "Fireworks/Calo/interface/FWHeatmapProxyBuilderTemplate.h" +#include "Fireworks/Core/interface/FWEventItem.h" +#include "Fireworks/Core/interface/FWGeometry.h" +#include "Fireworks/Core/interface/BuilderUtils.h" +#include "DataFormats/HGCalReco/interface/Trackster.h" +#include "DataFormats/CaloRecHit/interface/CaloCluster.h" +#include "DataFormats/Common/interface/ValueMap.h" + +#include "TEveBoxSet.h" +#include "TEveStraightLineSet.h" + +class FWTracksterHitsProxyBuilder : public FWHeatmapProxyBuilderTemplate { +public: + FWTracksterHitsProxyBuilder(void) {} + ~FWTracksterHitsProxyBuilder(void) override {} + + REGISTER_PROXYBUILDER_METHODS(); + +private: + edm::Handle>> TimeValueMapHandle; + edm::Handle> layerClustersHandle; + double timeLowerBound, timeUpperBound; + long layer; + double saturation_energy; + bool heatmap; + bool z_plus; + bool z_minus; + bool enableTimeFilter; + bool enableSeedLines; + bool enablePositionLines; + bool enableEdges; + + FWTracksterHitsProxyBuilder(const FWTracksterHitsProxyBuilder &) = delete; // stop default + const FWTracksterHitsProxyBuilder &operator=(const FWTracksterHitsProxyBuilder &) = delete; // stop default + + void setItem(const FWEventItem *iItem) override; + + void build(const FWEventItem *iItem, TEveElementList *product, const FWViewContext *vc) override; + void build(const ticl::Trackster &iData, + unsigned int iIndex, + TEveElement &oItemHolder, + const FWViewContext *) override; +}; + +void FWTracksterHitsProxyBuilder::setItem(const FWEventItem *iItem) { + FWHeatmapProxyBuilderTemplate::setItem(iItem); + if (iItem) { + iItem->getConfig()->assertParam("Cluster(0)/RecHit(1)", false); + iItem->getConfig()->assertParam("EnableSeedLines", false); + iItem->getConfig()->assertParam("EnablePositionLines", false); + iItem->getConfig()->assertParam("EnableEdges", false); + iItem->getConfig()->assertParam("EnableTimeFilter", false); + iItem->getConfig()->assertParam("TimeLowerBound(ns)", 0.01, 0.0, 75.0); + iItem->getConfig()->assertParam("TimeUpperBound(ns)", 0.01, 0.0, 75.0); + } +} + +void FWTracksterHitsProxyBuilder::build(const FWEventItem *iItem, TEveElementList *product, const FWViewContext *vc) { + iItem->getEvent()->getByLabel(edm::InputTag("hgcalLayerClusters", "timeLayerCluster"), TimeValueMapHandle); + iItem->getEvent()->getByLabel(edm::InputTag("hgcalLayerClusters"), layerClustersHandle); + if (TimeValueMapHandle.isValid()) { + timeLowerBound = std::min(item()->getConfig()->value("TimeLowerBound(ns)"), + item()->getConfig()->value("TimeUpperBound(ns)")); + timeUpperBound = std::max(item()->getConfig()->value("TimeLowerBound(ns)"), + item()->getConfig()->value("TimeUpperBound(ns)")); + } else { + std::cerr << "Warning: couldn't locate 'timeLayerCluster' ValueMap in root file." << std::endl; + } + + if (!layerClustersHandle.isValid()) { + std::cerr << "Warning: couldn't locate 'hgcalLayerClusters' collection in root file." << std::endl; + } + + layer = item()->getConfig()->value("Layer"); + saturation_energy = item()->getConfig()->value("EnergyCutOff"); + heatmap = item()->getConfig()->value("Heatmap"); + z_plus = item()->getConfig()->value("Z+"); + z_minus = item()->getConfig()->value("Z-"); + enableTimeFilter = item()->getConfig()->value("EnableTimeFilter"); + enableSeedLines = item()->getConfig()->value("EnableSeedLines"); + enablePositionLines = item()->getConfig()->value("EnablePositionLines"); + enableEdges = item()->getConfig()->value("EnableEdges"); + + FWHeatmapProxyBuilderTemplate::build(iItem, product, vc); +} + +void FWTracksterHitsProxyBuilder::build(const ticl::Trackster &iData, + unsigned int iIndex, + TEveElement &oItemHolder, + const FWViewContext *) { + if (enableTimeFilter && TimeValueMapHandle.isValid()) { + const float time = TimeValueMapHandle->get(iIndex).first; + if (time < timeLowerBound || time > timeUpperBound) + return; + } + + const ticl::Trackster &trackster = iData; + const size_t N = trackster.vertices().size(); + const std::vector& layerClusters = *layerClustersHandle; + + bool h_hex(false); + TEveBoxSet *hex_boxset = new TEveBoxSet(); + if (!heatmap) + hex_boxset->UseSingleColor(); + hex_boxset->SetPickable(true); + hex_boxset->Reset(TEveBoxSet::kBT_Hex, true, 64); + hex_boxset->SetAntiFlick(true); + + bool h_box(false); + TEveBoxSet *boxset = new TEveBoxSet(); + if (!heatmap) + boxset->UseSingleColor(); + boxset->SetPickable(true); + boxset->Reset(TEveBoxSet::kBT_FreeBox, true, 64); + boxset->SetAntiFlick(true); + + for (size_t i = 0; i < N; ++i) { + const reco::CaloCluster layerCluster = layerClusters[trackster.vertices(i)]; + std::vector> clusterDetIds = layerCluster.hitsAndFractions(); + + for (std::vector>::iterator it = clusterDetIds.begin(), itEnd = clusterDetIds.end(); + it != itEnd; + ++it) { + const uint8_t type = ((it->first >> 28) & 0xF); + + const float *corners = item()->getGeom()->getCorners(it->first); + if (corners == nullptr) + continue; + + if (heatmap && hitmap->find(it->first) == hitmap->end()) + continue; + + const bool z = (it->first >> 25) & 0x1; + + // discard everything thats not at the side that we are intersted in + if (((z_plus & z_minus) != 1) && (((z_plus | z_minus) == 0) || !(z == z_minus || z == !z_plus))) + continue; + + const float *parameters = item()->getGeom()->getParameters(it->first); + const float *shapes = item()->getGeom()->getShapePars(it->first); + + if (parameters == nullptr || shapes == nullptr) + continue; + + const int total_points = parameters[0]; + const bool isScintillator = (total_points == 4); + + uint8_t ll = layer; + if (layer > 0) { + if (layer > 28) { + if (type == 8) { + continue; + } + ll -= 28; + } else { + if (type != 8) { + continue; + } + } + + if (ll != ((it->first >> (isScintillator ? 17 : 20)) & 0x1F)) + continue; + } + + // seed and cluster position + if (layerCluster.seed().rawId() == it->first.rawId()) { + const float crossScale = 1.0f + fmin(layerCluster.energy(), 5.0f); + if (enableSeedLines) { + TEveStraightLineSet *marker = new TEveStraightLineSet; + marker->SetLineWidth(1); + + // center of RecHit + const float center[3] = {corners[total_points * 3 + 0], + corners[total_points * 3 + 1], + corners[total_points * 3 + 2] + shapes[3] * 0.5f}; + + // draw 3D cross + marker->AddLine(center[0] - crossScale, center[1], center[2], center[0] + crossScale, center[1], center[2]); + marker->AddLine(center[0], center[1] - crossScale, center[2], center[0], center[1] + crossScale, center[2]); + marker->AddLine(center[0], center[1], center[2] - crossScale, center[0], center[1], center[2] + crossScale); + + oItemHolder.AddElement(marker); + } + + if (enablePositionLines) { + TEveStraightLineSet *position_marker = new TEveStraightLineSet; + position_marker->SetLineWidth(2); + position_marker->SetLineColor(kOrange); + auto const &pos = layerCluster.position(); + const float position_crossScale = crossScale * 0.5; + position_marker->AddLine( + pos.x() - position_crossScale, pos.y(), pos.z(), pos.x() + position_crossScale, pos.y(), pos.z()); + position_marker->AddLine( + pos.x(), pos.y() - position_crossScale, pos.z(), pos.x(), pos.y() + position_crossScale, pos.z()); + + oItemHolder.AddElement(position_marker); + } + } + + const float energy = + fmin((item()->getConfig()->value("Cluster(0)/RecHit(1)") ? hitmap->at(it->first)->energy() + : layerCluster.energy()) / + saturation_energy, + 1.0f); + const uint8_t colorFactor = gradient_steps * energy; + + // Scintillator + if (isScintillator) { + const int total_vertices = 3 * total_points; + + std::vector pnts(24); + for (int i = 0; i < total_points; ++i) { + pnts[i * 3 + 0] = corners[i * 3]; + pnts[i * 3 + 1] = corners[i * 3 + 1]; + pnts[i * 3 + 2] = corners[i * 3 + 2]; + + pnts[(i * 3 + 0) + total_vertices] = corners[i * 3]; + pnts[(i * 3 + 1) + total_vertices] = corners[i * 3 + 1]; + pnts[(i * 3 + 2) + total_vertices] = corners[i * 3 + 2] + shapes[3]; + } + boxset->AddBox(&pnts[0]); + if (heatmap) { + energy ? boxset->DigitColor(gradient[0][colorFactor], gradient[1][colorFactor], gradient[2][colorFactor]) + : boxset->DigitColor(64, 64, 64); + } + + h_box = true; + } + // Silicon + else { + constexpr int offset = 9; + + float centerX = (corners[6] + corners[6 + offset]) / 2; + float centerY = (corners[7] + corners[7 + offset]) / 2; + float radius = fabs(corners[6] - corners[6 + offset]) / 2; + hex_boxset->AddHex(TEveVector(centerX, centerY, corners[2]), radius, 90.0, shapes[3]); + if (heatmap) { + energy ? hex_boxset->DigitColor(gradient[0][colorFactor], gradient[1][colorFactor], gradient[2][colorFactor]) + : hex_boxset->DigitColor(64, 64, 64); + } + + h_hex = true; + } + } + } + + if (enableEdges) { + auto &edges = trackster.edges(); + + for (auto edge : edges) { + auto doublet = std::make_pair(layerClusters[edge[0]],layerClusters[edge[1]]); + TEveStraightLineSet *marker = new TEveStraightLineSet; + marker->SetLineWidth(2); + marker->SetLineColor(kRed); + + // draw 3D cross + marker->AddLine(doublet.first.x(), doublet.first.y(), doublet.first.z(), + doublet.second.x(), doublet.second.y(), doublet.second.z()); + + std::cout << doublet.first.x() << ", " << doublet.first.y() << ", " << doublet.first.z() + << ", " << doublet.second.x() << ", " << doublet.second.y() << ", " << doublet.second.z() + << std::endl; + + oItemHolder.AddElement(marker); + } + } + + + if (h_hex) { + hex_boxset->RefitPlex(); + + hex_boxset->CSCTakeAnyParentAsMaster(); + if (!heatmap) { + hex_boxset->CSCApplyMainColorToMatchingChildren(); + hex_boxset->CSCApplyMainTransparencyToMatchingChildren(); + hex_boxset->SetMainColor(item()->modelInfo(iIndex).displayProperties().color()); + hex_boxset->SetMainTransparency(item()->defaultDisplayProperties().transparency()); + } + oItemHolder.AddElement(hex_boxset); + } + + if (h_box) { + boxset->RefitPlex(); + + boxset->CSCTakeAnyParentAsMaster(); + if (!heatmap) { + boxset->CSCApplyMainColorToMatchingChildren(); + boxset->CSCApplyMainTransparencyToMatchingChildren(); + boxset->SetMainColor(item()->modelInfo(iIndex).displayProperties().color()); + boxset->SetMainTransparency(item()->defaultDisplayProperties().transparency()); + } + oItemHolder.AddElement(boxset); + } +} + +REGISTER_FWPROXYBUILDER(FWTracksterHitsProxyBuilder, ticl::Trackster, "Trackster hits", FWViewType::kISpyBit); From ef98a144034546321eb5c01790c4cc06d8f591f5 Mon Sep 17 00:00:00 2001 From: Christos Papageorgakis Date: Fri, 11 Dec 2020 19:50:54 -0600 Subject: [PATCH 06/15] Fix TimeValueMapHandle type --- Fireworks/Calo/plugins/FWCaloClusterProxyBuilder.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Fireworks/Calo/plugins/FWCaloClusterProxyBuilder.cc b/Fireworks/Calo/plugins/FWCaloClusterProxyBuilder.cc index f39746cfe35e1..37ea6b506ce67 100644 --- a/Fireworks/Calo/plugins/FWCaloClusterProxyBuilder.cc +++ b/Fireworks/Calo/plugins/FWCaloClusterProxyBuilder.cc @@ -16,7 +16,7 @@ class FWCaloClusterProxyBuilder : public FWHeatmapProxyBuilderTemplate> TimeValueMapHandle; + edm::Handle>> TimeValueMapHandle; double timeLowerBound, timeUpperBound; long layer; double saturation_energy; @@ -73,7 +73,7 @@ void FWCaloClusterProxyBuilder::build(const reco::CaloCluster &iData, TEveElement &oItemHolder, const FWViewContext *) { if (enableTimeFilter && TimeValueMapHandle.isValid()) { - const float time = TimeValueMapHandle->get(iIndex); + const float time = TimeValueMapHandle->get(iIndex).first; if (time < timeLowerBound || time > timeUpperBound) return; } From 4ff18b52e1824d9e03304c501c67661e45c34a48 Mon Sep 17 00:00:00 2001 From: Christos Papageorgakis Date: Thu, 3 Dec 2020 11:25:57 -0600 Subject: [PATCH 07/15] First commit for Tracksters proxy --- Fireworks/Calo/plugins/BuildFile.xml | 2 + .../Calo/plugins/FWTracksterProxyBuilder.cc | 72 +++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc diff --git a/Fireworks/Calo/plugins/BuildFile.xml b/Fireworks/Calo/plugins/BuildFile.xml index 31efc8e655dcc..1054a54c5017d 100644 --- a/Fireworks/Calo/plugins/BuildFile.xml +++ b/Fireworks/Calo/plugins/BuildFile.xml @@ -5,12 +5,14 @@ + + diff --git a/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc b/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc new file mode 100644 index 0000000000000..ea1c48f8e2b3d --- /dev/null +++ b/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc @@ -0,0 +1,72 @@ +#include "Fireworks/Core/interface/BuilderUtils.h" +#include "Fireworks/Core/interface/CmsShowCommon.h" +#include "Fireworks/Core/interface/Context.h" +#include "Fireworks/Core/interface/fwLog.h" +#include "Fireworks/Core/interface/FWParameters.h" +#include "Fireworks/Core/interface/FWColorManager.h" +#include "Fireworks/Core/interface/FWEventItem.h" +#include "Fireworks/Core/interface/FWGeometry.h" +#include "Fireworks/Core/interface/FWSimpleProxyBuilderTemplate.h" +#include "Fireworks/Core/interface/FWProxyBuilderConfiguration.h" +#include "Fireworks/Vertices/interface/TEveEllipsoid.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "DataFormats/VertexReco/interface/VertexFwd.h" +#include "DataFormats/HGCalReco/interface/Trackster.h" +#include "DataFormats/Math/interface/Vector3D.h" + +#include "TEvePointSet.h" +#include "TMatrixDEigen.h" +#include "TMatrixDSym.h" +#include "TDecompSVD.h" +#include "TVectorD.h" +#include "TEveTrans.h" +#include "TEveTrack.h" +#include "TEveTrackPropagator.h" +#include "TEveStraightLineSet.h" +#include "TGeoSphere.h" +#include "TEveGeoNode.h" +#include "TEveVSDStructs.h" +#include "TEveBoxSet.h" +#include "TEveGeoShape.h" + +class FWTracksterProxyBuilder : public FWSimpleProxyBuilderTemplate { +public: + FWTracksterProxyBuilder(void) {} + ~FWTracksterProxyBuilder(void) override {} + + REGISTER_PROXYBUILDER_METHODS(); + +private: + FWTracksterProxyBuilder(const FWTracksterProxyBuilder &) = delete; // stop default + const FWTracksterProxyBuilder &operator=(const FWTracksterProxyBuilder &) = delete; // stop default + + void build(const ticl::Trackster &iData, + unsigned int iIndex, + TEveElement &oItemHolder, + const FWViewContext *) override; +}; + +void FWTracksterProxyBuilder::build(const ticl::Trackster &iData, + unsigned int iIndex, + TEveElement &oItemHolder, + const FWViewContext *) { + const ticl::Trackster &trackster = iData; + const ticl::Trackster::Vector &barycenter = trackster.barycenter(); + + TEveGeoManagerHolder gmgr(TEveGeoShape::GetGeoMangeur()); + TEveEllipsoid* eveEllipsoid = new TEveEllipsoid("Ellipsoid", Form("Ellipsoid %d", iIndex)); + eveEllipsoid->RefPos().Set(barycenter.x(), barycenter.y(), barycenter.z()); + eveEllipsoid->SetScale(1.0); + eveEllipsoid->SetLineWidth(2); + setupAddElement(eveEllipsoid, &oItemHolder); + eveEllipsoid->SetMainTransparency(TMath::Min(100, 80 + item()->defaultDisplayProperties().transparency() / 5)); + Color_t color = item()->getConfig()->value("Ellipse Color Index"); + // eveEllipsoid->SetFillColor(item()->defaultDisplayProperties().color()); + // eveEllipsoid->SetLineColor(item()->defaultDisplayProperties().color()); + eveEllipsoid->SetMainColor(color + context().colorManager()->offsetOfLimitedColors()); +} + +REGISTER_FWPROXYBUILDER(FWTracksterProxyBuilder, + ticl::Trackster, + "Trackster", + FWViewType::k3DBit | FWViewType::kAllRPZBits); From 31bb19d74dd26658b66d5e93604aa9f16a43c574 Mon Sep 17 00:00:00 2001 From: Christos Papageorgakis Date: Sat, 5 Dec 2020 19:49:12 -0600 Subject: [PATCH 08/15] First working version of Tracksters proxy --- .../Calo/plugins/FWTracksterProxyBuilder.cc | 47 +++++-------------- 1 file changed, 12 insertions(+), 35 deletions(-) diff --git a/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc b/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc index ea1c48f8e2b3d..cb47f2418a4fa 100644 --- a/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc +++ b/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc @@ -1,32 +1,8 @@ -#include "Fireworks/Core/interface/BuilderUtils.h" -#include "Fireworks/Core/interface/CmsShowCommon.h" -#include "Fireworks/Core/interface/Context.h" -#include "Fireworks/Core/interface/fwLog.h" -#include "Fireworks/Core/interface/FWParameters.h" -#include "Fireworks/Core/interface/FWColorManager.h" -#include "Fireworks/Core/interface/FWEventItem.h" -#include "Fireworks/Core/interface/FWGeometry.h" #include "Fireworks/Core/interface/FWSimpleProxyBuilderTemplate.h" -#include "Fireworks/Core/interface/FWProxyBuilderConfiguration.h" -#include "Fireworks/Vertices/interface/TEveEllipsoid.h" -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" #include "DataFormats/HGCalReco/interface/Trackster.h" -#include "DataFormats/Math/interface/Vector3D.h" -#include "TEvePointSet.h" -#include "TMatrixDEigen.h" -#include "TMatrixDSym.h" -#include "TDecompSVD.h" -#include "TVectorD.h" #include "TEveTrans.h" -#include "TEveTrack.h" -#include "TEveTrackPropagator.h" -#include "TEveStraightLineSet.h" #include "TGeoSphere.h" -#include "TEveGeoNode.h" -#include "TEveVSDStructs.h" -#include "TEveBoxSet.h" #include "TEveGeoShape.h" class FWTracksterProxyBuilder : public FWSimpleProxyBuilderTemplate { @@ -52,18 +28,19 @@ void FWTracksterProxyBuilder::build(const ticl::Trackster &iData, const FWViewContext *) { const ticl::Trackster &trackster = iData; const ticl::Trackster::Vector &barycenter = trackster.barycenter(); - - TEveGeoManagerHolder gmgr(TEveGeoShape::GetGeoMangeur()); - TEveEllipsoid* eveEllipsoid = new TEveEllipsoid("Ellipsoid", Form("Ellipsoid %d", iIndex)); - eveEllipsoid->RefPos().Set(barycenter.x(), barycenter.y(), barycenter.z()); - eveEllipsoid->SetScale(1.0); - eveEllipsoid->SetLineWidth(2); + const std::array &eigenvalues = trackster.eigenvalues(); + const double theta = barycenter.Theta(); + const double phi = barycenter.Phi(); + + auto eveEllipsoid = new TEveGeoShape("Ellipsoid"); + auto sphere = new TGeoSphere(0., 5.); + eveEllipsoid->SetShape(sphere); + eveEllipsoid->SetMainColor(kCyan); + eveEllipsoid->InitMainTrans(); + eveEllipsoid->RefMainTrans().Move3PF(barycenter.x(), barycenter.y(), barycenter.z()); + eveEllipsoid->RefMainTrans().SetRotByAnyAngles(theta,phi,0.,"xzy"); + eveEllipsoid->RefMainTrans().SetScale(eigenvalues[2], eigenvalues[1], eigenvalues[0]); setupAddElement(eveEllipsoid, &oItemHolder); - eveEllipsoid->SetMainTransparency(TMath::Min(100, 80 + item()->defaultDisplayProperties().transparency() / 5)); - Color_t color = item()->getConfig()->value("Ellipse Color Index"); - // eveEllipsoid->SetFillColor(item()->defaultDisplayProperties().color()); - // eveEllipsoid->SetLineColor(item()->defaultDisplayProperties().color()); - eveEllipsoid->SetMainColor(color + context().colorManager()->offsetOfLimitedColors()); } REGISTER_FWPROXYBUILDER(FWTracksterProxyBuilder, From 2147505e1ea8fe50f1434c25366a97798bf98e31 Mon Sep 17 00:00:00 2001 From: Christos Papageorgakis Date: Sat, 5 Dec 2020 20:06:55 -0600 Subject: [PATCH 09/15] Remove unecessary lines --- Fireworks/Calo/plugins/BuildFile.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/Fireworks/Calo/plugins/BuildFile.xml b/Fireworks/Calo/plugins/BuildFile.xml index 1054a54c5017d..31efc8e655dcc 100644 --- a/Fireworks/Calo/plugins/BuildFile.xml +++ b/Fireworks/Calo/plugins/BuildFile.xml @@ -5,14 +5,12 @@ - - From 673e7736cea3a7f9dce43c555efb44ae512d0435 Mon Sep 17 00:00:00 2001 From: Christos Papageorgakis Date: Fri, 11 Dec 2020 19:43:53 -0600 Subject: [PATCH 10/15] Apply code formatting --- Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc b/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc index cb47f2418a4fa..17b58984451fa 100644 --- a/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc +++ b/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc @@ -23,9 +23,9 @@ class FWTracksterProxyBuilder : public FWSimpleProxyBuilderTemplate &eigenvalues = trackster.eigenvalues(); @@ -38,7 +38,7 @@ void FWTracksterProxyBuilder::build(const ticl::Trackster &iData, eveEllipsoid->SetMainColor(kCyan); eveEllipsoid->InitMainTrans(); eveEllipsoid->RefMainTrans().Move3PF(barycenter.x(), barycenter.y(), barycenter.z()); - eveEllipsoid->RefMainTrans().SetRotByAnyAngles(theta,phi,0.,"xzy"); + eveEllipsoid->RefMainTrans().SetRotByAnyAngles(theta, phi, 0., "xzy"); eveEllipsoid->RefMainTrans().SetScale(eigenvalues[2], eigenvalues[1], eigenvalues[0]); setupAddElement(eveEllipsoid, &oItemHolder); } From 5dd8a3e282b8f9ea4c4a874efca3bb6abc3ef0e6 Mon Sep 17 00:00:00 2001 From: Christos Papageorgakis Date: Fri, 11 Dec 2020 19:49:38 -0600 Subject: [PATCH 11/15] First commit --- .../plugins/FWTracksterHitsProxyBuilder.cc | 296 ++++++++++++++++++ 1 file changed, 296 insertions(+) create mode 100644 Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc diff --git a/Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc b/Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc new file mode 100644 index 0000000000000..0580b2df5ed9a --- /dev/null +++ b/Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc @@ -0,0 +1,296 @@ +#include "Fireworks/Calo/interface/FWHeatmapProxyBuilderTemplate.h" +#include "Fireworks/Core/interface/FWEventItem.h" +#include "Fireworks/Core/interface/FWGeometry.h" +#include "Fireworks/Core/interface/BuilderUtils.h" +#include "DataFormats/HGCalReco/interface/Trackster.h" +#include "DataFormats/CaloRecHit/interface/CaloCluster.h" +#include "DataFormats/Common/interface/ValueMap.h" + +#include "TEveBoxSet.h" +#include "TEveStraightLineSet.h" + +class FWTracksterHitsProxyBuilder : public FWHeatmapProxyBuilderTemplate { +public: + FWTracksterHitsProxyBuilder(void) {} + ~FWTracksterHitsProxyBuilder(void) override {} + + REGISTER_PROXYBUILDER_METHODS(); + +private: + edm::Handle>> TimeValueMapHandle; + edm::Handle> layerClustersHandle; + double timeLowerBound, timeUpperBound; + long layer; + double saturation_energy; + bool heatmap; + bool z_plus; + bool z_minus; + bool enableTimeFilter; + bool enableSeedLines; + bool enablePositionLines; + bool enableEdges; + + FWTracksterHitsProxyBuilder(const FWTracksterHitsProxyBuilder &) = delete; // stop default + const FWTracksterHitsProxyBuilder &operator=(const FWTracksterHitsProxyBuilder &) = delete; // stop default + + void setItem(const FWEventItem *iItem) override; + + void build(const FWEventItem *iItem, TEveElementList *product, const FWViewContext *vc) override; + void build(const ticl::Trackster &iData, + unsigned int iIndex, + TEveElement &oItemHolder, + const FWViewContext *) override; +}; + +void FWTracksterHitsProxyBuilder::setItem(const FWEventItem *iItem) { + FWHeatmapProxyBuilderTemplate::setItem(iItem); + if (iItem) { + iItem->getConfig()->assertParam("Cluster(0)/RecHit(1)", false); + iItem->getConfig()->assertParam("EnableSeedLines", false); + iItem->getConfig()->assertParam("EnablePositionLines", false); + iItem->getConfig()->assertParam("EnableEdges", false); + iItem->getConfig()->assertParam("EnableTimeFilter", false); + iItem->getConfig()->assertParam("TimeLowerBound(ns)", 0.01, 0.0, 75.0); + iItem->getConfig()->assertParam("TimeUpperBound(ns)", 0.01, 0.0, 75.0); + } +} + +void FWTracksterHitsProxyBuilder::build(const FWEventItem *iItem, TEveElementList *product, const FWViewContext *vc) { + iItem->getEvent()->getByLabel(edm::InputTag("hgcalLayerClusters", "timeLayerCluster"), TimeValueMapHandle); + iItem->getEvent()->getByLabel(edm::InputTag("hgcalLayerClusters"), layerClustersHandle); + if (TimeValueMapHandle.isValid()) { + timeLowerBound = std::min(item()->getConfig()->value("TimeLowerBound(ns)"), + item()->getConfig()->value("TimeUpperBound(ns)")); + timeUpperBound = std::max(item()->getConfig()->value("TimeLowerBound(ns)"), + item()->getConfig()->value("TimeUpperBound(ns)")); + } else { + std::cerr << "Warning: couldn't locate 'timeLayerCluster' ValueMap in root file." << std::endl; + } + + if (!layerClustersHandle.isValid()) { + std::cerr << "Warning: couldn't locate 'hgcalLayerClusters' collection in root file." << std::endl; + } + + layer = item()->getConfig()->value("Layer"); + saturation_energy = item()->getConfig()->value("EnergyCutOff"); + heatmap = item()->getConfig()->value("Heatmap"); + z_plus = item()->getConfig()->value("Z+"); + z_minus = item()->getConfig()->value("Z-"); + enableTimeFilter = item()->getConfig()->value("EnableTimeFilter"); + enableSeedLines = item()->getConfig()->value("EnableSeedLines"); + enablePositionLines = item()->getConfig()->value("EnablePositionLines"); + enableEdges = item()->getConfig()->value("EnableEdges"); + + FWHeatmapProxyBuilderTemplate::build(iItem, product, vc); +} + +void FWTracksterHitsProxyBuilder::build(const ticl::Trackster &iData, + unsigned int iIndex, + TEveElement &oItemHolder, + const FWViewContext *) { + if (enableTimeFilter && TimeValueMapHandle.isValid()) { + const float time = TimeValueMapHandle->get(iIndex).first; + if (time < timeLowerBound || time > timeUpperBound) + return; + } + + const ticl::Trackster &trackster = iData; + const size_t N = trackster.vertices().size(); + const std::vector& layerClusters = *layerClustersHandle; + + bool h_hex(false); + TEveBoxSet *hex_boxset = new TEveBoxSet(); + if (!heatmap) + hex_boxset->UseSingleColor(); + hex_boxset->SetPickable(true); + hex_boxset->Reset(TEveBoxSet::kBT_Hex, true, 64); + hex_boxset->SetAntiFlick(true); + + bool h_box(false); + TEveBoxSet *boxset = new TEveBoxSet(); + if (!heatmap) + boxset->UseSingleColor(); + boxset->SetPickable(true); + boxset->Reset(TEveBoxSet::kBT_FreeBox, true, 64); + boxset->SetAntiFlick(true); + + for (size_t i = 0; i < N; ++i) { + const reco::CaloCluster layerCluster = layerClusters[trackster.vertices(i)]; + std::vector> clusterDetIds = layerCluster.hitsAndFractions(); + + for (std::vector>::iterator it = clusterDetIds.begin(), itEnd = clusterDetIds.end(); + it != itEnd; + ++it) { + const uint8_t type = ((it->first >> 28) & 0xF); + + const float *corners = item()->getGeom()->getCorners(it->first); + if (corners == nullptr) + continue; + + if (heatmap && hitmap->find(it->first) == hitmap->end()) + continue; + + const bool z = (it->first >> 25) & 0x1; + + // discard everything thats not at the side that we are intersted in + if (((z_plus & z_minus) != 1) && (((z_plus | z_minus) == 0) || !(z == z_minus || z == !z_plus))) + continue; + + const float *parameters = item()->getGeom()->getParameters(it->first); + const float *shapes = item()->getGeom()->getShapePars(it->first); + + if (parameters == nullptr || shapes == nullptr) + continue; + + const int total_points = parameters[0]; + const bool isScintillator = (total_points == 4); + + uint8_t ll = layer; + if (layer > 0) { + if (layer > 28) { + if (type == 8) { + continue; + } + ll -= 28; + } else { + if (type != 8) { + continue; + } + } + + if (ll != ((it->first >> (isScintillator ? 17 : 20)) & 0x1F)) + continue; + } + + // seed and cluster position + if (layerCluster.seed().rawId() == it->first.rawId()) { + const float crossScale = 1.0f + fmin(layerCluster.energy(), 5.0f); + if (enableSeedLines) { + TEveStraightLineSet *marker = new TEveStraightLineSet; + marker->SetLineWidth(1); + + // center of RecHit + const float center[3] = {corners[total_points * 3 + 0], + corners[total_points * 3 + 1], + corners[total_points * 3 + 2] + shapes[3] * 0.5f}; + + // draw 3D cross + marker->AddLine(center[0] - crossScale, center[1], center[2], center[0] + crossScale, center[1], center[2]); + marker->AddLine(center[0], center[1] - crossScale, center[2], center[0], center[1] + crossScale, center[2]); + marker->AddLine(center[0], center[1], center[2] - crossScale, center[0], center[1], center[2] + crossScale); + + oItemHolder.AddElement(marker); + } + + if (enablePositionLines) { + TEveStraightLineSet *position_marker = new TEveStraightLineSet; + position_marker->SetLineWidth(2); + position_marker->SetLineColor(kOrange); + auto const &pos = layerCluster.position(); + const float position_crossScale = crossScale * 0.5; + position_marker->AddLine( + pos.x() - position_crossScale, pos.y(), pos.z(), pos.x() + position_crossScale, pos.y(), pos.z()); + position_marker->AddLine( + pos.x(), pos.y() - position_crossScale, pos.z(), pos.x(), pos.y() + position_crossScale, pos.z()); + + oItemHolder.AddElement(position_marker); + } + } + + const float energy = + fmin((item()->getConfig()->value("Cluster(0)/RecHit(1)") ? hitmap->at(it->first)->energy() + : layerCluster.energy()) / + saturation_energy, + 1.0f); + const uint8_t colorFactor = gradient_steps * energy; + + // Scintillator + if (isScintillator) { + const int total_vertices = 3 * total_points; + + std::vector pnts(24); + for (int i = 0; i < total_points; ++i) { + pnts[i * 3 + 0] = corners[i * 3]; + pnts[i * 3 + 1] = corners[i * 3 + 1]; + pnts[i * 3 + 2] = corners[i * 3 + 2]; + + pnts[(i * 3 + 0) + total_vertices] = corners[i * 3]; + pnts[(i * 3 + 1) + total_vertices] = corners[i * 3 + 1]; + pnts[(i * 3 + 2) + total_vertices] = corners[i * 3 + 2] + shapes[3]; + } + boxset->AddBox(&pnts[0]); + if (heatmap) { + energy ? boxset->DigitColor(gradient[0][colorFactor], gradient[1][colorFactor], gradient[2][colorFactor]) + : boxset->DigitColor(64, 64, 64); + } + + h_box = true; + } + // Silicon + else { + constexpr int offset = 9; + + float centerX = (corners[6] + corners[6 + offset]) / 2; + float centerY = (corners[7] + corners[7 + offset]) / 2; + float radius = fabs(corners[6] - corners[6 + offset]) / 2; + hex_boxset->AddHex(TEveVector(centerX, centerY, corners[2]), radius, 90.0, shapes[3]); + if (heatmap) { + energy ? hex_boxset->DigitColor(gradient[0][colorFactor], gradient[1][colorFactor], gradient[2][colorFactor]) + : hex_boxset->DigitColor(64, 64, 64); + } + + h_hex = true; + } + } + } + + if (enableEdges) { + auto &edges = trackster.edges(); + + for (auto edge : edges) { + auto doublet = std::make_pair(layerClusters[edge[0]],layerClusters[edge[1]]); + TEveStraightLineSet *marker = new TEveStraightLineSet; + marker->SetLineWidth(2); + marker->SetLineColor(kRed); + + // draw 3D cross + marker->AddLine(doublet.first.x(), doublet.first.y(), doublet.first.z(), + doublet.second.x(), doublet.second.y(), doublet.second.z()); + + std::cout << doublet.first.x() << ", " << doublet.first.y() << ", " << doublet.first.z() + << ", " << doublet.second.x() << ", " << doublet.second.y() << ", " << doublet.second.z() + << std::endl; + + oItemHolder.AddElement(marker); + } + } + + + if (h_hex) { + hex_boxset->RefitPlex(); + + hex_boxset->CSCTakeAnyParentAsMaster(); + if (!heatmap) { + hex_boxset->CSCApplyMainColorToMatchingChildren(); + hex_boxset->CSCApplyMainTransparencyToMatchingChildren(); + hex_boxset->SetMainColor(item()->modelInfo(iIndex).displayProperties().color()); + hex_boxset->SetMainTransparency(item()->defaultDisplayProperties().transparency()); + } + oItemHolder.AddElement(hex_boxset); + } + + if (h_box) { + boxset->RefitPlex(); + + boxset->CSCTakeAnyParentAsMaster(); + if (!heatmap) { + boxset->CSCApplyMainColorToMatchingChildren(); + boxset->CSCApplyMainTransparencyToMatchingChildren(); + boxset->SetMainColor(item()->modelInfo(iIndex).displayProperties().color()); + boxset->SetMainTransparency(item()->defaultDisplayProperties().transparency()); + } + oItemHolder.AddElement(boxset); + } +} + +REGISTER_FWPROXYBUILDER(FWTracksterHitsProxyBuilder, ticl::Trackster, "Trackster hits", FWViewType::kISpyBit); From 8b7912b1bd3ef08cb536498ce60af2e8320a0edd Mon Sep 17 00:00:00 2001 From: Christos Papageorgakis Date: Fri, 11 Dec 2020 19:50:54 -0600 Subject: [PATCH 12/15] Fix TimeValueMapHandle type --- Fireworks/Calo/plugins/FWCaloClusterProxyBuilder.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Fireworks/Calo/plugins/FWCaloClusterProxyBuilder.cc b/Fireworks/Calo/plugins/FWCaloClusterProxyBuilder.cc index f39746cfe35e1..37ea6b506ce67 100644 --- a/Fireworks/Calo/plugins/FWCaloClusterProxyBuilder.cc +++ b/Fireworks/Calo/plugins/FWCaloClusterProxyBuilder.cc @@ -16,7 +16,7 @@ class FWCaloClusterProxyBuilder : public FWHeatmapProxyBuilderTemplate> TimeValueMapHandle; + edm::Handle>> TimeValueMapHandle; double timeLowerBound, timeUpperBound; long layer; double saturation_energy; @@ -73,7 +73,7 @@ void FWCaloClusterProxyBuilder::build(const reco::CaloCluster &iData, TEveElement &oItemHolder, const FWViewContext *) { if (enableTimeFilter && TimeValueMapHandle.isValid()) { - const float time = TimeValueMapHandle->get(iIndex); + const float time = TimeValueMapHandle->get(iIndex).first; if (time < timeLowerBound || time > timeUpperBound) return; } From b1e067388903b3e56f65e88df178e9ccceb3ce7d Mon Sep 17 00:00:00 2001 From: Christos Papageorgakis Date: Sat, 19 Dec 2020 00:55:48 -0600 Subject: [PATCH 13/15] Apply correct scaling --- Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc b/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc index 17b58984451fa..479f186bc17ec 100644 --- a/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc +++ b/Fireworks/Calo/plugins/FWTracksterProxyBuilder.cc @@ -33,13 +33,12 @@ void FWTracksterProxyBuilder::build(const ticl::Trackster &iData, const double phi = barycenter.Phi(); auto eveEllipsoid = new TEveGeoShape("Ellipsoid"); - auto sphere = new TGeoSphere(0., 5.); + auto sphere = new TGeoSphere(0., 1.); eveEllipsoid->SetShape(sphere); - eveEllipsoid->SetMainColor(kCyan); eveEllipsoid->InitMainTrans(); eveEllipsoid->RefMainTrans().Move3PF(barycenter.x(), barycenter.y(), barycenter.z()); eveEllipsoid->RefMainTrans().SetRotByAnyAngles(theta, phi, 0., "xzy"); - eveEllipsoid->RefMainTrans().SetScale(eigenvalues[2], eigenvalues[1], eigenvalues[0]); + eveEllipsoid->RefMainTrans().SetScale(sqrt(eigenvalues[2]), sqrt(eigenvalues[1]), sqrt(eigenvalues[0])); setupAddElement(eveEllipsoid, &oItemHolder); } From e562ae97d83de034b3d4253bfc2ef415da826e8e Mon Sep 17 00:00:00 2001 From: Christos Papageorgakis Date: Sat, 19 Dec 2020 02:01:31 -0600 Subject: [PATCH 14/15] Removed std::cout --- Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc b/Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc index 0580b2df5ed9a..fb1063b771581 100644 --- a/Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc +++ b/Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc @@ -257,10 +257,6 @@ void FWTracksterHitsProxyBuilder::build(const ticl::Trackster &iData, marker->AddLine(doublet.first.x(), doublet.first.y(), doublet.first.z(), doublet.second.x(), doublet.second.y(), doublet.second.z()); - std::cout << doublet.first.x() << ", " << doublet.first.y() << ", " << doublet.first.z() - << ", " << doublet.second.x() << ", " << doublet.second.y() << ", " << doublet.second.z() - << std::endl; - oItemHolder.AddElement(marker); } } From 0246b1692444920b9a060fbe0deaaefe852a29a1 Mon Sep 17 00:00:00 2001 From: Christos Papageorgakis Date: Mon, 21 Dec 2020 11:08:28 -0600 Subject: [PATCH 15/15] Applying code-formats --- .../plugins/FWTracksterHitsProxyBuilder.cc | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc b/Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc index fb1063b771581..c0cac5f22e988 100644 --- a/Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc +++ b/Fireworks/Calo/plugins/FWTracksterHitsProxyBuilder.cc @@ -17,7 +17,7 @@ class FWTracksterHitsProxyBuilder : public FWHeatmapProxyBuilderTemplate>> TimeValueMapHandle; + edm::Handle>> TimeValueMapHandle; edm::Handle> layerClustersHandle; double timeLowerBound, timeUpperBound; long layer; @@ -85,9 +85,9 @@ void FWTracksterHitsProxyBuilder::build(const FWEventItem *iItem, TEveElementLis } void FWTracksterHitsProxyBuilder::build(const ticl::Trackster &iData, - unsigned int iIndex, - TEveElement &oItemHolder, - const FWViewContext *) { + unsigned int iIndex, + TEveElement &oItemHolder, + const FWViewContext *) { if (enableTimeFilter && TimeValueMapHandle.isValid()) { const float time = TimeValueMapHandle->get(iIndex).first; if (time < timeLowerBound || time > timeUpperBound) @@ -96,7 +96,7 @@ void FWTracksterHitsProxyBuilder::build(const ticl::Trackster &iData, const ticl::Trackster &trackster = iData; const size_t N = trackster.vertices().size(); - const std::vector& layerClusters = *layerClustersHandle; + const std::vector &layerClusters = *layerClustersHandle; bool h_hex(false); TEveBoxSet *hex_boxset = new TEveBoxSet(); @@ -248,20 +248,23 @@ void FWTracksterHitsProxyBuilder::build(const ticl::Trackster &iData, auto &edges = trackster.edges(); for (auto edge : edges) { - auto doublet = std::make_pair(layerClusters[edge[0]],layerClusters[edge[1]]); + auto doublet = std::make_pair(layerClusters[edge[0]], layerClusters[edge[1]]); TEveStraightLineSet *marker = new TEveStraightLineSet; marker->SetLineWidth(2); marker->SetLineColor(kRed); // draw 3D cross - marker->AddLine(doublet.first.x(), doublet.first.y(), doublet.first.z(), - doublet.second.x(), doublet.second.y(), doublet.second.z()); + marker->AddLine(doublet.first.x(), + doublet.first.y(), + doublet.first.z(), + doublet.second.x(), + doublet.second.y(), + doublet.second.z()); oItemHolder.AddElement(marker); } } - if (h_hex) { hex_boxset->RefitPlex();