mirror of
https://github.com/gwm17/Specter.git
synced 2024-11-22 18:28:52 -05:00
Beginnings of cuts
This commit is contained in:
parent
9ef998a5df
commit
87b2041e8f
42
Navigator/src/Navigator/CutMap.cpp
Normal file
42
Navigator/src/Navigator/CutMap.cpp
Normal file
|
@ -0,0 +1,42 @@
|
|||
#include "CutMap.h"
|
||||
#include "imgui.h"
|
||||
#include "implot.h"
|
||||
|
||||
namespace Navigator {
|
||||
|
||||
/*1D Cuts -- Can be made on and applied to either 1D or 2D histograms*/
|
||||
Cut1D::Cut1D(const std::string& name, const std::string& xpar, double min, double max) :
|
||||
Cut(name, xpar), m_minVal(min), m_maxVal(max)
|
||||
{
|
||||
}
|
||||
|
||||
Cut1D::~Cut1D() {}
|
||||
|
||||
bool Cut1D::IsInside(double x, double y) const
|
||||
{
|
||||
return x >= m_minVal && x <= m_maxVal;
|
||||
}
|
||||
|
||||
//Only within an ImPlot/ImGui context!!!
|
||||
void Cut1D::Draw() const
|
||||
{
|
||||
double points[2] = { m_minVal, m_maxVal };
|
||||
ImPlot::PlotVLines(m_params.name.c_str(), points, 2);
|
||||
}
|
||||
|
||||
/*2D Cuts -- Can only be made on 2D histogram, but applied to either 1D or 2D histograms*/
|
||||
Cut2D::Cut2D(const std::string& name, const std::string& xpar, const std::string& ypar, const std::vector<Point>& points) :
|
||||
Cut(name, xpar, ypar), m_points(points)
|
||||
{
|
||||
}
|
||||
|
||||
Cut2D::~Cut2D() {}
|
||||
|
||||
/*
|
||||
|
||||
*/
|
||||
bool Cut2D::IsInside(double x, double y) const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
109
Navigator/src/Navigator/CutMap.h
Normal file
109
Navigator/src/Navigator/CutMap.h
Normal file
|
@ -0,0 +1,109 @@
|
|||
#ifndef CUT_MAP_H
|
||||
#define CUT_MAP_H
|
||||
|
||||
#include "NavCore.h"
|
||||
#include <thread>
|
||||
|
||||
namespace Navigator {
|
||||
|
||||
struct NAV_API CutParams
|
||||
{
|
||||
CutParams(const std::string& n, const std::string& x, const std::string& y) :
|
||||
name(n), x_par(x), y_par(y)
|
||||
{
|
||||
}
|
||||
|
||||
std::string name;
|
||||
std::string x_par;
|
||||
std::string y_par;
|
||||
};
|
||||
|
||||
struct NAV_API Point
|
||||
{
|
||||
double x = 0;
|
||||
double y = 0;
|
||||
};
|
||||
|
||||
class NAV_API Cut
|
||||
{
|
||||
public:
|
||||
Cut(const std::string& name, const std::string& xpar, const std::string& ypar="None") :
|
||||
m_params(name, xpar, ypar)
|
||||
{
|
||||
}
|
||||
|
||||
virtual ~Cut() {}
|
||||
|
||||
virtual bool IsInside(double x, double y = 0) const = 0;
|
||||
virtual void Draw() const = 0;
|
||||
virtual bool Is1D() const = 0;
|
||||
virtual bool Is2D() const = 0;
|
||||
|
||||
inline const std::string& GetName() const { return m_params.name; }
|
||||
inline const std::string& GetXParameter() const { return m_params.x_par; }
|
||||
inline const std::string& GetYParameter() const { return m_params.y_par; }
|
||||
inline const CutParams& GetCutParams() const { return m_params };
|
||||
protected:
|
||||
CutParams m_params;
|
||||
};
|
||||
|
||||
class NAV_API Cut1D : public Cut
|
||||
{
|
||||
public:
|
||||
Cut1D(const std::string& name, const std::string& xpar, double min, double max);
|
||||
virtual ~Cut1D();
|
||||
virtual bool IsInside(double x, double y = 0) const override;
|
||||
virtual void Draw() const override;
|
||||
virtual bool Is1D() const override { return true; }
|
||||
virtual bool Is2D() const override { return false; }
|
||||
|
||||
private:
|
||||
double m_minVal, m_maxVal;
|
||||
};
|
||||
|
||||
class NAV_API Cut2D : public Cut
|
||||
{
|
||||
public:
|
||||
Cut2D(const std::string& name, const std::string& xpar, const std::string& ypar, const std::vector<Point>& points);
|
||||
virtual ~Cut2D();
|
||||
virtual bool IsInside(double x, double y = 0) const override;
|
||||
virtual void Draw() const override;
|
||||
virtual bool Is1D() const override { return false; }
|
||||
virtual bool Is2D() const override { return true; }
|
||||
|
||||
private:
|
||||
std::vector<Point> m_points;
|
||||
};
|
||||
|
||||
class NAV_API CutMap
|
||||
{
|
||||
public:
|
||||
CutMap();
|
||||
~CutMap();
|
||||
|
||||
inline static CutMap& GetInstance() { return *s_instance; }
|
||||
|
||||
inline void AddCut(const std::string& name, const std::string& xpar, double min, double max)
|
||||
{
|
||||
std::lock_guard<std::mutex> guard(m_cutMutex);
|
||||
m_map[name].reset(new Cut1D(name, xpar, min, max));
|
||||
}
|
||||
inline void AddCut(const std::string& name, const std::string& xpar, const std::string& ypar, const std::vector<Point>& points)
|
||||
{
|
||||
std::lock_guard<std::mutex> guard(m_cutMutex);
|
||||
m_map[name].reset(new Cut2D(name, xpar, ypar, points));
|
||||
}
|
||||
|
||||
void DrawCut(const std::string& name);
|
||||
bool IsInsideCut(const std::string& name, double xval, double yval = 0);
|
||||
std::vector<CutParams> GetListOfCutParams() const;
|
||||
|
||||
private:
|
||||
std::unordered_map<std::string, std::unique_ptr<Cut>> m_map;
|
||||
std::mutex m_cutMutex;
|
||||
|
||||
static CutMap* s_instance;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user