File indexing completed on 2024-09-07 04:38:05
0001 #include "RecoVertex/PixelVertexFinding/interface/PVPositionBuilder.h"
0002 #include <cmath>
0003
0004
0005 PVPositionBuilder::PVPositionBuilder() {}
0006
0007 Measurement1D PVPositionBuilder::average(const reco::TrackRefVector &trks) const {
0008
0009 double ntracks = double(trks.size());
0010 if (ntracks == 0)
0011 return Measurement1D(0., 0.);
0012 double sumZIP = 0;
0013 double err = 0;
0014 for (unsigned int i = 0; i < trks.size(); i++) {
0015 sumZIP += trks[i]->dz();
0016 err += trks[i]->dzError();
0017 }
0018 return Measurement1D(sumZIP / ntracks, err / ntracks / std::sqrt(ntracks));
0019 }
0020
0021 Measurement1D PVPositionBuilder::wtAverage(const reco::TrackRefVector &trks) const {
0022 double ntracks = double(trks.size());
0023 if (ntracks == 0)
0024 return Measurement1D(0.0, 0.0);
0025 double sumUp = 0;
0026 double sumDown = 0;
0027 double err = 0;
0028 for (unsigned int i = 0; i < trks.size(); i++) {
0029
0030 double err2 = trks[i]->dzError();
0031 err2 *= err2;
0032 if (err2 != 0) {
0033 sumUp += trks[i]->dz() * 1 / err2;
0034 sumDown += 1 / err2;
0035 }
0036 err += std::sqrt(err2);
0037 }
0038 if (sumDown > 0)
0039 return Measurement1D(sumUp / sumDown, err / ntracks / sqrt(ntracks));
0040 else
0041 return Measurement1D(0.0, 0.0);
0042 }