25 static const std::string abbreviations[
N_REGIONS] = {
35 bool timeBinInPattern(
const int tbin,
const Pattern xxx) {
43 return ((tbin == 2) or (tbin == 3) or (tbin == 6) or (tbin == 7));
48 return ((tbin == 1) or (tbin == 3) or (tbin == 5) or (tbin == 7));
84 return StatusCode::RECOVERABLE;
95 std::array<std::unordered_set<Identifier>,
N_WAFERS> rdosOnTracks;
108 return StatusCode::SUCCESS;
112 static const unsigned int limits[
N_REGIONS] = {
116 const EventIDBase& pEvent{ctx.eventID()};
117 const int lumi_block{
static_cast<int>(pEvent.lumi_block())};
120 if (not rdoContainer.isValid()) {
122 return StatusCode::FAILURE;
126 if (not spacePointContainer.isValid()) {
128 return StatusCode::FAILURE;
131 bool isSelectedTrigger{
false};
136 isSelectedTrigger =
true;
142 if (isSelectedTrigger) {
146 std::vector<float> occ(
N_WAFERS, 0.);
147 std::vector<float> hitOcc(
N_WAFERS, 0.);
149 int local_tothits{0};
151 std::vector<int> barrel_local_nhitslayer(
N_BARRELSx2, 0);
152 std::vector<int> ECp_local_nhitslayer(
N_DISKSx2, 0);
153 std::vector<int> ECm_local_nhitslayer(
N_DISKSx2, 0);
154 std::vector<int>* hitsInLayer[
N_REGIONS] = {
155 &ECm_local_nhitslayer, &barrel_local_nhitslayer, &ECp_local_nhitslayer
157 const bool doThisSubsystem[
N_REGIONS] = {
162 std::vector<int> vNumberOfHitsFromAllRDOs[
N_REGIONS];
163 std::vector<int> vNumberOfHitsFromSPs[
N_REGIONS];
164 std::vector<bool> vIsSelectedTriggerHits[
N_REGIONS];
165 for (
unsigned int jReg{0}; jReg<
N_REGIONS; jReg++) {
166 unsigned int size{0};
169 vLumiBlock[jReg].reserve(
size);
170 vNumberOfHitsFromAllRDOs[jReg].reserve(
size);
171 vNumberOfHitsFromSPs[jReg].reserve(
size);
172 vIsSelectedTriggerHits[jReg].reserve(
size);
175 std::vector<int> vEtaOnTrack;
176 std::vector<int> vPhiOnTrack;
177 std::vector<float> vSystemIndexOnTrack;
178 std::vector<bool> vDTbinOnTrack;
180 std::vector<int> vEta;
181 std::vector<int> vPhi;
182 std::vector<int> vNumberOfStrips;
187 const Identifier wafer_id{rdoCollection->identify()};
188 const IdentifierHash wafer_hash{rdoCollection->identifyHash()};
191 IdentifierHash theModuleHash1;
194 const unsigned int systemIndex{
bec2Index(barrel_ec)};
200 const int thisElement{(
N_SIDES * thisLayerDisk) + thisSide};
204 int numberOfHitsFromSPs{0};
205 int numberOfHitsFromAllRDOs{0};
209 std::unordered_set<Identifier> mySetOfSPIds;
211 auto spContainerIterator{spacePointContainer->indexFindPtr(
side==0 ? theModuleHash0 : theModuleHash1)};
212 if (spContainerIterator==
nullptr)
continue;
214 const std::vector<Identifier>& rdoList{(thisSide==
side ? sp->clusterList().first : sp->clusterList().second)->rdoList()};
215 mySetOfSPIds.insert(rdoList.begin(), rdoList.end());
223 vNumberOfStrips.clear();
227 const int numberOfStrips{rdo->getGroupSize()};
228 (*hitsInLayer[systemIndex])[thisElement] += numberOfStrips;
229 local_tothits += numberOfStrips;
231 if (doThisSubsystem[systemIndex]) {
241 if (rdosOnTracks[wafer_hash].
find(strip_id) != rdosOnTracks[wafer_hash].end()) {
243 vEtaOnTrack.push_back(thisEta);
244 vPhiOnTrack.push_back(
thisPhi);
245 vDTbinOnTrack.push_back((tbin == 2) or (tbin == 3));
246 vSystemIndexOnTrack.push_back(systemIndex);
249 vEta.push_back(thisEta);
251 vNumberOfStrips.push_back(numberOfStrips);
253 numberOfHitsFromAllRDOs += numberOfStrips;
256 if (mySetOfSPIds.find(strip_id) != mySetOfSPIds.end()) {
257 numberOfHitsFromSPs += numberOfStrips;
259 numberOfHitsFromSPs += numberOfStrips;
267 const std::string streamhitmap{
"mapsOfHitsOnTracks" + abbreviations[systemIndex] +
"_" +
268 "trackhitsmap_" + layerSide.name()};
272 fill(
"SCTHitsNoiseMonitor_" +
std::to_string(systemIndex), etaMapsOfHitsOnTracksAcc, phiMapsOfHitsOnTracksAcc);
274 const std::string hitmap{
"hitsmap" + abbreviations[systemIndex] +
"_" + layerSide.name()};
279 fill(
"SCTHitsNoiseMonitor_" +
std::to_string(systemIndex), etahitsmapAcc, phihitsmapAcc, numberOfStripsAcc);
282 const std::string hitmaprecent{
"hitsmaprecent" + abbreviations[systemIndex] +
"_" + layerSide.name()};
285 auto numberOfStripsRecentAcc{
Monitored::Collection(
"numberOfStrips_"+hitmaprecent, vNumberOfStrips)};
286 fill(
"SCTHitsNoiseMonitor_" +
std::to_string(systemIndex), etahitsmapRecentAcc, phihitsmapRecentAcc, numberOfStripsAcc);
288 const std::string streamhitmaprecent{
"mapsOfHitsOnTracksrecent" + abbreviations[systemIndex] +
"_" +
289 "trackhitsmap_" + layerSide.name()};
293 fill(
"SCTHitsNoiseMonitor_" +
std::to_string(systemIndex), etaMapsOfHitsOnTracksRecentAcc, phiMapsOfHitsOnTracksRecentAcc);
296 if (numberOfHitsFromAllRDOs > 0) {
297 int den{
N_STRIPS - numberOfHitsFromSPs};
298 int num{numberOfHitsFromAllRDOs - numberOfHitsFromSPs};
301 ATH_MSG_WARNING(
"Too many reconstructed space points for number of real hits");
304 occ[wafer_hash] =
static_cast<float>(
num) /
static_cast<float>(den) * 1.E5;
307 hitOcc[wafer_hash] =
static_cast<float>(numberOfHitsFromAllRDOs) /
static_cast<float>(
N_STRIPS) * 1.E5;
309 vLumiBlock[systemIndex].push_back(lumi_block);
310 vNumberOfHitsFromAllRDOs[systemIndex].push_back(numberOfHitsFromAllRDOs);
311 vNumberOfHitsFromSPs[systemIndex].push_back(numberOfHitsFromSPs);
312 vIsSelectedTriggerHits[systemIndex].push_back(isSelectedTrigger);
319 fill(
"SCTHitsNoiseMonitorGeneral", Bec_TBinFracAllAcc, TBin_TBinFracAllAcc);
321 for (
unsigned int jReg{0}; jReg<
N_REGIONS; jReg++) {
323 auto numberOfHitsFromAllRDOsAcc{
Monitored::Collection(
"numberOfHitsFromAllRDOs", vNumberOfHitsFromAllRDOs[jReg])};
324 auto numberOfHitsFromSPsAcc{
Monitored::Collection(
"numberOfHitsFromSPs", vNumberOfHitsFromSPs[jReg])};
325 auto isSelectedTriggerHitsAcc{
Monitored::Collection(
"isSelectedTriggerHits", vIsSelectedTriggerHits[jReg])};
326 fill(
"SCTHitsNoiseMonitor_" +
std::to_string(jReg), lbHitsAcc, numberOfHitsFromAllRDOsAcc, numberOfHitsFromSPsAcc, isSelectedTriggerHitsAcc);
331 if (not clusterContainer.isValid()) {
335 std::vector<long unsigned int> vGroupSize;
338 vGroupSize.push_back(cluster->rdoList().size());
342 fill(
"SCTHitsNoiseMonitorGeneral", cluSizeAcc);
344 fill(
"SCTHitsNoiseMonitorGeneral", hitsAcc);
352 std::vector<std::vector<float>> vNO2D[
N_REGIONS];
353 std::vector<std::vector<float>> vHO2D[
N_REGIONS];
354 std::vector<std::vector<int>> vEtaNOHO[
N_REGIONS];
355 std::vector<std::vector<int>> vPhiNOHO[
N_REGIONS];
356 std::vector<std::vector<bool>> vIsSelectedTriggerNOHO[
N_REGIONS];
361 vLB[jReg].reserve(
size);
362 vNO[jReg].reserve(
size);
363 vHO[jReg].reserve(
size);
364 vIsSelectedTrigger[jReg].reserve(
size);
367 vNO2D[jReg].resize(limits[jReg], {});
368 vHO2D[jReg].resize(limits[jReg], {});
369 vEtaNOHO[jReg].resize(limits[jReg], {});
370 vPhiNOHO[jReg].resize(limits[jReg], {});
371 vIsSelectedTriggerNOHO[jReg].resize(limits[jReg], {});
372 for (
unsigned int element{0}; element< limits[jReg]; ++element) {
374 vNO2D[jReg][element].reserve(nWafers);
375 vHO2D[jReg][element].reserve(nWafers);
376 vEtaNOHO[jReg][element].reserve(nWafers);
377 vPhiNOHO[jReg][element].reserve(nWafers);
378 vIsSelectedTriggerNOHO[jReg][element].reserve(nWafers);
383 for (
unsigned int iHash{0}; iHash<
N_WAFERS; iHash++) {
384 const IdentifierHash wafer_hash{iHash};
389 const unsigned int systemIndex{
bec2Index(barrel_ec)};
390 vLB[systemIndex].push_back(lumi_block);
391 vNO[systemIndex].push_back(occ[iHash]);
392 vHO[systemIndex].push_back(hitOcc[iHash]);
393 vIsSelectedTrigger[systemIndex].push_back(isSelectedTrigger);
397 vIsSelectedTrigger[
GENERAL_INDEX].push_back(isSelectedTrigger);
398 if (doThisSubsystem[systemIndex]) {
400 vNO2D[systemIndex][element].push_back(occ[iHash]);
401 vHO2D[systemIndex][element].push_back(hitOcc[iHash]);
404 vIsSelectedTriggerNOHO[systemIndex][element].push_back(isSelectedTrigger);
410 if (jReg==
GENERAL_INDEX) monitor =
"SCTHitsNoiseMonitorGeneral";
417 fill(monitor, LBAcc, noAcc, hoAcc, IsSelectedTriggerAcc);
420 for (
unsigned int jReg{0}; jReg<
N_REGIONS; ++jReg){
421 for (
unsigned int element{0}; element < limits[jReg]; ++element) {
423 const std::string occMap{
"occupancymap" + abbreviations[jReg] +
"_" + layerSide.
name()};
428 auto isSelectedTriggerAcc{
Monitored::Collection(
"IsSelectedTrigger_"+occMap, vIsSelectedTriggerNOHO[jReg][element])};
429 fill(
"SCTHitsNoiseMonitor_" +
std::to_string(jReg), etaEacc, phiAcc, hoAcc, noAcc, isSelectedTriggerAcc);
432 auto isSelectedTriggerRecentAcc{
Monitored::Collection(
"IsSelectedTriggerRecent_"+occMap, vIsSelectedTriggerNOHO[jReg][element])};
433 fill(
"SCTHitsNoiseMonitor_" +
std::to_string(jReg), etaEacc, phiAcc, hoAcc, noAcc, isSelectedTriggerRecentAcc);
439 return StatusCode::SUCCESS;
445 rdosOnTracks.fill(std::unordered_set<Identifier>());
447 if (not rdoContainer.isValid()) {
449 return StatusCode::FAILURE;
455 if (not tracks.isValid()) {
457 return StatusCode::FAILURE;
462 <<
" tracks. Don't do hits-on-track-hists");
463 return StatusCode::SUCCESS;
467 if (
track ==
nullptr) {
473 if (trackStates ==
nullptr) {
474 ATH_MSG_WARNING(
"for current track is TrackStateOnSurfaces == Null, no data will be written for this track");
482 if (RawDataClus ==
nullptr) {
487 if (RawDataClus->detectorElement()->isSCT()) {
488 const std::vector<Identifier>& rdoList{RawDataClus->rdoList()};
489 rdosOnTracks[RawDataClus->detectorElement()->identifyHash()].insert(rdoList.begin(), rdoList.end());
495 return StatusCode::SUCCESS;
499 return StatusCode::SUCCESS;