26 static const std::string abbreviations[
N_REGIONS] = {
36 bool timeBinInPattern(
const int tbin,
const Pattern xxx) {
44 return ((tbin == 2) or (tbin == 3) or (tbin == 6) or (tbin == 7));
49 return ((tbin == 1) or (tbin == 3) or (tbin == 5) or (tbin == 7));
85 return StatusCode::RECOVERABLE;
96 std::array<std::unordered_set<Identifier>,
N_WAFERS> rdosOnTracks;
109 return StatusCode::SUCCESS;
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()};
189 const IdentifierHash wafer_hash{rdoCollection->identifyHash()};
192 IdentifierHash theModuleHash1;
195 const unsigned int systemIndex{
bec2Index(barrel_ec)};
201 const int thisElement{(
N_SIDES * thisLayerDisk) + thisSide};
205 int numberOfHitsFromSPs{0};
206 int numberOfHitsFromAllRDOs{0};
210 std::unordered_set<Identifier> mySetOfSPIds;
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]) {
242 if (rdosOnTracks[wafer_hash].
find(strip_id) != rdosOnTracks[wafer_hash].end()) {
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);
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;
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++) {
385 const IdentifierHash wafer_hash{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]);
405 vIsSelectedTriggerNOHO[systemIndex][element].push_back(isSelectedTrigger);
411 if (jReg==
GENERAL_INDEX) monitor =
"SCTHitsNoiseMonitorGeneral";
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;
446 rdosOnTracks.fill(std::unordered_set<Identifier>());
448 if (not rdoContainer.isValid()) {
450 return StatusCode::FAILURE;
456 if (not tracks.isValid()) {
458 return StatusCode::FAILURE;
463 <<
" tracks. Don't do hits-on-track-hists");
464 return StatusCode::SUCCESS;
468 if (
track ==
nullptr) {
474 if (trackStates ==
nullptr) {
475 ATH_MSG_WARNING(
"for current track is TrackStateOnSurfaces == Null, no data will be written for this track");
483 if (RawDataClus ==
nullptr) {
488 if (RawDataClus->detectorElement()->isSCT()) {
489 const std::vector<Identifier>& rdoList{RawDataClus->rdoList()};
490 rdosOnTracks[RawDataClus->detectorElement()->identifyHash()].insert(rdoList.begin(), rdoList.end());
496 return StatusCode::SUCCESS;
500 return StatusCode::SUCCESS;