113 static const unsigned int limits[
N_REGIONS] = {
117 const EventIDBase& pEvent{ctx.eventID()};
118 const int lumi_block{
static_cast<int>(pEvent.lumi_block())};
121 if (not rdoContainer.
isValid()) {
123 return StatusCode::FAILURE;
127 if (not spacePointContainer.
isValid()) {
129 return StatusCode::FAILURE;
132 bool isSelectedTrigger{
false};
137 isSelectedTrigger =
true;
143 if (isSelectedTrigger) {
147 std::vector<float> occ(
N_WAFERS, 0.);
148 std::vector<float> hitOcc(
N_WAFERS, 0.);
150 int local_tothits{0};
152 std::vector<int> barrel_local_nhitslayer(
N_BARRELSx2, 0);
153 std::vector<int> ECp_local_nhitslayer(
N_DISKSx2, 0);
154 std::vector<int> ECm_local_nhitslayer(
N_DISKSx2, 0);
155 std::vector<int>* hitsInLayer[
N_REGIONS] = {
156 &ECm_local_nhitslayer, &barrel_local_nhitslayer, &ECp_local_nhitslayer
158 const bool doThisSubsystem[
N_REGIONS] = {
163 std::vector<int> vNumberOfHitsFromAllRDOs[
N_REGIONS];
164 std::vector<int> vNumberOfHitsFromSPs[
N_REGIONS];
165 std::vector<bool> vIsSelectedTriggerHits[
N_REGIONS];
166 for (
unsigned int jReg{0}; jReg<
N_REGIONS; jReg++) {
167 unsigned int size{0};
170 vLumiBlock[jReg].reserve(size);
171 vNumberOfHitsFromAllRDOs[jReg].reserve(size);
172 vNumberOfHitsFromSPs[jReg].reserve(size);
173 vIsSelectedTriggerHits[jReg].reserve(size);
176 std::vector<int> vEtaOnTrack;
177 std::vector<int> vPhiOnTrack;
178 std::vector<float> vSystemIndexOnTrack;
179 std::vector<bool> vDTbinOnTrack;
181 std::vector<int> vEta;
182 std::vector<int> vPhi;
183 std::vector<int> vNumberOfStrips;
188 const Identifier wafer_id{rdoCollection->identify()};
193 m_pSCTHelper->get_other_side(theModuleHash0, theModuleHash1);
195 const unsigned int systemIndex{
bec2Index(barrel_ec)};
197 const int thisLayerDisk{
m_pSCTHelper->layer_disk(wafer_id)};
201 const int thisElement{(
N_SIDES * thisLayerDisk) + thisSide};
205 int numberOfHitsFromSPs{0};
206 int numberOfHitsFromAllRDOs{0};
210 std::unordered_set<Identifier> mySetOfSPIds;
211 for (
int side{0}; side<
N_SIDES; side++) {
212 auto spContainerIterator{spacePointContainer->indexFindPtr(side==0 ? theModuleHash0 : theModuleHash1)};
213 if (spContainerIterator==
nullptr)
continue;
215 const std::vector<Identifier>& rdoList{(thisSide==side ?
sp->clusterList().first :
sp->clusterList().second)->rdoList()};
216 mySetOfSPIds.insert(rdoList.begin(), rdoList.end());
224 vNumberOfStrips.clear();
228 const int numberOfStrips{rdo->getGroupSize()};
229 (*hitsInLayer[systemIndex])[thisElement] += numberOfStrips;
230 local_tothits += numberOfStrips;
232 if (doThisSubsystem[systemIndex]) {
240 const int limit{firstStrip + numberOfStrips};
242 if (rdosOnTracks[wafer_hash].
find(strip_id) != rdosOnTracks[wafer_hash].end()) {
243 for (
int ichan{firstStrip}; ichan < limit; ++ichan) {
244 vEtaOnTrack.push_back(thisEta);
245 vPhiOnTrack.push_back(thisPhi);
246 vDTbinOnTrack.push_back((tbin == 2) or (tbin == 3));
247 vSystemIndexOnTrack.push_back(systemIndex);
250 vEta.push_back(thisEta);
251 vPhi.push_back(thisPhi);
252 vNumberOfStrips.push_back(numberOfStrips);
254 numberOfHitsFromAllRDOs += numberOfStrips;
257 if (mySetOfSPIds.find(strip_id) != mySetOfSPIds.end()) {
258 numberOfHitsFromSPs += numberOfStrips;
260 numberOfHitsFromSPs += numberOfStrips;
268 const std::string streamhitmap{
"mapsOfHitsOnTracks" + abbreviations[systemIndex] +
"_" +
269 "trackhitsmap_" + layerSide.
name()};
273 fill(
"SCTHitsNoiseMonitor_" + std::to_string(systemIndex), etaMapsOfHitsOnTracksAcc, phiMapsOfHitsOnTracksAcc);
275 const std::string hitmap{
"hitsmap" + abbreviations[systemIndex] +
"_" + layerSide.
name()};
280 fill(
"SCTHitsNoiseMonitor_" + std::to_string(systemIndex), etahitsmapAcc, phihitsmapAcc, numberOfStripsAcc);
283 const std::string hitmaprecent{
"hitsmaprecent" + abbreviations[systemIndex] +
"_" + layerSide.
name()};
286 auto numberOfStripsRecentAcc{
Monitored::Collection(
"numberOfStrips_"+hitmaprecent, vNumberOfStrips)};
287 fill(
"SCTHitsNoiseMonitor_" + std::to_string(systemIndex), etahitsmapRecentAcc, phihitsmapRecentAcc, numberOfStripsAcc);
289 const std::string streamhitmaprecent{
"mapsOfHitsOnTracksrecent" + abbreviations[systemIndex] +
"_" +
290 "trackhitsmap_" + layerSide.
name()};
294 fill(
"SCTHitsNoiseMonitor_" + std::to_string(systemIndex), etaMapsOfHitsOnTracksRecentAcc, phiMapsOfHitsOnTracksRecentAcc);
297 if (numberOfHitsFromAllRDOs > 0) {
298 int den{
N_STRIPS - numberOfHitsFromSPs};
299 int num{numberOfHitsFromAllRDOs - numberOfHitsFromSPs};
302 ATH_MSG_WARNING(
"Too many reconstructed space points for number of real hits");
305 occ[wafer_hash] =
static_cast<float>(num) /
static_cast<float>(den) * 1.E5;
308 hitOcc[wafer_hash] =
static_cast<float>(numberOfHitsFromAllRDOs) /
static_cast<float>(
N_STRIPS) * 1.E5;
310 vLumiBlock[systemIndex].push_back(lumi_block);
311 vNumberOfHitsFromAllRDOs[systemIndex].push_back(numberOfHitsFromAllRDOs);
312 vNumberOfHitsFromSPs[systemIndex].push_back(numberOfHitsFromSPs);
313 vIsSelectedTriggerHits[systemIndex].push_back(isSelectedTrigger);
320 fill(
"SCTHitsNoiseMonitorGeneral", Bec_TBinFracAllAcc, TBin_TBinFracAllAcc);
322 for (
unsigned int jReg{0}; jReg<
N_REGIONS; jReg++) {
324 auto numberOfHitsFromAllRDOsAcc{
Monitored::Collection(
"numberOfHitsFromAllRDOs", vNumberOfHitsFromAllRDOs[jReg])};
325 auto numberOfHitsFromSPsAcc{
Monitored::Collection(
"numberOfHitsFromSPs", vNumberOfHitsFromSPs[jReg])};
326 auto isSelectedTriggerHitsAcc{
Monitored::Collection(
"isSelectedTriggerHits", vIsSelectedTriggerHits[jReg])};
327 fill(
"SCTHitsNoiseMonitor_" + std::to_string(jReg), lbHitsAcc, numberOfHitsFromAllRDOsAcc, numberOfHitsFromSPsAcc, isSelectedTriggerHitsAcc);
332 if (not clusterContainer.
isValid()) {
336 std::vector<long unsigned int> vGroupSize;
337 for (
const InDet::SCT_ClusterCollection* clusterCollection: *clusterContainer) {
339 vGroupSize.push_back(cluster->rdoList().size());
343 fill(
"SCTHitsNoiseMonitorGeneral", cluSizeAcc);
345 fill(
"SCTHitsNoiseMonitorGeneral", hitsAcc);
353 std::vector<std::vector<float>> vNO2D[
N_REGIONS];
354 std::vector<std::vector<float>> vHO2D[
N_REGIONS];
355 std::vector<std::vector<int>> vEtaNOHO[
N_REGIONS];
356 std::vector<std::vector<int>> vPhiNOHO[
N_REGIONS];
357 std::vector<std::vector<bool>> vIsSelectedTriggerNOHO[
N_REGIONS];
362 vLB[jReg].reserve(size);
363 vNO[jReg].reserve(size);
364 vHO[jReg].reserve(size);
365 vIsSelectedTrigger[jReg].reserve(size);
368 vNO2D[jReg].resize(limits[jReg], {});
369 vHO2D[jReg].resize(limits[jReg], {});
370 vEtaNOHO[jReg].resize(limits[jReg], {});
371 vPhiNOHO[jReg].resize(limits[jReg], {});
372 vIsSelectedTriggerNOHO[jReg].resize(limits[jReg], {});
373 for (
unsigned int element{0}; element< limits[jReg]; ++element) {
375 vNO2D[jReg][element].reserve(nWafers);
376 vHO2D[jReg][element].reserve(nWafers);
377 vEtaNOHO[jReg][element].reserve(nWafers);
378 vPhiNOHO[jReg][element].reserve(nWafers);
379 vIsSelectedTriggerNOHO[jReg][element].reserve(nWafers);
384 for (
unsigned int iHash{0}; iHash<
N_WAFERS; iHash++) {
390 const unsigned int systemIndex{
bec2Index(barrel_ec)};
391 vLB[systemIndex].push_back(lumi_block);
392 vNO[systemIndex].push_back(occ[iHash]);
393 vHO[systemIndex].push_back(hitOcc[iHash]);
394 vIsSelectedTrigger[systemIndex].push_back(isSelectedTrigger);
398 vIsSelectedTrigger[
GENERAL_INDEX].push_back(isSelectedTrigger);
399 if (doThisSubsystem[systemIndex]) {
401 vNO2D[systemIndex][element].push_back(occ[iHash]);
402 vHO2D[systemIndex][element].push_back(hitOcc[iHash]);
403 vEtaNOHO[systemIndex][element].push_back(
m_pSCTHelper->eta_module(wafer_id));
404 vPhiNOHO[systemIndex][element].push_back(
m_pSCTHelper->phi_module(wafer_id));
405 vIsSelectedTriggerNOHO[systemIndex][element].push_back(isSelectedTrigger);
411 if (jReg==
GENERAL_INDEX) monitor =
"SCTHitsNoiseMonitorGeneral";
412 else monitor =
"SCTHitsNoiseMonitor_" + std::to_string(jReg);
418 fill(monitor, LBAcc, noAcc, hoAcc, IsSelectedTriggerAcc);
421 for (
unsigned int jReg{0}; jReg<
N_REGIONS; ++jReg){
422 for (
unsigned int element{0}; element < limits[jReg]; ++element) {
424 const std::string occMap{
"occupancymap" + abbreviations[jReg] +
"_" + layerSide.
name()};
429 auto isSelectedTriggerAcc{
Monitored::Collection(
"IsSelectedTrigger_"+occMap, vIsSelectedTriggerNOHO[jReg][element])};
430 fill(
"SCTHitsNoiseMonitor_" + std::to_string(jReg), etaEacc, phiAcc, hoAcc, noAcc, isSelectedTriggerAcc);
433 auto isSelectedTriggerRecentAcc{
Monitored::Collection(
"IsSelectedTriggerRecent_"+occMap, vIsSelectedTriggerNOHO[jReg][element])};
434 fill(
"SCTHitsNoiseMonitor_" + std::to_string(jReg), etaEacc, phiAcc, hoAcc, noAcc, isSelectedTriggerRecentAcc);
440 return StatusCode::SUCCESS;