Commit 33cb6dc7 authored by Claus Kleinwort's avatar Claus Kleinwort
Browse files

cpp: GblData simplified/sped up

git-svn-id: http://svnsrv.desy.de/public/GeneralBrokenLines/trunk@126 281f6f2b-e318-4fd1-8bce-1a4ba7aab212
parent 825dca55
......@@ -5,7 +5,6 @@
* Author: kleinwrt
*/
/** \file
* BorderedBandMatrix definition.
*
......@@ -84,10 +83,10 @@ public:
unsigned int nBand = 5);
void solveAndInvertBorderedBand(const VVector &aRightHandSide,
VVector &aSolution);
void addBlockMatrix(double aWeight,
const std::vector<unsigned int>* anIndex,
const std::vector<double>* aVector);
TMatrixDSym getBlockMatrix(const std::vector<unsigned int> anIndex) const;
void addBlockMatrix(double aWeight, unsigned int aSize,
unsigned int* anIndex, double* aVector);
TMatrixDSym getBlockMatrix(const std::vector<unsigned int> &anIndex) const;
TMatrixDSym getBlockMatrix(unsigned int aSize, unsigned int* anIndex) const;
void printMatrix() const;
private:
......
......@@ -48,11 +48,7 @@ typedef ROOT::Math::SMatrix<double, 5, 5> SMatrix55;
namespace gbl {
enum dataBlockType {
None,
InternalMeasurement,
InternalKink,
ExternalSeed,
ExternalMeasurement
None, InternalMeasurement, InternalKink, ExternalSeed, ExternalMeasurement
};
/// Data (block) for independent scalar measurement
......@@ -63,13 +59,12 @@ enum dataBlockType {
class GblData {
public:
GblData(unsigned int aLabel, dataBlockType aType, double aMeas,
double aPrec);
double aPrec, unsigned int aTraj = 0, unsigned int aPoint = 0);
virtual ~GblData();
void addDerivatives(unsigned int iRow,
const std::vector<unsigned int> &labDer, const SMatrix55 &matDer,
unsigned int iOff, const TMatrixD &derLocal,
const std::vector<int> &labGlobal, const TMatrixD &derGlobal,
unsigned int nLocal, const TMatrixD &derTrans);
unsigned int iOff, const TMatrixD &derLocal, unsigned int nLocal,
const TMatrixD &derTrans);
void addDerivatives(unsigned int iRow,
const std::vector<unsigned int> &labDer, const SMatrix27 &matDer,
unsigned int nLocal, const TMatrixD &derTrans);
......@@ -82,28 +77,32 @@ public:
void printData() const;
unsigned int getLabel() const;
dataBlockType getType() const;
void getLocalData(double &aValue, double &aWeight,
std::vector<unsigned int>* &indLocal,
std::vector<double>* &derLocal);
void getAllData(double &aValue, double &aErr,
std::vector<unsigned int>* &indLocal,
std::vector<double>* &derLocal, std::vector<int>* &labGlobal,
std::vector<double>* &derGlobal);
unsigned int getNumSimple() const;
void getLocalData(double &aValue, double &aWeight, unsigned int &numLocal,
unsigned int* &indLocal, double* &derLocal);
void getAllData(double &aValue, double &aErr, unsigned int &numLocal,
unsigned int* &indLocal, double* &derLocal, unsigned int &aTraj,
unsigned int &aPoint, unsigned int &aRow);
void getResidual(double &aResidual, double &aVariance, double &aDownWeight,
std::vector<unsigned int>* &indLocal,
std::vector<double>* &derLocal);
unsigned int &numLocal, unsigned int* &indLocal, double* &derLocal);
private:
unsigned int theLabel; ///< Label (of corresponding point)
unsigned int theRow; ///< Row number (of measurement)
dataBlockType theType; ///< Type (None, InternalMeasurement, InternalKink, ExternalSeed, ExternalMeasurement)
double theValue; ///< Value (residual)
double thePrecision; ///< Precision (1/sigma**2)
unsigned int theTrajectory; ///< Trajectory number
unsigned int thePoint; ///< Point number (on trajectory)
double theDownWeight; ///< Down-weighting factor (0-1)
double thePrediction; ///< Prediction from fit
std::vector<unsigned int> theParameters; ///< List of fit parameters (with non zero derivatives)
std::vector<double> theDerivatives; ///< List of derivatives for fit
std::vector<int> globalLabels; ///< Labels for global derivatives
std::vector<double> globalDerivatives; ///< Global derivatives
// standard local parameters (curvature, offsets), fixed size
unsigned int theNumLocal; ///< Number of (non zero) simple derivatives (max 7)
unsigned int theParameters[7]; ///< List of parameters (with non zero derivatives)
double theDerivatives[7]; ///< List of derivatives for fit
// more local parameters, dynamic size
std::vector<unsigned int> moreParameters; ///< List of fit parameters (with non zero derivatives)
std::vector<double> moreDerivatives; ///< List of derivatives for fit
};
}
#endif /* GBLDATA_H_ */
......@@ -97,6 +97,7 @@ public:
unsigned int getNumGlobals() const;
std::vector<int> getGlobalLabels() const;
const TMatrixD& getGlobalDerivatives() const;
void getGlobalLabelsAndDerivatives(unsigned int aRow, std::vector<int> &aLabels, std::vector<double> &aDerivatives) const;
void setLabel(unsigned int aLabel);
unsigned int getLabel() const;
void setOffset(int anOffset);
......
......@@ -94,6 +94,7 @@ private:
unsigned int numMeasurements; ///< Total number of measurements
unsigned int externalPoint; ///< Label of external point (or 0)
unsigned int skippedMeasLabel; ///< Label of point with measurements skipped in fit (for unbiased residuals) (or 0)
unsigned int maxNumGlobals; ///< Max. number of global labels/derivatives per point
bool constructOK; ///< Trajectory has been successfully constructed (ready for fit/output)
bool fitOK; ///< Trajectory has been successfully fitted (results are valid)
std::vector<unsigned int> theDimension; ///< List of active dimensions (0=u1, 1=u2) in fit
......
......@@ -70,9 +70,8 @@ public:
MilleBinary(const std::string fileName = "milleBinaryISN.dat",
bool doublePrec = false, unsigned int aSize = 2000);
virtual ~MilleBinary();
void addData(double aMeas, double aPrec,
const std::vector<unsigned int> &indLocal,
const std::vector<double> &derLocal,
void addData(double aMeas, double aPrec, unsigned int numLocal,
unsigned int* indLocal, double* derLocal,
const std::vector<int> &labGlobal,
const std::vector<double> &derGlobal);
void writeRecord();
......
......@@ -62,27 +62,26 @@ void BorderedBandMatrix::resize(unsigned int nSize, unsigned int nBorder,
* to bordered band matrix:
* BBmatrix(anIndex(i),anIndex(j)) += aVector(i) * aWeight * aVector(j).
* \param aWeight [in] Weight
* \param anIndex [in] List of rows/colums to be used
* \param aSize [in] Size of block matrix
* \param anIndex [in] Array of rows/colums to be used
* \param aVector [in] Vector
*/
void BorderedBandMatrix::addBlockMatrix(double aWeight,
const std::vector<unsigned int>* anIndex,
const std::vector<double>* aVector) {
void BorderedBandMatrix::addBlockMatrix(double aWeight, unsigned int aSize,
unsigned int* anIndex, double* aVector) {
int nBorder = numBorder;
for (unsigned int i = 0; i < anIndex->size(); ++i) {
int iIndex = (*anIndex)[i] - 1; // anIndex has to be sorted
for (unsigned int i = 0; i < aSize; ++i) {
int iIndex = anIndex[i] - 1; // anIndex has to be sorted
for (unsigned int j = 0; j <= i; ++j) {
int jIndex = (*anIndex)[j] - 1;
int jIndex = anIndex[j] - 1;
if (iIndex < nBorder) {
theBorder(iIndex, jIndex) += (*aVector)[i] * aWeight
* (*aVector)[j];
theBorder(iIndex, jIndex) += aVector[i] * aWeight * aVector[j];
} else if (jIndex < nBorder) {
theMixed(jIndex, iIndex - nBorder) += (*aVector)[i] * aWeight
* (*aVector)[j];
theMixed(jIndex, iIndex - nBorder) += aVector[i] * aWeight
* aVector[j];
} else {
unsigned int nBand = iIndex - jIndex;
theBand(nBand, jIndex - nBorder) += (*aVector)[i] * aWeight
* (*aVector)[j];
theBand(nBand, jIndex - nBorder) += aVector[i] * aWeight
* aVector[j];
numBand = std::max(numBand, nBand); // update band width
}
}
......@@ -95,7 +94,7 @@ void BorderedBandMatrix::addBlockMatrix(double aWeight,
* \param anIndex [in] List of rows/colums to be used
*/
TMatrixDSym BorderedBandMatrix::getBlockMatrix(
const std::vector<unsigned int> anIndex) const {
const std::vector<unsigned int> &anIndex) const {
TMatrixDSym aMatrix(anIndex.size());
int nBorder = numBorder;
......@@ -117,6 +116,35 @@ TMatrixDSym BorderedBandMatrix::getBlockMatrix(
return aMatrix;
}
/// Retrieve symmetric block matrix.
/**
* Get (compressed) block from bordered band matrix: aMatrix(i,j) = BBmatrix(anIndex(i),anIndex(j)).
* \param aSize [in] Matrix size
* \param anIndex [in] Array of rows/colums to be used
*/
TMatrixDSym BorderedBandMatrix::getBlockMatrix(unsigned int aSize,
unsigned int* anIndex) const {
TMatrixDSym aMatrix(aSize);
int nBorder = numBorder;
for (unsigned int i = 0; i < aSize; ++i) {
int iIndex = anIndex[i] - 1; // anIndex has to be sorted
for (unsigned int j = 0; j <= i; ++j) {
int jIndex = anIndex[j] - 1;
if (iIndex < nBorder) {
aMatrix(i, j) = theBorder(iIndex, jIndex); // border part of inverse
} else if (jIndex < nBorder) {
aMatrix(i, j) = -theMixed(jIndex, iIndex - nBorder); // mixed part of inverse
} else {
unsigned int nBand = iIndex - jIndex;
aMatrix(i, j) = theBand(nBand, jIndex - nBorder); // band part of inverse
}
aMatrix(j, i) = aMatrix(i, j);
}
}
return aMatrix;
}
/// Solve linear equation system, partially calculate inverse.
/**
* Solve linear equation A*x=b system with bordered band matrix A,
......
......@@ -38,11 +38,14 @@ namespace gbl {
* \param [in] aType Type of (scalar) measurement
* \param [in] aValue Value of (scalar) measurement
* \param [in] aPrec Precision of (scalar) measurement
* \param [in] aTraj Trajectory number
* \param [in] aPoint Point number
*/
GblData::GblData(unsigned int aLabel, dataBlockType aType, double aValue,
double aPrec) :
theLabel(aLabel), theType(aType), theValue(aValue), thePrecision(aPrec), theDownWeight(
1.), thePrediction(0.), theParameters(), theDerivatives(), globalLabels(), globalDerivatives() {
double aPrec, unsigned int aTraj, unsigned int aPoint) :
theLabel(aLabel), theRow(0), theType(aType), theValue(aValue), thePrecision(
aPrec), theTrajectory(aTraj), thePoint(aPoint), theDownWeight(
1.), thePrediction(0.), theNumLocal(0), moreParameters(), moreDerivatives() {
}
......@@ -57,48 +60,72 @@ GblData::~GblData() {
* \param [in] matDer Derivatives (matrix) 'measurement vs track fit parameters'
* \param [in] iOff Offset for row index for additional parameters
* \param [in] derLocal Derivatives (matrix) for additional local parameters
* \param [in] labGlobal Labels for additional global (MP-II) parameters
* \param [in] derGlobal Derivatives (matrix) for additional global (MP-II) parameters
* \param [in] extOff Offset for external parameters
* \param [in] extDer Derivatives for external Parameters
*/
void GblData::addDerivatives(unsigned int iRow,
const std::vector<unsigned int> &labDer, const SMatrix55 &matDer,
unsigned int iOff, const TMatrixD &derLocal,
const std::vector<int> &labGlobal, const TMatrixD &derGlobal,
unsigned int extOff, const TMatrixD &extDer) {
unsigned int iOff, const TMatrixD &derLocal, unsigned int extOff,
const TMatrixD &extDer) {
unsigned int nParMax = 5 + derLocal.GetNcols() + extDer.GetNcols();
theParameters.reserve(nParMax); // have to be sorted
theDerivatives.reserve(nParMax);
theRow = iRow - iOff;
if (nParMax > 7) {
// dynamic data block size
moreParameters.reserve(nParMax); // have to be sorted
moreDerivatives.reserve(nParMax);
for (int i = 0; i < derLocal.GetNcols(); ++i) // local derivatives
{
if (derLocal(iRow - iOff, i)) {
theParameters.push_back(i + 1);
theDerivatives.push_back(derLocal(iRow - iOff, i));
for (int i = 0; i < derLocal.GetNcols(); ++i) // local derivatives
{
if (derLocal(iRow - iOff, i)) {
moreParameters.push_back(i + 1);
moreDerivatives.push_back(derLocal(iRow - iOff, i));
}
}
}
for (int i = 0; i < extDer.GetNcols(); ++i) // external derivatives
{
if (extDer(iRow - iOff, i)) {
theParameters.push_back(extOff + i + 1);
theDerivatives.push_back(extDer(iRow - iOff, i));
for (int i = 0; i < extDer.GetNcols(); ++i) // external derivatives
{
if (extDer(iRow - iOff, i)) {
moreParameters.push_back(extOff + i + 1);
moreDerivatives.push_back(extDer(iRow - iOff, i));
}
}
}
for (unsigned int i = 0; i < 5; ++i) // curvature, offset derivatives
{
if (labDer[i] and matDer(iRow, i)) {
theParameters.push_back(labDer[i]);
theDerivatives.push_back(matDer(iRow, i));
for (unsigned int i = 0; i < 5; ++i) // curvature, offset derivatives
{
if (labDer[i] and matDer(iRow, i)) {
moreParameters.push_back(labDer[i]);
moreDerivatives.push_back(matDer(iRow, i));
}
}
} else {
// simple (static) data block
for (int i = 0; i < derLocal.GetNcols(); ++i) // local derivatives
{
if (derLocal(iRow - iOff, i)) {
theParameters[theNumLocal] = i + 1;
theDerivatives[theNumLocal] = derLocal(iRow - iOff, i);
theNumLocal++;
}
}
}
globalLabels = labGlobal;
for (int i = 0; i < derGlobal.GetNcols(); ++i) // global derivatives
globalDerivatives.push_back(derGlobal(iRow - iOff, i));
for (int i = 0; i < extDer.GetNcols(); ++i) // external derivatives
{
if (extDer(iRow - iOff, i)) {
theParameters[theNumLocal] = extOff + i + 1;
theDerivatives[theNumLocal] = extDer(iRow - iOff, i);
theNumLocal++;
}
}
for (unsigned int i = 0; i < 5; ++i) // curvature, offset derivatives
{
if (labDer[i] and matDer(iRow, i)) {
theParameters[theNumLocal] = labDer[i];
theDerivatives[theNumLocal] = matDer(iRow, i);
theNumLocal++;
}
}
}
}
/// Add derivatives from kink.
......@@ -115,22 +142,36 @@ void GblData::addDerivatives(unsigned int iRow,
unsigned int extOff, const TMatrixD &extDer) {
unsigned int nParMax = 7 + extDer.GetNcols();
theParameters.reserve(nParMax); // have to be sorted
theDerivatives.reserve(nParMax);
theRow = iRow;
if (nParMax > 7) {
// dynamic data block size
moreParameters.reserve(nParMax); // have to be sorted
moreDerivatives.reserve(nParMax);
for (int i = 0; i < extDer.GetNcols(); ++i) // external derivatives
{
if (extDer(iRow, i)) {
theParameters.push_back(extOff + i + 1);
theDerivatives.push_back(extDer(iRow, i));
for (int i = 0; i < extDer.GetNcols(); ++i) // external derivatives
{
if (extDer(iRow, i)) {
moreParameters.push_back(extOff + i + 1);
moreDerivatives.push_back(extDer(iRow, i));
}
}
}
for (unsigned int i = 0; i < 7; ++i) // curvature, offset derivatives
{
if (labDer[i] and matDer(iRow, i)) {
theParameters.push_back(labDer[i]);
theDerivatives.push_back(matDer(iRow, i));
for (unsigned int i = 0; i < 7; ++i) // curvature, offset derivatives
{
if (labDer[i] and matDer(iRow, i)) {
moreParameters.push_back(labDer[i]);
moreDerivatives.push_back(matDer(iRow, i));
}
}
} else {
// simple (static) data block
for (unsigned int i = 0; i < 7; ++i) // curvature, offset derivatives
{
if (labDer[i] and matDer(iRow, i)) {
theParameters[theNumLocal] = labDer[i];
theDerivatives[theNumLocal] = matDer(iRow, i);
theNumLocal++;
}
}
}
}
......@@ -146,8 +187,8 @@ void GblData::addDerivatives(const std::vector<unsigned int> &index,
for (unsigned int i = 0; i < derivatives.size(); ++i) // any derivatives
{
if (derivatives[i]) {
theParameters.push_back(index[i]);
theDerivatives.push_back(derivatives[i]);
moreParameters.push_back(index[i]);
moreDerivatives.push_back(derivatives[i]);
}
}
}
......@@ -156,8 +197,15 @@ void GblData::addDerivatives(const std::vector<unsigned int> &index,
void GblData::setPrediction(const VVector &aVector) {
thePrediction = 0.;
for (unsigned int i = 0; i < theDerivatives.size(); ++i) {
thePrediction += theDerivatives[i] * aVector(theParameters[i] - 1);
if (theNumLocal > 0) {
for (unsigned int i = 0; i < theNumLocal; ++i) {
thePrediction += theDerivatives[i] * aVector(theParameters[i] - 1);
}
} else {
for (unsigned int i = 0; i < moreDerivatives.size(); ++i) {
thePrediction += moreDerivatives[i]
* aVector(moreParameters[i] - 1);
}
}
}
......@@ -203,14 +251,21 @@ double GblData::getChi2() const {
void GblData::printData() const {
std::cout << " measurement at label " << theLabel << " of type " << theType
<< ": " << theValue << ", " << thePrecision << std::endl;
std::cout << " param " << theParameters.size() << ":";
for (unsigned int i = 0; i < theParameters.size(); ++i) {
<< " from row " << theRow << ": " << theValue << ", "
<< thePrecision << std::endl;
std::cout << " param " << moreParameters.size() + theNumLocal << ":";
for (unsigned int i = 0; i < moreParameters.size(); ++i) {
std::cout << " " << moreParameters[i];
}
for (unsigned int i = 0; i < theNumLocal; ++i) {
std::cout << " " << theParameters[i];
}
std::cout << std::endl;
std::cout << " deriv " << theDerivatives.size() << ":";
for (unsigned int i = 0; i < theDerivatives.size(); ++i) {
std::cout << " deriv " << moreDerivatives.size() + theNumLocal << ":";
for (unsigned int i = 0; i < moreDerivatives.size(); ++i) {
std::cout << " " << moreDerivatives[i];
}
for (unsigned int i = 0; i < theNumLocal; ++i) {
std::cout << " " << theDerivatives[i];
}
std::cout << std::endl;
......@@ -236,36 +291,54 @@ dataBlockType GblData::getType() const {
/**
* \param [out] aValue Value
* \param [out] aWeight Weight
* \param [out] indLocal List of labels of used (local) fit parameters
* \param [out] derLocal List of derivatives for used (local) fit parameters
* \param [out] numLocal Number of local labels/derivatives
* \param [out] indLocal Array of labels of used (local) fit parameters
* \param [out] derLocal Array of derivatives for used (local) fit parameters
*/
void GblData::getLocalData(double &aValue, double &aWeight,
std::vector<unsigned int>* &indLocal, std::vector<double>* &derLocal) {
unsigned int &numLocal, unsigned int* &indLocal, double* &derLocal) {
aValue = theValue;
aWeight = thePrecision * theDownWeight;
indLocal = &theParameters;
derLocal = &theDerivatives;
if (theNumLocal > 0) {
numLocal = theNumLocal;
indLocal = theParameters;
derLocal = theDerivatives;
} else {
numLocal = moreParameters.size();
indLocal = &moreParameters[0];
derLocal = &moreDerivatives[0];
}
}
/// Get all Data for MP-II binary record.
/**
* \param [out] aValue Value
* \param [out] aErr Error
* \param [out] indLocal List of labels of local parameters
* \param [out] derLocal List of derivatives for local parameters
* \param [out] labGlobal List of labels of global parameters
* \param [out] derGlobal List of derivatives for global parameters
* \param [out] numLocal Number of local labels/derivatives
* \param [out] indLocal Array of labels of used (local) fit parameters
* \param [out] derLocal Array of derivatives for used (local) fit parameters
* \param [out] aTraj Trajectory number
* \param [out] aPoint Point number
* \param [out] aRow Row number
*/
void GblData::getAllData(double &aValue, double &aErr,
std::vector<unsigned int>* &indLocal, std::vector<double>* &derLocal,
std::vector<int>* &labGlobal, std::vector<double>* &derGlobal) {
void GblData::getAllData(double &aValue, double &aErr, unsigned int &numLocal,
unsigned int* &indLocal, double* &derLocal, unsigned int &aTraj,
unsigned int &aPoint, unsigned int &aRow) {
aValue = theValue;
aErr = 1.0 / sqrt(thePrecision);
indLocal = &theParameters;
derLocal = &theDerivatives;
labGlobal = &globalLabels;
derGlobal = &globalDerivatives;
if (theNumLocal > 0) {
numLocal = theNumLocal;
indLocal = theParameters;
derLocal = theDerivatives;
} else {
numLocal = moreParameters.size();
indLocal = &moreParameters[0];
derLocal = &moreDerivatives[0];
}
aTraj = theTrajectory;
aPoint = thePoint;
aRow = theRow;
}
/// Get data for residual (and errors).
......@@ -273,16 +346,24 @@ void GblData::getAllData(double &aValue, double &aErr,
* \param [out] aResidual Measurement-Prediction
* \param [out] aVariance Variance (of measurement)
* \param [out] aDownWeight Down-weighting factor
* \param [out] indLocal List of labels of used (local) fit parameters
* \param [out] derLocal List of derivatives for used (local) fit parameters
* \param [out] numLocal Number of local labels/derivatives
* \param [out] indLocal Array of labels of used (local) fit parameters
* \param [out] derLocal Array of derivatives for used (local) fit parameters
*/
void GblData::getResidual(double &aResidual, double &aVariance,
double &aDownWeight, std::vector<unsigned int>* &indLocal,
std::vector<double>* &derLocal) {
double &aDownWeight, unsigned int &numLocal, unsigned int* &indLocal,
double* &derLocal) {
aResidual = theValue - thePrediction;
aVariance = 1.0 / thePrecision;
aDownWeight = theDownWeight;
indLocal = &theParameters;
derLocal = &theDerivatives;
if (theNumLocal > 0) {
numLocal = theNumLocal;
indLocal = theParameters;
derLocal = theDerivatives;
} else {
numLocal = moreParameters.size();
indLocal = &moreParameters[0];
derLocal = &moreDerivatives[0];
}
}
}
......@@ -346,6 +346,22 @@ const TMatrixD& GblPoint::getGlobalDerivatives() const {
return globalDerivatives;
}
/// Retrieve global derivatives from a point for a single row.
/**
* \param [in] aRow Row number
* \param [out] aLabels Global labels
* \param [out] aDerivatives Global derivatives
*/
void GblPoint::getGlobalLabelsAndDerivatives(unsigned int aRow,
std::vector<int> &aLabels, std::vector<double> &aDerivatives) const {
aLabels.resize(globalDerivatives.GetNcols());
aDerivatives.resize(globalDerivatives.GetNcols());
for (int i = 0; i < globalDerivatives.GetNcols(); ++i) {
aLabels[i] = globalLabels[i];
aDerivatives[i] = globalDerivatives(aRow, i);
}
}
/// Define label of point (by GBLTrajectory constructor)
/**
* \param [in] aLabel Label identifying point
......
......@@ -153,8 +153,8 @@ GblTrajectory::GblTrajectory(const std::vector<GblPoint> &aPointList,
bool flagCurv, bool flagU1dir, bool flagU2dir) :
numAllPoints(aPointList.size()), numPoints(), numOffsets(0), numInnerTrans(
0), numCurvature(flagCurv ? 1 : 0), numParameters(0), numLocals(
0), numMeasurements(0), externalPoint(0), skippedMeasLabel(0), theDimension(
0), thePoints(), theData(), measDataIndex(), scatDataIndex(), externalSeed(), innerTransformations(), externalDerivatives(), externalMeasurements(), externalPrecisions() {
0), numMeasurements(0), externalPoint(0), skippedMeasLabel(0), maxNumGlobals(
0), theDimension(0), thePoints(), theData(), measDataIndex(), scatDataIndex(), externalSeed(), innerTransformations(), externalDerivatives(), externalMeasurements(), externalPrecisions() {
if (flagU1dir)
theDimension.push_back(0);
......@@ -184,7 +184,7 @@ GblTrajectory::GblTrajectory(const std::vector<GblPoint> &aPointList,
numAllPoints(aPointList.size()), numPoints(), numOffsets(0), numInnerTrans(
0), numCurvature(flagCurv ? 1 : 0), numParameters(0), numLocals(
0), numMeasurements(0), externalPoint(aLabel), skippedMeasLabel(
0), theDimension(0), thePoints(), theData(), measDataIndex(), scatDataIndex(), externalSeed(
0), maxNumGlobals(0), theDimension(0), thePoints(), theData(), measDataIndex(), scatDataIndex(), externalSeed(
aSeed), innerTransformations(), externalDerivatives(), externalMeasurements(), externalPrecisions() {
if (flagU1dir)
......@@ -206,7 +206,8 @@ GblTrajectory::GblTrajectory(
const std::vector<std::pair<std::vector<GblPoint>, TMatrixD> > &aPointsAndTransList) :
numAllPoints(), numPoints(), numOffsets(0), numInnerTrans(
aPointsAndTransList.size()), numParameters(0), numLocals(0), numMeasurements(
0), externalPoint(0), skippedMeasLabel(0), theDimension(0), thePoints(), theData(), measDataIndex(), scatDataIndex(), externalSeed(), innerTransformations(), externalDerivatives(), externalMeasurements(), externalPrecisions() {
0), externalPoint(0), skippedMeasLabel(0), maxNumGlobals(0), theDimension(
0), thePoints(), theData(), measDataIndex(), scatDataIndex(), externalSeed(), innerTransformations(), externalDerivatives(), externalMeasurements(), externalPrecisions() {
for (unsigned int iTraj = 0; iTraj < aPointsAndTransList.size(); ++iTraj) {
thePoints.push_back(aPointsAndTransList[iTraj].first);