1
0
Fork 0
mirror of https://github.com/gwm17/Specter.git synced 2024-11-22 18:28:52 -05:00

Fixed logic for updating histograms and checking cuts. Implemented small test on single parameter. Validated

This commit is contained in:
Gordon McCann 2022-01-23 21:32:30 -05:00
parent 343424ead7
commit ab374ef4e8
6 changed files with 53 additions and 47 deletions

View File

@ -66,9 +66,9 @@ namespace Navigator {
{
//PhysicsStartEvent junk("/media/gordon/GordonData/gwm17/NavTests/data/", DataSource::SourceType::CompassOffline, 2000000);
//OnEvent(junk);
HistogramMap::GetInstance().UpdateHistograms();
while(m_runFlag)
{
HistogramMap::GetInstance().UpdateHistograms();
RenderCommand::SetClearColor(m_bckgnd_color);
RenderCommand::Clear();
@ -81,6 +81,9 @@ namespace Navigator {
layer->OnImGuiRender();
m_imgui_layer->End();
m_window->OnUpdate();
ParameterMap::GetInstance().find("joseph")->second->validFlag = true;
ParameterMap::GetInstance().find("joseph")->second->value = 8.0;
}
}
}

View File

@ -1,4 +1,5 @@
#include "CutMap.h"
#include "ParameterMap.h"
#include "implot.h"
namespace Navigator {
@ -11,9 +12,13 @@ namespace Navigator {
Cut1D::~Cut1D() {}
bool Cut1D::IsInside(double x, double y) const
bool Cut1D::IsInside() const
{
return x >= m_minVal && x <= m_maxVal;
ParameterMap& parMap = ParameterMap::GetInstance();
auto iter = parMap.find(m_params.x_par);
if (iter == parMap.end() || !iter->second->validFlag)
return false;
return iter->second->value >= m_minVal && iter->second->value <= m_maxVal;
}
//Only within an ImPlot/ImGui context!!!
@ -38,8 +43,15 @@ namespace Navigator {
If odd number of intersections, point is inside. Even, point is outside.
Edge cases of point is a vertex or on a side considered.
*/
bool Cut2D::IsInside(double x, double y) const
bool Cut2D::IsInside() const
{
ParameterMap& parMap = ParameterMap::GetInstance();
auto iterx = parMap.find(m_params.x_par);
auto itery = parMap.find(m_params.y_par);
if (iterx == parMap.end() || itery == parMap.end() || !iterx->second->validFlag || !itery->second->validFlag)
return false;
double x = iterx->second->value;
double y = itery->second->value;
bool result = false;
double slope;
for(size_t i=0; i<(m_xpoints.size()-1); i++)
@ -78,12 +90,12 @@ namespace Navigator {
iter->second->Draw();
}
bool CutMap::IsInsideCut(const std::string& name, double xval, double yval)
bool CutMap::IsInsideCut(const std::string& name)
{
bool result = false;
auto iter = m_map.find(name);
if(iter != m_map.end())
result = iter->second->IsInside(xval, yval);
result = iter->second->IsInside();
return result;
}

View File

@ -30,7 +30,7 @@ namespace Navigator {
virtual ~Cut() {}
virtual bool IsInside(double x, double y = 0) const = 0;
virtual bool IsInside() const = 0;
virtual void Draw() const = 0;
virtual bool Is1D() const = 0;
virtual bool Is2D() const = 0;
@ -50,7 +50,7 @@ namespace Navigator {
public:
Cut1D(const CutParams& params, double min, double max);
virtual ~Cut1D();
virtual bool IsInside(double x, double y = 0) const override;
virtual bool IsInside() const override;
virtual void Draw() const override;
virtual bool Is1D() const override { return true; }
virtual bool Is2D() const override { return false; }
@ -66,7 +66,7 @@ namespace Navigator {
public:
Cut2D(const CutParams& params, const std::vector<double>& xpoints, const std::vector<double>& ypoints);
virtual ~Cut2D();
virtual bool IsInside(double x, double y = 0) const override;
virtual bool IsInside() const override;
virtual void Draw() const override;
virtual bool Is1D() const override { return false; }
virtual bool Is2D() const override { return true; }
@ -103,7 +103,7 @@ namespace Navigator {
}
void DrawCut(const std::string& name);
bool IsInsideCut(const std::string& name, double xval, double yval = 0);
bool IsInsideCut(const std::string& name);
std::vector<CutParams> GetListOfCutParams();
inline Iter begin() { return m_map.begin(); }

View File

@ -1,5 +1,6 @@
#include "Histogram.h"
#include "CutMap.h"
#include "ParameterMap.h"
#include "implot.h"
/*
@ -44,15 +45,23 @@ namespace Navigator {
}
//Note: only x is used here, y is simply present to maintain compliance with 2D case and can be ignored
void Histogram1D::FillData(double x, double y)
void Histogram1D::FillData()
{
ParameterMap& parMap = ParameterMap::GetInstance();
if (!parMap.IsParameterValid(m_params.x_par))
return;
double x = parMap.GetParameterValue(m_params.x_par);
if(x < m_params.min_x || x >= m_params.max_x || !m_initFlag)
return;
auto& cutmap = CutMap::GetInstance();
for (auto& cut : m_params.cutsAppliedTo)
{
if (!cutmap.IsInsideCut(cut))
return;
}
int bin = int((x - m_params.min_x)/(m_binWidth));
auto& cutmap = CutMap::GetInstance();
m_binCounts[bin] += 1.0;
}
@ -107,10 +116,21 @@ namespace Navigator {
m_initFlag = true;
}
void Histogram2D::FillData(double x, double y)
void Histogram2D::FillData()
{
ParameterMap& parMap = ParameterMap::GetInstance();
CutMap& cutMap = CutMap::GetInstance();
if (!parMap.IsParameterValid(m_params.x_par) || !parMap.IsParameterValid(m_params.y_par))
return;
double x = parMap.GetParameterValue(m_params.x_par);
double y = parMap.GetParameterValue(m_params.y_par);
if(x < m_params.min_x || x >= m_params.max_x || y < m_params.min_y || y >= m_params.max_y || !m_initFlag)
return;
for (auto& cut : m_params.cutsAppliedTo)
{
if (!cutMap.IsInsideCut(cut))
return;
}
int bin_x = int((x - m_params.min_x)/m_binWidthX);
int bin_y = int((m_params.max_y - y)/m_binWidthY);

View File

@ -45,7 +45,7 @@ namespace Navigator {
}
virtual ~Histogram() {};
virtual void FillData(double x, double y = 0) { NAV_WARN("Trying to fill a default histogram!"); }
virtual void FillData() { NAV_WARN("Trying to fill a default histogram!"); }
virtual void Draw() {}
virtual void ClearData() {}
inline virtual bool Is1D() const { return false; }
@ -67,7 +67,7 @@ namespace Navigator {
public:
Histogram1D(const HistogramParameters& params);
virtual ~Histogram1D();
virtual void FillData(double x, double y=0) override;
virtual void FillData() override;
virtual void Draw() override;
virtual void ClearData() override;
inline virtual bool Is1D() const override { return true; }
@ -87,7 +87,7 @@ namespace Navigator {
public:
Histogram2D(const HistogramParameters& params);
virtual ~Histogram2D();
virtual void FillData(double x, double y=0) override;
virtual void FillData() override;
virtual void Draw() override;
virtual void ClearData() override;
inline virtual bool Is1D() const override { return false; }

View File

@ -68,36 +68,7 @@ namespace Navigator {
ParameterMap& pmap = ParameterMap::GetInstance();
for (auto& pair : m_map)
{
xpar = pair.second->GetXParam();
ypar = pair.second->GetYParam();
if (pair.second->Is1D())
{
auto iter = pmap.find(xpar);
if (iter == pmap.end() || !iter->second->validFlag)
{
continue;
}
else
{
pair.second->FillData(iter->second->value);
}
}
else
{
auto iterx = pmap.find(xpar);
auto itery = pmap.find(ypar);
if (iterx == pmap.end() || itery == pmap.end() || !iterx->second->validFlag || !itery->second->validFlag)
{
continue;
}
else
{
pair.second->FillData(iterx->second->value, itery->second->value);
}
}
pair.second->FillData();
}
}