17 const std::string&
name,
22 declareInterface< xAODMaker::ITrackParticleCompressorTool >(
this );
26 "Bits kept for the off-diagonal covariance matrix "
29 "Bits kept for the diagonal covariance matrix "
32 "Flag to control the off-diagonal compression "
50 return StatusCode::SUCCESS;
56 xAOD::ParametersCovMatrix_t
covMatrix =
tp.definingParametersCovMatrix();
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;