File indexing completed on 2023-10-25 09:46:16
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #include <cmath>
0016
0017
0018 #include "TEveCaloData.h"
0019 #include "TEveCalo.h"
0020 #include "TH2F.h"
0021 #include "TEveManager.h"
0022 #include "TEveSelection.h"
0023
0024 #include "Fireworks/Core/interface/Context.h"
0025 #include "Fireworks/Core/interface/FWEventItem.h"
0026
0027 #include "Fireworks/Calo/interface/FWCaloDataProxyBuilderBase.h"
0028 #include "Fireworks/Calo/interface/FWFromTEveCaloDataSelector.h"
0029
0030 #include "DataFormats/CaloTowers/interface/CaloTower.h"
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043 FWCaloDataProxyBuilderBase::FWCaloDataProxyBuilderBase() : m_caloData(nullptr), m_sliceIndex(-1) {}
0044
0045
0046
0047
0048
0049
0050 FWCaloDataProxyBuilderBase::~FWCaloDataProxyBuilderBase() {}
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068 void FWCaloDataProxyBuilderBase::build(const FWEventItem* iItem, TEveElementList*, const FWViewContext*) {
0069 setCaloData(iItem->context());
0070
0071 assertCaloDataSlice();
0072 fillCaloData();
0073
0074 m_caloData->SetSliceColor(m_sliceIndex, item()->defaultDisplayProperties().color());
0075 m_caloData->SetSliceTransparency(m_sliceIndex, item()->defaultDisplayProperties().transparency());
0076 m_caloData->DataChanged();
0077 m_caloData->CellSelectionChanged();
0078 }
0079
0080
0081
0082 void FWCaloDataProxyBuilderBase::modelChanges(const FWModelIds&, Product* p) {
0083 if (m_caloData && item()) {
0084 clearCaloDataSelection();
0085 fillCaloData();
0086
0087 TEveCaloData::vCellId_t& selected = m_caloData->GetCellsSelected();
0088 if (!selected.empty()) {
0089 if (0 == m_caloData->GetSelectedLevel()) {
0090 gEve->GetSelection()->AddElement(m_caloData);
0091 }
0092 } else {
0093 if (1 == m_caloData->GetSelectedLevel() || 2 == m_caloData->GetSelectedLevel()) {
0094 gEve->GetSelection()->RemoveElement(m_caloData);
0095 }
0096 }
0097
0098 m_caloData->SetSliceColor(m_sliceIndex, item()->defaultDisplayProperties().color());
0099 m_caloData->SetSliceTransparency(m_sliceIndex, item()->defaultDisplayProperties().transparency());
0100 m_caloData->DataChanged();
0101 m_caloData->CellSelectionChanged();
0102 }
0103 }
0104
0105
0106 void FWCaloDataProxyBuilderBase::itemBeingDestroyed(const FWEventItem* iItem) {
0107 FWProxyBuilderBase::itemBeingDestroyed(iItem);
0108 if (m_caloData) {
0109 clearCaloDataSelection();
0110 FWFromTEveCaloDataSelector* sel = reinterpret_cast<FWFromTEveCaloDataSelector*>(m_caloData->GetUserData());
0111 sel->resetSliceSelector(m_sliceIndex);
0112 m_caloData->DataChanged();
0113 }
0114 }
0115
0116 void FWCaloDataProxyBuilderBase::clearCaloDataSelection() {
0117
0118
0119
0120
0121 TEveCaloData::vCellId_t& selected = m_caloData->GetCellsSelected();
0122
0123 TEveCaloData::vCellId_t::iterator itEnd = selected.end();
0124 for (TEveCaloData::vCellId_t::iterator it = selected.begin(); it != itEnd; ++it) {
0125 if (it->fSlice == m_sliceIndex) {
0126
0127
0128 do {
0129 TEveCaloData::vCellId_t::iterator itLast = itEnd - 1;
0130 itEnd = itLast;
0131 } while (itEnd != it && itEnd->fSlice == m_sliceIndex);
0132
0133 if (itEnd != it) {
0134 std::swap(*it, *itEnd);
0135 } else {
0136
0137 break;
0138 }
0139
0140 }
0141 }
0142 selected.erase(itEnd, selected.end());
0143
0144
0145 m_caloData->GetCellsHighlighted().clear();
0146 }