25 #include "boost/math/special_functions/sign.hpp"
35 auto h =
me->getTH1();
36 const auto xaxis =
h->GetXaxis();
37 if (val <= xaxis->GetXmin())
38 h->AddBinContent(
xaxis->GetFirst());
40 h->AddBinContent(
xaxis->GetLast());
45 class HitPatternPrinter {
49 void print(std::ostream& os)
const {
56 if (
p.missingHitFilter(
hit)) {
58 }
else if (
p.inactiveHitFilter(
hit)) {
60 }
else if (
p.badHitFilter(
hit)) {
72 if (
p.missingHitFilter(
hit)) {
74 }
else if (
p.inactiveHitFilter(
hit)) {
85 if (
p.missingHitFilter(
hit)) {
87 }
else if (
p.inactiveHitFilter(
hit)) {
96 if (
p.pixelBarrelHitFilter(
hit)) {
98 }
else if (
p.pixelEndcapHitFilter(
hit)) {
100 }
else if (
p.stripTIBHitFilter(
hit)) {
102 }
else if (
p.stripTIDHitFilter(
hit)) {
104 }
else if (
p.stripTOBHitFilter(
hit)) {
106 }
else if (
p.stripTECHitFilter(
hit)) {
109 os <<
p.getLayer(
hit);
115 std::ostream&
operator<<(std::ostream& os,
const HitPatternPrinter& hpp) {
120 class TrackAlgoPrinter {
124 void print(std::ostream& os)
const {
127 auto algo = static_cast<reco::TrackBase::TrackAlgorithm>(ialgo);
136 if (
algos.size() > 1) {
147 std::ostream&
operator<<(std::ostream& os,
const TrackAlgoPrinter& tap) {
152 double diffRelative(
double a,
double b) {
return (
a -
b) /
b; }
156 LogIntHelper(
double lmin,
double lmax) : lmin_(lmin), lmax_(lmax) {}
158 class UnderOverflow {
160 UnderOverflow(
double largestValue,
double smallestValue,
std::function<
double(
double)> modifyUnpack)
161 : unpackedLargestValue_(modifyUnpack ? modifyUnpack(largestValue) : largestValue),
162 unpackedSmallestValue_(modifyUnpack ? modifyUnpack(smallestValue) : smallestValue) {}
164 bool compatibleWithUnderflow(
double value)
const {
return value == unpackedSmallestValue_; }
165 void printNonOkUnderflow(std::ostream& os)
const { os <<
" (not min " << unpackedSmallestValue_ <<
")"; }
167 bool compatibleWithOverflow(
double value)
const {
return value == unpackedLargestValue_; }
168 void printNonOkOverflow(std::ostream& os)
const { os <<
" (not max " << unpackedLargestValue_ <<
")"; }
174 const float unpackedLargestValue_;
175 const float unpackedSmallestValue_;
181 UnderOverflow underOverflowHelper(
double value,
std::function<
double(
double)> modifyUnpack)
const {
182 return UnderOverflow(
183 largestValue(),
value >= 0 ? smallestPositiveValue() :
std::abs(smallestNegativeValue()), modifyUnpack);
188 static bool wouldBeDenorm(
double value) {
return false; }
191 bool lessThanSmallestValue(
double value)
const {
193 return value < smallestPositiveValue();
195 return value > smallestNegativeValue();
206 class Float16Helper {
208 class UnderOverflow {
210 static void printNonOkUnderflow(std::ostream& os) { os <<
" (not 0)"; }
211 static bool compatibleWithUnderflow(
double value) {
return value == 0.0; }
212 static void printNonOkOverflow(std::ostream& os) { os <<
" (not inf)"; }
219 static UnderOverflow underOverflowHelper(
double value,
std::function<
double(
double)>) {
return UnderOverflow(); }
223 static bool wouldBeDenorm(
double value) {
224 const float valuef = static_cast<float>(
value);
228 static bool lessThanSmallestValue(
double value) {
return std::abs(
value) < smallestValue(); }
235 inrange_signflip = 1,
244 template <
typename T>
245 class PackedValueCheckResult {
253 const typename T::UnderOverflow& underOverflow)
256 trackvalue_(trackvalue),
260 underOverflow_(underOverflow) {}
263 double diff()
const {
return diff_; }
265 bool outsideExpectedRange()
const {
266 if (status_ == RangeStatus::inrange)
267 return diff_ < rangeMin_ || diff_ > rangeMax_;
269 return status_ == RangeStatus::underflow_notOK || status_ == RangeStatus::overflow_notOK ||
270 status_ == RangeStatus::inrange_signflip;
273 void print(std::ostream& os)
const {
274 if (outsideExpectedRange())
276 os <<
"(" << rangeMin_ <<
"," << rangeMax_ <<
") ";
278 os << diff_ <<
" " << pcvalue_;
279 if (status_ == RangeStatus::underflow_OK || status_ == RangeStatus::underflow_notOK) {
280 os <<
" (underflow) ";
281 if (status_ == RangeStatus::underflow_notOK)
282 underOverflow_.printNonOkUnderflow(os);
283 }
else if (status_ == RangeStatus::overflow_OK || status_ == RangeStatus::overflow_notOK) {
284 os <<
" (overflow) ";
285 if (status_ == RangeStatus::overflow_notOK)
286 underOverflow_.printNonOkOverflow(os);
287 }
else if (status_ == RangeStatus::denormal)
289 os <<
" " << trackvalue_;
294 const double pcvalue_;
295 const double trackvalue_;
296 const double rangeMin_;
297 const double rangeMax_;
299 const typename T::UnderOverflow underOverflow_;
311 template <
typename T>
312 class PackedValueCheck {
314 template <
typename R,
typename... Args>
315 PackedValueCheck(
const R&
range, Args&&...
args)
318 void book(DQMStore::IBooker& iBooker,
328 hUnderOverflowSign = iBooker.book1D(
name +
"UnderOverFlowSign",
329 title +
" with over- and underflow, and sign flip",
333 hStatus = iBooker.book1D(
name +
"Status",
title +
" status", 7, -0.5, 6.5);
334 hStatus->setBinLabel(1,
"In range");
335 hStatus->setBinLabel(2,
"In range, sign flip");
336 hStatus->setBinLabel(3,
"Denormal");
337 hStatus->setBinLabel(4,
"Underflow, PC is " + T::minName());
338 hStatus->setBinLabel(5,
"Underflow, PC is not " + T::minName());
339 hStatus->setBinLabel(6,
"Overflow, PC is " + T::maxName());
340 hStatus->setBinLabel(7,
"Overflow, PC is not " + T::maxName());
343 PackedValueCheckResult<T>
fill(
double pcvalue,
347 const auto diff = diffRelative(pcvalue, trackvalue);
349 const auto tmpSigned = modifyPack ? modifyPack(trackvalue) : trackvalue;
351 const auto underOverflow = helper_.underOverflowHelper(tmpSigned, modifyUnpack);
353 if (
tmp > helper_.largestValue()) {
354 fillNoFlow(hUnderOverflowSign,
diff);
355 if (underOverflow.compatibleWithOverflow(
std::abs(pcvalue))) {
356 status = RangeStatus::overflow_OK;
358 status = RangeStatus::overflow_notOK;
360 }
else if (helper_.lessThanSmallestValue(tmpSigned)) {
361 fillNoFlow(hUnderOverflowSign,
diff);
362 if (underOverflow.compatibleWithUnderflow(
std::abs(pcvalue))) {
363 status = RangeStatus::underflow_OK;
365 status = RangeStatus::underflow_notOK;
369 if (T::wouldBeDenorm(
tmp)) {
370 status = RangeStatus::denormal;
372 status = RangeStatus::inrange;
374 fillNoFlow(hInrange,
diff);
376 fillNoFlow(hUnderOverflowSign,
diff);
377 status = RangeStatus::inrange_signflip;
380 hStatus->Fill(static_cast<int>(
status));
382 return PackedValueCheckResult<T>(
status,
diff, pcvalue, trackvalue, rangeMin_, rangeMax_, underOverflow);
387 const double rangeMin_;
388 const double rangeMax_;
394 template <
typename T>
395 std::ostream&
operator<<(std::ostream& os,
const PackedValueCheckResult<T>&
res) {
497 iConfig.getUntrackedParameter<
edm::
InputTag>(
"trackToPackedCandidateAssociation"))),
498 rootFolder_(iConfig.getUntrackedParameter<
std::
string>(
"rootFolder")),
499 debug_(iConfig.getUntrackedParameter<
bool>(
"debug")),
500 h_diffDxyAssocPV(RangeAbs(0.001)),
501 h_diffDzAssocPV(RangeAbs(0.001)),
502 h_diffCovQoverpQoverp(
Range(-1
e-6, 0.13), -15, 0),
503 h_diffCovLambdaLambda(
504 Range(-1
e-6, 0.13), -20, -5),
505 h_diffCovLambdaDsz(RangeAbs(0.13), -17, -4),
506 h_diffCovPhiPhi(RangeAbs(0.13), -15, 0),
507 h_diffCovPhiDxy(RangeAbs(0.13), -17, -4),
508 h_diffCovDxyDxy(RangeAbs(0.001)),
509 h_diffCovDxyDsz(RangeAbs(0.001)),
510 h_diffCovDszDsz(RangeAbs(0.001)) {}
523 descriptions.
add(
"packedCandidateTrackValidator", desc);
540 constexpr
int diffBins = 50;
543 iBooker.
book1D(
"diffVx",
"PackedCandidate::bestTrack() - reco::Track in vx()", diffBins, -0.2, 0.2);
545 iBooker.
book1D(
"diffVy",
"PackedCandidate::bestTrack() - reco::Track in vy()", diffBins, -0.2, 0.2);
547 iBooker.
book1D(
"diffVz",
"PackedCandidate::bestTrack() - reco::Track in vz()", diffBins, -0.4, 0.4);
550 "PackedCandidate::bestTrack() - reco::Track in normalizedChi2()",
555 "diffNdof",
"PackedCandidate::bestTrack() - reco::Track in ndof()", 33, -30.5, 2.5);
558 "diffCharge",
"PackedCandidate::bestTrack() - reco::Track in charge()", 5, -2.5, 2.5);
560 "PackedCandidate::bestTrack() - reco::Track in quality(highPurity)",
566 "(PackedCandidate::bestTrack() - reco::Track)/reco::Track in pt()",
571 "diffEta",
"PackedCandidate::bestTrack() - reco::Track in eta()", diffBins, -0.001, 0.001);
573 "PackedCandidate::bestTrack() - reco::Track in phi()",
580 "(PackedCandidate::dxy() - reco::Track::dxy(assocPV))/reco::Track",
589 "(PackedCandidate::dzAssociatedPV() - reco::Track::dz(assocPV))/reco::Track",
597 "(PackedCandidate::dxy(PV) - reco::Track::dxy(PV))/reco::Track",
602 "(PackedCandidate::dz(PV) - reco::Track::dz(PV))/reco::Track",
607 iBooker.
book1D(
"diffTrackDxyAssocPV",
608 "(PackedCandidate::bestTrack()::dxy(assocPV)) - reco::Track::dxy(assocPV))/reco::Track",
613 iBooker.
book1D(
"diffTrackDzAssocPV",
614 "(PackedCandidate::bestTrack()::dz(assocPV)) - reco::Track::dz(assocPV))/reco::Track",
620 "diffCovQoverpQoverp",
621 "(PackedCandidate::bestTrack() - reco::Track)/reco::track in cov(qoverp, qoverp)",
630 "diffCovLambdaLambda",
631 "(PackedCandidate::bestTrack() - reco::Track)/reco::Track in cov(lambda, lambda)",
640 "(PackedCandidate::bestTrack() - reco::Track)/reco::Track in cov(lambda, dsz)",
650 "(PackedCandidate::bestTrack() - reco::Track)/reco::Track in cov(phi, phi)",
659 "(PackedCandidate::bestTrack() - reco::Track)/reco::Track in cov(phi, dxy)",
668 "(PackedCandidate::bestTrack() - reco::Track)/reco::Track in cov(dxy, dxy)",
677 "(PackedCandidate::bestTrack() - reco::Track)/reco::Track in cov(dxy, dsz)",
686 "(PackedCandidate::bestTrack() - reco::Track)/reco::Track in cov(dsz, dsz)",
695 "(PackedCandidate::dxyError() - reco::Track::dxyError())/reco::Track",
700 "(PackedCandidate::dzError() - reco::Track::dszError())/reco::Track",
705 "(PackedCandidate::dzError() - reco::Track::dzError())/reco::Track",
711 "(PackedCandidate::bestTrack() - reco::Track)/reco::Track in dxyError()",
716 "(PackedCandidate::bestTrack() - reco::Track)/reco::Track in dzError()",
722 "(PackedCandidate::bestTrack() - reco::Track)/reco::Track in ptError()",
727 "(PackedCandidate::bestTrack() - reco::Track)/reco::Track in etaError()",
733 "diffNumberOfPixelLayers",
734 "PackedCandidate::pixelLayersWithMeasurement() - reco::Track::hitPattern::pixelLayersWithMeasurement()",
739 "diffNumberOfStripLayers",
740 "PackedCandidate::stripLayersWithMeasurement() - reco::Track::hitPattern::stripLayersWithMeasurement()",
745 iBooker.
book1D(
"diffNumberOfPixelHits",
746 "PackedCandidate::numberOfPixelHits() - reco::Track::hitPattern::numberOfValidPixelHits()",
751 "PackedCandidate::numberHits() - reco::Track::hitPattern::numberOfValidHits()",
756 iBooker.
book1D(
"diffLostInnerHits",
757 "PackedCandidate::lostInnerHits() - reco::Track::hitPattern::numberOfLostHits(MISSING_INNER_HITS)",
763 iBooker.
book1D(
"diffHitPatternPixelLayersWithMeasurement",
764 "PackedCandidate::bestTrack() - reco::Track in hitPattern::pixelLayersWithMeasurement()",
769 iBooker.
book1D(
"diffHitPatternStripLayersWithMeasurement",
770 "PackedCandidate::bestTrack() - reco::Track in hitPattern::stripLayersWithMeasurement()",
775 iBooker.
book1D(
"diffHitPatternTrackerLayersWithMeasurement",
776 "PackedCandidate::bestTrack() - reco::Track in hitPattern::trackerLayersWithMeasurement()",
781 iBooker.
book1D(
"diffHitPatternNumberOfValidPixelHits",
782 "PackedCandidate::bestTrack() - reco::Track in hitPattern::numberOfValidPixelHits()",
787 iBooker.
book1D(
"diffHitPatternNumberOfValidHits",
788 "PackedCandidate::bestTrack() - reco::Track in hitPattern::numberOfValidHits()",
793 iBooker.
book1D(
"diffHitPatternNumberOfLostPixelHits",
794 "PackedCandidate::bestTrack() - reco::Track in hitPattern::numberOfLostHits(MISSING_INNER_HITS)",
799 iBooker.
book1D(
"diffHitPatternHasValidHitInFirstPixelBarrel",
800 "PackedCandidate::bestTrack() - reco::Track in hitPattern::hasValidHitInFirstPixelBarrel",
806 "numberPixelLayersOverMax",
"Number of pixel layers over the maximum of PackedCandidate", 10, 0, 10);
808 "numberStripLayersOverMax",
"Number of strip layers over the maximum of PackedCandidate", 10, 0, 10);
810 iBooker.
book1D(
"numberLayersOverMax",
"Number of layers over the maximum of PackedCandidate", 20, 0, 20);
812 iBooker.
book1D(
"numberPixelHitsOverMax",
"Number of pixel hits over the maximum of PackedCandidate", 10, 0, 10);
814 iBooker.
book1D(
"numberStripHitsOverMax",
"Number of strip hits over the maximum of PackedCandidate", 10, 0, 10);
816 iBooker.
book1D(
"numberHitsOverMax",
"Number of hits over the maximum of PackedCandidate", 20, 0, 20);
822 const auto&
tracks = *htracks;
834 const auto& trackToPackedCandidate = *hassoc;
836 for (
size_t i = 0;
i <
tracks.size(); ++
i) {
837 auto trackPtr =
tracks.ptrAt(
i);
848 if (pcRef->charge() == 0) {
853 const reco::Track* trackPcPtr = pcRef->bestTrack();
860 if (
std::abs(pcRef->pdgId()) == 11) {
872 auto slimmedVertexRef = pcRef->vertexRef();
884 double diffNormalizedChi2 = 0;
885 if (trackPc.
ndof() != 0) {
892 auto diffCharge = trackPc.
charge() -
track.charge();
898 const auto diffPt = diffRelative(trackPc.
pt(),
track.pt());
904 const auto diffDxyAssocPV =
908 const auto diffDxyPV = diffRelative(pcRef->dxy(
pv.position()),
track.dxy(
pv.position()));
909 const auto diffDzPV = diffRelative(pcRef->dz(
pv.position()),
track.dz(
pv.position()));
915 auto fillCov1 = [&](
auto& hlp,
const int i,
const int j) {
918 auto fillCov2 = [&](
auto& hlp,
const int i,
const int j,
std::function<double(
double)> modifyPack) {
921 auto fillCov3 = [&](
auto& hlp,
926 return hlp.fill(trackPc.
covariance(
i,
j),
track.covariance(
i,
j), modifyPack, modifyUnpack);
929 const auto pcPt = pcRef->pt();
930 const auto diffCovQoverpQoverp = fillCov3(
934 [=](
double val) {
return val * pcPt * pcPt; },
935 [=](
double val) {
return val / pcPt / pcPt; });
936 const auto diffCovLambdaLambda =
939 const auto diffCovPhiPhi = fillCov3(
943 [=](
double val) {
return val * pcPt * pcPt; },
944 [=](
double val) {
return val / pcPt / pcPt; });
946 const auto diffCovDxyDxy = fillCov2(
948 const auto diffCovDxyDsz = fillCov2(
950 const auto diffCovDszDsz = fillCov2(
953 if (isInRange(diffCovDszDsz.status())) {
958 if (isInRange(diffCovDxyDxy.status())) {
966 const auto trackNumberOfHits =
track.hitPattern().numberOfValidHits();
967 const auto trackNumberOfPixelHits =
track.hitPattern().numberOfValidPixelHits();
968 const auto trackNumberOfStripHits =
track.hitPattern().numberOfValidStripHits();
969 const auto pcNumberOfHits = pcRef->numberOfHits();
970 const auto pcNumberOfPixelHits = pcRef->numberOfPixelHits();
971 const auto pcNumberOfStripHits = pcNumberOfHits - pcNumberOfPixelHits;
972 const auto trackNumberOfLayers =
track.hitPattern().trackerLayersWithMeasurement();
973 const auto trackNumberOfPixelLayers =
track.hitPattern().pixelLayersWithMeasurement();
974 const auto trackNumberOfStripLayers =
track.hitPattern().stripLayersWithMeasurement();
975 const auto pcNumberOfLayers = pcRef->trackerLayersWithMeasurement();
976 const auto pcNumberOfPixelLayers = pcRef->pixelLayersWithMeasurement();
977 const auto pcNumberOfStripLayers = pcRef->stripLayersWithMeasurement();
986 const int layerOverflow =
988 ? trackNumberOfLayers -
993 const int pixelOverflow =
997 const int stripOverflow =
1001 const int hitsOverflow =
1002 trackNumberOfHits - pcNumberOfLayers >
1004 ? trackNumberOfHits - pcNumberOfLayers -
1008 const int pixelInducedStripOverflow =
1010 ? (trackNumberOfStripHits + pixelOverflow - stripOverflow - pcNumberOfStripLayers) -
1020 int diffNumberOfPixelHits = 0;
1021 int diffNumberOfHits = 0;
1022 int diffNumberOfPixelLayers = 0;
1023 int diffNumberOfStripLayers = 0;
1024 if (pixelLayerOverflow) {
1027 diffNumberOfPixelLayers = pcNumberOfPixelLayers - trackNumberOfPixelLayers;
1029 if (pixelOverflow) {
1032 diffNumberOfPixelHits = pcNumberOfPixelHits - trackNumberOfPixelHits;
1034 if (stripLayerOverflow) {
1037 diffNumberOfStripLayers = pcNumberOfStripLayers - trackNumberOfStripLayers;
1039 if (stripOverflow || pixelInducedStripOverflow || pixelOverflow) {
1040 int diffNumberOfStripHits = 0;
1041 if (stripOverflow || pixelInducedStripOverflow) {
1043 }
else if (pixelOverflow) {
1044 diffNumberOfStripHits = (pcNumberOfStripHits - pixelOverflow) - trackNumberOfStripHits;
1047 diffNumberOfHits = diffNumberOfPixelHits + diffNumberOfStripHits;
1049 diffNumberOfHits = pcNumberOfHits - trackNumberOfHits;
1057 int diffLostInnerHits = 0;
1059 switch (pcRef->lostInnerHits()) {
1062 diffLostInnerHits = -trackLostInnerHits;
1065 diffLostInnerHits = 1 - trackLostInnerHits;
1068 diffLostInnerHits = trackLostInnerHits >= 2 ? 0 : 2 - trackLostInnerHits;
1074 auto diffHitPatternPixelLayersWithMeasurement =
1077 auto diffHitPatternStripLayersWithMeasurement =
1080 auto diffHitPatternTrackerLayersWithMeasurement =
1092 int diffHitPatternHasValidHitInFirstPixelBarrel = 0;
1095 diffHitPatternHasValidHitInFirstPixelBarrel =
1104 (diffNormalizedChi2 < -1 || diffNormalizedChi2 > 0 || diffCharge != 0 || diffHP != 0 ||
1105 std::abs(diffPhi) > 5
e-4 || diffDxyAssocPV.outsideExpectedRange() || diffDzAssocPV.outsideExpectedRange() ||
1106 std::abs(diffDxyPV) > 0.05 ||
std::abs(diffDzPV) > 0.05 || diffCovQoverpQoverp.outsideExpectedRange() ||
1107 diffCovLambdaLambda.outsideExpectedRange() || diffCovLambdaDsz.outsideExpectedRange() ||
1108 diffCovPhiPhi.outsideExpectedRange() || diffCovPhiDxy.outsideExpectedRange() ||
1109 diffCovDxyDxy.outsideExpectedRange() || diffCovDxyDsz.outsideExpectedRange() ||
1110 diffCovDszDsz.outsideExpectedRange() || diffNumberOfPixelHits != 0 || diffNumberOfHits != 0 ||
1111 diffLostInnerHits != 0 || diffHitPatternHasValidHitInFirstPixelBarrel != 0)) {
1113 <<
"Track " <<
i <<
" pt " <<
track.pt() <<
" eta " <<
track.eta() <<
" phi " <<
track.phi() <<
" chi2 "
1114 <<
track.chi2() <<
" ndof " <<
track.ndof() <<
"\n"
1115 <<
" ptError " <<
track.ptError() <<
" etaError " <<
track.etaError() <<
" phiError " <<
track.phiError()
1116 <<
" dxyError " <<
track.dxyError() <<
" dzError " <<
track.dzError() <<
"\n"
1117 <<
" refpoint " <<
track.referencePoint() <<
" momentum " <<
track.momentum() <<
"\n"
1118 <<
" dxy " <<
track.dxy() <<
" dz " <<
track.dz() <<
"\n"
1119 <<
" " << TrackAlgoPrinter(
track) <<
" lost inner hits " << trackLostInnerHits <<
" lost outer hits "
1121 << HitPatternPrinter(
track) <<
" \n"
1122 <<
" PC " << pcRef.
id() <<
":" << pcRef.
key() <<
" track pt " << trackPc.
pt() <<
" eta " << trackPc.
eta()
1123 <<
" phi " << trackPc.
phi() <<
" (PC " << pcRef->phi() <<
") chi2 " << trackPc.
chi2() <<
" ndof "
1124 << trackPc.
ndof() <<
" pdgId " << pcRef->pdgId() <<
" mass " << pcRef->mass() <<
"\n"
1125 <<
" ptError " << trackPc.
ptError() <<
" etaError " << trackPc.
etaError() <<
" phiError "
1127 <<
" pc.vertex " << pcRef->vertex() <<
" momentum " << pcRef->momentum() <<
" track " << trackPc.
momentum()
1129 <<
" dxy " << trackPc.
dxy() <<
" dz " << trackPc.
dz() <<
" pc.dz " << pcRef->dz() <<
" dxyError "
1131 <<
" dxy(PV) " << trackPc.
dxy(
pv.position()) <<
" dz(PV) " << trackPc.
dz(
pv.position()) <<
" dxy(assocPV) "
1133 <<
" (diff PackedCandidate track)"
1136 <<
track.charge() <<
" normalizedChi2 " << diffNormalizedChi2 <<
" " << trackPc.
normalizedChi2() <<
" "
1137 <<
track.normalizedChi2() <<
"\n "
1138 <<
" numberOfAllHits " << diffNumberOfHits <<
" " << pcNumberOfHits <<
" " << trackNumberOfHits
1139 <<
" numberOfPixelHits " << diffNumberOfPixelHits <<
" " << pcNumberOfPixelHits <<
" "
1140 << trackNumberOfPixelHits <<
" numberOfStripHits # " << pcNumberOfStripHits <<
" " << trackNumberOfStripHits
1142 <<
" hitPattern.numberOfValidPixelHits " << diffHitPatternNumberOfValidPixelHits <<
" "
1144 <<
" hitPattern.numberOfValidHits " << diffHitPatternNumberOfValidHits <<
" "
1146 <<
" hitPattern.hasValidHitInFirstPixelBarrel " << diffHitPatternHasValidHitInFirstPixelBarrel <<
" "
1149 <<
" lostInnerHits " << diffLostInnerHits <<
" " << pcRef->lostInnerHits() <<
" #"
1150 <<
" phi (5e-4) " << diffPhi <<
" " << trackPc.
phi() <<
" " <<
track.phi() <<
"\n "
1151 <<
" dxy(assocPV) " << diffDxyAssocPV <<
"\n "
1152 <<
" dz(assocPV) " << diffDzAssocPV <<
"\n "
1153 <<
" dxy(PV) (0.05) " << diffDxyPV <<
" " << pcRef->dxy(
pv.position()) <<
" " <<
track.dxy(
pv.position())
1155 <<
" dz(PV) (0.05) " << diffDzPV <<
" " << pcRef->dz(
pv.position()) <<
" " <<
track.dz(
pv.position()) <<
"\n "
1156 <<
" cov(qoverp, qoverp) " << diffCovQoverpQoverp <<
"\n "
1157 <<
" cov(lambda, lambda) " << diffCovLambdaLambda <<
"\n "
1158 <<
" cov(lambda, dsz) " << diffCovLambdaDsz <<
"\n "
1159 <<
" cov(phi, phi) " << diffCovPhiPhi <<
"\n "
1160 <<
" cov(phi, dxy) " << diffCovPhiDxy <<
"\n "
1161 <<
" cov(dxy, dxy) " << diffCovDxyDxy <<
"\n "
1162 <<
" cov(dxy, dsz) " << diffCovDxyDsz <<
"\n "
1163 <<
" cov(dsz, dsz) " << diffCovDszDsz;