00001 #include "jbltools/kinfit/TTVertexConstraint.h"
00002 #include "jbltools/kinfit/TrackFitObject.h"
00003
00004 #include<iostream>
00005 #include<cassert>
00006
00007 using std::cout;
00008 using std::endl;
00009
00010 TTVertexConstraint::TTVertexConstraint (const TrackFitObject& t0,
00011 int i0,
00012 const TrackFitObject& t1,
00013 int i1,
00014 int axis
00015 )
00016 : cachevalid(false)
00017 {
00018 tracks[0] = &t0;
00019 vnumber[0] = i0;
00020 tracks[1] = &t1;
00021 vnumber[1] = i1;
00022 sign[0] = +1;
00023 sign[1] = -1;
00024 switch (axis) {
00025 case 1:
00026 factor.setValues (0, 10, 0);
00027 break;
00028 case 2:
00029 factor.setValues (0, 0, 10);
00030 break;
00031 default:
00032 factor.setValues (10, 0, 0);
00033 }
00034 }
00035
00036
00037 TTVertexConstraint::~TTVertexConstraint () {}
00038
00039
00040 double TTVertexConstraint::getValue() const {
00041 return sign[0]*(factor*tracks[0]->getVertex (vnumber[0])) +
00042 sign[1]*(factor*tracks[1]->getVertex (vnumber[1]));
00043 }
00044
00045
00046
00047 void TTVertexConstraint::getDerivatives(int idim, double der[]) const {
00048 for (int i = 0; i < 2; ++i) {
00049 for (int ilocal = 0; ilocal < tracks[i]->getNPar(); ilocal++) {
00050 if (!tracks[i]->isParamFixed(ilocal)) {
00051 int iglobal = tracks[i]->getGlobalParNum (ilocal);
00052 assert (iglobal >= 0 && iglobal < idim);
00053 der[iglobal] = sign[i]*(factor*tracks[i]->getVertexDerivative (vnumber[i], ilocal));
00054 }
00055 }
00056 }
00057 }
00058
00059 void TTVertexConstraint::add1stDerivativesToMatrix(int idim, double *M) const {
00060
00061 assert (0);
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079 }
00080
00081 void TTVertexConstraint::add2ndDerivativesToMatrix(int idim, double *M, double lambda) const {
00082
00083 assert (0);
00084 }
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131 void TTVertexConstraint::invalidateCache() const {
00132 cachevalid = false;
00133 }
00134
00135 void TTVertexConstraint::updateCache() const {
00136 cachevalid = true;
00137 }
00138