CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
DataMixingTrackingParticleWorker.cc
Go to the documentation of this file.
1 // File: DataMixingTrackingParticleWorker.cc
2 // Description: see DataMixingTrackingParticleWorker.h
3 // Author: Mike Hildreth, University of Notre Dame
4 //
5 //--------------------------------------------
6 
7 #include <map>
8 #include <memory>
13 
17 //
18 //
20 
21 using namespace std;
22 
23 namespace edm
24 {
25 
26  // Virtual constructor
27 
28  DataMixingTrackingParticleWorker::DataMixingTrackingParticleWorker() { }
29 
30  // Constructor
31  DataMixingTrackingParticleWorker::DataMixingTrackingParticleWorker(const edm::ParameterSet& ps, edm::ConsumesCollector && iC)
32  {
33 
34  // get the subdetector names
35  // this->getSubdetectorNames(); //something like this may be useful to check what we are supposed to do...
36 
37  // declare the products to produce
38 
39  TrackingParticleLabelSig_ = ps.getParameter<edm::InputTag>("TrackingParticleLabelSig");
40 
41  TrackingParticlePileInputTag_ = ps.getParameter<edm::InputTag>("TrackingParticlePileInputTag");
42 
43  TrackingParticleCollectionDM_ = ps.getParameter<std::string>("TrackingParticleCollectionDM");
44 
45  TrackSigToken_ = iC.consumes<std::vector<TrackingParticle> >(TrackingParticleLabelSig_);
46  TrackPileToken_ = iC.consumes<std::vector<TrackingParticle> >(TrackingParticlePileInputTag_);
47 
48  VtxSigToken_ = iC.consumes<std::vector<TrackingVertex> >(TrackingParticleLabelSig_);
49  VtxPileToken_ = iC.consumes<std::vector<TrackingVertex> >(TrackingParticlePileInputTag_);
50 
51  }
52 
53 
54  // Virtual destructor needed.
55  DataMixingTrackingParticleWorker::~DataMixingTrackingParticleWorker() {
56  }
57 
58 
59 
60  void DataMixingTrackingParticleWorker::addTrackingParticleSignals(const edm::Event &e) {
61 
62  // Create new track/vertex lists; Rely on the fact that addSignals gets called first...
63 
64  NewTrackList_ = std::auto_ptr<std::vector<TrackingParticle>>(new std::vector<TrackingParticle>());
65  NewVertexList_ = std::auto_ptr<std::vector<TrackingVertex>>(new std::vector<TrackingVertex>());
66 
67  // grab tracks, store copy
68 
69  //edm::Handle<std::vector<TrackingParticle>> generalTrkHandle;
70  //e.getByLabel("generalTracks", generalTrkHandle);
72  e.getByToken(TrackSigToken_, tracks);
73 
74  if (tracks.isValid()) {
75  for (std::vector<TrackingParticle>::const_iterator track = tracks->begin(); track != tracks->end(); ++track) {
76  NewTrackList_->push_back(*track);
77  }
78 
79  }
80  // grab Vertices, store copy
81 
82  //edm::Handle<std::vector<TrackingVertex>> generalTrkHandle;
83  //e.getByLabel("generalTracks", generalTrkHandle);
85  e.getByToken(VtxSigToken_, vtxs);
86 
87  if (vtxs.isValid()) {
88  for (std::vector<TrackingVertex>::const_iterator vtx = vtxs->begin(); vtx != vtxs->end(); ++vtx) {
89  NewVertexList_->push_back(*vtx);
90  }
91 
92  }
93 
94  } // end of addTrackingParticleSignals
95 
96 
97 
98  void DataMixingTrackingParticleWorker::addTrackingParticlePileups(const int bcr, const EventPrincipal *ep, unsigned int eventNr,
99  ModuleCallingContext const* mcc) {
100 
101  LogDebug("DataMixingTrackingParticleWorker") <<"\n===============> adding pileups from event "<<ep->id()<<" for bunchcrossing "<<bcr;
102 
103 
104  std::shared_ptr<Wrapper<std::vector<TrackingParticle> > const> inputPTR =
105  getProductByTag<std::vector<TrackingParticle> >(*ep, TrackingParticlePileInputTag_, mcc);
106 
107  if(inputPTR ) {
108 
109  const std::vector<TrackingParticle> *tracks = const_cast< std::vector<TrackingParticle> * >(inputPTR->product());
110 
111  // grab tracks, store copy
112 
113 
114  for (std::vector<TrackingParticle>::const_iterator track = tracks->begin(); track != tracks->end(); ++track) {
115  NewTrackList_->push_back(*track);
116  }
117 
118  }
119 
120  std::shared_ptr<Wrapper<std::vector<TrackingVertex> > const> inputVPTR =
121  getProductByTag<std::vector<TrackingVertex> >(*ep, TrackingParticlePileInputTag_, mcc);
122 
123  if(inputVPTR ) {
124 
125  const std::vector<TrackingVertex> *vtxs = const_cast< std::vector<TrackingVertex> * >(inputVPTR->product());
126 
127  // grab vertices, store copy
128 
129  for (std::vector<TrackingVertex>::const_iterator vtx = vtxs->begin(); vtx != vtxs->end(); ++vtx) {
130  NewVertexList_->push_back(*vtx);
131  }
132 
133  }
134 
135  }
136 
137 
138 
139  void DataMixingTrackingParticleWorker::putTrackingParticle(edm::Event &e) {
140 
141  // collection of Tracks to put in the event
142 
143  // put the collection of digis in the event
144  LogInfo("DataMixingTrackingParticleWorker") << "total # Merged Tracks: " << NewTrackList_->size() ;
145 
146  // put collections
147 
148  e.put( NewTrackList_, TrackingParticleCollectionDM_ );
149  e.put( NewVertexList_, TrackingParticleCollectionDM_ );
150 
151  // clear local storage for this event
152  //NewTrackList_.clear();
153  //NewVertexList_.clear();
154  }
155 
156 } //edm
#define LogDebug(id)
T getParameter(std::string const &) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:457
EventID const & id() const
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:115
bool isValid() const
Definition: HandleBase.h:75
tuple tracks
Definition: testEve_cfg.py:39