46 bool debugRef =
false;
49 cout <<
"runConvBremFinder:: Entering " << endl;
53 vector<PFBrem> primPFBrem = gsfpfrectk.
PFRecBrem();
56 reco::PFRecTrackCollection::const_iterator pft = PfRTkColl.begin();
57 reco::PFRecTrackCollection::const_iterator pftend = PfRTkColl.end();
60 vector<PFRecTrackRef> AllPFRecTracks;
61 AllPFRecTracks.clear();
62 unsigned int ipft = 0;
64 for (; pft != pftend; ++pft, ipft++) {
67 if (pfTrackRef->trackRef() == pft->trackRef())
71 TrackRef trackRef = pfRecTrRef->trackRef();
75 cout <<
"runConvBremFinder:: pushing_back High Purity " << pft->trackRef()->pt() <<
" eta,phi " 76 << pft->trackRef()->eta() <<
", " << pft->trackRef()->phi() <<
" Memory Address Ref " << &*trackRef
77 <<
" Memory Address BaseRef " << &*selTrackBaseRef << endl;
78 AllPFRecTracks.push_back(pfRecTrRef);
83 for (
unsigned i = 0;
i < PfConvColl.size();
i++) {
86 unsigned int trackSize = (convRef->pfTracks()).
size();
87 if (convRef->pfTracks().size() < 2)
89 for (
unsigned iTk = 0; iTk < trackSize; iTk++) {
95 if (primaryTrackBaseRef == newTrackBaseRef)
99 for (
unsigned iPF = 0; iPF < AllPFRecTracks.size(); iPF++) {
103 cout <<
"## Track 1 HP pt " << AllPFRecTracks[iPF]->trackRef()->pt() <<
" eta, phi " 104 << AllPFRecTracks[iPF]->trackRef()->eta() <<
", " << AllPFRecTracks[iPF]->trackRef()->phi()
105 <<
" Memory Address Ref " << &(*AllPFRecTracks[iPF]->trackRef()) <<
" Memory Address BaseRef " 106 << &*selTrackBaseRef << endl;
108 cout <<
"** Track 2 CONV pt " << compPFTkRef->trackRef()->pt() <<
" eta, phi " 109 << compPFTkRef->trackRef()->eta() <<
", " << compPFTkRef->trackRef()->phi() <<
" Memory Address Ref " 110 << &*compPFTkRef->trackRef() <<
" Memory Address BaseRef " << &*newTrackBaseRef << endl;
112 if (AllPFRecTracks[iPF]->trackRef() == compPFTkRef->trackRef()) {
114 cout <<
" SAME BREM REF " << endl;
120 cout <<
"runConvBremFinder:: pushing_back Conversions " << compPFTkRef->trackRef()->pt() <<
" eta,phi " 121 << compPFTkRef->trackRef()->eta() <<
" phi " << compPFTkRef->trackRef()->phi() << endl;
122 AllPFRecTracks.push_back(compPFTkRef);
130 for (
unsigned i = 0;
i < PfNuclColl.size();
i++) {
132 unsigned int trackSize = dispacedVertexRef->pfRecTracks().size();
133 for (
unsigned iTk = 0; iTk < trackSize; iTk++) {
139 if (primaryTrackBaseRef == newTrackBaseRef)
142 bool notFound =
true;
143 for (
unsigned iPF = 0; iPF < AllPFRecTracks.size(); iPF++) {
145 if (selTrackBaseRef == newTrackBaseRef)
150 cout <<
"runConvBremFinder:: pushing_back displaced Vertex pt " << newPFRecTrackRef->trackRef()->pt()
151 <<
" eta,phi " << newPFRecTrackRef->trackRef()->eta() <<
", " << newPFRecTrackRef->trackRef()->phi()
153 AllPFRecTracks.push_back(newPFRecTrackRef);
161 for (
unsigned i = 0;
i < PfV0Coll.size();
i++) {
163 unsigned int trackSize = (v0Ref->pfTracks()).
size();
164 for (
unsigned iTk = 0; iTk < trackSize; iTk++) {
170 if (primaryTrackBaseRef == newTrackBaseRef)
173 bool notFound =
true;
174 for (
unsigned iPF = 0; iPF < AllPFRecTracks.size(); iPF++) {
176 if (selTrackBaseRef == newTrackBaseRef)
181 cout <<
"runConvBremFinder:: pushing_back V0 " << newPFRecTrackRef->trackRef()->pt() <<
" eta,phi " 182 << newPFRecTrackRef->trackRef()->eta() <<
", " << newPFRecTrackRef->trackRef()->phi() << endl;
183 AllPFRecTracks.push_back(newPFRecTrackRef);
191 for (
unsigned iPF = 0; iPF < AllPFRecTracks.size(); iPF++) {
192 double dphi = fabs(AllPFRecTracks[iPF]->trackRef()->
phi() - refGsf->phi());
195 double deta = fabs(AllPFRecTracks[iPF]->trackRef()->
eta() - refGsf->eta());
198 if (fabs(dphi) > 1.0 || fabs(deta) > 0.4)
201 double minDEtaBremKF = 1000.;
202 double minDPhiBremKF = 1000.;
203 double minDRBremKF = 1000.;
204 double minDEtaBremKFPos = 1000.;
205 double minDPhiBremKFPos = 1000.;
206 double minDRBremKFPos = 1000.;
209 double secEta = trkRef->innerMomentum().eta();
210 double secPhi = trkRef->innerMomentum().phi();
212 for (
unsigned ipbrem = 0; ipbrem < primPFBrem.size(); ipbrem++) {
213 if (primPFBrem[ipbrem].indTrajPoint() == 99)
219 double bremEta = atPrimECAL.
momentum().Eta();
220 double bremPhi = atPrimECAL.
momentum().Phi();
222 double deta = fabs(bremEta - secEta);
223 double dphi = fabs(bremPhi - secPhi);
226 double DR =
sqrt(deta * deta + dphi * dphi);
228 double detaPos = fabs(bremEta - trkRef->innerPosition().eta());
229 double dphiPos = fabs(bremPhi - trkRef->innerPosition().phi());
232 double DRPos =
sqrt(detaPos * detaPos + dphiPos * dphiPos);
235 if (DR < minDRBremKF) {
237 minDEtaBremKF = deta;
238 minDPhiBremKF = fabs(dphi);
241 if (DRPos < minDRBremKFPos) {
243 minDEtaBremKFPos = detaPos;
244 minDPhiBremKFPos = fabs(dphiPos);
249 float gsfR =
sqrt(refGsf->innerPosition().x() * refGsf->innerPosition().x() +
250 refGsf->innerPosition().y() * refGsf->innerPosition().y());
253 secR =
sqrt(trkRef->innerPosition().x() * trkRef->innerPosition().x() +
254 trkRef->innerPosition().y() * trkRef->innerPosition().y());
258 if ((minDPhiBremKF < 0.1 || minDPhiBremKFPos < 0.1) && (minDEtaBremKF < 0.02 || minDEtaBremKFPos < 0.02) &&
261 cout <<
"runConvBremFinder:: OK Find track and BREM close " 262 <<
" MinDphi " << minDPhiBremKF <<
" MinDeta " << minDEtaBremKF << endl;
264 float MinDist = 100000.;
269 for (PFClusterCollection::const_iterator clus = theEClus.begin(); clus != theEClus.end(); clus++) {
281 vector<double> ps1Ene(0);
282 vector<double> ps2Ene(0);
285 if (dist < MinDist) {
287 EE_calib = cache->
pfcalib_->energyEm(*clus, ps1Ene, ps2Ene, ps1, ps2, applyCrackCorrections);
291 if (MinDist > 0. && MinDist < 100000.) {
294 secPout =
sqrt(trkRef->outerMomentum().x() * trkRef->outerMomentum().x() +
295 trkRef->outerMomentum().y() * trkRef->outerMomentum().y() +
296 trkRef->outerMomentum().z() * trkRef->outerMomentum().z());
298 secPin =
sqrt(trkRef->innerMomentum().x() * trkRef->innerMomentum().x() +
299 trkRef->innerMomentum().y() * trkRef->innerMomentum().y() +
300 trkRef->innerMomentum().z() * trkRef->innerMomentum().z());
308 if (!primaryVertex->empty()) {
309 pv = &*primaryVertex->begin();
314 e(0, 0) = 0.0015 * 0.0015;
315 e(1, 1) = 0.0015 * 0.0015;
322 GlobalVector direction(refGsf->innerMomentum().x(), refGsf->innerMomentum().y(), refGsf->innerMomentum().z());
333 unsigned int tmpSh = 0;
335 int kfhitcounter = 0;
336 for (
auto const& nhit : refGsf->recHits())
337 if (nhit->isValid()) {
339 for (
auto const& ihit : trkRef->recHits())
340 if (ihit->isValid()) {
353 TString weightfilepath =
"";
354 double mvaValue = -10;
355 double cutvalue = -10;
358 if (refGsf->pt() < 20 && fabs(refGsf->eta()) < 1.479) {
362 if (refGsf->pt() > 20 && fabs(refGsf->eta()) < 1.479) {
366 if (refGsf->pt() < 20 && fabs(refGsf->eta()) > 1.479) {
370 if (refGsf->pt() > 20 && fabs(refGsf->eta()) > 1.479) {
376 cout <<
"Gsf track Pt, Eta " << refGsf->pt() <<
" " << refGsf->eta() << endl;
378 cout <<
"Cutvalue " << cutvalue << endl;
384 cout <<
" The input variables for conv brem tracks identification " << endl
385 <<
" secR " << secR <<
" gsfR " << gsfR << endl
386 <<
" N shared hits " <<
nHITS1 << endl
387 <<
" sTIP " <<
sTIP << endl
389 <<
" E/pout " <<
Epout << endl
390 <<
" ptRatioKFGsf " << ptRatioGsfKF << endl
391 <<
" ***** MVA ***** " << mvaValue << endl;
393 if (mvaValue > cutvalue) {
reconstructed track used as an input to particle flow
std::unique_ptr< const GBRForest > gbrEndcapsHighPt_
bool isNonnull() const
Checks for non-null.
Particle flow cluster, see clustering algorithm in PFClusterAlgo.
std::unique_ptr< const GBRForest > gbrEndcapsLowPt_
std::unique_ptr< const GBRForest > gbrBarrelLowPt_
reco::TransientTrack build(const reco::Track *p) const
const std::vector< reco::PFBrem > & PFRecBrem() const
math::Error< dimension >::type Error
covariance error matrix (3x3)
std::vector< PFConversion > PFConversionCollection
collection of PFConversion objects
double mvaBremConvCutEndcapsLowPt_
void calculatePositionREP()
computes posrep_ once and for all
const reco::GsfTrackRef & gsfTrackRef() const
TransientTrackBuilder builder_
double mvaBremConvCutBarrelHighPt_
std::vector< reco::PFRecTrackRef > pfRecTrRef_vec_
double mvaBremConvCutEndcapsHighPt_
math::XYZPoint Point
point in the space
const reco::PFTrajectoryPoint & extrapolatedPoint(unsigned layerid) const
std::vector< PFV0 > PFV0Collection
collection of PFV0 objects
const math::XYZTLorentzVector & momentum() const
4-momenta quadrivector
bool isValid() const
is this point valid ?
const edm::Ref< std::vector< PFRecTrack > > & kfPFRecTrackRef() const
T const * product() const
void calculatePositionREP()
static const GlobalPoint notFound(0, 0, 0)
std::unique_ptr< const PFEnergyCalibration > pfcalib_
A PFTrack holds several trajectory points, which basically contain the position and momentum of a tra...
primaryVertex
hltOfflineBeamSpot for HLTMON
static double testTrackAndClusterByRecHit(const reco::PFRecTrack &track, const reco::PFCluster &cluster, bool isBrem=false, bool debug=false)
std::vector< PFRecTrack > PFRecTrackCollection
collection of PFRecTrack objects
std::vector< PFDisplacedTrackerVertex > PFDisplacedTrackerVertexCollection
collection of DisplacedTrackerVertexs
double mvaBremConvCutBarrelLowPt_
std::unique_ptr< const GBRForest > gbrBarrelHighPt_