23 double mvaBremConvCut,
24 string mvaWeightFileConvBrem):
26 mvaBremConvCut_(mvaBremConvCut),
27 mvaWeightFileConvBrem_(mvaWeightFileConvBrem)
37 tmvaReader_->BookMVA(
"BDT",mvaWeightFileConvBrem.c_str());
57 bool debugRef =
false;
60 cout <<
"runConvBremFinder:: Entering " << endl;
66 vector<PFBrem> primPFBrem = gsfpfrectk.
PFRecBrem();
70 reco::PFRecTrackCollection::const_iterator pft=PfRTkColl.begin();
71 reco::PFRecTrackCollection::const_iterator pftend=PfRTkColl.end();
77 vector<PFRecTrackRef> AllPFRecTracks;
78 AllPFRecTracks.clear();
79 unsigned int ipft = 0;
82 for(;pft!=pftend;++pft,ipft++){
85 if(pfTrackRef->trackRef() == pft->trackRef())
continue;
88 TrackRef trackRef = pfRecTrRef->trackRef();
92 cout <<
"runConvBremFinder:: pushing_back High Purity " << pft->trackRef()->pt()
93 <<
" eta,phi " << pft->trackRef()->eta() <<
", " << pft->trackRef()->phi()
94 <<
" Memory Address Ref " << &*trackRef <<
" Memory Address BaseRef " << &*selTrackBaseRef << endl;
95 AllPFRecTracks.push_back(pfRecTrRef);
101 for(
unsigned i=0;
i<PfConvColl.size();
i++) {
104 unsigned int trackSize=(convRef->pfTracks()).
size();
105 if ( convRef->pfTracks().size() < 2)
continue;
106 for(
unsigned iTk=0;iTk<trackSize; iTk++) {
112 if(primaryTrackBaseRef == newTrackBaseRef)
continue;
115 for(
unsigned iPF = 0; iPF < AllPFRecTracks.size(); iPF++) {
119 cout <<
"## Track 1 HP pt " << AllPFRecTracks[iPF]->trackRef()->pt() <<
" eta, phi " << AllPFRecTracks[iPF]->trackRef()->eta() <<
", " << AllPFRecTracks[iPF]->trackRef()->phi()
120 <<
" Memory Address Ref " << &(*AllPFRecTracks[iPF]->trackRef()) <<
" Memory Address BaseRef " << &*selTrackBaseRef << endl;
122 cout <<
"** Track 2 CONV pt " << compPFTkRef->trackRef()->pt() <<
" eta, phi " << compPFTkRef->trackRef()->eta() <<
", " << compPFTkRef->trackRef()->phi()
123 <<
" Memory Address Ref " << &*compPFTkRef->trackRef() <<
" Memory Address BaseRef " << &*newTrackBaseRef << endl;
125 if(AllPFRecTracks[iPF]->trackRef()== compPFTkRef->trackRef()) {
127 cout <<
" SAME BREM REF " << endl;
133 cout <<
"runConvBremFinder:: pushing_back Conversions " << compPFTkRef->trackRef()->pt()
134 <<
" eta,phi " << compPFTkRef->trackRef()->eta() <<
" phi " << compPFTkRef->trackRef()->phi() <<endl;
135 AllPFRecTracks.push_back(compPFTkRef);
143 for(
unsigned i=0;
i<PfNuclColl.size();
i++) {
145 unsigned int trackSize= dispacedVertexRef->pfRecTracks().size();
146 for(
unsigned iTk=0;iTk < trackSize; iTk++) {
152 if(primaryTrackBaseRef == newTrackBaseRef)
continue;
155 for(
unsigned iPF = 0; iPF < AllPFRecTracks.size(); iPF++) {
157 if(selTrackBaseRef == newTrackBaseRef) notFound =
false;
161 cout <<
"runConvBremFinder:: pushing_back displaced Vertex pt " << newPFRecTrackRef->trackRef()->pt()
162 <<
" eta,phi " << newPFRecTrackRef->trackRef()->eta() <<
", " << newPFRecTrackRef->trackRef()->phi() << endl;
163 AllPFRecTracks.push_back(newPFRecTrackRef);
171 for(
unsigned i=0;
i<PfV0Coll.size();
i++) {
173 unsigned int trackSize=(v0Ref->pfTracks()).
size();
174 for(
unsigned iTk=0;iTk<trackSize; iTk++) {
180 if(primaryTrackBaseRef == newTrackBaseRef)
continue;
183 for(
unsigned iPF = 0; iPF < AllPFRecTracks.size(); iPF++) {
185 if(selTrackBaseRef == newTrackBaseRef) notFound =
false;
189 cout <<
"runConvBremFinder:: pushing_back V0 " << newPFRecTrackRef->trackRef()->pt()
190 <<
" eta,phi " << newPFRecTrackRef->trackRef()->eta() <<
", " << newPFRecTrackRef->trackRef()->phi() << endl;
191 AllPFRecTracks.push_back(newPFRecTrackRef);
202 for(
unsigned iPF = 0; iPF < AllPFRecTracks.size(); iPF++) {
205 double dphi= fabs(AllPFRecTracks[iPF]->trackRef()->
phi()-refGsf->phi());
207 double deta=fabs(AllPFRecTracks[iPF]->trackRef()->
eta()-refGsf->eta());
210 if( fabs(dphi)> 1.0 || fabs(deta) > 0.4)
continue;
213 double minDEtaBremKF = 1000.;
214 double minDPhiBremKF = 1000.;
215 double minDRBremKF = 1000.;
216 double minDEtaBremKFPos = 1000.;
217 double minDPhiBremKFPos = 1000.;
218 double minDRBremKFPos = 1000.;
221 double secEta = trkRef->innerMomentum().eta();
222 double secPhi = trkRef->innerMomentum().phi();
224 for(
unsigned ipbrem = 0; ipbrem < primPFBrem.size(); ipbrem++) {
225 if(primPFBrem[ipbrem].indTrajPoint() == 99)
continue;
228 if( ! atPrimECAL.
isValid() )
continue;
229 double bremEta = atPrimECAL.
momentum().Eta();
230 double bremPhi = atPrimECAL.
momentum().Phi();
233 double deta = fabs(bremEta - secEta);
234 double dphi = fabs(bremPhi - secPhi);
236 double DR =
sqrt(deta*deta + dphi*dphi);
239 double detaPos = fabs(bremEta - trkRef->innerPosition().eta());
240 double dphiPos = fabs(bremPhi - trkRef->innerPosition().phi());
242 double DRPos =
sqrt(detaPos*detaPos + dphiPos*dphiPos);
247 if(DR < minDRBremKF) {
250 minDEtaBremKF = deta;
251 minDPhiBremKF = fabs(dphi);
254 if(DRPos < minDRBremKFPos) {
256 minDEtaBremKFPos = detaPos;
257 minDPhiBremKFPos = fabs(dphiPos);
263 float gsfR =
sqrt(refGsf->innerPosition().x()*refGsf->innerPosition().x() +
264 refGsf->innerPosition().y()*refGsf->innerPosition().y() );
268 secR =
sqrt(trkRef->innerPosition().x()*trkRef->innerPosition().x() +
269 trkRef->innerPosition().y()*trkRef->innerPosition().y() );
274 if( (minDPhiBremKF < 0.1 || minDPhiBremKFPos < 0.1) &&
275 (minDEtaBremKF < 0.02 || minDEtaBremKFPos < 0.02)&&
280 cout <<
"runConvBremFinder:: OK Find track and BREM close "
281 <<
" MinDphi " << minDPhiBremKF <<
" MinDeta " << minDEtaBremKF << endl;
284 float MinDist = 100000.;
289 for (PFClusterCollection::const_iterator clus = theEClus.begin();
290 clus != theEClus.end();
299 bool applyCrackCorrections =
false;
300 vector<double> ps1Ene(0);
301 vector<double> ps2Ene(0);
306 EE_calib = pfcalib_.
energyEm(*clus,ps1Ene,ps2Ene,ps1,ps2,applyCrackCorrections);
310 if(MinDist > 0. && MinDist < 100000.) {
314 secPout =
sqrt(trkRef->outerMomentum().x()*trkRef->outerMomentum().x() +
315 trkRef->outerMomentum().y()*trkRef->outerMomentum().y() +
316 trkRef->outerMomentum().z()*trkRef->outerMomentum().z());
318 secPin =
sqrt(trkRef->innerMomentum().x()*trkRef->innerMomentum().x() +
319 trkRef->innerMomentum().y()*trkRef->innerMomentum().y() +
320 trkRef->innerMomentum().z()*trkRef->innerMomentum().z());
327 const Vertex *pv = &dummy;
329 if (primaryVertex->size() != 0) {
330 pv = &*primaryVertex->begin();
335 e(0, 0) = 0.0015 * 0.0015;
336 e(1, 1) = 0.0015 * 0.0015;
339 dummy =
Vertex(p, e, 0, 0, 0);
345 refGsf->innerMomentum().y(),
346 refGsf->innerMomentum().z());
360 unsigned int tmp_sh = 0;
363 for (;nhit!=nhit_end;++nhit){
364 if ((*nhit)->isValid()){
367 for (;ihit!=ihit_end;++ihit){
368 if ((*ihit)->isValid()) {
387 cout <<
" The imput variables for conv brem tracks identification " << endl
388 <<
" secR " << secR <<
" gsfR " << gsfR << endl
389 <<
" N shared hits " <<
nHITS1 << endl
390 <<
" sTIP " <<
sTIP << endl
392 <<
" E/pout " <<
Epout << endl
393 <<
" pin " << secPin << endl
394 <<
" ptRatioKFGsf " << ptRatioGsfKF << endl
395 <<
" ***** MVA ***** " << mvaValue << endl;
reconstructed track used as an input to particle flow
Particle flow cluster, see clustering algorithm in PFClusterAlgo.
TMVA::Reader * tmvaReader_
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
bool isNonnull() const
Checks for non-null.
void calculatePositionREP()
computes posrep_ once and for all
const reco::GsfTrackRef & gsfTrackRef() const
TransientTrackBuilder builder_
std::vector< reco::PFRecTrackRef > pfRecTrRef_vec_
ConvBremPFTrackFinder(const TransientTrackBuilder &builder, double mvaBremConvCut, std::string mvaWeightFileConvBrem)
math::XYZPoint Point
point in the space
void runConvBremFinder(const edm::Handle< reco::PFRecTrackCollection > &thePfRecTrackCol, const edm::Handle< reco::VertexCollection > &primaryVertex, const edm::Handle< reco::PFDisplacedTrackerVertexCollection > &pfNuclears, const edm::Handle< reco::PFConversionCollection > &pfConversions, const edm::Handle< reco::PFV0Collection > &pfV0, bool useNuclear, bool useConversions, bool useV0, const reco::PFClusterCollection &theEClus, reco::GsfPFRecTrack gsfpfrectk)
std::vector< PFV0 > PFV0Collection
collection of PFV0 objects
double energyEm(double uncalibratedEnergyECAL, double eta=0, double phi=0) const
const math::XYZTLorentzVector & momentum() const
4-momenta quadrivector
bool isValid() const
is this point valid ?
const edm::Ref< std::vector< PFRecTrack > > & kfPFRecTrackRef() const
XYZPointD XYZPoint
point in space with cartesian internal representation
void calculatePositionREP()
static const GlobalPoint notFound(0, 0, 0)
T const * product() const
std::vector< PFCluster > PFClusterCollection
collection of PFCluster objects
A PFTrack holds several trajectory points, which basically contain the position and momentum of a tra...
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
tuple size
Write out results.
std::vector< PFDisplacedTrackerVertex > PFDisplacedTrackerVertexCollection
collection of DisplacedTrackerVertexs