#ifndef Tmp1_TabletStrokeList_H
#define Tmp1_TabletStrokeList_H
#include <Glasses/ZNode.h>
#include <Stones/GTSIsoMakerFunctor.h>
#include <Stones/STabletPoint.h>
#include <TKDTree.h>
class TH1I;
class TH2I;
class TabletStrokeList : public ZNode,
public GTSIsoMakerFunctor
{
MAC_RNR_FRIENDS(TabletStrokeList);
public:
enum PotentialAlgorithm_e
{
PA_StrongestPoint,
PA_TwoStrongestPoints,
PA_LinearInterpolation,
PA_CubicInterpolation
};
private:
void _init();
protected:
struct CCoefs { STabletPoint A, B, C, D; };
PotentialAlgorithm_e mAlgorithm;
Double_t mWidth;
Double_t mPotentialExp;
Double_t mPressureAlpha;
Double_t mMaxInterPoint;
Bool_t bMakeCubHistos;
TKDTreeIF *mKDTree;
vector<STabletPoint*> mPointRefs;
vector<Float_t> mArrX;
vector<Float_t> mArrY;
vector<CCoefs> mCCoefs;
Double_t mSearchRad;
void calculate_qubic_coeffs(const vSTabletPoint_t& vec, Int_t i, CCoefs& c);
void distance_derivatives(Float_t t, const HPointF& P, const CCoefs& c,
Float_t& d1, Float_t& d2);
bool find_closest_points(Double_t x, Double_t y, Double_t z,
Int_t id[2], Double_t vm[2]);
void get_linear_approx(Double_t x, Double_t y, Double_t z,
Int_t id[2], Double_t vm[2],
Double_t& value, STabletPoint* point=0);
void get_cubic_approx (Double_t x, Double_t y, Double_t z,
Int_t id[2], Double_t vm[2],
Double_t& value, STabletPoint* point=0);
void add_gradient(HPointD& g, Double_t x, Double_t y, Double_t z,
Double_t value, STabletPoint* point);
TH1I *mHN;
TH2I *mHCubTimevsTime;
TH2I *mHCubTimevsN;
TH1I *mHCubTime20;
TH1I *mHDeriv;
TH1I *mHDeriv20;
public:
TabletStrokeList(const Text_t* n="TabletStrokeList", const Text_t* t=0);
virtual ~TabletStrokeList();
void MakeKDStuff();
void ClearKDStuff();
void PrintClose(Float_t x, Float_t y, Float_t rad);
virtual void GTSIsoBegin(GTSIsoMaker* maker, Double_t iso_value);
virtual Double_t GTSIsoFunc(Double_t x, Double_t y, Double_t z);
virtual Double_t GTSIsoGradient(Double_t x, Double_t y, Double_t z, HPointD& g);
virtual void GTSIsoEnd();
#include "TabletStrokeList.h7"
ClassDef(TabletStrokeList, 1);
};
#endif