CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
RPCSeedGenerator.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: RPCSeedGenerator
4 // Class: RPCSeedGenerator
5 //
13 //
14 // Original Author: Haiyun Teng
15 // Created: Wed Oct 29 17:24:36 CET 2008
16 //
17 //
18 
19 
20 // system include files
21 #include <memory>
22 // user include files
28 // special include files
34 #include <vector>
35 // Using other classes
42 // Geometry
47 
48 
49 // Framework
52 // Math
53 #include <cmath>
54 // C++
55 #include <vector>
56 
57 //
58 // constants, enums and typedefs
59 //
60 using namespace std;
61 using namespace edm;
62 
68 
69 #ifndef RPCLayerNumber
70 #define RPCLayerNumber 12
71 #endif
72 
73 #ifndef BarrelLayerNumber
74 #define BarrelLayerNumber 6
75 #endif
76 
77 #ifndef EachEndcapLayerNumber
78 #define EachEndcapLayerNumber 3
79 #endif
80 
81 //
82 // class decleration
83 //
84 
85 class RPCSeedFinder;
86 
88  public:
89  explicit RPCSeedGenerator(const edm::ParameterSet& iConfig);
91 
92  private:
93  virtual void beginJob() override;
94  virtual void beginRun(const edm::Run&, const edm::EventSetup& iSetup) override;
95  virtual void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) override;
96  virtual void endJob() override;
97 
98  // ----------member data ---------------------------
104  std::vector<weightedTrajectorySeed> candidateweightedSeeds;
105  std::vector<weightedTrajectorySeed> goodweightedSeeds;
108 };
109 
110 
111 //
112 // constants, enums and typedefs
113 //
114 
115 
116 //
117 // static data member definitions
118 //
119 
120 //
121 // constructors and destructor
122 //
124 {
125  //register your products
126  /* Examples
127  produces<ExampleData2>();
128 
129  //if do put with a label
130  produces<ExampleData2>("label");
131  */
132 
133  // Now do what ever other initialization is needed
134  // Configure other modules
135  Finder.configure(iConfig);
136  recHitFinder.configure(iConfig);
137  CosmicrecHitFinder.configure(iConfig);
138  LayerFinder.configure(iConfig);
139  Overlapper.configure(iConfig);
140  // Register the production
141  produces<TrajectorySeedCollection>("goodSeeds");
142  produces<TrajectorySeedCollection>("candidateSeeds");
143  // Get event data Tag
144  theRPCRecHits = iConfig.getParameter<edm::InputTag>("RPCRecHitsLabel");
145 
146 
147  // Get RPC recHits by MuonDetLayerMeasurements, while CSC and DT is set to false and with empty InputTag
148  edm::ConsumesCollector iC = consumesCollector() ;
149  muonMeasurements = new MuonDetLayerMeasurements (edm::InputTag(), edm::InputTag(), theRPCRecHits,iC, false, false, true);
150 
151 
152  cout << endl << "[RPCSeedGenerator] --> Constructor called" << endl;
153 }
154 
155 
157 {
158  // do anything here that needs to be done at desctruction time
159  // (e.g. close files, deallocate resources etc.)
160  cout << "[RPCSeedGenerator] --> Destructor called" << endl;
161 
162  if( muonMeasurements )
163  delete muonMeasurements;
164 }
165 
166 
167 //
168 // member functions
169 //
170 
171 // ------------ method called to produce the data ------------
172  void
174 {
175  using namespace edm;
176  goodweightedSeeds.clear();
177  candidateweightedSeeds.clear();
178 
179  // Create the pointer to the Seed container
180  auto_ptr<TrajectorySeedCollection> goodCollection(new TrajectorySeedCollection());
181  auto_ptr<TrajectorySeedCollection> candidateCollection(new TrajectorySeedCollection());
182 
183  // Muon Geometry - DT, CSC and RPC
185  iSetup.get<MuonRecoGeometryRecord>().get(muonLayers);
186 
187  // Get the RPC layers
188  vector<const DetLayer*> RPCBarrelLayers = muonLayers->barrelRPCLayers();
189  const DetLayer* RB4L = RPCBarrelLayers[5];
190  const DetLayer* RB3L = RPCBarrelLayers[4];
191  const DetLayer* RB22L = RPCBarrelLayers[3];
192  const DetLayer* RB21L = RPCBarrelLayers[2];
193  const DetLayer* RB12L = RPCBarrelLayers[1];
194  const DetLayer* RB11L = RPCBarrelLayers[0];
195  vector<const DetLayer*> RPCEndcapLayers = muonLayers->endcapRPCLayers();
196  const DetLayer* REM3L = RPCEndcapLayers[0];
197  const DetLayer* REM2L = RPCEndcapLayers[1];
198  const DetLayer* REM1L = RPCEndcapLayers[2];
199  const DetLayer* REP1L = RPCEndcapLayers[3];
200  const DetLayer* REP2L = RPCEndcapLayers[4];
201  const DetLayer* REP3L = RPCEndcapLayers[5];
202 
203 
204  // Dispatch RPC recHits to the corresponding DetLayer, 6 layers for barrel and 3 layers for each endcap
206  recHitsRPC[0] = muonMeasurements->recHits(RB11L, iEvent);
207  recHitsRPC[1] = muonMeasurements->recHits(RB12L, iEvent);
208  recHitsRPC[2] = muonMeasurements->recHits(RB21L, iEvent);
209  recHitsRPC[3] = muonMeasurements->recHits(RB22L, iEvent);
210  recHitsRPC[4] = muonMeasurements->recHits(RB3L, iEvent);
211  recHitsRPC[5] = muonMeasurements->recHits(RB4L, iEvent);
212  recHitsRPC[6] = muonMeasurements->recHits(REM1L, iEvent);
213  recHitsRPC[7] = muonMeasurements->recHits(REM2L, iEvent);
214  recHitsRPC[8] = muonMeasurements->recHits(REM3L, iEvent);
215  recHitsRPC[9] = muonMeasurements->recHits(REP1L, iEvent);
216  recHitsRPC[10] = muonMeasurements->recHits(REP2L, iEvent);
217  recHitsRPC[11] = muonMeasurements->recHits(REP3L, iEvent);
218 
219  // Print the size of recHits in each DetLayer
220  cout << "RB1in " << recHitsRPC[0].size() << " recHits" << endl;
221  cout << "RB1out " << recHitsRPC[1].size() << " recHits" << endl;
222  cout << "RB2in " << recHitsRPC[2].size() << " recHits" << endl;
223  cout << "RB2out " << recHitsRPC[3].size() << " recHits" << endl;
224  cout << "RB3 " << recHitsRPC[4].size() << " recHits" << endl;
225  cout << "RB4 " << recHitsRPC[5].size() << " recHits" << endl;
226  cout << "REM1 " << recHitsRPC[6].size() << " recHits" << endl;
227  cout << "REM2 " << recHitsRPC[7].size() << " recHits" << endl;
228  cout << "REM3 " << recHitsRPC[8].size() << " recHits" << endl;
229  cout << "REP1 " << recHitsRPC[9].size() << " recHits" << endl;
230  cout << "REP2 " << recHitsRPC[10].size() << " recHits" << endl;
231  cout << "REP3 " << recHitsRPC[11].size() << " recHits" << endl;
232 
233  // Set Input of RPCSeedFinder, PCSeedrecHitFinder, CosmicrecHitFinder, RPCSeedLayerFinder
234  recHitFinder.setInput(recHitsRPC);
235  CosmicrecHitFinder.setInput(recHitsRPC);
236  LayerFinder.setInput(recHitsRPC);
237 
238  // Set Magnetic Field EventSetup of RPCSeedFinder
239  Finder.setEventSetup(iSetup);
240 
241  // Start from filling layers to filling seeds
242  LayerFinder.fill();
243  Overlapper.run();
244 
245  // Save seeds to event
246  for(vector<weightedTrajectorySeed>::iterator weightedseed = goodweightedSeeds.begin(); weightedseed != goodweightedSeeds.end(); ++weightedseed)
247  goodCollection->push_back((*weightedseed).first);
248  for(vector<weightedTrajectorySeed>::iterator weightedseed = candidateweightedSeeds.begin(); weightedseed != candidateweightedSeeds.end(); ++weightedseed)
249  candidateCollection->push_back((*weightedseed).first);
250 
251  // Put the seed to event
252  iEvent.put(goodCollection, "goodSeeds");
253  iEvent.put(candidateCollection, "candidateSeeds");
254 
255  // Unset the input of RPCSeedFinder, PCSeedrecHitFinder, RPCSeedLayerFinder
256  recHitFinder.unsetInput();
257  CosmicrecHitFinder.unsetInput();
258  LayerFinder.unsetInput();
259 
260 }
261 
263 
264  // Set link and EventSetup of RPCSeedFinder, PCSeedrecHitFinder, CosmicrecHitFinder, RPCSeedLayerFinder
265  cout << "set link and Geometry EventSetup of RPCSeedFinder, RPCSeedrecHitFinder, RPCCosmicSeedrecHitFinder, RPCSeedLayerFinder and RPCSeedOverlapper" << endl;
266 
267  Finder.setOutput(&goodweightedSeeds, &candidateweightedSeeds);
268  recHitFinder.setOutput(&Finder);
269  CosmicrecHitFinder.setOutput(&Finder);
270  LayerFinder.setOutput(&recHitFinder, &CosmicrecHitFinder);
271 }
273  CosmicrecHitFinder.setEdge(iSetup);
274  Overlapper.setEventSetup(iSetup);
275  Overlapper.setIO(&goodweightedSeeds, &candidateweightedSeeds);
276 }
277 
279 
280  cout << "All jobs completed" << endl;
281 }
282 
283 //define this as a plug-in
T getParameter(std::string const &) const
edm::InputTag theRPCRecHits
RPCCosmicSeedrecHitFinder CosmicrecHitFinder
RPCSeedrecHitFinder recHitFinder
MuonTransientTrackingRecHit::MuonRecHitPointer MuonRecHitPointer
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
void beginJob()
Definition: Breakpoints.cc:15
virtual void beginRun(const edm::Run &, const edm::EventSetup &iSetup) override
int iEvent
Definition: GenABIO.cc:230
std::vector< TrajectorySeed > TrajectorySeedCollection
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:116
virtual void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override
virtual void endJob() override
MuonTransientTrackingRecHit::ConstMuonRecHitContainer ConstMuonRecHitContainer
virtual void beginJob() override
std::pair< TrajectorySeed, double > weightedTrajectorySeed
std::vector< ConstMuonRecHitPointer > ConstMuonRecHitContainer
MuonDetLayerMeasurements * muonMeasurements
#define RPCLayerNumber
RPCSeedPattern::weightedTrajectorySeed weightedTrajectorySeed
const T & get() const
Definition: EventSetup.h:55
RPCSeedOverlapper Overlapper
RPCSeedGenerator(const edm::ParameterSet &iConfig)
MuonTransientTrackingRecHit const * ConstMuonRecHitPointer
MuonTransientTrackingRecHit::MuonRecHitContainer MuonRecHitContainer
tuple cout
Definition: gather_cfg.py:121
RPCSeedFinder Finder
std::vector< weightedTrajectorySeed > goodweightedSeeds
std::vector< weightedTrajectorySeed > candidateweightedSeeds
std::vector< MuonRecHitPointer > MuonRecHitContainer
Definition: Run.h:41
RPCSeedLayerFinder LayerFinder
MuonTransientTrackingRecHit::ConstMuonRecHitPointer ConstMuonRecHitPointer