1#ifndef __JFIT__JSHOWER3EZREGRESSOR__
2#define __JFIT__JSHOWER3EZREGRESSOR__
60 const double epsilon = 1.0e-6;
77 double Tx = value.
getDX();
78 double Ty = value.
getDY();
79 double E = max(0.0,value.
getE());
80 const double u = hypot(Tx, Ty);
111 static const int NUMBER_OF_PDFS = 2;
139 for (
int i = 0; i != NUMBER_OF_PDFS; ++i) {
141 const string file_name = getFilename(fileDescriptor, pdf_t[i]);
144 _pdf.
load(file_name.c_str());
148 _npe[ i ] =
JNPE_t(_pdf, T_ns);
151 for (
int i = 1; i < NUMBER_OF_PDFS; i += 2) {
153 _npe[ i ].add(_npe[i-1]);
157 _npe[i-1].swap(buffer);
176 static const JPDFType_t pdf_t[NUMBER_OF_PDFS];
187 DIRECT_LIGHT_FROM_EMSHOWER,
188 SCATTERED_LIGHT_FROM_EMSHOWER
221 JRegressor(
const std::string& fileDescriptor,
const JTimeRange& T_ns) :
233 npe(storage.getNPE()),
258 const double x = D.
getX();
259 const double y = D.
getY();
270 if (get_value(
H1) >= Vmax_npe) {
271 H1 *= Vmax_npe / get_value(
H1);
276 const bool hit = pmt.
getN() != 0;
279 return estimator->getRho(
u);
307 const double E)
const
311 for (
int i = 0; i != NUMBER_OF_PDFS; ++i) {
313 if (!npe[i].empty() && D <= npe[i].getXmax()) {
329 ERROR(error << std::endl);
365 static const int NUMBER_OF_PDFS = 2;
394 for (
int i = 0; i != NUMBER_OF_PDFS; ++i) {
396 const string file_name = getFilename(fileDescriptor, pdf_t[i]);
399 _pdf.
load(file_name.c_str());
403 _npe[i] =
JNPE_t(_pdf, T_ns);
408 for (
int i = 1; i < NUMBER_OF_PDFS; i += 2) {
410 _npe[ i ].add(_npe[i-1]);
414 _npe[i-1].swap(buffer);
432 static const JPDFType_t pdf_t[NUMBER_OF_PDFS];
443 DIRECT_LIGHT_FROM_EMSHOWER,
444 SCATTERED_LIGHT_FROM_EMSHOWER
477 JRegressor(
const std::string& fileDescriptor,
const JTimeRange& T_ns) :
489 npe(storage.getNPE()),
514 const double x = D.
getX();
515 const double y = D.
getY();
527 if (get_value(
H1) >= Vmax_npe) {
528 H1 *= Vmax_npe / get_value(
H1);
537 const bool hit = pmt.
getN() != 0;
538 const double u =
H1.getChi2(
hit) -
H0.getChi2(
hit);
542 result.chi2 = estimator->getRho(
u);
555 result.gradient.mul(estimator->getPsi(
u));
556 static_cast<JShower3Z&
>(result.gradient).mul(
H1.getDerivativeOfChi2(
hit) -
H0.getDerivativeOfChi2(
hit));
586 const double E)
const
590 for (
int i = 0; i != NUMBER_OF_PDFS; ++i) {
592 if (!npe[i].empty() && D <= npe[i].getXmax()) {
598 if (get_value(y1) > 0.0) {
604 ERROR(error << std::endl);
642 static const int NUMBER_OF_PDFS = 2;
671 for (
int i = 0; i != NUMBER_OF_PDFS; ++i) {
673 const string file_name = getFilename(fileDescriptor, pdf_t[i]);
676 _pdf.
load(file_name.c_str());
680 _npe[i] =
JNPE_t(_pdf, T_ns);
685 for (
int i = 1; i < NUMBER_OF_PDFS; i += 2) {
687 _npe[i].add(_npe[i-1]);
691 _npe[i-1].swap(buffer);
710 static const JPDFType_t pdf_t[NUMBER_OF_PDFS];
721 DIRECT_LIGHT_FROM_EMSHOWER,
722 SCATTERED_LIGHT_FROM_EMSHOWER
756 JRegressor(
const std::string& fileDescriptor,
const JTimeRange& T_ns) :
768 npe(storage.getNPE()),
792 const double x = D.
getX();
793 const double y = D.
getY();
804 if (get_value(
H1) >= Vmax_npe) {
805 H1 *= Vmax_npe / get_value(
H1);
810 const bool hit = pmt.
getN() != 0;
813 return estimator->getRho(
u);
841 const double E)
const
845 for (
int i = 0; i != NUMBER_OF_PDFS; ++i) {
847 if (!npe[i].empty() && D <= npe[i].getXmax()) {
863 ERROR(error << std::endl);
887 const double x = D.
getX();
888 const double y = D.
getY();
898 if (get_value(
H1) >= Vmax_npe) {
899 H1 *= Vmax_npe / get_value(
H1);
Various implementations of functional maps.
Maximum likelihood estimator (M-estimators).
General purpose messaging.
Numbering scheme for PDF types.
Auxiliary class to define a range between two values.
General purpose data regression method.
This include file containes various data structures that can be used as specific return types for the...
Definition of zero value for any class.
Fit method based on the Levenberg-Marquardt method.
Data structure for vertex fit.
Data structure for fit of straight line in positive z-direction with energy.
double getBy() const
Get bjorken y.
double getE() const
Get E.
Data structure for cascade in positive z-direction.
const JVersor3Z & getDirection() const
Get direction.
Simple fit method based on Powell's algorithm, see reference: Numerical Recipes in C++,...
Data structure for direction in three dimensions.
JDirection3D & rotate(const JRotation3D &R)
Rotate.
const JDirection3D & getDirection() const
Get direction.
Data structure for position in three dimensions.
double getDot(const JAngle3D &angle) const
Get dot product.
const JPosition3D & getPosition() const
Get position.
Data structure for vector in three dimensions.
double getY() const
Get y position.
double getLength() const
Get length.
JVector3D & sub(const JVector3D &vector)
Subtract vector.
double getX() const
Get x position.
double getTheta() const
Get theta angle.
double getPhi() const
Get phi angle.
Data structure for normalised vector in positive z-direction.
double getDY() const
Get y direction.
double getDX() const
Get x direction.
Template definition of a multi-dimensional oscillation probability interpolation table.
Custom class for integrated values of the PDF of the arrival time of Cherenkov light.
multifunction_t::result_type result_type
Multi-dimensional PDF table for arrival time of Cherenkov light.
Auxiliary classes and methods for linear and iterative data regression.
double getPMTAngle(const double angle)
Constrain PMT angle to [0,pi].
double getChi2(const double P)
Get chi2 corresponding to given probability.
void model(JModel_t &value)
Auxiliary function to constrain model during fit.
static const JZero zero
Function object to assign zero value.
static const double PI
Mathematical constants.
@ SCATTERED_LIGHT_FROM_EMSHOWER
scattered light from EM shower
@ DIRECT_LIGHT_FROM_EMSHOWER
direct light from EM shower
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Abstract class for global fit method.
Data structure for return value of fit function.
Auxiliary class for handling PMT geometry, rate and response.
int getN() const
Get number of hits.
double getR() const
Get rate.
Template specialisation for storage of PDF tables.
JPHYSICS::JPDFTable< JFunction1D_t, JPDFMaplist_t > JPDF_t
JTimeRange T_ns
Time window with respect to Cherenkov hypothesis [ns].
JTOOLS::JMapList< JTOOLS::JPolint0FunctionalMap, JTOOLS::JMapList< JTOOLS::JPolint0FunctionalMap, JTOOLS::JMapList< JTOOLS::JPolint0FunctionalGridMap, JTOOLS::JMapList< JTOOLS::JPolint0FunctionalGridMap > > > > JPDFMaplist_t
JPHYSICS::JNPETable< double, double, JNPEMaplist_t > JNPE_t
JRegressorStorage()
Default constructor.
const JNPEs_t & getNPE() const
Get NPEs.
std::array< JNPE_t, NUMBER_OF_PDFS > JNPEs_t
NPEs.
JTOOLS::JPolint1Function1D_t JFunction1D_t
JTOOLS::JMapList< JTOOLS::JPolint0FunctionalMap, JTOOLS::JMapList< JTOOLS::JPolint0FunctionalMap, JTOOLS::JMapList< JTOOLS::JPolint0FunctionalGridMap, JTOOLS::JMapList< JTOOLS::JPolint0FunctionalGridMap > > > > JNPEMaplist_t
JRegressorStorage(const std::string &fileDescriptor, const JTimeRange &T_ns)
Parameterized constructor.
Template specialisation for storage of PDF tables.
JTimeRange T_ns
Time window with respect to Cherenkov hypothesis [ns].
JPHYSICS::JPDFTable< JFunction1D_t, JPDFMaplist_t > JPDF_t
JPHYSICS::JNPETable< double, double, JNPEMaplist_t > JNPE_t
std::array< JNPE_t, NUMBER_OF_PDFS > JNPEs_t
NPEs.
JTOOLS::JPolint1Function1D_t JFunction1D_t
JTOOLS::JMapList< JTOOLS::JPolint0FunctionalMap, JTOOLS::JMapList< JTOOLS::JPolint0FunctionalMap, JTOOLS::JMapList< JTOOLS::JPolint0FunctionalGridMap, JTOOLS::JMapList< JTOOLS::JPolint0FunctionalGridMap > > > > JPDFMaplist_t
JRegressorStorage(const std::string &fileDescriptor, const JTimeRange &T_ns)
Parameterized constructor.
JTOOLS::JMapList< JTOOLS::JPolint1FunctionalMap, JTOOLS::JMapList< JTOOLS::JPolint1FunctionalMapH, JTOOLS::JMapList< JTOOLS::JPolint1FunctionalGridMap, JTOOLS::JMapList< JTOOLS::JPolint1FunctionalGridMap > > > > JNPEMaplist_t
const JNPEs_t & getNPE() const
Get NPEs.
JRegressorStorage()
Default constructor.
Template specialisation for storage of PDF tables.
JTOOLS::JMapList< JTOOLS::JPolint0FunctionalMap, JTOOLS::JMapList< JTOOLS::JPolint0FunctionalMap, JTOOLS::JMapList< JTOOLS::JPolint0FunctionalGridMap, JTOOLS::JMapList< JTOOLS::JPolint0FunctionalGridMap > > > > JNPEMaplist_t
JPHYSICS::JPDFTable< JFunction1D_t, JPDFMaplist_t > JPDF_t
const JNPEs_t & getNPE() const
Get NPEs.
std::array< JNPE_t, NUMBER_OF_PDFS > JNPEs_t
NPEs.
JPHYSICS::JNPETable< double, double, JNPEMaplist_t > JNPE_t
JRegressorStorage()
Default constructor.
JTOOLS::JPolint1Function1D_t JFunction1D_t
JTimeRange T_ns
Time window with respect to Cherenkov hypothesis [ns].
JTOOLS::JMapList< JTOOLS::JPolint0FunctionalMap, JTOOLS::JMapList< JTOOLS::JPolint0FunctionalMap, JTOOLS::JMapList< JTOOLS::JPolint0FunctionalGridMap, JTOOLS::JMapList< JTOOLS::JPolint0FunctionalGridMap > > > > JPDFMaplist_t
JRegressorStorage(const std::string &fileDescriptor, const JTimeRange &T_ns)
Constructor.
Template data structure for storage of internal data.
JRegressor()
Default constructor.
JNPE_t::result_type getH1(const double D, const double cd, const double theta, const double phi, const double E) const
Get signal hypothesis value for time integrated PDF.
static double Vmax_npe
Maximal integral of PDF [npe].
double operator()(const JShower3EZ &shower, const JPMTW0 &pmt) const
Fit function.
JRegressor(const std::string &fileDescriptor, const JTimeRange &T_ns)
Constructor.
JRegressorStorage< JShower3EZ, JAbstractMinimiser > storage_type
JNPE_t::result_type getH1(const JShower3EZ &shower, const JPMTW0 &pmt) const
Get signal hypothesis value for time integrated PDF.
JNPE_t::result_type getH0(const double R_Hz) const
Get background hypothesis value for time integrated PDF.
std::shared_ptr< JMEstimator > estimator
M-Estimator function
JRegressor(const storage_type &storage)
Constructor.
static double Vmax_npe
Maximal integral of PDF [npe].
JRegressor()
Default constructor.
JRegressor(const std::string &fileDescriptor, const JTimeRange &T_ns)
Constructor.
result_type operator()(const JShower3EZ &shower, const JPMTW0 &pmt) const
Fit function.
JNPE_t::result_type getH0(const double R_Hz) const
Get background hypothesis value for time integrated PDF.
JRegressorStorage< JShower3EZ, JGandalf > storage_type
JRegressor(const storage_type &storage)
Constructor.
JNPE_t::result_type getH1(const double D, const double cd, const double theta, const double phi, const double E) const
Get signal hypothesis value for time integrated PDF.
std::shared_ptr< JMEstimator > estimator
M-Estimator function.
JRegressor(const std::string &fileDescriptor, const JTimeRange &T_ns)
Constructor.
std::shared_ptr< JMEstimator > estimator
M-Estimator function.
static double Vmax_npe
Maximal integral of PDF [npe].
JNPE_t::result_type getH0(const double R_Hz) const
Get background hypothesis value for time integrated PDF.
JNPE_t::result_type getH1(const double D, const double cd, const double theta, const double phi, const double E) const
Get signal hypothesis value for time integrated PDF.
JRegressor()
Default constructor.
double operator()(const JShower3EZ &shower, const JPMTW0 &pmt) const
Fit function.
JRegressorStorage< JShower3EZ, JSimplex > storage_type
JRegressor(const storage_type &storage)
Constructor.
Template definition of a data regressor of given model.
void load(const char *file_name)
Load from input file.