CMS 3D CMS Logo

CSCTriggerPrimitivesProducer.cc
Go to the documentation of this file.
1 //-------------------------------------------------
2 //
3 // Class: CSCTriggerPrimitivesProducer
4 //
5 // Description: Steering routine of the local Level-1 Cathode Strip Chamber
6 // trigger.
7 //
8 // Author List: S. Valuev, UCLA.
9 //
10 //
11 // Modifications:
12 //
13 //--------------------------------------------------
14 
17 
21 
25 
32 
33 // Configuration via EventSetup
36 
38  config_ = conf;
39 
40  // if false, parameters will be read in from DB using EventSetup mechanism
41  // else will use all parameters from the config file
42  debugParameters_ = conf.getParameter<bool>("debugParameters");
43 
44  wireDigiProducer_ = conf.getParameter<edm::InputTag>("CSCWireDigiProducer");
45  compDigiProducer_ = conf.getParameter<edm::InputTag>("CSCComparatorDigiProducer");
46  gemPadDigiProducer_ = conf.getParameter<edm::InputTag>("GEMPadDigiProducer");
47  gemPadDigiClusterProducer_ = conf.getParameter<edm::InputTag>("GEMPadDigiClusterProducer");
48 
49  checkBadChambers_ = conf.getParameter<bool>("checkBadChambers");
50 
51  writeOutAllCLCTs_ = conf.getParameter<bool>("writeOutAllCLCTs");
52  writeOutAllALCTs_ = conf.getParameter<bool>("writeOutAllALCTs");
53  savePreTriggers_ = conf.getParameter<bool>("savePreTriggers");
54 
55  // check whether you need to run the integrated local triggers
56  const edm::ParameterSet commonParam(conf.getParameter<edm::ParameterSet>("commonParam"));
57  runME11ILT_ = commonParam.getParameter<bool>("runME11ILT");
58  runME21ILT_ = commonParam.getParameter<bool>("runME21ILT");
59 
60  wire_token_ = consumes<CSCWireDigiCollection>(wireDigiProducer_);
61  comp_token_ = consumes<CSCComparatorDigiCollection>(compDigiProducer_);
62  gem_pad_token_ = consumes<GEMPadDigiCollection>(gemPadDigiProducer_);
63  gem_pad_cluster_token_ = consumes<GEMPadDigiClusterCollection>(gemPadDigiClusterProducer_);
64 
65  // register what this produces
66  produces<CSCALCTDigiCollection>();
67  produces<CSCCLCTDigiCollection>();
68  // for experimental simulation studies
69  if (writeOutAllCLCTs_) {
70  produces<CSCCLCTDigiCollection>("All");
71  }
72  if (writeOutAllALCTs_) {
73  produces<CSCALCTDigiCollection>("All");
74  }
75  produces<CSCCLCTPreTriggerCollection>();
76  if (savePreTriggers_) {
77  produces<CSCCLCTPreTriggerDigiCollection>();
78  produces<CSCALCTPreTriggerDigiCollection>();
79  }
80  produces<CSCCorrelatedLCTDigiCollection>();
81  produces<CSCCorrelatedLCTDigiCollection>("MPCSORTED");
83  produces<GEMCoPadDigiCollection>();
84 
85  // temporarily switch to a "one" module with a CSCTriggerPrimitivesBuilder data member
86  builder_ = std::make_unique<CSCTriggerPrimitivesBuilder>(config_);
87 }
88 
90 
92  // get the csc geometry
94  setup.get<MuonGeometryRecord>().get(h);
95  builder_->setCSCGeometry(&*h);
96 
97  // get the gem geometry if it's there
99  setup.get<MuonGeometryRecord>().get(h_gem);
100  if (h_gem.isValid()) {
101  builder_->setGEMGeometry(&*h_gem);
102  } else {
103  edm::LogInfo("CSCTriggerPrimitivesProducer|NoGEMGeometry")
104  << "+++ Info: GEM geometry is unavailable. Running CSC-only trigger algorithm. +++\n";
105  }
106 
107  // Find conditions data for bad chambers.
108  edm::ESHandle<CSCBadChambers> pBadChambers;
109  setup.get<CSCBadChambersRcd>().get(pBadChambers);
110 
111  // If !debugParameters then get config parameters using EventSetup mechanism.
112  // This must be done in produce() for every event and not in beginJob()
113  // (see mail from Jim Brooke sent to hn-cms-L1TrigEmulator on July 30, 2007).
114  if (!debugParameters_) {
116  setup.get<CSCDBL1TPParametersRcd>().get(conf);
117  if (conf.product() == nullptr) {
118  edm::LogError("CSCTriggerPrimitivesProducer|ConfigError")
119  << "+++ Failed to find a CSCDBL1TPParametersRcd in EventSetup! +++\n"
120  << "+++ Cannot continue emulation without these parameters +++\n";
121  return;
122  }
123  builder_->setConfigParameters(conf.product());
124  }
125 
126  // Get the collections of comparator & wire digis from event.
129  ev.getByToken(comp_token_, compDigis);
130  ev.getByToken(wire_token_, wireDigis);
131 
132  // input GEM pad collection for upgrade scenarios
133  const GEMPadDigiCollection* gemPads = nullptr;
134  if (!gemPadDigiProducer_.label().empty()) {
136  ev.getByToken(gem_pad_token_, gemPadDigis);
137  gemPads = gemPadDigis.product();
138  }
139 
140  // input GEM pad cluster collection for upgrade scenarios
141  const GEMPadDigiClusterCollection* gemPadClusters = nullptr;
142  if (!gemPadDigiClusterProducer_.label().empty()) {
143  edm::Handle<GEMPadDigiClusterCollection> gemPadDigiClusters;
144  ev.getByToken(gem_pad_cluster_token_, gemPadDigiClusters);
145  gemPadClusters = gemPadDigiClusters.product();
146  }
147 
148  // Create empty collections of ALCTs, CLCTs, and correlated LCTs upstream
149  // and downstream of MPC.
150  std::unique_ptr<CSCALCTDigiCollection> oc_alct(new CSCALCTDigiCollection);
151  std::unique_ptr<CSCALCTDigiCollection> oc_alct_all(new CSCALCTDigiCollection);
152  std::unique_ptr<CSCCLCTDigiCollection> oc_clct(new CSCCLCTDigiCollection);
153  std::unique_ptr<CSCCLCTDigiCollection> oc_clct_all(new CSCCLCTDigiCollection);
154  std::unique_ptr<CSCCLCTPreTriggerDigiCollection> oc_clctpretrigger(new CSCCLCTPreTriggerDigiCollection);
155  std::unique_ptr<CSCALCTPreTriggerDigiCollection> oc_alctpretrigger(new CSCALCTPreTriggerDigiCollection);
156  std::unique_ptr<CSCCLCTPreTriggerCollection> oc_pretrig(new CSCCLCTPreTriggerCollection);
157  std::unique_ptr<CSCCorrelatedLCTDigiCollection> oc_lct(new CSCCorrelatedLCTDigiCollection);
158  std::unique_ptr<CSCCorrelatedLCTDigiCollection> oc_sorted_lct(new CSCCorrelatedLCTDigiCollection);
159  std::unique_ptr<GEMCoPadDigiCollection> oc_gemcopad(new GEMCoPadDigiCollection);
160 
161  if (!wireDigis.isValid()) {
162  edm::LogWarning("CSCTriggerPrimitivesProducer|NoInputCollection")
163  << "+++ Warning: Collection of wire digis with label " << wireDigiProducer_.label()
164  << " requested in configuration, but not found in the event..."
165  << " Skipping production of CSC TP digis +++\n";
166  }
167  if (!compDigis.isValid()) {
168  edm::LogWarning("CSCTriggerPrimitivesProducer|NoInputCollection")
169  << "+++ Warning: Collection of comparator digis with label " << compDigiProducer_.label()
170  << " requested in configuration, but not found in the event..."
171  << " Skipping production of CSC TP digis +++\n";
172  }
173  // Fill output collections if valid input collections are available.
174  if (wireDigis.isValid() && compDigis.isValid()) {
175  const CSCBadChambers* temp = checkBadChambers_ ? pBadChambers.product() : new CSCBadChambers;
176  builder_->build(temp,
177  wireDigis.product(),
178  compDigis.product(),
179  gemPads,
180  gemPadClusters,
181  *oc_alct,
182  *oc_alct_all,
183  *oc_clct,
184  *oc_clct_all,
185  *oc_alctpretrigger,
186  *oc_clctpretrigger,
187  *oc_pretrig,
188  *oc_lct,
189  *oc_sorted_lct,
190  *oc_gemcopad);
191  if (!checkBadChambers_)
192  delete temp;
193  }
194 
195  // Put collections in event.
196  ev.put(std::move(oc_alct));
197  if (writeOutAllALCTs_) {
198  ev.put(std::move(oc_alct_all), "All");
199  }
200  ev.put(std::move(oc_clct));
201  if (writeOutAllCLCTs_) {
202  ev.put(std::move(oc_clct_all), "All");
203  }
204  if (savePreTriggers_) {
205  ev.put(std::move(oc_alctpretrigger));
206  ev.put(std::move(oc_clctpretrigger));
207  }
208  ev.put(std::move(oc_pretrig));
209  ev.put(std::move(oc_lct));
210  ev.put(std::move(oc_sorted_lct), "MPCSORTED");
211  // only put GEM copad collections in the event when the
212  // integrated local triggers are running
214  ev.put(std::move(oc_gemcopad));
215 }
CSCCLCTPreTriggerCollection
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
CSCTriggerPrimitivesProducer::builder_
std::unique_ptr< CSCTriggerPrimitivesBuilder > builder_
Definition: CSCTriggerPrimitivesProducer.h:57
Handle.h
CSCCorrelatedLCTDigiCollection.h
GEMCoPadDigiCollection
MessageLogger.h
edm::Handle::product
T const * product() const
Definition: Handle.h:70
ESHandle.h
CSCTriggerPrimitivesProducer::produce
void produce(edm::Event &, const edm::EventSetup &) override
Definition: CSCTriggerPrimitivesProducer.cc:91
h
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
Definition: L1TUtmAlgorithmRcd.h:4
MuonDigiCollection
A container for a generic type of digis indexed by some index, implemented with a map<IndexType,...
Definition: MuonDigiCollection.h:87
edm::LogInfo
Definition: MessageLogger.h:254
CSCTriggerPrimitivesProducer::~CSCTriggerPrimitivesProducer
~CSCTriggerPrimitivesProducer() override
Definition: CSCTriggerPrimitivesProducer.cc:89
GEMCoPadDigiCollection.h
CSCTriggerPrimitivesProducer::comp_token_
edm::EDGetTokenT< CSCComparatorDigiCollection > comp_token_
Definition: CSCTriggerPrimitivesProducer.h:66
CSCTriggerPrimitivesProducer.h
CSCBadChambers
Definition: CSCBadChambers.h:9
CSCTriggerPrimitivesProducer::writeOutAllCLCTs_
bool writeOutAllCLCTs_
Definition: CSCTriggerPrimitivesProducer.h:78
edm::Handle< CSCComparatorDigiCollection >
groupFilesInBlocks.temp
list temp
Definition: groupFilesInBlocks.py:142
singleTopDQM_cfi.setup
setup
Definition: singleTopDQM_cfi.py:37
CSCDBL1TPParameters.h
CSCCLCTPreTriggerDigiCollection.h
edm::InputTag::label
std::string const & label() const
Definition: InputTag.h:36
CSCTriggerPrimitivesProducer::debugParameters_
bool debugParameters_
Definition: CSCTriggerPrimitivesProducer.h:72
CSCTriggerPrimitivesProducer::runME21ILT_
bool runME21ILT_
Definition: CSCTriggerPrimitivesProducer.h:88
CSCTriggerPrimitivesProducer::gemPadDigiProducer_
edm::InputTag gemPadDigiProducer_
Definition: CSCTriggerPrimitivesProducer.h:62
CSCTriggerPrimitivesProducer::gem_pad_token_
edm::EDGetTokenT< GEMPadDigiCollection > gem_pad_token_
Definition: CSCTriggerPrimitivesProducer.h:68
edm::ESHandle< CSCGeometry >
GEMPadDigiCollection
h
GEMPadDigiClusterCollection
CSCTriggerPrimitivesProducer::wire_token_
edm::EDGetTokenT< CSCWireDigiCollection > wire_token_
Definition: CSCTriggerPrimitivesProducer.h:67
CSCTriggerPrimitivesProducer::writeOutAllALCTs_
bool writeOutAllALCTs_
Definition: CSCTriggerPrimitivesProducer.h:81
edm::LogWarning
Definition: MessageLogger.h:141
cscTriggerPrimitiveDigis_cfi.commonParam
commonParam
Definition: cscTriggerPrimitiveDigis_cfi.py:32
edm::ParameterSet
Definition: ParameterSet.h:36
edm::LogError
Definition: MessageLogger.h:183
CSCALCTDigiCollection
CSCTriggerPrimitivesProducer::checkBadChambers_
bool checkBadChambers_
Definition: CSCTriggerPrimitivesProducer.h:75
edm::EventSetup
Definition: EventSetup.h:57
CSCCorrelatedLCTDigiCollection
CSCTriggerPrimitivesProducer::gem_pad_cluster_token_
edm::EDGetTokenT< GEMPadDigiClusterCollection > gem_pad_cluster_token_
Definition: CSCTriggerPrimitivesProducer.h:69
get
#define get
edm::ESHandleBase::isValid
bool isValid() const
Definition: ESHandle.h:44
CSCTriggerPrimitivesBuilder.h
CSCDBL1TPParametersRcd.h
CSCBadChambersRcd.h
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
CSCBadChambersRcd
Definition: CSCBadChambersRcd.h:5
GEMGeometry.h
eostools.move
def move(src, dest)
Definition: eostools.py:511
CSCTriggerPrimitivesProducer::runME11ILT_
bool runME11ILT_
Definition: CSCTriggerPrimitivesProducer.h:87
CSCALCTPreTriggerDigiCollection.h
CSCCLCTDigiCollection
ev
bool ev
Definition: Hydjet2Hadronizer.cc:95
CSCTriggerPrimitivesProducer::compDigiProducer_
edm::InputTag compDigiProducer_
Definition: CSCTriggerPrimitivesProducer.h:60
or
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
CSCALCTPreTriggerDigiCollection
CSCALCTDigiCollection.h
CSCTriggerPrimitivesProducer::savePreTriggers_
bool savePreTriggers_
Definition: CSCTriggerPrimitivesProducer.h:84
CSCCLCTDigiCollection.h
CSCTriggerPrimitivesProducer::config_
edm::ParameterSet config_
Definition: CSCTriggerPrimitivesProducer.h:54
MuonGeometryRecord.h
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
CSCTriggerPrimitivesProducer::wireDigiProducer_
edm::InputTag wireDigiProducer_
Definition: CSCTriggerPrimitivesProducer.h:61
edm::Event
Definition: Event.h:73
MuonGeometryRecord
Definition: MuonGeometryRecord.h:34
CSCTriggerPrimitivesProducer::gemPadDigiClusterProducer_
edm::InputTag gemPadDigiClusterProducer_
Definition: CSCTriggerPrimitivesProducer.h:63
edm::InputTag
Definition: InputTag.h:15
CSCDBL1TPParametersRcd
Definition: CSCDBL1TPParametersRcd.h:43
CSCTriggerPrimitivesProducer::CSCTriggerPrimitivesProducer
CSCTriggerPrimitivesProducer(const edm::ParameterSet &)
Definition: CSCTriggerPrimitivesProducer.cc:37