115 static const unsigned int limits[
N_REGIONS] = {
119 const EventIDBase& pEvent{ctx.eventID()};
120 const int lumi_block{
static_cast<int>(pEvent.lumi_block())};
123 if (not rdoContainer.
isValid()) {
125 return StatusCode::FAILURE;
129 if (not spacePointContainer.
isValid()) {
131 return StatusCode::FAILURE;
134 bool isSelectedTrigger{
false};
139 isSelectedTrigger =
true;
145 if (isSelectedTrigger) {
149 std::vector<float> occ(
N_WAFERS, 0.);
150 std::vector<float> hitOcc(
N_WAFERS, 0.);
152 int local_tothits{0};
154 std::vector<int> barrel_local_nhitslayer(
N_BARRELSx2, 0);
155 std::vector<int> ECp_local_nhitslayer(
N_DISKSx2, 0);
156 std::vector<int> ECm_local_nhitslayer(
N_DISKSx2, 0);
157 std::vector<int>* hitsInLayer[
N_REGIONS] = {
158 &ECm_local_nhitslayer, &barrel_local_nhitslayer, &ECp_local_nhitslayer
160 const bool doThisSubsystem[
N_REGIONS] = {
165 std::vector<int> vNumberOfHitsFromAllRDOs[
N_REGIONS];
166 std::vector<int> vNumberOfHitsFromSPs[
N_REGIONS];
167 std::vector<bool> vIsSelectedTriggerHits[
N_REGIONS];
168 for (
unsigned int jReg{0}; jReg<
N_REGIONS; jReg++) {
169 unsigned int size{0};
172 vLumiBlock[jReg].reserve(
size);
173 vNumberOfHitsFromAllRDOs[jReg].reserve(
size);
174 vNumberOfHitsFromSPs[jReg].reserve(
size);
175 vIsSelectedTriggerHits[jReg].reserve(
size);
178 std::vector<int> vEtaOnTrack;
179 std::vector<int> vPhiOnTrack;
180 std::vector<float> vSystemIndexOnTrack;
181 std::vector<bool> vDTbinOnTrack;
183 std::vector<int> vEta;
184 std::vector<int> vPhi;
185 std::vector<int> vNumberOfStrips;
190 const Identifier wafer_id{rdoCollection->identify()};
195 m_pSCTHelper->get_other_side(theModuleHash0, theModuleHash1);
197 const unsigned int systemIndex{
bec2Index(barrel_ec)};
199 const int thisLayerDisk{
m_pSCTHelper->layer_disk(wafer_id)};
203 const int thisElement{(
N_SIDES * thisLayerDisk) + thisSide};
207 int numberOfHitsFromSPs{0};
208 int numberOfHitsFromAllRDOs{0};
212 std::unordered_set<Identifier> mySetOfSPIds;
213 for (
int side{0}; side<
N_SIDES; side++) {
214 auto spContainerIterator{spacePointContainer->indexFindPtr(side==0 ? theModuleHash0 : theModuleHash1)};
215 if (spContainerIterator==
nullptr)
continue;
217 const std::vector<Identifier>& rdoList{(thisSide==side ?
sp->clusterList().first :
sp->clusterList().second)->rdoList()};
218 mySetOfSPIds.insert(rdoList.begin(), rdoList.end());
226 vNumberOfStrips.clear();
230 const int numberOfStrips{rdo->getGroupSize()};
231 (*hitsInLayer[systemIndex])[thisElement] += numberOfStrips;
232 local_tothits += numberOfStrips;
234 if (doThisSubsystem[systemIndex]) {
242 const int limit{firstStrip + numberOfStrips};
244 if (rdosOnTracks[wafer_hash].
find(strip_id) != rdosOnTracks[wafer_hash].end()) {
245 for (
int ichan{firstStrip}; ichan < limit; ++ichan) {
246 vEtaOnTrack.push_back(thisEta);
247 vPhiOnTrack.push_back(thisPhi);
248 vDTbinOnTrack.push_back((tbin == 2) or (tbin == 3));
249 vSystemIndexOnTrack.push_back(systemIndex);
252 vEta.push_back(thisEta);
253 vPhi.push_back(thisPhi);
254 vNumberOfStrips.push_back(numberOfStrips);
256 numberOfHitsFromAllRDOs += numberOfStrips;
259 if (mySetOfSPIds.find(strip_id) != mySetOfSPIds.end()) {
260 numberOfHitsFromSPs += numberOfStrips;
262 numberOfHitsFromSPs += numberOfStrips;
270 const std::string streamhitmap{
"mapsOfHitsOnTracks" + abbreviations[systemIndex] +
"_" +
271 "trackhitsmap_" + layerSide.
name()};
275 fill(
"SCTHitsNoiseMonitor_" + std::to_string(systemIndex), etaMapsOfHitsOnTracksAcc, phiMapsOfHitsOnTracksAcc);
277 const std::string hitmap{
"hitsmap" + abbreviations[systemIndex] +
"_" + layerSide.
name()};
282 fill(
"SCTHitsNoiseMonitor_" + std::to_string(systemIndex), etahitsmapAcc, phihitsmapAcc, numberOfStripsAcc);
285 const std::string hitmaprecent{
"hitsmaprecent" + abbreviations[systemIndex] +
"_" + layerSide.
name()};
288 auto numberOfStripsRecentAcc{
Monitored::Collection(
"numberOfStrips_"+hitmaprecent, vNumberOfStrips)};
289 fill(
"SCTHitsNoiseMonitor_" + std::to_string(systemIndex), etahitsmapRecentAcc, phihitsmapRecentAcc, numberOfStripsAcc);
291 const std::string streamhitmaprecent{
"mapsOfHitsOnTracksrecent" + abbreviations[systemIndex] +
"_" +
292 "trackhitsmap_" + layerSide.
name()};
296 fill(
"SCTHitsNoiseMonitor_" + std::to_string(systemIndex), etaMapsOfHitsOnTracksRecentAcc, phiMapsOfHitsOnTracksRecentAcc);
299 if (numberOfHitsFromAllRDOs > 0) {
300 int den{
N_STRIPS - numberOfHitsFromSPs};
301 int num{numberOfHitsFromAllRDOs - numberOfHitsFromSPs};
304 ATH_MSG_WARNING(
"Too many reconstructed space points for number of real hits");
307 occ[wafer_hash] =
static_cast<float>(num) /
static_cast<float>(den) * 1.E5;
310 hitOcc[wafer_hash] =
static_cast<float>(numberOfHitsFromAllRDOs) /
static_cast<float>(
N_STRIPS) * 1.E5;
312 vLumiBlock[systemIndex].push_back(lumi_block);
313 vNumberOfHitsFromAllRDOs[systemIndex].push_back(numberOfHitsFromAllRDOs);
314 vNumberOfHitsFromSPs[systemIndex].push_back(numberOfHitsFromSPs);
315 vIsSelectedTriggerHits[systemIndex].push_back(isSelectedTrigger);
322 fill(
"SCTHitsNoiseMonitorGeneral", Bec_TBinFracAllAcc, TBin_TBinFracAllAcc);
324 for (
unsigned int jReg{0}; jReg<
N_REGIONS; jReg++) {
326 auto numberOfHitsFromAllRDOsAcc{
Monitored::Collection(
"numberOfHitsFromAllRDOs", vNumberOfHitsFromAllRDOs[jReg])};
327 auto numberOfHitsFromSPsAcc{
Monitored::Collection(
"numberOfHitsFromSPs", vNumberOfHitsFromSPs[jReg])};
328 auto isSelectedTriggerHitsAcc{
Monitored::Collection(
"isSelectedTriggerHits", vIsSelectedTriggerHits[jReg])};
329 fill(
"SCTHitsNoiseMonitor_" + std::to_string(jReg), lbHitsAcc, numberOfHitsFromAllRDOsAcc, numberOfHitsFromSPsAcc, isSelectedTriggerHitsAcc);
334 if (not clusterContainer.
isValid()) {
338 std::vector<long unsigned int> vGroupSize;
339 for (
const InDet::SCT_ClusterCollection* clusterCollection: *clusterContainer) {
341 vGroupSize.push_back(cluster->rdoList().size());
345 fill(
"SCTHitsNoiseMonitorGeneral", cluSizeAcc);
347 fill(
"SCTHitsNoiseMonitorGeneral", hitsAcc);
355 std::vector<std::vector<float>> vNO2D[
N_REGIONS];
356 std::vector<std::vector<float>> vHO2D[
N_REGIONS];
357 std::vector<std::vector<int>> vEtaNOHO[
N_REGIONS];
358 std::vector<std::vector<int>> vPhiNOHO[
N_REGIONS];
359 std::vector<std::vector<bool>> vIsSelectedTriggerNOHO[
N_REGIONS];
364 vLB[jReg].reserve(
size);
365 vNO[jReg].reserve(
size);
366 vHO[jReg].reserve(
size);
367 vIsSelectedTrigger[jReg].reserve(
size);
370 vNO2D[jReg].resize(limits[jReg], {});
371 vHO2D[jReg].resize(limits[jReg], {});
372 vEtaNOHO[jReg].resize(limits[jReg], {});
373 vPhiNOHO[jReg].resize(limits[jReg], {});
374 vIsSelectedTriggerNOHO[jReg].resize(limits[jReg], {});
375 for (
unsigned int element{0}; element< limits[jReg]; ++element) {
377 vNO2D[jReg][element].reserve(nWafers);
378 vHO2D[jReg][element].reserve(nWafers);
379 vEtaNOHO[jReg][element].reserve(nWafers);
380 vPhiNOHO[jReg][element].reserve(nWafers);
381 vIsSelectedTriggerNOHO[jReg][element].reserve(nWafers);
386 for (
unsigned int iHash{0}; iHash<
N_WAFERS; iHash++) {
392 const unsigned int systemIndex{
bec2Index(barrel_ec)};
393 vLB[systemIndex].push_back(lumi_block);
394 vNO[systemIndex].push_back(occ[iHash]);
395 vHO[systemIndex].push_back(hitOcc[iHash]);
396 vIsSelectedTrigger[systemIndex].push_back(isSelectedTrigger);
400 vIsSelectedTrigger[
GENERAL_INDEX].push_back(isSelectedTrigger);
401 if (doThisSubsystem[systemIndex]) {
403 vNO2D[systemIndex][element].push_back(occ[iHash]);
404 vHO2D[systemIndex][element].push_back(hitOcc[iHash]);
405 vEtaNOHO[systemIndex][element].push_back(
m_pSCTHelper->eta_module(wafer_id));
406 vPhiNOHO[systemIndex][element].push_back(
m_pSCTHelper->phi_module(wafer_id));
407 vIsSelectedTriggerNOHO[systemIndex][element].push_back(isSelectedTrigger);
413 if (jReg==
GENERAL_INDEX) monitor =
"SCTHitsNoiseMonitorGeneral";
414 else monitor =
"SCTHitsNoiseMonitor_" + std::to_string(jReg);
420 fill(monitor, LBAcc, noAcc, hoAcc, IsSelectedTriggerAcc);
423 for (
unsigned int jReg{0}; jReg<
N_REGIONS; ++jReg){
424 for (
unsigned int element{0}; element < limits[jReg]; ++element) {
426 const std::string occMap{
"occupancymap" + abbreviations[jReg] +
"_" + layerSide.
name()};
431 auto isSelectedTriggerAcc{
Monitored::Collection(
"IsSelectedTrigger_"+occMap, vIsSelectedTriggerNOHO[jReg][element])};
432 fill(
"SCTHitsNoiseMonitor_" + std::to_string(jReg), etaEacc, phiAcc, hoAcc, noAcc, isSelectedTriggerAcc);
435 auto isSelectedTriggerRecentAcc{
Monitored::Collection(
"IsSelectedTriggerRecent_"+occMap, vIsSelectedTriggerNOHO[jReg][element])};
436 fill(
"SCTHitsNoiseMonitor_" + std::to_string(jReg), etaEacc, phiAcc, hoAcc, noAcc, isSelectedTriggerRecentAcc);
442 return StatusCode::SUCCESS;