CMS 3D CMS Logo

RecoTrackAccumulator.cc
Go to the documentation of this file.
2 
3 #include <memory>
4 
9 
11  edm::ProducesCollector producesCollector,
13  : signalTracksTag(conf.getParameter<edm::InputTag>("signalTracks")),
14  pileUpTracksTag(conf.getParameter<edm::InputTag>("pileUpTracks")),
15  outputLabel(conf.getParameter<std::string>("outputLabel")) {
16  producesCollector.produces<reco::TrackCollection>(outputLabel);
17  producesCollector.produces<TrackingRecHitCollection>(outputLabel);
19 
23 }
24 
26 
28  newTracks_ = std::make_unique<reco::TrackCollection>();
29  newHits_ = std::make_unique<TrackingRecHitCollection>();
30  newTrackExtras_ = std::make_unique<reco::TrackExtraCollection>();
31 
32  // this is needed to get the ProductId of the TrackExtra and TrackingRecHit and Track collections
33  rNewTracks = const_cast<edm::Event&>(e).getRefBeforePut<reco::TrackCollection>(outputLabel);
34  rNewTrackExtras = const_cast<edm::Event&>(e).getRefBeforePut<reco::TrackExtraCollection>(outputLabel);
35  rNewHits = const_cast<edm::Event&>(e).getRefBeforePut<TrackingRecHitCollection>(outputLabel);
36 }
37 
40 }
41 
43  edm::EventSetup const& iSetup,
44  edm::StreamID const&) {
45  if (e.bunchCrossing() == 0) {
47  }
48 }
49 
54 }
55 
56 template <class T>
61  e.getByLabel(label, tracks);
62  e.getByLabel(label, hits);
63  e.getByLabel(label, trackExtras);
64 
65  if (!tracks.isValid()) {
66  throw cms::Exception("RecoTrackAccumulator")
67  << "Failed to find track collections with inputTag " << label << std::endl;
68  }
69  if (!hits.isValid()) {
70  throw cms::Exception("RecoTrackAccumulator")
71  << "Failed to find hit collections with inputTag " << label << std::endl;
72  }
73  if (!trackExtras.isValid()) {
74  throw cms::Exception("RecoTrackAccumulator")
75  << "Failed to find trackExtra collections with inputTag " << label << std::endl;
76  }
77 
78  for (size_t t = 0; t < tracks->size(); ++t) {
79  const reco::Track& track = (*tracks)[t];
80  newTracks_->push_back(track);
81  // track extras:
82  auto const& extra = trackExtras->at(track.extra().key());
83  newTrackExtras_->emplace_back(extra.outerPosition(),
84  extra.outerMomentum(),
85  extra.outerOk(),
86  extra.innerPosition(),
87  extra.innerMomentum(),
88  extra.innerOk(),
89  extra.outerStateCovariance(),
90  extra.outerDetId(),
91  extra.innerStateCovariance(),
92  extra.innerDetId(),
93  extra.seedDirection(),
94  //If TrajectorySeeds are needed, then their list must be gotten from the
95  // secondary event directly and looked up similarly to TrackExtras.
96  //We can't use a default constructed RefToBase due to a bug in RefToBase
97  // which causes an seg fault when calling isAvailable on a default constructed one.
99  newTracks_->back().setExtra(reco::TrackExtraRef(rNewTrackExtras, newTracks_->size() - 1));
100  // rechits:
101  // note: extra.recHit(i) does not work for pileup events
102  // probably the Ref does not know its product id applies on a pileup event
103  auto& newExtra = newTrackExtras_->back();
104  auto const firstTrackIndex = newHits_->size();
105  for (unsigned int i = 0; i < extra.recHitsSize(); i++) {
106  newHits_->push_back((*hits)[extra.recHit(i).key()]);
107  }
108  newExtra.setHits(rNewHits, firstTrackIndex, newHits_->size() - firstTrackIndex);
109  newExtra.setTrajParams(extra.trajParams(), extra.chi2sX5());
110  assert(newExtra.recHitsSize() == newExtra.trajParams().size());
111  }
112 }
113 
edm::StreamID
Definition: StreamID.h:30
PDWG_EXOHSCP_cff.tracks
tracks
Definition: PDWG_EXOHSCP_cff.py:28
mps_fire.i
i
Definition: mps_fire.py:428
HLT_FULL_cff.track
track
Definition: HLT_FULL_cff.py:11713
MessageLogger.h
RecoTrackAccumulator::pileUpTracksTag
edm::InputTag pileUpTracksTag
Definition: RecoTrackAccumulator.h:56
RecoTrackAccumulator::accumulateEvent
void accumulateEvent(const T &e, edm::EventSetup const &c, const edm::InputTag &label)
Definition: RecoTrackAccumulator.cc:57
hfClusterShapes_cfi.hits
hits
Definition: hfClusterShapes_cfi.py:5
RecoTrackAccumulator::rNewTrackExtras
reco::TrackExtraRefProd rNewTrackExtras
Definition: RecoTrackAccumulator.h:52
edm
HLT enums.
Definition: AlignableModifier.h:19
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89287
cms::cuda::assert
assert(be >=bs)
recoTrackAccumulator_cfi.outputLabel
outputLabel
Definition: recoTrackAccumulator_cfi.py:13
PileUpEventPrincipal
Definition: PileUpEventPrincipal.h:19
RecoTrackAccumulator::accumulate
void accumulate(edm::Event const &e, edm::EventSetup const &c) override
Definition: RecoTrackAccumulator.cc:38
edm::Handle< reco::TrackCollection >
edm::Ref
Definition: AssociativeIterator.h:58
Track.h
RecoTrackAccumulator::initializeEvent
void initializeEvent(edm::Event const &e, edm::EventSetup const &c) override
Definition: RecoTrackAccumulator.cc:27
reco::Track
Definition: Track.h:27
reco::TrackExtraCollection
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
Definition: TrackExtraFwd.h:10
RecoTrackAccumulator::newTracks_
std::unique_ptr< reco::TrackCollection > newTracks_
Definition: RecoTrackAccumulator.h:47
edm::ConsumesCollector::consumes
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
Definition: ConsumesCollector.h:55
RecoTrackAccumulator.h
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
RecoTrackAccumulator::rNewTracks
reco::TrackRefProd rNewTracks
Definition: RecoTrackAccumulator.h:51
edm::ParameterSet
Definition: ParameterSet.h:47
RecoTrackAccumulator::newHits_
std::unique_ptr< TrackingRecHitCollection > newHits_
Definition: RecoTrackAccumulator.h:49
edm::ProducesCollector::produces
ProductRegistryHelper::BranchAliasSetterT< ProductType > produces()
Definition: ProducesCollector.h:52
edm::EventSetup
Definition: EventSetup.h:57
RecoTrackAccumulator::finalizeEvent
void finalizeEvent(edm::Event &e, edm::EventSetup const &c) override
Definition: RecoTrackAccumulator.cc:50
ValueMap.h
RecoTrackAccumulator::rNewHits
TrackingRecHitRefProd rNewHits
Definition: RecoTrackAccumulator.h:53
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
edm::ProducesCollector
Definition: ProducesCollector.h:43
RecoTrackAccumulator::newTrackExtras_
std::unique_ptr< reco::TrackExtraCollection > newTrackExtras_
Definition: RecoTrackAccumulator.h:48
RecoTrackAccumulator::signalTracksTag
edm::InputTag signalTracksTag
Definition: RecoTrackAccumulator.h:55
T
long double T
Definition: Basic3DVectorLD.h:48
Exception
Definition: hltDiff.cc:246
edm::RefToBase< TrajectorySeed >
RecoTrackAccumulator
Definition: RecoTrackAccumulator.h:33
RecoTrackAccumulator::RecoTrackAccumulator
RecoTrackAccumulator(const edm::ParameterSet &conf, edm::ProducesCollector, edm::ConsumesCollector &iC)
Definition: RecoTrackAccumulator.cc:10
ConsumesCollector.h
DigiAccumulatorMixModFactory.h
DEFINE_DIGI_ACCUMULATOR
#define DEFINE_DIGI_ACCUMULATOR(type)
Definition: DigiAccumulatorMixModFactory.h:31
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
edm::Event
Definition: Event.h:73
submitPVValidationJobs.t
string t
Definition: submitPVValidationJobs.py:644
edm::InputTag
Definition: InputTag.h:15
reco::TrackCollection
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
edm::ConsumesCollector
Definition: ConsumesCollector.h:45
label
const char * label
Definition: PFTauDecayModeTools.cc:11
RecoTrackAccumulator::~RecoTrackAccumulator
~RecoTrackAccumulator() override
Definition: RecoTrackAccumulator.cc:25
edm::OwnVector< TrackingRecHit >
RecoTrackAccumulator::outputLabel
std::string outputLabel
Definition: RecoTrackAccumulator.h:58
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37