Skip to content
Snippets Groups Projects
Commit a6600738 authored by alja's avatar alja Committed by Sergey Linev
Browse files

Introduce slice selection

parent 7327a7c1
No related branches found
No related tags found
No related merge requests found
...@@ -326,12 +326,34 @@ public: ...@@ -326,12 +326,34 @@ public:
/**************************************************************************/ /**************************************************************************/
/**************************************************************************/ /**************************************************************************/
class REveCaloDataSliceSelector
{
private:
int fSliceIdx{-1};
public:
REveCaloDataSliceSelector(int s):fSliceIdx(s) {}
int GetSliceIndex() {return fSliceIdx;}
virtual ~REveCaloDataSliceSelector() = default;
virtual void ProcessSelection(REveCaloData::vCellId_t& sel_cells, UInt_t selectionId, bool multi) = 0;
virtual void GetCellsFromSecondaryIndices(const std::set<int>& idcs, REveCaloData::vCellId_t& out) = 0;
};
class REveCaloDataSelector class REveCaloDataSelector
{ {
private:
int fActiveSlice{-1};
std::vector< std::unique_ptr<REveCaloDataSliceSelector> > fSliceSelectors;
public: public:
virtual void ProcessSelection( REveCaloData::vCellId_t& sel_cells, UInt_t selectionId, Bool_t multi) = 0; void ProcessSelection( REveCaloData::vCellId_t& sel_cells, UInt_t selectionId, Bool_t multi);
virtual void GetCellsFromSecondaryIndices(const std::set<int>&, REveCaloData::vCellId_t& out) = 0; void GetCellsFromSecondaryIndices(const std::set<int>&, REveCaloData::vCellId_t& out);
void AddSliceSelector(std::unique_ptr<REveCaloDataSliceSelector> s) {fSliceSelectors.push_back(std::move(s));}
void SetActiveSlice(int s){ fActiveSlice = s;}
virtual ~REveCaloDataSelector() = default; virtual ~REveCaloDataSelector() = default;
}; };
......
...@@ -847,3 +847,33 @@ void REveCaloDataHist::GetPhiLimits(Double_t &min, Double_t &max) const ...@@ -847,3 +847,33 @@ void REveCaloDataHist::GetPhiLimits(Double_t &min, Double_t &max) const
min = fPhiAxis->GetXmin(); min = fPhiAxis->GetXmin();
max = fPhiAxis->GetXmax(); max = fPhiAxis->GetXmax();
} }
////////////////////////////////////////////////////////////////////////////////
/// Process selection. Called from REveCaloViz object
void REveCaloDataSelector::ProcessSelection(REveCaloData::vCellId_t& sel_cells, UInt_t selectionId, Bool_t multi)
{
// only one slice can be user selected at once
fActiveSlice = sel_cells.front().fSlice;
for (auto &si : fSliceSelectors)
{
if (si->GetSliceIndex() == fActiveSlice) {
si->ProcessSelection(sel_cells, selectionId, multi);
break;
}
}
}
////////////////////////////////////////////////////////////////////////////////
/// GetCellsFromSecondaryIndices used in implied selection
void REveCaloDataSelector::GetCellsFromSecondaryIndices(const std::set<int>& idcs, REveCaloData::vCellId_t& out)
{
for (auto &si : fSliceSelectors)
{
if (si->GetSliceIndex() == fActiveSlice) {
si->GetCellsFromSecondaryIndices(idcs, out);
break;
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment