633 int nTruthVertices = (int)(truthHSVertices.size() + truthPUVertices.size());
634 int nRecoVertices = (int)vertexContainer.
size()-1;
640 std::map<InDetVertexTruthMatchUtils::VertexMatchType, int> breakdown = {};
647 if (!recoHardScatter){
648 ATH_MSG_INFO(
"No recoHardScatter vertex - not filling vertex truth matching.");
657 if (!truthHSVertices.empty()) {
658 if (truthHSVertices.size() != 1) {
659 ATH_MSG_WARNING(
"Size of truth HS vertex vector is >1 -- only using the first one in the vector.");
661 truthHSVtx = truthHSVertices.at(0);
666 ATH_MSG_WARNING(
"Size of truth HS vertex vector is 0 -- assuming truth HS vertex to NOT be reconstructed.");
670 float localPUDensity =
getLocalPUDensity(truthHSVtx, truthHSVertices, truthPUVertices);
676 if (!bestRecoHSVtx_truth){
677 ATH_MSG_INFO(
"No bestRecoHS vertex - not filling vertex truth matching.");
687 bool truthHSVtxRecoed =
false;
689 float truthRecoRadialDiff2 = -1.;
693 truthRecoRadialDiff2 =
getRadialDiff2(bestRecoHSVtx_truth, truthHSVtx);
694 if (truthRecoRadialDiff2 < minTruthRecoRadialDiff2) {
695 truthHSVtxRecoed =
true;
696 minTruthRecoRadialDiff2 = truthRecoRadialDiff2;
701 float number_matched = 0;
702 float number_merged = 0;
703 float number_split = 0;
704 float number_fake = 0;
705 float number_matched_HS = 0;
706 float number_merged_HS = 0;
707 float number_split_HS = 0;
708 float number_fake_HS = 0;
709 float number_matched_PU = 0;
710 float number_merged_PU = 0;
711 float number_split_PU = 0;
712 float number_fake_PU = 0;
715 float vx_hs_mindz=9999.;
716 float min_fabs_dz = 9999.;
720 for (
const auto& vertex : vertexContainer.
stdcont()) {
729 matchType = recoVtxMatchTypeInfo(*vertex);
730 breakdown[matchType] += 1;
734 if(!matchVertex)
continue;
735 float residual_z = matchVertex->
z() - vertex->z();
736 float residual_x = matchVertex->
x() - vertex->x();
737 float residual_y = matchVertex->
y() - vertex->y();
738 const AmgSymMatrix(3)& covariance = vertex->covariancePosition();
742 localPUDensity =
getLocalPUDensity(matchVertex, truthHSVertices, truthPUVertices);
778 float minpt = 20000 ;
786 float weighted_sumDZ = 0;
787 float weighted_deltaZ = 0;
788 float weighted_modsumDZ = 0;
789 float weighted_z_asym =0;
792 std::vector<float> track_deltaZ;
793 std::vector<float> track_deltaPt;
794 std::vector<float> track_deltaZ_weighted;
796 for (
size_t i = 0; i < vertex->nTrackParticles(); i++) {
797 trackTmp = vertex->trackParticle(i);
801 trackPt = trackTmp->
pt();
802 sumPt = sumPt + trackPt;
803 deltaZ = trackTmp->
z0() - vertex->z();
804 track_deltaZ.push_back(deltaZ);
806 float trk_weight = vertex->trackWeight(i);
807 weighted_deltaZ = deltaZ*trk_weight;
809 sumDZ = sumDZ + deltaZ;
810 modsumDZ = modsumDZ + std::abs(deltaZ);
811 weighted_sumDZ = weighted_sumDZ + weighted_deltaZ;
812 weighted_modsumDZ = weighted_modsumDZ + std::abs(weighted_deltaZ);
817 z_asym = sumDZ/modsumDZ;
819 if (weighted_modsumDZ >0) {
820 weighted_z_asym = weighted_sumDZ/weighted_modsumDZ;
826 mean_Dz=sumDZ/track_deltaZ.size();
827 double number_tracks =0;
828 number_tracks = track_deltaZ.size();
836 for (
auto i : track_deltaZ) {
838 z_zbar = (i - mean_Dz);
839 z_var =(z_var + z_zbar*z_zbar);
840 z_skew =(z_skew + z_zbar*z_zbar*z_zbar);
841 z_kurt =(z_kurt + z_zbar*z_zbar*z_zbar*z_zbar);
844 z_var = z_var/(number_tracks -1);
845 z_sd = std::sqrt(z_var);
846 z_skew = z_skew/((number_tracks -1)*z_sd*z_sd*z_sd);
847 z_kurt = z_kurt/((number_tracks -1)*z_sd*z_sd*z_sd*z_sd);
849 float ndf = vertex->numberDoF();
853 if (vertex == bestRecoHSVtx_truth) {
864 for (
const float& trkWeight : vertex->trackWeights()) {
881 for (
const float& trkWeight : vertex->trackWeights()) {
895 for (
const float& trkWeight : vertex->trackWeights()) {
904 if (vertex == bestRecoHSVtx_truth) {
913 for (
const float& trkWeight : vertex->trackWeights()) {
929 for (
const float& trkWeight : vertex->trackWeights()) {
943 for (
const float& trkWeight : vertex->trackWeights()) {
952 if (vertex == bestRecoHSVtx_truth) {
960 for (
const float& trkWeight : vertex->trackWeights()) {
975 for (
const float& trkWeight : vertex->trackWeights()) {
991 for (
const float& trkWeight : vertex->trackWeights()) {
1003 if (vertex == bestRecoHSVtx_truth) {
1004 number_matched_HS++;
1007 number_matched_PU++;
1009 if (sumPt > minpt) {
1015 if (vertex == bestRecoHSVtx_truth) {
1021 if (sumPt > minpt) {
1027 if (vertex == bestRecoHSVtx_truth) {
1033 if (sumPt > minpt) {
1039 if (vertex == bestRecoHSVtx_truth) {
1045 if (sumPt > minpt) {
1054 for (
const auto& vertex : vertexContainer.
stdcont()) {
1055 if (vertex == bestRecoHSVtx_truth) {
1090 if (sumPt > minpt) {
1110 float absd_hs_dz = std::abs(bestRecoHSVtx_truth->
z() - vertex->z());
1111 if(bestRecoHSVtx_truth != vertex && absd_hs_dz < min_fabs_dz) {
1112 min_fabs_dz = absd_hs_dz;
1113 vx_hs_mindz = bestRecoHSVtx_truth->
z() - vertex->z();
1116 for (
const auto& vertex2 : vertexContainer.
stdcont()) {
1118 if(vertex2 == vertex)
continue;
1142 if (!truthHSVertices.empty()) {
1143 if (truthHSVtxRecoed) {
1144 float residual_z = truthHSVtx->
z() - bestRecoHSVtx_truth->
z();
1145 float residual_r = std::sqrt(std::pow(truthHSVtx->
x() - bestRecoHSVtx_truth->
x(), 2) + std::pow(truthHSVtx->
y() - bestRecoHSVtx_truth->
y(), 2));
1146 float residual_x = truthHSVtx->
x() - bestRecoHSVtx_truth->
x();
1147 float residual_y = truthHSVtx->
y() - bestRecoHSVtx_truth->
y();
1158 const AmgSymMatrix(3)& covariance = bestRecoHSVtx_truth->covariancePosition();