23 double mvaBremConvCut,
24 string mvaWeightFileConvBrem):
26 mvaBremConvCut_(mvaBremConvCut),
27 mvaWeightFileConvBrem_(mvaWeightFileConvBrem)
37 tmvaReader_->BookMVA(
"BDT",mvaWeightFileConvBrem.c_str());
60 bool debugRef =
false;
63 cout <<
"runConvBremFinder:: Entering " << endl;
69 vector<PFBrem> primPFBrem = gsfpfrectk.
PFRecBrem();
73 reco::PFRecTrackCollection::const_iterator pft=PfRTkColl.begin();
74 reco::PFRecTrackCollection::const_iterator pftend=PfRTkColl.end();
80 vector<PFRecTrackRef> AllPFRecTracks;
81 AllPFRecTracks.clear();
82 unsigned int ipft = 0;
85 for(;pft!=pftend;++pft,ipft++){
88 if(pfTrackRef->trackRef() == pft->trackRef())
continue;
91 TrackRef trackRef = pfRecTrRef->trackRef();
95 cout <<
"runConvBremFinder:: pushing_back High Purity " << pft->trackRef()->pt()
96 <<
" eta,phi " << pft->trackRef()->eta() <<
", " << pft->trackRef()->phi()
97 <<
" Memory Address Ref " << &*trackRef <<
" Memory Address BaseRef " << &*selTrackBaseRef << endl;
98 AllPFRecTracks.push_back(pfRecTrRef);
104 for(
unsigned i=0;
i<PfConvColl.size();
i++) {
107 unsigned int trackSize=(convRef->pfTracks()).
size();
108 if ( convRef->pfTracks().size() < 2)
continue;
109 for(
unsigned iTk=0;iTk<trackSize; iTk++) {
115 if(primaryTrackBaseRef == newTrackBaseRef)
continue;
118 for(
unsigned iPF = 0; iPF < AllPFRecTracks.size(); iPF++) {
122 cout <<
"## Track 1 HP pt " << AllPFRecTracks[iPF]->trackRef()->pt() <<
" eta, phi " << AllPFRecTracks[iPF]->trackRef()->eta() <<
", " << AllPFRecTracks[iPF]->trackRef()->phi()
123 <<
" Memory Address Ref " << &(*AllPFRecTracks[iPF]->trackRef()) <<
" Memory Address BaseRef " << &*selTrackBaseRef << endl;
125 cout <<
"** Track 2 CONV pt " << compPFTkRef->trackRef()->pt() <<
" eta, phi " << compPFTkRef->trackRef()->eta() <<
", " << compPFTkRef->trackRef()->phi()
126 <<
" Memory Address Ref " << &*compPFTkRef->trackRef() <<
" Memory Address BaseRef " << &*newTrackBaseRef << endl;
128 if(AllPFRecTracks[iPF]->trackRef()== compPFTkRef->trackRef()) {
130 cout <<
" SAME BREM REF " << endl;
136 cout <<
"runConvBremFinder:: pushing_back Conversions " << compPFTkRef->trackRef()->pt()
137 <<
" eta,phi " << compPFTkRef->trackRef()->eta() <<
" phi " << compPFTkRef->trackRef()->phi() <<endl;
138 AllPFRecTracks.push_back(compPFTkRef);
146 for(
unsigned i=0;
i<PfNuclColl.size();
i++) {
148 unsigned int trackSize= dispacedVertexRef->pfRecTracks().size();
149 for(
unsigned iTk=0;iTk < trackSize; iTk++) {
155 if(primaryTrackBaseRef == newTrackBaseRef)
continue;
158 for(
unsigned iPF = 0; iPF < AllPFRecTracks.size(); iPF++) {
160 if(selTrackBaseRef == newTrackBaseRef) notFound =
false;
164 cout <<
"runConvBremFinder:: pushing_back displaced Vertex pt " << newPFRecTrackRef->trackRef()->pt()
165 <<
" eta,phi " << newPFRecTrackRef->trackRef()->eta() <<
", " << newPFRecTrackRef->trackRef()->phi() << endl;
166 AllPFRecTracks.push_back(newPFRecTrackRef);
174 for(
unsigned i=0;
i<PfV0Coll.size();
i++) {
176 unsigned int trackSize=(v0Ref->pfTracks()).
size();
177 for(
unsigned iTk=0;iTk<trackSize; iTk++) {
183 if(primaryTrackBaseRef == newTrackBaseRef)
continue;
186 for(
unsigned iPF = 0; iPF < AllPFRecTracks.size(); iPF++) {
188 if(selTrackBaseRef == newTrackBaseRef) notFound =
false;
192 cout <<
"runConvBremFinder:: pushing_back V0 " << newPFRecTrackRef->trackRef()->pt()
193 <<
" eta,phi " << newPFRecTrackRef->trackRef()->eta() <<
", " << newPFRecTrackRef->trackRef()->phi() << endl;
194 AllPFRecTracks.push_back(newPFRecTrackRef);
205 for(
unsigned iPF = 0; iPF < AllPFRecTracks.size(); iPF++) {
208 double dphi= fabs(AllPFRecTracks[iPF]->trackRef()->
phi()-refGsf->phi());
210 double deta=fabs(AllPFRecTracks[iPF]->trackRef()->
eta()-refGsf->eta());
213 if( fabs(dphi)> 1.0 || fabs(deta) > 0.4)
continue;
216 double minDEtaBremKF = 1000.;
217 double minDPhiBremKF = 1000.;
218 double minDRBremKF = 1000.;
219 double minDEtaBremKFPos = 1000.;
220 double minDPhiBremKFPos = 1000.;
221 double minDRBremKFPos = 1000.;
224 double secEta = trkRef->innerMomentum().eta();
225 double secPhi = trkRef->innerMomentum().phi();
227 for(
unsigned ipbrem = 0; ipbrem < primPFBrem.size(); ipbrem++) {
228 if(primPFBrem[ipbrem].indTrajPoint() == 99)
continue;
231 if( ! atPrimECAL.
isValid() )
continue;
232 double bremEta = atPrimECAL.
momentum().Eta();
233 double bremPhi = atPrimECAL.
momentum().Phi();
236 double deta = fabs(bremEta - secEta);
237 double dphi = fabs(bremPhi - secPhi);
239 double DR =
sqrt(deta*deta + dphi*dphi);
242 double detaPos = fabs(bremEta - trkRef->innerPosition().eta());
243 double dphiPos = fabs(bremPhi - trkRef->innerPosition().phi());
245 double DRPos =
sqrt(detaPos*detaPos + dphiPos*dphiPos);
250 if(DR < minDRBremKF) {
253 minDEtaBremKF = deta;
254 minDPhiBremKF = fabs(dphi);
257 if(DRPos < minDRBremKFPos) {
259 minDEtaBremKFPos = detaPos;
260 minDPhiBremKFPos = fabs(dphiPos);
266 float gsfR =
sqrt(refGsf->innerPosition().x()*refGsf->innerPosition().x() +
267 refGsf->innerPosition().y()*refGsf->innerPosition().y() );
271 secR =
sqrt(trkRef->innerPosition().x()*trkRef->innerPosition().x() +
272 trkRef->innerPosition().y()*trkRef->innerPosition().y() );
277 if( (minDPhiBremKF < 0.1 || minDPhiBremKFPos < 0.1) &&
278 (minDEtaBremKF < 0.02 || minDEtaBremKFPos < 0.02)&&
283 cout <<
"runConvBremFinder:: OK Find track and BREM close "
284 <<
" MinDphi " << minDPhiBremKF <<
" MinDeta " << minDEtaBremKF << endl;
287 float MinDist = 100000.;
292 for (PFClusterCollection::const_iterator clus = theEClus.begin();
293 clus != theEClus.end();
304 bool applyCrackCorrections =
false;
305 vector<double> ps1Ene(0);
306 vector<double> ps2Ene(0);
311 EE_calib =
pfcalib_->
energyEm(*clus,ps1Ene,ps2Ene,ps1,ps2,applyCrackCorrections);
315 if(MinDist > 0. && MinDist < 100000.) {
319 secPout =
sqrt(trkRef->outerMomentum().x()*trkRef->outerMomentum().x() +
320 trkRef->outerMomentum().y()*trkRef->outerMomentum().y() +
321 trkRef->outerMomentum().z()*trkRef->outerMomentum().z());
323 secPin =
sqrt(trkRef->innerMomentum().x()*trkRef->innerMomentum().x() +
324 trkRef->innerMomentum().y()*trkRef->innerMomentum().y() +
325 trkRef->innerMomentum().z()*trkRef->innerMomentum().z());
332 const Vertex *pv = &dummy;
334 if (primaryVertex->size() != 0) {
335 pv = &*primaryVertex->begin();
340 e(0, 0) = 0.0015 * 0.0015;
341 e(1, 1) = 0.0015 * 0.0015;
344 dummy =
Vertex(p, e, 0, 0, 0);
350 refGsf->innerMomentum().y(),
351 refGsf->innerMomentum().z());
365 unsigned int tmp_sh = 0;
368 for (;nhit!=nhit_end;++nhit){
369 if ((*nhit)->isValid()){
372 for (;ihit!=ihit_end;++ihit){
373 if ((*ihit)->isValid()) {
392 cout <<
" The imput variables for conv brem tracks identification " << endl
393 <<
" secR " << secR <<
" gsfR " << gsfR << endl
394 <<
" N shared hits " <<
nHITS1 << endl
395 <<
" sTIP " <<
sTIP << endl
397 <<
" E/pout " <<
Epout << endl
398 <<
" pin " << secPin << endl
399 <<
" ptRatioKFGsf " << ptRatioGsfKF << endl
400 <<
" ***** 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.
PFEnergyCalibration * pfcalib_
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)
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
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
double energyEm(const reco::PFCluster &clusterEcal, std::vector< double > &EclustersPS1, std::vector< double > &EclustersPS2, bool crackCorrection=true)