1 #ifndef __JFIT__JLINE1ZESTIMATOR__
2 #define __JFIT__JLINE1ZESTIMATOR__
19 namespace JPP {
using namespace JFIT; }
111 (*this)(__begin, __end);
135 if (
N >= NUMBER_OF_PARAMETERS) {
144 for (
T i = __begin;
i != __end; ++
i) {
151 const double W = 1.0/
N;
168 double xi = j->getX() - getX();
169 double yi = j->getY() - getY();
174 if ((
done = (++j == __end))) {
178 double xj = j->getX() - getX();
179 double yj = j->getY() - getY();
186 const double y = ((xj + xi) * dx +
218 if (fabs(svd.S.a11) < MINIMAL_SVD_WEIGHT * fabs(svd.S.a00)) {
219 THROW(
JValueOutOfRange,
"JEstimator<JLine1Z>::JEstimator(): singular value " << svd.S.a11 <<
' ' << svd.S.a00);
222 V = svd.invert(MINIMAL_SVD_WEIGHT);
224 __x +=
V.a00 * y0 +
V.a01 * y1 +
V.a02 * y2;
225 __y +=
V.a10 * y0 +
V.a11 * y1 +
V.a12 * y2;
226 __t =
V.a20 * y0 +
V.a21 * y1 +
V.a22 * y2;
232 throw JValueOutOfRange(
"JEstimator<JLine1Z>::JEstimator(): Not enough data points.");
263 if (
N != (
int) A.
size()) {
267 if (
N >= NUMBER_OF_PARAMETERS) {
277 for (
size_t row = 0; row != A.
size(); ++row, ++
i) {
279 const double dx = i->getX() - getX();
280 const double dy = i->getY() - getY();
282 const double rt = sqrt(dx*dx + dy*dy);
295 for (
size_t col = 0; col != A.
size(); ++col, ++
j) {
297 const double dx = j->getX() - getX();
298 const double dy = j->getY() - getY();
299 const double dz = j->getZ() - getZ();
301 const double rt = sqrt(dx*dx + dy*dy);
314 const double vs =
A(row,col);
320 V.a00 += xr * vs * xc;
321 V.a01 += xr * vs * yc;
322 V.a02 += xr * vs * tc;
323 V.a11 += yr * vs * yc;
324 V.a12 += yr * vs * tc;
325 V.a22 += tr * vs * tc;
335 if (fabs(svd.S.a11) < MINIMAL_SVD_WEIGHT * fabs(svd.S.a00)) {
336 THROW(
JValueOutOfRange,
"JEstimator<JLine1Z>::update(): singular value " << svd.S.a11 <<
' ' << svd.S.a00);
339 V = svd.invert(MINIMAL_SVD_WEIGHT);
341 __x +=
V.a00 * x1 +
V.a01 * y1 +
V.a02 * t1;
342 __y +=
V.a10 * x1 +
V.a11 * y1 +
V.a12 * t1;
343 __t =
V.a20 * x1 +
V.a21 * y1 +
V.a22 * t1;
351 static const int NUMBER_OF_PARAMETERS = 3;
Linear fit of straight line parallel to z-axis to set of hits (objects with position and time)...
Template definition of linear fit.
double getKappaC()
Get average R-dependence of arrival time of Cherenkov light (a.k.a.
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
JEstimator()
Default constructor.
V(JDAQEvent-JTriggerReprocessor)*1.0/(JDAQEvent+1.0e-10)
JEstimator(T __begin, T __end)
Constructor.
Determination of the co-variance matrix of hits for a track along z-axis (JFIT::JLine1Z).
void update(T __begin, T __end, const JMatrixNZ &A)
Update track parameters using updated co-variance matrix (e.g. matrix with one hit switched off)...
do set_variable OUTPUT_DIRECTORY $WORKDIR T
const JEstimator< JLine1Z > & operator()(T __begin, T __end)
Fit.
Singular value decomposition.
JMATH::JMatrix3S V
co-variance matrix of fit parameters
size_t size() const
Get dimension of matrix.
then usage $script< input file >[option[primary[working directory]]] nWhere option can be N
const double getSpeedOfLight()
Get speed of light.
const double getInverseSpeedOfLight()
Get inverse speed of light.
Data structure for fit of straight line paralel to z-axis.
Exception for accessing a value in a collection that is outside of its range.
source $JPP_DIR setenv csh $JPP_DIR &dev null eval JShellParser o a A
static double MINIMAL_SVD_WEIGHT
minimal SVD weight.