CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
PFConversionProducer Class Reference

#include <PFConversionProducer.h>

Inheritance diagram for PFConversionProducer:
edm::stream::EDProducer<>

Public Member Functions

 PFConversionProducer (const edm::ParameterSet &)
 Constructor. More...
 
 ~PFConversionProducer () override
 Destructor. More...
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 

Private Member Functions

void beginRun (const edm::Run &, const edm::EventSetup &) override
 
void endRun (const edm::Run &, const edm::EventSetup &) override
 
void produce (edm::Event &, const edm::EventSetup &) override
 Produce the PFRecTrack collection. More...
 

Private Attributes

edm::EDGetTokenT< reco::ConversionCollectionpfConversionContainer_
 
PFTrackTransformerpfTransformer_
 PFTrackTransformer. More...
 
edm::EDGetTokenT< reco::VertexCollectionvtx_h
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Detailed Description

Definition at line 14 of file PFConversionProducer.h.

Constructor & Destructor Documentation

◆ PFConversionProducer()

PFConversionProducer::PFConversionProducer ( const edm::ParameterSet iConfig)
explicit

Constructor.

Definition at line 19 of file PFConversionProducer.cc.

19  : pfTransformer_(nullptr) {
20  produces<reco::PFRecTrackCollection>();
21  produces<reco::PFConversionCollection>();
22 
23  pfConversionContainer_ = consumes<reco::ConversionCollection>(iConfig.getParameter<InputTag>("conversionCollection"));
24 
25  vtx_h = consumes<reco::VertexCollection>(iConfig.getParameter<edm::InputTag>("PrimaryVertexLabel"));
26 }

References edm::ParameterSet::getParameter(), pfConversionContainer_, and vtx_h.

◆ ~PFConversionProducer()

PFConversionProducer::~PFConversionProducer ( )
override

Destructor.

Definition at line 28 of file PFConversionProducer.cc.

28 { delete pfTransformer_; }

References pfTransformer_.

Member Function Documentation

◆ beginRun()

void PFConversionProducer::beginRun ( const edm::Run run,
const edm::EventSetup iSetup 
)
overrideprivate

◆ endRun()

void PFConversionProducer::endRun ( const edm::Run run,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 174 of file PFConversionProducer.cc.

174  {
175  delete pfTransformer_;
176  pfTransformer_ = nullptr;
177 }

References pfTransformer_.

◆ produce()

void PFConversionProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Produce the PFRecTrack collection.

Definition at line 30 of file PFConversionProducer.cc.

30  {
31  //create the empty collections
32  auto pfConversionColl = std::make_unique<reco::PFConversionCollection>();
33  auto pfRecTrackColl = std::make_unique<reco::PFRecTrackCollection>();
34 
36  iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder", builder);
37  TransientTrackBuilder thebuilder = *(builder.product());
38  reco::PFRecTrackRefProd pfTrackRefProd = iEvent.getRefBeforePut<reco::PFRecTrackCollection>();
40  iEvent.getByToken(pfConversionContainer_, convCollH);
41 
42  const reco::ConversionCollection& convColl = *(convCollH.product());
43 
45  iEvent.getByToken(vtx_h, vertex);
46  //Find PV for IP calculation, if there is no PV in collection than use dummy
48  const reco::Vertex* pv = &dummy;
49  if (vertex.isValid()) {
50  pv = &*vertex->begin();
51  } else { // create a dummy PV
53  e(0, 0) = 0.0015 * 0.0015;
54  e(1, 1) = 0.0015 * 0.0015;
55  e(2, 2) = 15. * 15.;
56  reco::Vertex::Point p(0, 0, 0);
57  dummy = reco::Vertex(p, e, 0, 0, 0);
58  }
59 
60  int idx = 0; //index of track in PFRecTrack collection
61  multimap<unsigned int, unsigned int> trackmap; //Map of Collections and tracks
62  std::vector<unsigned int> conv_coll(0);
63 
64  // CLEAN CONVERSION COLLECTION FOR DUPLICATES
65  for (unsigned int icoll1 = 0; icoll1 < convColl.size(); icoll1++) {
66  if ((!convColl[icoll1].quality(reco::Conversion::arbitratedMergedEcalGeneral)) ||
67  (!convColl[icoll1].quality(reco::Conversion::highPurity)))
68  continue;
69 
70  bool greater_prob = false;
71  std::vector<edm::RefToBase<reco::Track> > tracksRefColl1 = convColl[icoll1].tracks();
72  for (unsigned it1 = 0; it1 < tracksRefColl1.size(); it1++) {
73  reco::TrackRef trackRef1 = (tracksRefColl1[it1]).castTo<reco::TrackRef>();
74 
75  for (unsigned int icoll2 = 0; icoll2 < convColl.size(); icoll2++) {
76  if (icoll1 == icoll2)
77  continue;
78  if ((!convColl[icoll2].quality(reco::Conversion::arbitratedMergedEcalGeneral)) ||
79  (!convColl[icoll2].quality(reco::Conversion::highPurity)))
80  continue;
81  std::vector<edm::RefToBase<reco::Track> > tracksRefColl2 = convColl[icoll2].tracks();
82  for (unsigned it2 = 0; it2 < tracksRefColl2.size(); it2++) {
83  reco::TrackRef trackRef2 = (tracksRefColl2[it2]).castTo<reco::TrackRef>();
84  double like1 = -999;
85  double like2 = -999;
86  //number of shared hits
87  int shared = 0;
88  for (auto const& hit1 : trackRef1->recHits())
89  if (hit1->isValid()) {
90  //count number of shared hits
91  for (auto const& hit2 : trackRef2->recHits()) {
92  if (hit2->isValid() && hit1->sharesInput(hit2, TrackingRecHit::some))
93  shared++;
94  }
95  }
96  float frac = 0;
97  //number of valid hits in tracks that are duplicates
98  float size1 = trackRef1->found();
99  float size2 = trackRef2->found();
100  //divide number of shared hits by the total number of hits for the track with less hits
101  if (size1 > size2)
102  frac = (double)shared / size2;
103  else
104  frac = (double)shared / size1;
105  if (frac > 0.9) {
106  like1 = ChiSquaredProbability(convColl[icoll1].conversionVertex().chi2(),
107  convColl[icoll1].conversionVertex().ndof());
108  like2 = ChiSquaredProbability(convColl[icoll2].conversionVertex().chi2(),
109  convColl[icoll2].conversionVertex().ndof());
110  }
111  if (like2 > like1) {
112  greater_prob = true;
113  break;
114  }
115  } //end loop over tracks in collection 2
116 
117  if (greater_prob)
118  break; //if a duplicate track is found in a collection with greater Chi^2 probability for Vertex fit then break out of comparison loop
119  } //end loop over collection 2 checking
120  if (greater_prob)
121  break; //if a duplicate track is found in a collection with greater Chi^2 probability for Vertex fit then one does not need to check the other track the collection will not be stored
122  } //end loop over tracks in collection 1
123  if (!greater_prob)
124  conv_coll.push_back(icoll1);
125  } //end loop over collection 1
126 
127  //Finally fill empty collections
128  for (unsigned iColl = 0; iColl < conv_coll.size(); iColl++) {
129  unsigned int collindex = conv_coll[iColl];
130  //std::cout<<"Filling this collection"<<collindex<<endl;
131  std::vector<reco::PFRecTrackRef> pfRecTkcoll;
132 
133  std::vector<edm::RefToBase<reco::Track> > tracksRefColl = convColl[collindex].tracks();
134  // convert the secondary tracks
135  for (unsigned it = 0; it < tracksRefColl.size(); it++) {
136  reco::TrackRef trackRef = (tracksRefColl[it]).castTo<reco::TrackRef>();
137  reco::PFRecTrack pfRecTrack(trackRef->charge(), reco::PFRecTrack::KF, trackRef.key(), trackRef);
138  //std::cout<<"Track Pt "<<trackRef->pt()<<std::endl;
139  Trajectory FakeTraj;
140  bool valid = pfTransformer_->addPoints(pfRecTrack, *trackRef, FakeTraj);
141  if (valid) {
142  double stip = -999;
143  const reco::PFTrajectoryPoint& atECAL = pfRecTrack.extrapolatedPoint(reco::PFTrajectoryPoint::ECALEntrance);
144  //if extrapolation to ECAL is valid then calculate STIP
145  if (atECAL.isValid()) {
146  GlobalVector direction(pfRecTrack.extrapolatedPoint(reco::PFTrajectoryPoint::ECALEntrance).position().x(),
147  pfRecTrack.extrapolatedPoint(reco::PFTrajectoryPoint::ECALEntrance).position().y(),
148  pfRecTrack.extrapolatedPoint(reco::PFTrajectoryPoint::ECALEntrance).position().z());
149  stip = IPTools::signedTransverseImpactParameter(thebuilder.build(*trackRef), direction, *pv)
150  .second.significance();
151  }
152  pfRecTrack.setSTIP(stip);
153  pfRecTkcoll.push_back(reco::PFRecTrackRef(pfTrackRefProd, idx++));
154  pfRecTrackColl->push_back(pfRecTrack);
155  }
156  } //end loop over tracks
157  //store reference to the Conversion collection
158  reco::ConversionRef niRef(convCollH, collindex);
159  pfConversionColl->push_back(reco::PFConversion(niRef, pfRecTkcoll));
160  } //end loop over collections
161  iEvent.put(std::move(pfRecTrackColl));
162  iEvent.put(std::move(pfConversionColl));
163 }

References PFTrackTransformer::addPoints(), reco::Conversion::arbitratedMergedEcalGeneral, TransientTrackBuilder::build(), hltPixelTracks_cff::chi2, ChiSquaredProbability(), MillePedeFileConverter_cfg::e, reco::PFTrajectoryPoint::ECALEntrance, DivergingColor::frac, edm::EventSetup::get(), get, reco::Conversion::highPurity, heavyIonCSV_trainingSettings::idx, iEvent, reco::PFTrajectoryPoint::isValid(), edm::Ref< C, T, F >::key(), reco::PFRecTrack::KF, eostools::move(), ndof, AlCaHLTBitMon_ParallelJobs::p, pfConversionContainer_, pfTransformer_, edm::ESHandle< T >::product(), MetAnalyzer::pv(), qcdUeDQM_cfi::quality, edm::second(), IPTools::signedTransverseImpactParameter(), TrackingRecHit::some, RunInfoPI::valid, bphysicsOniaDQM_cfi::vertex, HltBtagValidation_cff::Vertex, and vtx_h.

Member Data Documentation

◆ pfConversionContainer_

edm::EDGetTokenT<reco::ConversionCollection> PFConversionProducer::pfConversionContainer_
private

Definition at line 31 of file PFConversionProducer.h.

Referenced by PFConversionProducer(), and produce().

◆ pfTransformer_

PFTrackTransformer* PFConversionProducer::pfTransformer_
private

◆ vtx_h

edm::EDGetTokenT<reco::VertexCollection> PFConversionProducer::vtx_h
private

Definition at line 32 of file PFConversionProducer.h.

Referenced by PFConversionProducer(), and produce().

Vector3DBase
Definition: Vector3DBase.h:8
edm::RefProd
Definition: EDProductfwd.h:25
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
PFConversionProducer::pfTransformer_
PFTrackTransformer * pfTransformer_
PFTrackTransformer.
Definition: PFConversionProducer.h:30
ChiSquaredProbability
float ChiSquaredProbability(double chiSquared, double nrDOF)
Definition: ChiSquaredProbability.cc:13
reco::Vertex::Error
math::Error< dimension >::type Error
covariance error matrix (3x3)
Definition: Vertex.h:44
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
edm::second
U second(std::pair< T, U > const &p)
Definition: ParameterSet.cc:222
reco::PFRecTrack::KF
Definition: PFRecTrack.h:25
hltPixelTracks_cff.chi2
chi2
Definition: hltPixelTracks_cff.py:25
HLT_FULL_cff.magneticField
magneticField
Definition: HLT_FULL_cff.py:348
IPTools::signedTransverseImpactParameter
std::pair< bool, Measurement1D > signedTransverseImpactParameter(const reco::TransientTrack &track, const GlobalVector &direction, const reco::Vertex &vertex)
Definition: IPTools.cc:57
edm::Handle< reco::ConversionCollection >
edm::Ref< TrackCollection >
reco::ConversionCollection
std::vector< Conversion > ConversionCollection
collectin of Conversion objects
Definition: ConversionFwd.h:9
heavyIonCSV_trainingSettings.idx
idx
Definition: heavyIonCSV_trainingSettings.py:5
ndof
Definition: HIMultiTrackSelector.h:49
IdealMagneticFieldRecord
Definition: IdealMagneticFieldRecord.h:11
PFTrackTransformer::addPoints
bool addPoints(reco::PFRecTrack &pftrack, const reco::Track &track, const Trajectory &traj, bool msgwarning=true) const
Add points to a PFTrack. return false if a TSOS is invalid.
Definition: PFTrackTransformer.cc:40
edm::EventSetup::get
T get() const
Definition: EventSetup.h:80
DivergingColor.frac
float frac
Definition: DivergingColor.py:175
TransientTrackRecord
Definition: TransientTrackRecord.h:11
edm::ESHandle< MagneticField >
Point3DBase< float, GlobalTag >
TrackingRecHit::some
Definition: TrackingRecHit.h:59
bphysicsOniaDQM_cfi.vertex
vertex
Definition: bphysicsOniaDQM_cfi.py:7
math::XYZVector
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
reco::Conversion::highPurity
Definition: Conversion.h:33
MetAnalyzer.pv
def pv(vc)
Definition: MetAnalyzer.py:7
iEvent
int iEvent
Definition: GenABIO.cc:224
PFConversionProducer::vtx_h
edm::EDGetTokenT< reco::VertexCollection > vtx_h
Definition: PFConversionProducer.h:32
TransientTrackBuilder
Definition: TransientTrackBuilder.h:16
get
#define get
reco::PFTrajectoryPoint::isValid
bool isValid() const
is this point valid ?
Definition: PFTrajectoryPoint.h:84
reco::PFTrajectoryPoint::ECALEntrance
ECAL front face.
Definition: PFTrajectoryPoint.h:43
reco::PFConversion
Definition: PFConversion.h:20
reco::Vertex::Point
math::XYZPoint Point
point in the space
Definition: Vertex.h:40
eostools.move
def move(src, dest)
Definition: eostools.py:511
HltBtagValidation_cff.Vertex
Vertex
Definition: HltBtagValidation_cff.py:32
qcdUeDQM_cfi.quality
quality
Definition: qcdUeDQM_cfi.py:31
reco::PFRecTrack
reconstructed track used as an input to particle flow
Definition: PFRecTrack.h:20
Trajectory
Definition: Trajectory.h:38
PFTrackTransformer::OnlyProp
void OnlyProp()
Definition: PFTrackTransformer.h:54
reco::PFTrajectoryPoint
A PFTrack holds several trajectory points, which basically contain the position and momentum of a tra...
Definition: PFTrajectoryPoint.h:26
reco::Conversion::arbitratedMergedEcalGeneral
Definition: Conversion.h:31
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
PFConversionProducer::pfConversionContainer_
edm::EDGetTokenT< reco::ConversionCollection > pfConversionContainer_
Definition: PFConversionProducer.h:31
reco::PFRecTrackCollection
std::vector< PFRecTrack > PFRecTrackCollection
collection of PFRecTrack objects
Definition: PFRecTrackFwd.h:9
edm::Ref::key
key_type key() const
Accessor for product key.
Definition: Ref.h:250
TransientTrackBuilder::build
reco::TransientTrack build(const reco::Track *p) const
Definition: TransientTrackBuilder.cc:20
RunInfoPI::valid
Definition: RunInfoPayloadInspectoHelper.h:16
dummy
Definition: DummySelector.h:38
PFTrackTransformer
Definition: PFTrackTransformer.h:34
edm::InputTag
Definition: InputTag.h:15
reco::Vertex
Definition: Vertex.h:35
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37