644 int nTruthVertices = (int)(truthHSVertices.size() + truthPUVertices.size());
645 int nRecoVertices = (int)vertexContainer.
size()-1;
651 std::map<InDetVertexTruthMatchUtils::VertexMatchType, int> breakdown = {};
658 if (!recoHardScatter){
659 ATH_MSG_INFO(
"No recoHardScatter vertex - not filling vertex truth matching.");
668 if (!truthHSVertices.empty()) {
669 if (truthHSVertices.size() != 1) {
670 ATH_MSG_WARNING(
"Size of truth HS vertex vector is >1 -- only using the first one in the vector.");
672 truthHSVtx = truthHSVertices.at(0);
677 ATH_MSG_WARNING(
"Size of truth HS vertex vector is 0 -- assuming truth HS vertex to NOT be reconstructed.");
681 float localPUDensity =
getLocalPUDensity(truthHSVtx, truthHSVertices, truthPUVertices);
687 if (!bestRecoHSVtx_truth){
688 ATH_MSG_INFO(
"No bestRecoHS vertex - not filling vertex truth matching.");
698 bool truthHSVtxRecoed =
false;
700 float truthRecoRadialDiff2 = -1.;
704 truthRecoRadialDiff2 =
getRadialDiff2(bestRecoHSVtx_truth, truthHSVtx);
705 if (truthRecoRadialDiff2 < minTruthRecoRadialDiff2) {
706 truthHSVtxRecoed =
true;
707 minTruthRecoRadialDiff2 = truthRecoRadialDiff2;
712 float number_matched = 0;
713 float number_merged = 0;
714 float number_split = 0;
715 float number_fake = 0;
716 float number_matched_HS = 0;
717 float number_merged_HS = 0;
718 float number_split_HS = 0;
719 float number_fake_HS = 0;
720 float number_matched_PU = 0;
721 float number_merged_PU = 0;
722 float number_split_PU = 0;
723 float number_fake_PU = 0;
726 float vx_hs_mindz=9999.;
727 float min_fabs_dz = 9999.;
731 for (
const auto& vertex : vertexContainer.
stdcont()) {
740 matchType = recoVtxMatchTypeInfo(*vertex);
741 breakdown[matchType] += 1;
745 if(!matchVertex)
continue;
746 float residual_z = matchVertex->
z() - vertex->z();
747 float residual_x = matchVertex->
x() - vertex->x();
748 float residual_y = matchVertex->
y() - vertex->y();
749 const AmgSymMatrix(3)& covariance = vertex->covariancePosition();
753 localPUDensity =
getLocalPUDensity(matchVertex, truthHSVertices, truthPUVertices);
789 float minpt = 20000 ;
797 float weighted_sumDZ = 0;
798 float weighted_deltaZ = 0;
799 float weighted_modsumDZ = 0;
800 float weighted_z_asym =0;
803 std::vector<float> track_deltaZ;
804 std::vector<float> track_deltaPt;
805 std::vector<float> track_deltaZ_weighted;
807 for (
size_t i = 0; i < vertex->nTrackParticles(); i++) {
808 trackTmp = vertex->trackParticle(i);
812 trackPt = trackTmp->
pt();
813 sumPt = sumPt + trackPt;
814 deltaZ = trackTmp->
z0() - vertex->z();
815 track_deltaZ.push_back(deltaZ);
817 float trk_weight = vertex->trackWeight(i);
818 weighted_deltaZ = deltaZ*trk_weight;
820 sumDZ = sumDZ + deltaZ;
821 modsumDZ = modsumDZ + std::abs(deltaZ);
822 weighted_sumDZ = weighted_sumDZ + weighted_deltaZ;
823 weighted_modsumDZ = weighted_modsumDZ + std::abs(weighted_deltaZ);
828 z_asym = sumDZ/modsumDZ;
830 if (weighted_modsumDZ >0) {
831 weighted_z_asym = weighted_sumDZ/weighted_modsumDZ;
837 mean_Dz=sumDZ/track_deltaZ.size();
838 double number_tracks =0;
839 number_tracks = track_deltaZ.size();
847 for (
auto i : track_deltaZ) {
849 z_zbar = (i - mean_Dz);
850 z_var =(z_var + z_zbar*z_zbar);
851 z_skew =(z_skew + z_zbar*z_zbar*z_zbar);
852 z_kurt =(z_kurt + z_zbar*z_zbar*z_zbar*z_zbar);
855 z_var = z_var/(number_tracks -1);
856 z_sd = std::sqrt(z_var);
857 z_skew = z_skew/((number_tracks -1)*z_sd*z_sd*z_sd);
858 z_kurt = z_kurt/((number_tracks -1)*z_sd*z_sd*z_sd*z_sd);
860 float ndf = vertex->numberDoF();
864 if (vertex == bestRecoHSVtx_truth) {
875 for (
const float& trkWeight : vertex->trackWeights()) {
892 for (
const float& trkWeight : vertex->trackWeights()) {
906 for (
const float& trkWeight : vertex->trackWeights()) {
915 if (vertex == bestRecoHSVtx_truth) {
924 for (
const float& trkWeight : vertex->trackWeights()) {
940 for (
const float& trkWeight : vertex->trackWeights()) {
954 for (
const float& trkWeight : vertex->trackWeights()) {
963 if (vertex == bestRecoHSVtx_truth) {
971 for (
const float& trkWeight : vertex->trackWeights()) {
986 for (
const float& trkWeight : vertex->trackWeights()) {
1002 for (
const float& trkWeight : vertex->trackWeights()) {
1014 if (vertex == bestRecoHSVtx_truth) {
1015 number_matched_HS++;
1018 number_matched_PU++;
1020 if (sumPt > minpt) {
1026 if (vertex == bestRecoHSVtx_truth) {
1032 if (sumPt > minpt) {
1038 if (vertex == bestRecoHSVtx_truth) {
1044 if (sumPt > minpt) {
1050 if (vertex == bestRecoHSVtx_truth) {
1056 if (sumPt > minpt) {
1065 for (
const auto& vertex : vertexContainer.
stdcont()) {
1066 if (vertex == bestRecoHSVtx_truth) {
1101 if (sumPt > minpt) {
1121 float absd_hs_dz = std::abs(bestRecoHSVtx_truth->
z() - vertex->z());
1122 if(bestRecoHSVtx_truth != vertex && absd_hs_dz < min_fabs_dz) {
1123 min_fabs_dz = absd_hs_dz;
1124 vx_hs_mindz = bestRecoHSVtx_truth->
z() - vertex->z();
1127 for (
const auto& vertex2 : vertexContainer.
stdcont()) {
1129 if(vertex2 == vertex)
continue;
1153 if (!truthHSVertices.empty()) {
1154 if (truthHSVtxRecoed) {
1155 float residual_z = truthHSVtx->
z() - bestRecoHSVtx_truth->
z();
1156 float residual_r = std::sqrt(std::pow(truthHSVtx->
x() - bestRecoHSVtx_truth->
x(), 2) + std::pow(truthHSVtx->
y() - bestRecoHSVtx_truth->
y(), 2));
1157 float residual_x = truthHSVtx->
x() - bestRecoHSVtx_truth->
x();
1158 float residual_y = truthHSVtx->
y() - bestRecoHSVtx_truth->
y();
1169 const AmgSymMatrix(3)& covariance = bestRecoHSVtx_truth->covariancePosition();