Jpp  18.0.0-rc.3
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Types | Public Member Functions | Public Attributes | Static Public Attributes | List of all members
JFIT::JRegressor< JShower3EZ, JSimplex > Struct Template Reference

Regressor function object for JShower3EZ fit using JSimplex minimiser. More...

#include <JShower3EZRegressor.hh>

Inheritance diagram for JFIT::JRegressor< JShower3EZ, JSimplex >:
JFIT::JAbstractRegressor< JShower3EZ, JSimplex > JFIT::JSimplex< JShower3EZ > JEEP::JMessage< T >

Public Types

typedef JTOOLS::JSplineFunction1S_t JFunction1D_t
 
typedef JTOOLS::JMapList
< JTOOLS::JPolint0FunctionalMap,
JTOOLS::JMapList
< JTOOLS::JPolint0FunctionalMap,
JTOOLS::JMapList
< JTOOLS::JPolint0FunctionalGridMap,
JTOOLS::JMapList
< JTOOLS::JPolint0FunctionalGridMap > > > > 
JPDFMaplist_t
 
typedef JPHYSICS::JPDFTable
< JFunction1D_t, JPDFMaplist_t
JPDF_t
 
typedef JTOOLS::JMapList
< JTOOLS::JPolint0FunctionalMap,
JTOOLS::JMapList
< JTOOLS::JPolint0FunctionalMap,
JTOOLS::JMapList
< JTOOLS::JPolint0FunctionalGridMap,
JTOOLS::JMapList
< JTOOLS::JPolint0FunctionalGridMap > > > > 
JNPEMaplist_t
 
typedef JPHYSICS::JNPETable
< double, double,
JNPEMaplist_t
JNPE_t
 
typedef JSimplex< JShower3EZminimiser_type
 
typedef JRegressor< JShower3EZ,
JSimplex
regressor_type
 
typedef minimiser_type::result_type result_type
 

Public Member Functions

 JRegressor (const std::string &fileDescriptor)
 Parameterized constructor. More...
 
double operator() (const JShower3EZ &shower, const JPMTW0 &pmt) const
 Fit function. More...
 
JNPE_t::result_type getH0 (const double R_Hz) const
 Get background hypothesis value for time integrated PDF. More...
 
JNPE_t::result_type getH1 (const double D, const double cosDelta, const double theta, const double phi, const double E) const
 Get signal hypothesis value for time integrated PDF. More...
 
result_type operator() (const JShower3EZ &value, T __begin, T __end)
 Global fit. More...
 
double operator() (const JFunction_t &fit, T __begin, T __end)
 Multi-dimensional fit. More...
 
double operator() (const JFunction_t &fit, T __begin, T __end, const JShower3EZ &step)
 1D fit. More...
 

Public Attributes

JNPE_t npe [NUMBER_OF_PDFS]
 PDF. More...
 
JLANG::JSharedPointer
< JMEstimator
estimator
 M-Estimator function. More...
 
JShower3EZ value
 
std::vector< JShower3EZstep
 
int numberOfIterations
 

Static Public Attributes

static JTimeRange T_ns
 Time window with respect to Cherenkov hypothesis [ns]. More...
 
static double Vmax_npe = std::numeric_limits<double>::max()
 Maximal integral of PDF [npe]. More...
 
static const int NUMBER_OF_PDFS = 2
 
static const JPDFType_t pdf_t [NUMBER_OF_PDFS]
 PDF types. More...
 
static int MAXIMUM_ITERATIONS
 maximal number of iterations More...
 
static double EPSILON
 maximal distance to minimum More...
 
static int debug = 0
 debug level (default is off). More...
 

Detailed Description

template<>
struct JFIT::JRegressor< JShower3EZ, JSimplex >

Regressor function object for JShower3EZ fit using JSimplex minimiser.

Definition at line 52 of file JShower3EZRegressor.hh.

Member Typedef Documentation

Definition at line 57 of file JShower3EZRegressor.hh.

Definition at line 61 of file JShower3EZRegressor.hh.

Definition at line 62 of file JShower3EZRegressor.hh.

Definition at line 67 of file JShower3EZRegressor.hh.

Definition at line 68 of file JShower3EZRegressor.hh.

Definition at line 78 of file JRegressor.hh.

Definition at line 79 of file JRegressor.hh.

Definition at line 80 of file JRegressor.hh.

Constructor & Destructor Documentation

JFIT::JRegressor< JShower3EZ, JSimplex >::JRegressor ( const std::string fileDescriptor)
inline

Parameterized constructor.

The PDF file descriptor should contain the wild card character JPHYSICS::WILD_CARD which will be replaced by the corresponding PDF types listed in JRegressor<JShower3Z, JGandalf>::pdf_t.

Parameters
fileDescriptorPDF file descriptor

Definition at line 79 of file JShower3EZRegressor.hh.

79  :
80  estimator(new JMEstimatorNull())
81  {
82  using namespace std;
83  using namespace JPP;
84 
85  const JPDF_t::JSupervisor supervisor(new JPDF_t::JDefaultResult(JMATH::zero));
86 
87  for (int i = 0; i != NUMBER_OF_PDFS; ++i) {
88 
89  try {
90 
91  JPDF_t pdf;
92 
93  const string file_name = getFilename(fileDescriptor, pdf_t[i]);
94 
95  NOTICE("loading PDF from file " << file_name << "... " << flush);
96 
97  pdf.load(file_name.c_str());
98 
99  NOTICE("OK" << endl);
100 
101  pdf.setExceptionHandler(supervisor);
102 
103  npe[ i ] = JNPE_t(pdf);
104  }
105  catch(const JException& error) {
106  FATAL(error.what() << endl);
107  }
108  }
109 
110  // Add PDFs
111  for (int i = 1; i < NUMBER_OF_PDFS; i += 2) {
112 
113  npe[ i ].add(npe[i-1]);
114 
115  JNPE_t buffer;
116 
117  npe[i-1].swap(buffer);
118  }
119  }
static const JZero zero
Function object to assign zero value.
Definition: JZero.hh:105
void add(const JNPETable &input)
Add NPE table.
Definition: JNPETable.hh:124
#define NOTICE(A)
Definition: JMessage.hh:64
JLANG::JSharedPointer< JMEstimator > estimator
M-Estimator function.
#define FATAL(A)
Definition: JMessage.hh:67
static const JPDFType_t pdf_t[NUMBER_OF_PDFS]
PDF types.
std::string getFilename(const std::string &file_name)
Get file name part, i.e. part after last JEEP::PATHNAME_SEPARATOR if any.
Definition: JeepToolkit.hh:128
JPHYSICS::JPDFTable< JFunction1D_t, JPDFMaplist_t > JPDF_t
JPHYSICS::JNPETable< double, double, JNPEMaplist_t > JNPE_t

Member Function Documentation

double JFIT::JRegressor< JShower3EZ, JSimplex >::operator() ( const JShower3EZ shower,
const JPMTW0 pmt 
) const
inline

Fit function.

This method is used to determine the chi2 of given PMT with respect to shower hypothesis.

Parameters
showershower
pmtpmt
Returns
chi2

Definition at line 129 of file JShower3EZRegressor.hh.

130  {
131  using namespace JPP;
132 
133  JPosition3D D(pmt.getPosition());
134  JDirection3D U(pmt.getDirection());
135 
136  D.sub(shower.getPosition());
137 
138  JVersor3D shower_dir(shower.getDirection());
139 
140  const double z = D.getDot(shower_dir);
141  const double x = D.getX() - z * shower.getDX();
142  const double y = D.getY() - z * shower.getDY();
143  const double cosDelta = z/D.getLength(); // Delta = angle between shower direction and PMT position
144 
145  U.rotate(JRotation3Z(-atan2(y,x))); // rotate PMT axis to x-z plane
146 
147  const double theta = U.getTheta();
148  const double phi = fabs(U.getPhi());
149 
150  JNPE_t::result_type H0 = getH0(pmt.getR()); // getH0 = Get background hypothesis value for time integrated PDF.
151  JNPE_t::result_type H1 = getH1(D.getLength(), cosDelta, theta, phi, shower.getE()); // getH1 = Get signal hypothesis value for time integrated PDF.
152 
153  if (get_value(H1) >= Vmax_npe) {
154  H1 *= Vmax_npe / get_value(H1);
155  }
156 
157  H1 += H0; // now H1 is signal + background
158 
159  const bool hit = pmt.getN() != 0;
160  const double u = getChi2(get_value(H1), hit); // -log(lik)
161 
162  return estimator->getRho(u);
163  }
JNPE_t::result_type getH1(const double D, const double cosDelta, 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].
JLANG::JSharedPointer< JMEstimator > estimator
M-Estimator function.
JNPE_t::result_type getH0(const double R_Hz) const
Get background hypothesis value for time integrated PDF.
double u[N+1]
Definition: JPolint.hh:776
double getChi2(const double P)
Get chi2 corresponding to given probability.
Definition: JFitToolkit.hh:56
do echo Generating $dir eval D
Definition: JDrawLED.sh:53
JResultEvaluator< JResult_t >::result_type get_value(const JResult_t &value)
Helper method to recursively evaluate a to function value.
Definition: JResult.hh:998
JNPE_t::result_type JFIT::JRegressor< JShower3EZ, JSimplex >::getH0 ( const double  R_Hz) const
inline

Get background hypothesis value for time integrated PDF.

Parameters
R_Hzrate [Hz]
Returns
hypothesis value

Definition at line 171 of file JShower3EZRegressor.hh.

172  {
173  return JNPE_t::result_type(R_Hz * 1e-9 * T_ns.getLength());
174  }
static JTimeRange T_ns
Time window with respect to Cherenkov hypothesis [ns].
JNPE_t::result_type JFIT::JRegressor< JShower3EZ, JSimplex >::getH1 ( const double  D,
const double  cosDelta,
const double  theta,
const double  phi,
const double  E 
) const
inline

Get signal hypothesis value for time integrated PDF.

Parameters
DPMT distance from shower [m]
cosDeltaangle between shower direction and PMT position
thetaPMT zenith angle [deg]
phiPMT azimuth angle [deg]
Eshower energy [GeV]
Returns
hypothesis value

Definition at line 186 of file JShower3EZRegressor.hh.

191  {
192  JNPE_t::result_type h1 = JMATH::zero;
193 
194  for (int i = 0; i != NUMBER_OF_PDFS; ++i) {
195 
196  if (!npe[i].empty() && D <= npe[i].getXmax()) {
197 
198  try {
199 
200  JNPE_t::result_type y1 = E * npe[i](std::max(D, npe[i].getXmin()), cosDelta, theta, phi);
201 
202  // safety measure
203 
204  if(y1 < 0){
205  y1 = 0;
206  }
207 
208  h1 += y1;
209 
210  }
211  catch(JLANG::JException& error) {
212  ERROR(error << std::endl);
213  }
214  }
215  }
216 
217  return h1;
218  }
General exception.
Definition: JException.hh:23
then usage $script< input file >[option[primary[working directory]]] nWhere option can be E
Definition: JMuonPostfit.sh:36
static const JZero zero
Function object to assign zero value.
Definition: JZero.hh:105
#define ERROR(A)
Definition: JMessage.hh:66
do echo Generating $dir eval D
Definition: JDrawLED.sh:53
result_type JFIT::JAbstractRegressor< JShower3EZ , JSimplex >::operator() ( const JShower3EZ value,
T  __begin,
T  __end 
)
inlineinherited

Global fit.

Parameters
valuestart value
__beginbegin of data set
__endend of data set
Returns
chi2

Definition at line 92 of file JRegressor.hh.

93  {
94  static_cast<minimiser_type&>(*this).value = value;
95 
96  return static_cast<minimiser_type&>(*this)(static_cast<regressor_type&>(*this), __begin, __end);
97  }
JRegressor< JShower3EZ, JSimplex > regressor_type
Definition: JRegressor.hh:79
JModel_t value
Definition: JSimplex.hh:240
double JFIT::JSimplex< JShower3EZ >::operator() ( const JFunction_t &  fit,
T  __begin,
T  __end 
)
inlineinherited

Multi-dimensional fit.

The given fit function should return the equivalent of chi2 for the current value of the given model and a given data point.

Parameters
fitfit function
__beginbegin of data
__endend of data
Returns
chi2

Definition at line 71 of file JSimplex.hh.

72  {
73  using namespace std;
74  using namespace JPP;
75 
76  double chi2_old = evaluate(fit, __begin, __end);
77 
78  const int N = step.size();
79 
80  if (N != 0) {
81 
82  p0 = value;
83  p1 = value;
84  wall = value;
85 
86  double chi2[N];
87 
89 
91 
92  DEBUG("old: " << FIXED(12,5) << chi2_old << endl);
93 
94  p0 = value;
95 
96  for (int i = 0; i != N; ++i) {
97 
98  DEBUG("step: " << i << ' ' << setw(5) << numberOfIterations << endl);
99 
100  chi2[i] = (*this)(fit, __begin, __end, step[i]);
101  }
102 
103  // overall step direction of last iteration
104 
105  wall = value;
106  wall -= p0;
107 
108  const double chi2_new = (*this)(fit, __begin, __end, wall);
109 
110  DEBUG("new: " << FIXED(12,5) << chi2_new << endl);
111 
112 
113  if (fabs(chi2_old - chi2_new) < EPSILON*fabs(chi2_old)) {
114  return chi2_new;
115  }
116 
117  // double overall step
118 
119  wall = value;
120  wall -= p0;
121  value += wall;
122 
123  const double fe = evaluate(fit, __begin, __end);
124 
125  value -= wall;
126 
127 
128  for (int i = N-1; i != 0; --i) {
129  chi2[i] = chi2[i-1] - chi2[i];
130  }
131 
132  chi2[0] = chi2_old - chi2[0];
133 
134 
135  double df = 0.0;
136 
137  for (int i = 0; i != N; ++i) {
138  if (chi2[i] > df) {
139  df = chi2[i];
140  }
141  }
142 
143  const double fn = chi2_new;
144  const double f0 = chi2_old;
145  const double ff = f0 - fn - df;
146 
147  // shift step directions
148 
149  if (fe < f0 && 2.0*(f0 - 2.0*fn + fe)*ff*ff < (f0-fe)*(f0-fe)*df) {
150 
151  for (int i = 0; i != N - 1; ++i) {
152  step[i] = step[i+1];
153  }
154 
155  step[N-1] = wall;
156  }
157 
158  chi2_old = chi2_new;
159  }
160  }
161 
162  return chi2_old;
163  }
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:446
then usage $script< input file >[option[primary[working directory]]] nWhere option can be N
Definition: JMuonPostfit.sh:36
then if[[!-f $DETECTOR]] then JDetector sh $DETECTOR fi cat $WORKDIR trigger_parameters txt<< EOFtrigger3DMuon.enabled=1;trigger3DMuon.numberOfHits=5;trigger3DMuon.gridAngle_deg=1;ctMin=0.0;TMaxLocal_ns=15.0;EOF set_variable TRIGGEREFFICIENCY_TRIGGERED_EVENTS_ONLY INPUT_FILES=() for((i=1;$i<=$NUMBER_OF_RUNS;++i));do JSirene.sh $DETECTOR $JPP_DATA/genhen.km3net_wpd_V2_0.evt.gz $WORKDIR/sirene_ ${i}.root JTriggerEfficiency.sh $DETECTOR $DETECTOR $WORKDIR/sirene_ ${i}.root $WORKDIR/trigger_efficiency_ ${i}.root $WORKDIR/trigger_parameters.txt $JPP_DATA/PMT_parameters.txt INPUT_FILES+=($WORKDIR/trigger_efficiency_ ${i}.root) done for ANGLE_DEG in $ANGLES_DEG[*];do set_variable SIGMA_NS 3.0 set_variable OUTLIERS 3 set_variable OUTPUT_FILE $WORKDIR/matrix\[${ANGLE_DEG}\deg\].root $JPP_DIR/examples/JReconstruction-f"$INPUT_FILES[*]"-o $OUTPUT_FILE-S ${SIGMA_NS}-A ${ANGLE_DEG}-O ${OUTLIERS}-d ${DEBUG}--!fiif[[$OPTION=="plot"]];then if((0));then for H1 in h0 h1;do JPlot1D-f"$WORKDIR/matrix["${^ANGLES_DEG}" deg].root:${H1}"-y"1 2e3"-Y-L TR-T""-\^"number of events [a.u.]"-> o chi2
Definition: JMatrixNZ.sh:106
double evaluate(const JFunction_t &fit, T __begin, T __end) const
Evaluate chi2 for given data set.
Definition: JSimplex.hh:253
static int MAXIMUM_ITERATIONS
maximal number of iterations
Definition: JSimplex.hh:237
static double EPSILON
maximal distance to minimum
Definition: JSimplex.hh:238
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62
std::vector< JShower3EZ > step
Definition: JSimplex.hh:241
double JFIT::JSimplex< JShower3EZ >::operator() ( const JFunction_t &  fit,
T  __begin,
T  __end,
const JShower3EZ step 
)
inlineinherited

1D fit.

The given fit function should return the equivalent of chi2 for the current value of the given model and a given data point.

Parameters
fitfit function
__beginbegin of data
__endend of data
stepstep direction

Definition at line 178 of file JSimplex.hh.

179  {
180  using namespace std;
181  using namespace JPP;
182 
183  double lambda = 0.5; // control parameter
184  double factor = 1.0; // multiplication factor
185 
186  double chi2_old = evaluate(fit, __begin, __end);
187 
188  for (int i = 0; numberOfIterations != MAXIMUM_ITERATIONS; ++numberOfIterations, ++i) {
189 
190  p1 = step;
191  p1 *= lambda;
192  value += p1;
193 
194  const double chi2_new = evaluate(fit, __begin, __end);
195 
196  DEBUG("step: " << setw(3) << i << ' ' << FIXED(12,5) << chi2_old << ' ' << FIXED(12,5) << chi2_new << ' ' << FIXED(5,2) << lambda << endl);
197 
198  if (fabs(chi2_old - chi2_new) < EPSILON*fabs(chi2_old)) {
199 
200  if (chi2_new > chi2_old) {
201 
202  p1 = step;
203  p1 *= lambda;
204  value -= p1; // undo last step
205 
206  return chi2_old;
207 
208  } else {
209 
210  return chi2_new;
211  }
212  }
213 
214  if (chi2_new < chi2_old) {
215 
216  chi2_old = chi2_new;
217 
218  } else {
219 
220  p1 = step;
221  p1 *= lambda;
222  value -= p1; // step back
223  lambda = -lambda; // change direction
224 
225  if (i != 0) {
226  factor = 0.5; // reduce step size
227  }
228  }
229 
230  lambda = factor * lambda;
231  }
232 
233  return chi2_old;
234  }
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:446
double evaluate(const JFunction_t &fit, T __begin, T __end) const
Evaluate chi2 for given data set.
Definition: JSimplex.hh:253
static int MAXIMUM_ITERATIONS
maximal number of iterations
Definition: JSimplex.hh:237
static double EPSILON
maximal distance to minimum
Definition: JSimplex.hh:238
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62
std::vector< JShower3EZ > step
Definition: JSimplex.hh:241

Member Data Documentation

JTimeRange JFIT::JRegressor< JShower3EZ, JSimplex >::T_ns
static

Time window with respect to Cherenkov hypothesis [ns].

Default values.

Definition at line 221 of file JShower3EZRegressor.hh.

double JFIT::JRegressor< JShower3EZ, JSimplex >::Vmax_npe = std::numeric_limits<double>::max()
static

Maximal integral of PDF [npe].

Definition at line 222 of file JShower3EZRegressor.hh.

const int JFIT::JRegressor< JShower3EZ, JSimplex >::NUMBER_OF_PDFS = 2
static

Definition at line 224 of file JShower3EZRegressor.hh.

const JPDFType_t JFIT::JRegressor< JShower3EZ, JSimplex >::pdf_t
static
Initial value:

PDF types.

Definition at line 226 of file JShower3EZRegressor.hh.

PDF.

Definition at line 228 of file JShower3EZRegressor.hh.

M-Estimator function.

Definition at line 230 of file JShower3EZRegressor.hh.

int JFIT::JSimplex< JShower3EZ >::MAXIMUM_ITERATIONS
staticinherited

maximal number of iterations

maximal number of iterations.

Definition at line 237 of file JSimplex.hh.

double JFIT::JSimplex< JShower3EZ >::EPSILON
staticinherited

maximal distance to minimum

maximal distance to minimum.

Definition at line 238 of file JSimplex.hh.

JShower3EZ JFIT::JSimplex< JShower3EZ >::value
inherited

Definition at line 240 of file JSimplex.hh.

Definition at line 241 of file JSimplex.hh.

int JFIT::JSimplex< JShower3EZ >::numberOfIterations
inherited

Definition at line 242 of file JSimplex.hh.

template<class T>
int JEEP::JMessage< T >::debug = 0
staticinherited

debug level (default is off).

Definition at line 45 of file JMessage.hh.


The documentation for this struct was generated from the following file: