56 xAOD::ParametersCovMatrix_t covMatrix = tp.definingParametersCovMatrix();
57 tp.setDefiningParametersCovMatrix(covMatrix);
62 xAOD::ParametersCovMatrix_t covMatrixCompr = tp.definingParametersCovMatrix();
63 if(covMatrixCompr.determinant()<=0.) tp.setDefiningParametersCovMatrix(covMatrix);
65 const std::vector< float > diagVec = tp.definingParametersCovMatrixDiagVec();
66 std::vector< float > diagVecCompr;
68 diagVecCompr.reserve(diagVec.size());
69 for (
float i : diagVec) {
70 diagVecCompr.push_back(
74 tp.setDefiningParametersCovMatrixDiagVec( diagVecCompr );
76 auto compressOffDiag = [](
const std::vector< float >& offDiagVec,
int bits ) -> std::vector< float > {
78 std::vector< float > offDiagVecCompr;
79 offDiagVecCompr.reserve( offDiagVec.size() );
80 for(
float element : offDiagVec ) {
83 return offDiagVecCompr;
86 const std::vector< float > offDiagVec = tp.definingParametersCovMatrixOffDiagVec();
91 while( ( tp.definingParametersCovMatrix().determinant() <= 0.0 || tp.definingParametersCovMatrix().inverse().determinant() <= 0.0 ) &&
93 tp.setDefiningParametersCovMatrixOffDiagVec( compressOffDiag( offDiagVec, offDiagComprBits ) );
97 return StatusCode::SUCCESS;