00001
00002
00003
00004
00005
00006
00007 #include <map>
00008 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00009 #include "FWCore/Utilities/interface/EDMException.h"
00010 #include "FWCore/Framework/interface/ConstProductRegistry.h"
00011 #include "FWCore/ServiceRegistry/interface/Service.h"
00012 #include "DataFormats/Common/interface/Handle.h"
00013 #include "DataFormats/Provenance/interface/Provenance.h"
00014 #include "DataFormats/Provenance/interface/BranchDescription.h"
00015
00016
00017 #include "DataMixingMuonWorker.h"
00018
00019
00020 using namespace std;
00021
00022 namespace edm
00023 {
00024
00025
00026
00027 DataMixingMuonWorker::DataMixingMuonWorker() { sel_=0;}
00028
00029
00030 DataMixingMuonWorker::DataMixingMuonWorker(const edm::ParameterSet& ps) :
00031 label_(ps.getParameter<std::string>("Label"))
00032
00033 {
00034
00035
00036
00037
00038
00039 if (label_.size()>0){
00040 sel_=new Selector( ModuleLabelSelector(label_));
00041 }
00042 else {
00043 sel_=new Selector( MatchAllSelector());
00044 }
00045
00046
00047
00048 DTDigiTag_ = ps.getParameter<edm::InputTag>("DTDigiTag");
00049 DTdigi_collection_ = ps.getParameter<edm::InputTag>("DTdigiCollection");
00050 RPCDigiTag_ = ps.getParameter<edm::InputTag>("RPCDigiTag");
00051 RPCdigi_collection_ = ps.getParameter<edm::InputTag>("RPCdigiCollection");
00052
00053 CSCDigiTag_ = ps.getParameter<edm::InputTag>("CSCDigiTag");
00054 CSCstripdigi_collection_ = ps.getParameter<edm::InputTag>("CSCstripdigiCollection");
00055 CSCwiredigi_collection_ = ps.getParameter<edm::InputTag>("CSCwiredigiCollection");
00056
00057
00058 DTDigiCollectionDM_ = ps.getParameter<std::string>("DTDigiCollectionDM");
00059 RPCDigiCollectionDM_ = ps.getParameter<std::string>("RPCDigiCollectionDM");
00060 CSCStripDigiCollectionDM_ = ps.getParameter<std::string>("CSCStripDigiCollectionDM");
00061 CSCWireDigiCollectionDM_ = ps.getParameter<std::string>("CSCWireDigiCollectionDM");
00062
00063
00064 }
00065
00066
00067
00068 DataMixingMuonWorker::~DataMixingMuonWorker() {
00069 delete sel_;
00070 sel_=0;
00071 }
00072
00073 void DataMixingMuonWorker::addMuonSignals(const edm::Event &e) {
00074
00075
00076 LogDebug("DataMixingMuonWorker")<<"===============> adding MC signals for "<<e.id();
00077
00078
00079
00080
00081 OurDTDigis_ = new DTDigiCollection();
00082 Handle<DTDigiCollection> pDTdigis;
00083
00084
00085 if( e.getByLabel(DTDigiTag_.label(), pDTdigis) ) {
00086
00087
00088
00089
00090 const DTDigiCollection* DTdigis = pDTdigis.product();
00091 DTDigiCollection::DigiRangeIterator DLayerIt;
00092 for (DLayerIt = DTdigis->begin(); DLayerIt != DTdigis->end(); ++DLayerIt) {
00093
00094 const DTLayerId& layerId = (*DLayerIt).first;
00095
00096
00097 const DTDigiCollection::Range& range = (*DLayerIt).second;
00098
00099 OurDTDigis_->put(range, layerId);
00100 }
00101 }
00102
00103
00104
00105 OurRPCDigis_ = new RPCDigiCollection();
00106
00107
00108 Handle<RPCDigiCollection> pRPCdigis;
00109
00110 if( e.getByLabel(RPCDigiTag_.label(), pRPCdigis) ) {
00111
00112
00113
00114 const RPCDigiCollection* RPCdigis = pRPCdigis.product();
00115 RPCDigiCollection::DigiRangeIterator RLayerIt;
00116 for (RLayerIt = RPCdigis->begin(); RLayerIt != RPCdigis->end(); ++RLayerIt) {
00117
00118 const RPCDetId& layerId = (*RLayerIt).first;
00119
00120
00121 const RPCDigiCollection::Range& range = (*RLayerIt).second;
00122
00123 OurRPCDigis_->put(range, layerId);
00124
00125 }
00126 }
00127
00128
00129
00130 OurCSCStripDigis_ = new CSCStripDigiCollection();
00131
00132
00133 Handle<CSCStripDigiCollection> pCSCStripdigis;
00134
00135 if( e.getByLabel(CSCDigiTag_.label(),CSCstripdigi_collection_.label(), pCSCStripdigis) ) {
00136
00137
00138
00139
00140
00141
00142
00143 const CSCStripDigiCollection* CSCStripdigis = pCSCStripdigis.product();
00144 CSCStripDigiCollection::DigiRangeIterator CSLayerIt;
00145 for (CSLayerIt = CSCStripdigis->begin(); CSLayerIt != CSCStripdigis->end(); ++CSLayerIt) {
00146
00147 const CSCDetId& layerId = (*CSLayerIt).first;
00148
00149
00150 const CSCStripDigiCollection::Range& range = (*CSLayerIt).second;
00151
00152 OurCSCStripDigis_->put(range, layerId);
00153 }
00154 }
00155
00156
00157
00158 OurCSCWireDigis_ = new CSCWireDigiCollection();
00159
00160
00161 Handle<CSCWireDigiCollection> pCSCWiredigis;
00162
00163 if( e.getByLabel(CSCDigiTag_.label(),CSCwiredigi_collection_.label(), pCSCWiredigis) ) {
00164
00165
00166
00167
00168
00169
00170
00171 const CSCWireDigiCollection* CSCWiredigis = pCSCWiredigis.product();
00172 CSCWireDigiCollection::DigiRangeIterator CWLayerIt;
00173 for (CWLayerIt = CSCWiredigis->begin(); CWLayerIt != CSCWiredigis->end(); ++CWLayerIt) {
00174
00175 const CSCDetId& layerId = (*CWLayerIt).first;
00176
00177
00178 const CSCWireDigiCollection::Range& range = (*CWLayerIt).second;
00179
00180 OurCSCWireDigis_->put(range, layerId);
00181
00182 }
00183 }
00184
00185
00186 }
00187
00188 void DataMixingMuonWorker::addMuonPileups(const int bcr, Event *e, unsigned int eventNr) {
00189
00190 LogDebug("DataMixingMuonWorker") <<"\n===============> adding pileups from event "<<e->id()<<" for bunchcrossing "<<bcr;
00191
00192
00193
00194
00195
00196
00197 Handle<DTDigiCollection> pDTdigis;
00198
00199
00200 if( e->getByLabel(DTDigiTag_.label(), pDTdigis) ) {
00201
00202
00203
00204
00205
00206
00207 const DTDigiCollection* DTdigis = pDTdigis.product();
00208 DTDigiCollection::DigiRangeIterator DLayerIt;
00209 for (DLayerIt = DTdigis->begin(); DLayerIt != DTdigis->end(); ++DLayerIt) {
00210
00211 const DTLayerId& layerId = (*DLayerIt).first;
00212
00213
00214 const DTDigiCollection::Range& range = (*DLayerIt).second;
00215
00216 OurDTDigis_->put(range, layerId);
00217
00218 }
00219 }
00220
00221
00222
00223
00224 Handle<RPCDigiCollection> pRPCdigis;
00225
00226 if( e->getByLabel(RPCDigiTag_.label(), pRPCdigis) ) {
00227
00228
00229
00230
00231
00232
00233 const RPCDigiCollection* RPCdigis = pRPCdigis.product();
00234 RPCDigiCollection::DigiRangeIterator RLayerIt;
00235 for (RLayerIt = RPCdigis->begin(); RLayerIt != RPCdigis->end(); ++RLayerIt) {
00236
00237 const RPCDetId& layerId = (*RLayerIt).first;
00238
00239
00240 const RPCDigiCollection::Range& range = (*RLayerIt).second;
00241
00242 OurRPCDigis_->put(range, layerId);
00243
00244 }
00245 }
00246
00247
00248
00249
00250 Handle<CSCStripDigiCollection> pCSCStripdigis;
00251
00252 if( e->getByLabel(CSCDigiTag_.label(),CSCstripdigi_collection_.label(), pCSCStripdigis) ) {
00253
00254
00255
00256
00257
00258
00259 const CSCStripDigiCollection* CSCStripdigis = pCSCStripdigis.product();
00260 CSCStripDigiCollection::DigiRangeIterator CSLayerIt;
00261 for (CSLayerIt = CSCStripdigis->begin(); CSLayerIt != CSCStripdigis->end(); ++CSLayerIt) {
00262
00263 const CSCDetId& layerId = (*CSLayerIt).first;
00264
00265
00266 const CSCStripDigiCollection::Range& range = (*CSLayerIt).second;
00267
00268 OurCSCStripDigis_->put(range, layerId);
00269
00270 }
00271 }
00272
00273
00274
00275
00276 Handle<CSCWireDigiCollection> pCSCWiredigis;
00277
00278 if( e->getByLabel(CSCDigiTag_.label(),CSCwiredigi_collection_.label(), pCSCWiredigis) ) {
00279
00280
00281
00282 const CSCWireDigiCollection* CSCWiredigis = pCSCWiredigis.product();
00283 CSCWireDigiCollection::DigiRangeIterator CWLayerIt;
00284 for (CWLayerIt = CSCWiredigis->begin(); CWLayerIt != CSCWiredigis->end(); ++CWLayerIt) {
00285
00286 const CSCDetId& layerId = (*CWLayerIt).first;
00287
00288
00289 const CSCWireDigiCollection::Range& range = (*CWLayerIt).second;
00290
00291 OurCSCWireDigis_->put(range, layerId);
00292
00293 }
00294 }
00295 }
00296
00297 void DataMixingMuonWorker::putMuon(edm::Event &e) {
00298
00299
00300 std::auto_ptr< DTDigiCollection > DTDigiMerge( new DTDigiCollection );
00301 std::auto_ptr< RPCDigiCollection > RPCDigiMerge( new RPCDigiCollection );
00302 std::auto_ptr< CSCStripDigiCollection > CSCStripDigiMerge( new CSCStripDigiCollection );
00303 std::auto_ptr< CSCWireDigiCollection > CSCWireDigiMerge( new CSCWireDigiCollection );
00304
00305
00306
00307 DTDigiCollection::DigiRangeIterator DLayerIt;
00308 for (DLayerIt = OurDTDigis_->begin(); DLayerIt != OurDTDigis_->end(); ++DLayerIt) {
00309
00310 const DTLayerId& layerId = (*DLayerIt).first;
00311
00312
00313 const DTDigiCollection::Range& range = (*DLayerIt).second;
00314
00315 DTDigiMerge->put(range, layerId);
00316
00317 }
00318
00319
00320
00321 RPCDigiCollection::DigiRangeIterator RLayerIt;
00322 for (RLayerIt = OurRPCDigis_->begin(); RLayerIt != OurRPCDigis_->end(); ++RLayerIt) {
00323
00324 const RPCDetId& layerId = (*RLayerIt).first;
00325
00326
00327 const RPCDigiCollection::Range& range = (*RLayerIt).second;
00328
00329 RPCDigiMerge->put(range, layerId);
00330
00331 }
00332
00333
00334 CSCStripDigiCollection::DigiRangeIterator CSLayerIt;
00335 for (CSLayerIt = OurCSCStripDigis_->begin(); CSLayerIt != OurCSCStripDigis_->end(); ++CSLayerIt) {
00336
00337 const CSCDetId& layerId = (*CSLayerIt).first;
00338
00339
00340 const CSCStripDigiCollection::Range& range = (*CSLayerIt).second;
00341
00342 CSCStripDigiMerge->put(range, layerId);
00343
00344 }
00345
00346
00347 CSCWireDigiCollection::DigiRangeIterator CWLayerIt;
00348 for (CWLayerIt = OurCSCWireDigis_->begin(); CWLayerIt != OurCSCWireDigis_->end(); ++CWLayerIt) {
00349
00350 const CSCDetId& layerId = (*CWLayerIt).first;
00351
00352
00353 const CSCWireDigiCollection::Range& range = (*CWLayerIt).second;
00354
00355 CSCWireDigiMerge->put(range, layerId);
00356
00357 }
00358
00359
00360
00361
00362
00363
00364
00365
00366 e.put( DTDigiMerge, DTDigiCollectionDM_ );
00367 e.put( RPCDigiMerge, RPCDigiCollectionDM_ );
00368 e.put( CSCStripDigiMerge, CSCStripDigiCollectionDM_ );
00369 e.put( CSCWireDigiMerge, CSCWireDigiCollectionDM_ );
00370
00371
00372 delete OurDTDigis_;
00373 delete OurRPCDigis_;
00374 delete OurCSCStripDigis_;
00375 delete OurCSCWireDigis_;
00376
00377
00378 }
00379
00380 }