CMS 3D CMS Logo

DAFTrackProducer.cc
Go to the documentation of this file.
1 #include <memory>
2 
16 
19 
20 
22  KfTrackProducerBase(iConfig.getParameter<bool>("TrajectoryInEvent"),false),
23  theAlgo(iConfig)
24 {
25  setConf(iConfig);
26  setSrc( consumes<TrackCandidateCollection>(iConfig.getParameter<edm::InputTag>( "src" )),
27  consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>( "beamSpot" )),
28  consumes<MeasurementTrackerEvent>(iConfig.getParameter<edm::InputTag>( "MeasurementTrackerEvent") ));
29  srcTT_ = consumes<TrajTrackAssociationCollection>(iConfig.getParameter<edm::InputTag>( "src" ));
30  setAlias( iConfig.getParameter<std::string>( "@module_label" ) );
31 
32  //register your products
33  produces<reco::TrackCollection>().setBranchAlias( alias_ + "Tracks" );
34  produces<reco::TrackExtraCollection>().setBranchAlias( alias_ + "TrackExtras" );
35  produces<TrackingRecHitCollection>().setBranchAlias( alias_ + "RecHits" );
36  produces<std::vector<Trajectory> >();
37  produces<TrajTrackAssociationCollection>();
38  produces<TrajAnnealingCollection>().setBranchAlias( alias_ + "TrajectoryAnnealing" );
39  produces<reco::TrackCollection>("beforeDAF").setBranchAlias( alias_ + "TracksBeforeDAF" );
40  produces<reco::TrackExtraCollection>("beforeDAF").setBranchAlias( alias_ + "TrackExtrasBeforeDAF" );
41  produces<reco::TrackCollection>("afterDAF").setBranchAlias( alias_ + "TracksAfterDAF" );
42  produces<reco::TrackExtraCollection>("afterDAF").setBranchAlias( alias_ + "TrackExtrasAfterDAF" );
43 
44  TrajAnnSaving_ = iConfig.getParameter<bool>("TrajAnnealingSaving");
45 }
46 
47 
49 {
50  edm::LogInfo("DAFTrackProducer") << "Analyzing event number: " << theEvent.id() << "\n";
51 
52  //empty output collections
53  std::unique_ptr<TrackingRecHitCollection> outputRHColl (new TrackingRecHitCollection);
54  std::unique_ptr<reco::TrackCollection> outputTColl(new reco::TrackCollection);
55  std::unique_ptr<reco::TrackExtraCollection> outputTEColl(new reco::TrackExtraCollection);
56  std::unique_ptr<std::vector<Trajectory> > outputTrajectoryColl(new std::vector<Trajectory>);
57  std::unique_ptr<TrajAnnealingCollection> outputTrajAnnColl(new TrajAnnealingCollection);
58  std::unique_ptr<std::vector<int> > outputIndecesInputColl(new std::vector<int>);
59 
60 
61  //new tracks collections (changes before and after DAF)
62  std::unique_ptr<TrackingRecHitCollection> outputRHCollBeforeDAF (new TrackingRecHitCollection);
63  std::unique_ptr<reco::TrackCollection> outputTCollBeforeDAF(new reco::TrackCollection);
64  std::unique_ptr<reco::TrackExtraCollection> outputTECollBeforeDAF(new reco::TrackExtraCollection);
65  std::unique_ptr<std::vector<Trajectory> > outputTrajectoryCollBeforeDAF(new std::vector<Trajectory>);
66  std::unique_ptr<std::vector<int> > outputIndecesInputCollBeforeDAF(new std::vector<int>);
67  //----
68  std::unique_ptr<TrackingRecHitCollection> outputRHCollAfterDAF (new TrackingRecHitCollection);
69  std::unique_ptr<reco::TrackCollection> outputTCollAfterDAF(new reco::TrackCollection);
70  std::unique_ptr<reco::TrackExtraCollection> outputTECollAfterDAF(new reco::TrackExtraCollection);
71  std::unique_ptr<std::vector<Trajectory> > outputTrajectoryCollAfterDAF(new std::vector<Trajectory>);
72  std::unique_ptr<std::vector<int> > outputIndecesInputCollAfterDAF(new std::vector<int>);
73 
74  //declare and get stuff to be retrieved from ES
78  edm::ESHandle<Propagator> thePropagator;
81  getFromES(setup,theG,theMF,theFitter,thePropagator,theMeasTk,theBuilder);
82 
84  setup.get<TrackerTopologyRcd>().get(httopo);
85 
86  //get additional es_modules needed by the DAF
87  edm::ESHandle<MultiRecHitCollector> measurementCollectorHandle;
88  std::string measurementCollectorName = getConf().getParameter<std::string>("MeasurementCollector");
89  setup.get<MultiRecHitRecord>().get(measurementCollectorName, measurementCollectorHandle);
91  std::string updatorName = getConf().getParameter<std::string>("UpdatorName");
92  setup.get<MultiRecHitRecord>().get(updatorName, updatorHandle);
93 
94  //get MeasurementTrackerEvent
96  theEvent.getByToken(mteSrc_, mte);
97 
98 
99  //declare and get TrackCollection
100  AlgoProductCollection algoResults;
101  reco::BeamSpot bs;
102  TrajAnnealingCollection trajannResults;
103 
104  //declare and get new tracks collections
105  AlgoProductCollection algoResultsBeforeDAF;
106  AlgoProductCollection algoResultsAfterDAF;
107  try{
108 
109  edm::Handle<TrajTrackAssociationCollection> trajTrackAssociationHandle;
110  getFromEvt(theEvent,trajTrackAssociationHandle,bs);
111 
112 
113  //run the algorithm
114  LogDebug("DAFTrackProducer") << "run the DAF algorithm" << "\n";
115  theAlgo.runWithCandidate(theG.product(), theMF.product(),
116  *trajTrackAssociationHandle,
117  &*mte,
118  theFitter.product(), theBuilder.product(),
119  measurementCollectorHandle.product(), updatorHandle.product(), bs,
120  algoResults, trajannResults, TrajAnnSaving_,
121  algoResultsBeforeDAF, algoResultsAfterDAF);
122 
123  } catch (cms::Exception &e){
124  edm::LogInfo("DAFTrackProducer") << "cms::Exception caught!!!" << "\n" << e << "\n";
125  throw;
126  }
127 
128  //put everything in the event
129  putInEvt(theEvent, thePropagator.product(),theMeasTk.product(),
130  outputRHColl, outputTColl, outputTEColl,
131  outputTrajectoryColl, outputIndecesInputColl, algoResults, theBuilder.product(), httopo.product());
132  putInEvtTrajAnn(theEvent, trajannResults, outputTrajAnnColl);
133 
134  //put in theEvent before and after DAF tracks collections
135  putInEvt(theEvent, thePropagator.product(),theMeasTk.product(),
136  outputRHCollBeforeDAF, outputTCollBeforeDAF, outputTECollBeforeDAF,
137  outputTrajectoryCollBeforeDAF, outputIndecesInputCollBeforeDAF, algoResultsBeforeDAF, theBuilder.product(), httopo.product(), 1);
138  putInEvt(theEvent, thePropagator.product(),theMeasTk.product(),
139  outputRHCollAfterDAF, outputTCollAfterDAF, outputTECollAfterDAF,
140  outputTrajectoryCollAfterDAF, outputIndecesInputCollAfterDAF, algoResultsAfterDAF, theBuilder.product(), httopo.product(), 2);
141 
142  LogDebug("DAFTrackProducer") << "end the DAF algorithm." << "\n";
143 }
144 //----------------------------------------------------------------------------------------------------------//
146 {
147 
148  //get the TrajTrackMap from the event
149  //WARNING: src has always to be redefined in cfg file
150  theEvent.getByToken(srcTT_,trajTrackAssociationHandle);
151 
152  //get the BeamSpot
153  edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
154  theEvent.getByToken(bsSrc_,recoBeamSpotHandle);
155  bs = *recoBeamSpotHandle;
156 
157 }
158 //----------------------------------------------------------------------------------------------------------//
160  std::unique_ptr<TrajAnnealingCollection>& outputTrajAnnColl){
161  const int size = trajannResults.size();
162  outputTrajAnnColl->reserve(size);
163 
164  for(unsigned int i = 0; i < trajannResults.size() ; i++){
165  outputTrajAnnColl->push_back(trajannResults[i]);
166  }
167 
168  theEvent.put( std::move(outputTrajAnnColl) );
169 }
#define LogDebug(id)
size
Write out results.
T getParameter(std::string const &) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:137
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:579
void runWithCandidate(const TrackingGeometry *, const MagneticField *, const TrajTrackAssociationCollection &, const MeasurementTrackerEvent *measTk, const TrajectoryFitter *, const TransientTrackingRecHitBuilder *, const MultiRecHitCollector *measurementTracker, const SiTrackerMultiRecHitUpdator *, const reco::BeamSpot &, AlgoProductCollection &, TrajAnnealingCollection &, bool, AlgoProductCollection &, AlgoProductCollection &) const
Run the Final Fit taking TrackCandidates as input.
std::vector< TrajAnnealing > TrajAnnealingCollection
Definition: TrajAnnealing.h:38
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
virtual void putInEvt(edm::Event &, const Propagator *prop, const MeasurementTracker *measTk, std::unique_ptr< TrackingRecHitCollection > &, std::unique_ptr< reco::TrackCollection > &, std::unique_ptr< reco::TrackExtraCollection > &, std::unique_ptr< std::vector< Trajectory > > &, std::unique_ptr< std::vector< int > > &, AlgoProductCollection &, TransientTrackingRecHitBuilder const *, const TrackerTopology *ttopo, int BeforeOrAfter=0)
Put produced collections in the event.
def setup(process, global_tag, zero_tesla=False)
Definition: GeneralSetup.py:2
DAFTrackProducerAlgorithm theAlgo
void setAlias(std::string alias)
set the aliases of produced collections
void setConf(const edm::ParameterSet &conf)
Set parameter set.
edm::EDGetToken srcTT_
void getFromEvt(edm::Event &, edm::Handle< TrajTrackAssociationCollection > &, reco::BeamSpot &)
edm::EDGetTokenT< MeasurementTrackerEvent > mteSrc_
void setSrc(const edm::EDGetToken &src, const edm::EDGetTokenT< reco::BeamSpot > &bsSrc, const edm::EDGetTokenT< MeasurementTrackerEvent > &mteSrc)
set label of source collection
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
Definition: TrackExtraFwd.h:11
std::vector< AlgoProduct > AlgoProductCollection
edm::EDGetTokenT< reco::BeamSpot > bsSrc_
edm::EventID id() const
Definition: EventBase.h:60
T get() const
Definition: EventSetup.h:68
DAFTrackProducer(const edm::ParameterSet &iConfig)
const edm::ParameterSet & getConf() const
T const * product() const
Definition: ESHandle.h:84
def move(src, dest)
Definition: eostools.py:511
void produce(edm::Event &, const edm::EventSetup &) override
Method where the procduction take place. To be implemented in concrete classes.
void putInEvtTrajAnn(edm::Event &theEvent, TrajAnnealingCollection &trajannResults, std::unique_ptr< TrajAnnealingCollection > &selTrajAnn)
virtual void getFromES(const edm::EventSetup &, edm::ESHandle< TrackerGeometry > &, edm::ESHandle< MagneticField > &, edm::ESHandle< TrajectoryFitter > &, edm::ESHandle< Propagator > &, edm::ESHandle< MeasurementTracker > &, edm::ESHandle< TransientTrackingRecHitBuilder > &)
Get needed services from the Event Setup.