CMS 3D CMS Logo

SelectiveReadoutTask.cc
Go to the documentation of this file.
2 
5 
9 
12 
14 
17 
18 namespace ecaldqm {
19 
21  : DQWorkerTask(),
22  useCondDb_(false),
23  iFirstSample_(0),
24  ZSFIRWeights_(nFIRTaps, 0.),
25  suppressed_(),
26  flags_(nRU, -1) {}
27 
29  useCondDb_ = _params.getUntrackedParameter<bool>("useCondDb");
30  iFirstSample_ = _params.getUntrackedParameter<int>("DCCZS1stSample");
31 
32  if (!useCondDb_) {
33  std::vector<double> normWeights(_params.getUntrackedParameter<std::vector<double> >("ZSFIRWeights"));
34  setFIRWeights_(normWeights);
35  }
36  }
37 
41  }
42 
44  using namespace std;
45 
46  if (useCondDb_) {
48  _es.get<EcalSRSettingsRcd>().get(hSr);
49 
50  vector<vector<float> > weights(hSr->dccNormalizedWeights_);
51  if (weights.size() == 1) {
52  vector<double> normWeights;
53  for (vector<float>::iterator it(weights[0].begin()); it != weights[0].end(); it++)
54  normWeights.push_back(*it);
55 
56  setFIRWeights_(normWeights);
57  } else
58  edm::LogWarning("EcalDQM") << "SelectiveReadoutTask: DCC weight set is not exactly 1.";
59  }
60  }
61 
62  void SelectiveReadoutTask::beginEvent(edm::Event const&, edm::EventSetup const&, bool const&, bool&) {
63  flags_.assign(nRU, -1);
64  suppressed_.clear();
65  }
66 
68  MESet& meDCCSize(MEs_.at("DCCSize"));
69  MESet& meDCCSizeProf(MEs_.at("DCCSizeProf"));
70  MESet& meEventSize(MEs_.at("EventSize"));
71 
72  float ebSize(0.), eemSize(0.), eepSize(0.);
73 
74  // DCC event size
75  for (int iFED(601); iFED <= 654; iFED++) {
76  float size(_fedRaw.FEDData(iFED).size() / 1024.);
77  meDCCSize.fill(getEcalDQMSetupObjects(), iFED - 600, size);
78  meDCCSizeProf.fill(getEcalDQMSetupObjects(), iFED - 600, size);
79  if (iFED - 601 <= kEEmHigh)
80  eemSize += size;
81  else if (iFED - 601 >= kEEpLow)
82  eepSize += size;
83  else
84  ebSize += size;
85  }
86 
87  meEventSize.fill(getEcalDQMSetupObjects(), -EcalEndcap, eemSize / 9.);
88  meEventSize.fill(getEcalDQMSetupObjects(), EcalEndcap, eepSize / 9.);
89  meEventSize.fill(getEcalDQMSetupObjects(), EcalBarrel, ebSize / 36.);
90  }
91 
93  for (EcalRawDataCollection::const_iterator dcchItr(_dcchs.begin()); dcchItr != _dcchs.end(); ++dcchItr) {
94  std::vector<short> const& feStatus(dcchItr->getFEStatus());
95  unsigned nFE(feStatus.size());
96  for (unsigned iFE(0); iFE < nFE; ++iFE)
97  if (feStatus[iFE] == Disabled)
98  suppressed_.insert(std::make_pair(dcchItr->id(), iFE + 1));
99  }
100  }
101 
102  template <typename SRFlagCollection>
103  void SelectiveReadoutTask::runOnSrFlags(SRFlagCollection const& _srfs, Collections _col) {
104  MESet& meFlagCounterMap(MEs_.at("FlagCounterMap"));
105  MESet& meFullReadoutMap(MEs_.at("FullReadoutMap"));
106  MESet& meZS1Map(MEs_.at("ZS1Map"));
107  MESet& meZSMap(MEs_.at("ZSMap"));
108  MESet& meRUForcedMap(MEs_.at("RUForcedMap"));
109 
110  double nFR(0.);
111 
112  std::for_each(_srfs.begin(), _srfs.end(), [&](typename SRFlagCollection::value_type const& srf) {
113  DetId const& id(srf.id());
114  int flag(srf.value());
115 
116  meFlagCounterMap.fill(getEcalDQMSetupObjects(), id);
117 
118  unsigned iRU(-1);
119  if (id.subdetId() == EcalTriggerTower)
120  iRU = EcalTrigTowerDetId(id).hashedIndex();
121  else
123  flags_[iRU] = flag;
124 
125  switch (flag & ~EcalSrFlag::SRF_FORCED_MASK) {
127  meFullReadoutMap.fill(getEcalDQMSetupObjects(), id);
128  nFR += 1.;
129  break;
130  case EcalSrFlag::SRF_ZS1:
131  meZS1Map.fill(getEcalDQMSetupObjects(), id);
132  // fallthrough
133  case EcalSrFlag::SRF_ZS2:
134  meZSMap.fill(getEcalDQMSetupObjects(), id);
135  break;
136  default:
137  break;
138  }
139 
141  meRUForcedMap.fill(getEcalDQMSetupObjects(), id);
142  });
143 
144  MEs_.at("FullReadout").fill(getEcalDQMSetupObjects(), _col == kEBSrFlag ? EcalBarrel : EcalEndcap, nFR);
145  }
146 
147  template <typename DigiCollection>
149  MESet& meHighIntOutput(MEs_.at("HighIntOutput"));
150  MESet& meLowIntOutput(MEs_.at("LowIntOutput"));
151  MESet& meHighIntPayload(MEs_.at("HighIntPayload"));
152  MESet& meLowIntPayload(MEs_.at("LowIntPayload"));
153  MESet& meTowerSize(MEs_.at("TowerSize"));
154  MESet& meZSFullReadoutMap(MEs_.at("ZSFullReadoutMap"));
155  MESet& meFRDroppedMap(MEs_.at("FRDroppedMap"));
156  MESet& meZSFullReadout(MEs_.at("ZSFullReadout"));
157  MESet& meFRDropped(MEs_.at("FRDropped"));
158 
159  bool isEB(_collection == kEBDigi);
160 
161  unsigned const nTower(isEB ? unsigned(EcalTrigTowerDetId::kEBTotalTowers)
163 
164  std::vector<unsigned> sizes(nTower, 0);
165 
166  int nHighInt[] = {0, 0};
167  int nLowInt[] = {0, 0};
168 
169  for (typename DigiCollection::const_iterator digiItr(_digis.begin()); digiItr != _digis.end(); ++digiItr) {
170  DetId const& id(digiItr->id());
171 
172  unsigned iTower(-1);
173  unsigned iRU(-1);
174 
175  if (isEB) {
176  iTower = EBDetId(id).tower().hashedIndex();
177  iRU = iTower;
178  } else {
179  iTower = EEDetId(id).sc().hashedIndex();
180  iRU = iTower + EcalTrigTowerDetId::kEBTotalTowers;
181  }
182 
183  if (flags_[iRU] < 0)
184  continue;
185 
186  sizes[iTower] += 1;
187 
188  // SR filter output calculation
189 
190  EcalDataFrame frame(*digiItr);
191 
192  int ZSFIRValue(0); // output
193 
194  bool gain12saturated(false);
195  const int gain12(0x01);
196 
197  for (int iWeight(0); iWeight < nFIRTaps; ++iWeight) {
198  int iSample(iFirstSample_ + iWeight - 1);
199 
200  if (iSample >= 0 && iSample < frame.size()) {
201  EcalMGPASample sample(frame[iSample]);
202  if (sample.gainId() != gain12) {
203  gain12saturated = true;
204  break;
205  }
206  ZSFIRValue += sample.adc() * ZSFIRWeights_[iWeight];
207  } else {
208  edm::LogWarning("EcalDQM") << "SelectiveReadoutTask: Not enough samples in data frame or "
209  "'ecalDccZs1stSample' module parameter is not valid";
210  }
211  }
212 
213  if (gain12saturated)
214  ZSFIRValue = std::numeric_limits<int>::max();
215  else
216  ZSFIRValue /= (0x1 << 8); //discards the 8 LSBs
217 
218  //ZS passed if weighted sum above ZS threshold or if
219  //one sample has a lower gain than gain 12 (that is gain 12 output
220  //is saturated)
221 
222  bool highInterest((flags_[iRU] & ~EcalSrFlag::SRF_FORCED_MASK) == EcalSrFlag::SRF_FULL);
223 
224  if (highInterest) {
225  meHighIntOutput.fill(getEcalDQMSetupObjects(), id, ZSFIRValue);
226  if (isEB || dccId(id, GetElectronicsMap()) - 1 <= kEEmHigh)
227  nHighInt[0] += 1;
228  else
229  nHighInt[1] += 1;
230  } else {
231  meLowIntOutput.fill(getEcalDQMSetupObjects(), id, ZSFIRValue);
232  if (isEB || dccId(id, GetElectronicsMap()) - 1 <= kEEmHigh)
233  nLowInt[0] += 1;
234  else
235  nLowInt[1] += 1;
236  }
237  }
238 
239  if (isEB) {
240  meHighIntPayload.fill(getEcalDQMSetupObjects(), EcalBarrel, nHighInt[0] * bytesPerCrystal / 1024. / nEBDCC);
241  meLowIntPayload.fill(getEcalDQMSetupObjects(), EcalBarrel, nLowInt[0] * bytesPerCrystal / 1024. / nEBDCC);
242  } else {
243  meHighIntPayload.fill(
244  getEcalDQMSetupObjects(), -EcalEndcap, nHighInt[0] * bytesPerCrystal / 1024. / (nEEDCC / 2));
245  meHighIntPayload.fill(getEcalDQMSetupObjects(), EcalEndcap, nHighInt[1] * bytesPerCrystal / 1024. / (nEEDCC / 2));
246  meLowIntPayload.fill(getEcalDQMSetupObjects(), -EcalEndcap, nLowInt[0] * bytesPerCrystal / 1024. / (nEEDCC / 2));
247  meLowIntPayload.fill(getEcalDQMSetupObjects(), EcalEndcap, nLowInt[1] * bytesPerCrystal / 1024. / (nEEDCC / 2));
248  }
249 
250  unsigned iRU(isEB ? 0 : EcalTrigTowerDetId::kEBTotalTowers);
251  for (unsigned iTower(0); iTower < nTower; ++iTower, ++iRU) {
252  DetId id;
253  if (isEB)
255  else
256  id = EcalScDetId::unhashIndex(iTower);
257 
258  double towerSize(sizes[iTower] * bytesPerCrystal);
259 
260  meTowerSize.fill(getEcalDQMSetupObjects(), id, towerSize);
261 
262  if (flags_[iRU] < 0)
263  continue;
264 
265  int dccid(dccId(id, GetElectronicsMap()));
266  int towerid(towerId(id, GetElectronicsMap()));
267 
268  if (suppressed_.find(std::make_pair(dccid, towerid)) != suppressed_.end())
269  continue;
270 
272 
273  bool ruFullyReadout(sizes[iTower] == GetElectronicsMap()->dccTowerConstituents(dccid, towerid).size());
274 
275  if (ruFullyReadout && (flag == EcalSrFlag::SRF_ZS1 || flag == EcalSrFlag::SRF_ZS2)) {
276  meZSFullReadoutMap.fill(getEcalDQMSetupObjects(), id);
277  meZSFullReadout.fill(getEcalDQMSetupObjects(), id);
278  }
279 
280  if (sizes[iTower] == 0 && flag == EcalSrFlag::SRF_FULL) {
281  meFRDroppedMap.fill(getEcalDQMSetupObjects(), id);
282  meFRDropped.fill(getEcalDQMSetupObjects(), id);
283  }
284  }
285  }
286 
287  void SelectiveReadoutTask::setFIRWeights_(std::vector<double> const& _normWeights) {
288  if (_normWeights.size() < nFIRTaps)
289  throw cms::Exception("InvalidConfiguration") << "weightsForZsFIR" << std::endl;
290 
291  bool notNormalized(false), notInt(false);
292  for (std::vector<double>::const_iterator it(_normWeights.begin()); it != _normWeights.end(); ++it) {
293  if (*it > 1.)
294  notNormalized = true;
295  if (int(*it) != *it)
296  notInt = true;
297  }
298  if (notInt && notNormalized) {
299  throw cms::Exception("InvalidConfiguration") << "weigtsForZsFIR paramater values are not valid: they "
300  << "must either be integer and uses the hardware representation "
301  << "of the weights or less or equal than 1 and used the normalized "
302  << "representation.";
303  }
304 
305  ZSFIRWeights_.clear();
306  ZSFIRWeights_.resize(_normWeights.size());
307 
308  if (notNormalized) {
309  for (unsigned i(0); i < ZSFIRWeights_.size(); ++i)
310  ZSFIRWeights_[i] = int(_normWeights[i]);
311  } else {
312  const int maxWeight(0xEFF); //weights coded on 11+1 signed bits
313  for (unsigned i(0); i < ZSFIRWeights_.size(); ++i) {
314  ZSFIRWeights_[i] = lround(_normWeights[i] * (0x1 << 10));
315  if (std::abs(ZSFIRWeights_[i]) > maxWeight) //overflow
316  ZSFIRWeights_[i] = ZSFIRWeights_[i] < 0 ? -maxWeight : maxWeight;
317  }
318  }
319  }
320 
322 } // namespace ecaldqm
ecaldqm::SelectiveReadoutTask::bytesPerCrystal
Definition: SelectiveReadoutTask.h:39
mps_fire.i
i
Definition: mps_fire.py:428
edm::SortedCollection::const_iterator
std::vector< T >::const_iterator const_iterator
Definition: SortedCollection.h:80
MessageLogger.h
funct::false
false
Definition: Factorize.h:29
ecaldqm
Definition: DQWorker.h:29
EcalSRSettingsRcd.h
ecaldqm::SelectiveReadoutTask
Definition: SelectiveReadoutTask.h:18
ESHandle.h
simplePhotonAnalyzer_cfi.sample
sample
Definition: simplePhotonAnalyzer_cfi.py:12
ecaldqm::DependencySet
Definition: DQWorkerTask.h:44
edm::Run
Definition: Run.h:45
FEDRawDataCollection
Definition: FEDRawDataCollection.h:18
EBDetId
Definition: EBDetId.h:17
ecaldqm::SelectiveReadoutTask::addDependencies
void addDependencies(DependencySet &) override
Definition: SelectiveReadoutTask.cc:38
ecaldqm::kEEDigi
Definition: Collections.h:26
ecaldqm::MESet::fill
virtual void fill(EcalDQMSetupObjects const, DetId const &, double=1., double=1., double=1.)
Definition: MESet.h:74
ecaldqm::SelectiveReadoutTask::ZSFIRWeights_
std::vector< int > ZSFIRWeights_
Definition: SelectiveReadoutTask.h:50
EcalDetIdCollections.h
EcalScDetId::unhashIndex
static EcalScDetId unhashIndex(int hi)
Definition: EcalScDetId.h:117
l1extraParticles_cfi._params
_params
Definition: l1extraParticles_cfi.py:29
ecaldqm::nEBDCC
Definition: EcalDQMCommonUtils.h:92
ecaldqm::kEESrFlag
Definition: Collections.h:24
edm::SortedCollection
Definition: SortedCollection.h:49
ecaldqm::Dependency
Definition: DQWorkerTask.h:19
EcalTrigTowerDetId
Definition: EcalTrigTowerDetId.h:14
ecaldqm::kEcalRawData
Definition: Collections.h:10
ecaldqm::SelectiveReadoutTask::SelectiveReadoutTask
SelectiveReadoutTask()
Definition: SelectiveReadoutTask.cc:20
EcalDataFrame
Definition: EcalDataFrame.h:16
edm::LogWarning
Log< level::Warning, false > LogWarning
Definition: MessageLogger.h:122
ecaldqm::DQWorker::GetElectronicsMap
const EcalElectronicsMapping * GetElectronicsMap()
Definition: DQWorker.cc:104
ecaldqm::SelectiveReadoutTask::runOnDigis
void runOnDigis(DigiCollection const &, Collections)
Definition: SelectiveReadoutTask.cc:148
EcalBarrel
Definition: EcalSubdetector.h:10
FEFlags.h
EcalSRSettings.h
ecaldqm::towerId
unsigned towerId(DetId const &, EcalElectronicsMapping const *)
Definition: EcalDQMCommonUtils.cc:77
DetId
Definition: DetId.h:17
testProducerWithPsetDescEmpty_cfi.x1
x1
Definition: testProducerWithPsetDescEmpty_cfi.py:33
EcalSrFlag::SRF_ZS1
static const int SRF_ZS1
Definition: EcalSrFlag.h:18
EBDetId::tower
EcalTrigTowerDetId tower() const
get the HCAL/trigger iphi of this crystal
Definition: EBDetId.h:57
ecaldqm::DQWorkerTask
Definition: DQWorkerTask.h:71
edm::EventSetup::get
T get() const
Definition: EventSetup.h:87
edm::SortedCollection::begin
const_iterator begin() const
Definition: SortedCollection.h:262
HLT_FULL_cff.weights
weights
Definition: HLT_FULL_cff.py:99170
EcalSrFlag::SRF_ZS2
static const int SRF_ZS2
Definition: EcalSrFlag.h:21
EcalScDetId
Definition: EcalScDetId.h:24
edm::ESHandle
Definition: DTSurvey.h:22
ecaldqm::SelectiveReadoutTask::nFIRTaps
Definition: SelectiveReadoutTask.h:38
ecaldqm::kEEmHigh
Definition: EcalDQMCommonUtils.h:81
FEDRawDataCollection::FEDData
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
Definition: FEDRawDataCollection.cc:19
ecaldqm::nEEDCC
Definition: EcalDQMCommonUtils.h:93
ecaldqm::DQWorker::MEs_
MESetCollection MEs_
Definition: DQWorker.h:104
ecaldqm::Disabled
Definition: FEFlags.h:10
EEDetId
Definition: EEDetId.h:14
ecaldqm::SelectiveReadoutTask::nRU
Definition: SelectiveReadoutTask.h:40
EcalEndcap
Definition: EcalSubdetector.h:10
ecaldqm::SelectiveReadoutTask::suppressed_
std::set< std::pair< int, int > > suppressed_
Definition: SelectiveReadoutTask.h:52
EcalScDetId::hashedIndex
int hashedIndex() const
Definition: EcalScDetId.h:106
ecaldqm::SelectiveReadoutTask::runOnSrFlags
void runOnSrFlags(SRFlagCollection const &, Collections)
Definition: SelectiveReadoutTask.cc:103
edm::ParameterSet
Definition: ParameterSet.h:47
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
edm::SortedCollection::end
const_iterator end() const
Definition: SortedCollection.h:267
ecaldqm::SelectiveReadoutTask::setFIRWeights_
void setFIRWeights_(std::vector< double > const &)
Definition: SelectiveReadoutTask.cc:287
ecaldqm::MESetCollection::at
MESet & at(const std::string &key)
Definition: MESet.h:399
SelectiveReadoutTask.h
ecaldqm::kEBSrFlag
Definition: Collections.h:23
EcalSRSettingsRcd
Definition: EcalSRSettingsRcd.h:5
ecaldqm::DependencySet::push_back
void push_back(Dependency const &_d)
Definition: DQWorkerTask.h:46
EcalTrigTowerDetId::hashedIndex
int hashedIndex() const
get a compact index for arrays [TODO: NEEDS WORK]
Definition: EcalTrigTowerDetId.cc:93
ecaldqm::Collections
Collections
Definition: Collections.h:8
IdealGeometryRecord.h
edm::EventSetup
Definition: EventSetup.h:58
ecaldqm::SelectiveReadoutTask::runOnRawData
void runOnRawData(EcalRawDataCollection const &)
Definition: SelectiveReadoutTask.cc:92
EEDetId::sc
EcalScDetId sc() const
Definition: EEDetId.h:89
reco::JetExtendedAssociation::value_type
Container::value_type value_type
Definition: JetExtendedAssociation.h:30
get
#define get
ecaldqm::SelectiveReadoutTask::beginRun
void beginRun(edm::Run const &, edm::EventSetup const &) override
Definition: SelectiveReadoutTask.cc:43
ecaldqm::SelectiveReadoutTask::runOnSource
void runOnSource(FEDRawDataCollection const &)
Definition: SelectiveReadoutTask.cc:67
FEDRawData::size
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:45
EcalMGPASample
Definition: EcalMGPASample.h:22
ecaldqm::dccId
unsigned dccId(DetId const &, EcalElectronicsMapping const *)
Definition: EcalDQMCommonUtils.cc:16
EcalTrigTowerDetId::kEBTotalTowers
Definition: EcalTrigTowerDetId.h:116
ecaldqm::DQWorker::getEcalDQMSetupObjects
const EcalDQMSetupObjects getEcalDQMSetupObjects()
Definition: DQWorker.cc:128
EcalSRSettings::dccNormalizedWeights_
std::vector< std::vector< float > > dccNormalizedWeights_
Definition: EcalSRSettings.h:99
siStripShotFilter_cfi.DigiCollection
DigiCollection
Definition: siStripShotFilter_cfi.py:6
EcalTrigTowerConstituentsMap.h
ecaldqm::SelectiveReadoutTask::beginEvent
void beginEvent(edm::Event const &, edm::EventSetup const &, bool const &, bool &) override
Definition: SelectiveReadoutTask.cc:62
std
Definition: JetResolutionObject.h:76
EcalTriggerTower
Definition: EcalSubdetector.h:10
ecaldqm::kEBDigi
Definition: Collections.h:25
EcalSrFlag::SRF_FULL
static const int SRF_FULL
Definition: EcalSrFlag.h:24
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:29
amptDefault_cfi.frame
frame
Definition: amptDefault_cfi.py:12
ecaldqm::kEEpLow
Definition: EcalDQMCommonUtils.h:82
Exception
Definition: hltDiff.cc:245
ecaldqm::SelectiveReadoutTask::useCondDb_
bool useCondDb_
Definition: SelectiveReadoutTask.h:48
EcalTrigTowerDetId::detIdFromDenseIndex
static EcalTrigTowerDetId detIdFromDenseIndex(uint32_t di)
Definition: EcalTrigTowerDetId.cc:104
DEFINE_ECALDQM_WORKER
#define DEFINE_ECALDQM_WORKER(TYPE)
Definition: DQWorker.h:141
cms::Exception
Definition: Exception.h:70
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
EcalScDetId::kSizeForDenseIndexing
Definition: EcalScDetId.h:188
ecaldqm::SelectiveReadoutTask::setParams
void setParams(edm::ParameterSet const &) override
Definition: SelectiveReadoutTask.cc:28
EcalSrFlag::SRF_FORCED_MASK
static const int SRF_FORCED_MASK
Definition: EcalSrFlag.h:29
edm::Event
Definition: Event.h:73
ecaldqm::SelectiveReadoutTask::flags_
std::vector< short > flags_
Definition: SelectiveReadoutTask.h:53
EcalChannelStatusRcd.h
RemoveAddSevLevel.flag
flag
Definition: RemoveAddSevLevel.py:116
EcalDQMCommonUtils.h
ecaldqm::MESet
Definition: MESet.h:42
findQualityFiles.size
size
Write out results.
Definition: findQualityFiles.py:443
ecaldqm::SelectiveReadoutTask::iFirstSample_
int iFirstSample_
Definition: SelectiveReadoutTask.h:49