/* Copyright 2013, Technische Universitaet Muenchen, Ludwig-Maximilians-Universität München
Authors: Johannes Rauch, Tobias Schlüter
This file is part of GENFIT.
GENFIT is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
GENFIT is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with GENFIT. If not, see .
*/
#include "HMatrixUV.h"
#include
#include
#include
namespace genfit {
// 0, 0, 0, 1, 0
// 0, 0, 0, 0, 1
const TMatrixD& HMatrixUV::getMatrix() const {
static const double HMatrixContent[2*5] = {0, 0, 0, 1, 0,
0, 0, 0, 0, 1};
static const TMatrixD HMatrix(2,5, HMatrixContent);
return HMatrix;
}
TVectorD HMatrixUV::Hv(const TVectorD& v) const {
assert (v.GetNrows() == 5);
double* retValArray =(double *)alloca(sizeof(double) * 2);
const double* VecArray = v.GetMatrixArray();
retValArray[0] = VecArray[3]; // u
retValArray[1] = VecArray[4]; // v
return TVectorD(2, retValArray);
}
TMatrixD HMatrixUV::MHt(const TMatrixDSym& M) const {
assert (M.GetNcols() == 5);
double* retValArray =(double *)alloca(sizeof(double) * 5*2);
const double* MatArray = M.GetMatrixArray();
for (unsigned int i=0; i<5; ++i) {
retValArray[i*2] = MatArray[i*5 + 3];
retValArray[i*2 + 1] = MatArray[i*5 + 4];
}
return TMatrixD(5,2, retValArray);
}
TMatrixD HMatrixUV::MHt(const TMatrixD& M) const {
assert (M.GetNcols() == 5);
double* retValArray =(double *)alloca(sizeof(double) * M.GetNrows()*2);
const double* MatArray = M.GetMatrixArray();
for (int i = 0; i < M.GetNrows(); ++i) {
retValArray[i*2] = MatArray[i*5 + 3];
retValArray[i*2 + 1] = MatArray[i*5 + 4];
}
return TMatrixD(M.GetNrows(),2, retValArray);
}
void HMatrixUV::HMHt(TMatrixDSym& M) const {
assert (M.GetNrows() == 5);
double* MatArray = M.GetMatrixArray();
//
// HMH^t = ( M_33 M_34 ) where M_34 == M_43
// ( M_43 M_44 )
//
double uu = MatArray[3*5 + 3];
double uv = MatArray[3*5 + 4];
double vv = MatArray[4*5 + 4];
M.ResizeTo(2,2);
MatArray = M.GetMatrixArray();
MatArray[0] = uu; MatArray[1] = uv;
MatArray[2] = uv; MatArray[3] = vv;
}
void HMatrixUV::Print(const Option_t*) const {
std::cout << "UV" << std::endl;
}
} /* End of namespace genfit */