File indexing completed on 2025-08-05 08:18:25
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030 #ifndef GBLTRAJECTORY_H_
0031 #define GBLTRAJECTORY_H_
0032
0033 #include "GblPoint.h"
0034 #include "GblData.h"
0035 #include "GblPoint.h"
0036 #include "BorderedBandMatrix.h"
0037 #include "MilleBinary.h"
0038 #include "TMatrixDSymEigen.h"
0039
0040
0041 namespace gbl {
0042
0043
0044
0045
0046
0047
0048 class GblTrajectory {
0049 public:
0050 explicit GblTrajectory(const std::vector<GblPoint> &aPointList, bool flagCurv = true,
0051 bool flagU1dir = true, bool flagU2dir = true);
0052 GblTrajectory(const std::vector<GblPoint> &aPointList, unsigned int aLabel,
0053 const TMatrixDSym &aSeed, bool flagCurv = true, bool flagU1dir =
0054 true, bool flagU2dir = true);
0055 explicit GblTrajectory(
0056 const std::vector<std::pair<std::vector<GblPoint>, TMatrixD> > &aPointaAndTransList);
0057 GblTrajectory(
0058 const std::vector<std::pair<std::vector<GblPoint>, TMatrixD> > &aPointaAndTransList,
0059 const TMatrixD &extDerivatives, const TVectorD &extMeasurements,
0060 const TVectorD &extPrecisions);
0061 GblTrajectory(
0062 const std::vector<std::pair<std::vector<GblPoint>, TMatrixD> > &aPointaAndTransList,
0063 const TMatrixD &extDerivatives, const TVectorD &extMeasurements,
0064 const TMatrixDSym &extPrecisions);
0065 virtual ~GblTrajectory();
0066 bool isValid() const;
0067 unsigned int getNumPoints() const;
0068 unsigned int getResults(int aSignedLabel, TVectorD &localPar,
0069 TMatrixDSym &localCov) const;
0070 unsigned int getMeasResults(unsigned int aLabel, unsigned int &numRes,
0071 TVectorD &aResiduals, TVectorD &aMeasErrors, TVectorD &aResErrors,
0072 TVectorD &aDownWeights);
0073 unsigned int getScatResults(unsigned int aLabel, unsigned int &numRes,
0074 TVectorD &aResiduals, TVectorD &aMeasErrors, TVectorD &aResErrors,
0075 TVectorD &aDownWeights);
0076 unsigned int getLabels(std::vector<unsigned int> &aLabelList);
0077 unsigned int getLabels(std::vector<std::vector<unsigned int> > &aLabelList);
0078 unsigned int fit(double &Chi2, int &Ndf, double &lostWeight,
0079 std::string optionList = "");
0080 void milleOut(MilleBinary &aMille);
0081 void printTrajectory(unsigned int level = 0);
0082 void printPoints(unsigned int level = 0);
0083 void printData();
0084 std::vector<GblData> getData() {return theData;}
0085
0086 private:
0087 unsigned int numAllPoints;
0088 std::vector<unsigned int> numPoints;
0089 unsigned int numTrajectories;
0090 unsigned int numOffsets;
0091 unsigned int numInnerTrans;
0092 unsigned int numCurvature;
0093 unsigned int numParameters;
0094 unsigned int numLocals;
0095 unsigned int numMeasurements;
0096 unsigned int externalPoint;
0097 bool constructOK;
0098 bool fitOK;
0099 std::vector<unsigned int> theDimension;
0100 std::vector<std::vector<GblPoint> > thePoints;
0101 std::vector<GblData> theData;
0102 std::vector<unsigned int> measDataIndex;
0103 std::vector<unsigned int> scatDataIndex;
0104 TMatrixDSym externalSeed;
0105 std::vector<TMatrixD> innerTransformations;
0106
0107 TMatrixD externalDerivatives;
0108 TVectorD externalMeasurements;
0109 TVectorD externalPrecisions;
0110 VVector theVector;
0111 BorderedBandMatrix theMatrix;
0112
0113 std::pair<std::vector<unsigned int>, TMatrixD> getJacobian(
0114 int aSignedLabel) const;
0115 void getFitToLocalJacobian(std::vector<unsigned int> &anIndex,
0116 SMatrix55 &aJacobian, const GblPoint &aPoint, unsigned int measDim,
0117 unsigned int nJacobian = 1) const;
0118 void getFitToKinkJacobian(std::vector<unsigned int> &anIndex,
0119 SMatrix27 &aJacobian, const GblPoint &aPoint) const;
0120 void construct();
0121 void defineOffsets();
0122 void calcJacobians();
0123 void prepare();
0124 void buildLinearEquationSystem();
0125 void predict();
0126 double downWeight(unsigned int aMethod);
0127 void getResAndErr(unsigned int aData, double &aResidual,
0128 double &aMeadsError, double &aResError, double &aDownWeight);
0129 };
0130 }
0131 #endif