45 {
46
47
49
50
51 int pixCLBeforeCuts{};
52 int pixCL{};
53 int pixCLnoToT{};
54 int pixCL_1{};
55 int pixCL_2{};
56 int pixCLmin3{};
57 int pixCLBarrel{};
58 int pixCLEndcapA{};
59 int pixCLEndcapC{};
60 int pixModulesOverThreshold{};
61 std::complex<double> pixQ2TotSum;
62
63 SG::ReadHandle<SpacePointContainer> pixelSP(
m_pixelSpKey, context);
64 ATH_MSG_DEBUG(
"Successfully retrieved pixel SP container of size " << pixelSP->size());
65
66 for (const auto pixSPointColl : *pixelSP) {
67 if (pixSPointColl == nullptr) {
68 continue;
69 }
70
71 const Identifier pixid = (pixSPointColl)->
identify();
72 if (
m_doOnlyBLayer ==
true && pixelHelper->layer_disk(pixid) != 0) {
73 continue;
74 }
75 const int bec = pixelHelper->barrel_ec(pixid);
76
77 int nPixSP{}, nPixCL_1{}, nPixCL_2{}, nPixCLmin3{}, nPixCLnoToT{};
78 std::complex<double> pixQ2sum;
79
80 for (const auto pSP : *pixSPointColl) {
81 pixCLBeforeCuts++;
83 if ( isInNoiseArea(pSP->r(), pSP->globalPosition()[
Amg::z]) ) {
84 continue;
85 }
86 }
87 auto[hashId1, hashId2] = pSP->elementIdList();
89 ATH_MSG_VERBOSE(
"Module " << hashId1 <<
" in exclusion list, skipping the SP");
90 continue;
91 }
92
93 const InDet::PixelCluster *pixClust = static_cast<const InDet::PixelCluster *>(pSP->clusterList().first);
94
95 const int pixClSize = (pixClust->
rdoList()).size();
96 const int pixclToT = pixClust->
totalToT();
97
98 ++nPixCLnoToT;
99 pixQ2sum += std::polar(1.0, 2.0*pSP->phi());
101 ++nPixSP;
102 if (pixClSize == 1) {
103 ++nPixCL_1;
104 }
105 if (pixClSize == 2) {
106 ++nPixCL_2;
107 }
108 if (pixClSize >= 3) {
109 ++nPixCLmin3;
110 }
111 }
112 }
113
114
116 ATH_MSG_DEBUG(
" This pixel module : " << pixid <<
" produced " << nPixSP <<
" pix spacepoints. Ignoring these spacepoints as the maximum allowed spacepoints per module is " <<
m_pixModuleThreshold);
117 pixModulesOverThreshold++;
118 } else {
119 pixCL += nPixSP;
120 pixQ2TotSum += pixQ2sum;
121 pixCLnoToT += nPixCLnoToT;
122 pixCL_1 += nPixCL_1;
123 pixCL_2 += nPixCL_2;
124 pixCLmin3 += nPixCLmin3;
125 if (bec == 0) {
126 pixCLBarrel += nPixSP;
127 ATH_MSG_VERBOSE(
" Formed " << nPixSP <<
" PIX spacepoints in PIX Barrel after ToT cut.");
128 } else if (bec == 2) {
129 pixCLEndcapA += nPixSP;
130 ATH_MSG_VERBOSE(
" Formed " << nPixSP <<
" PIX spacepoints in PIX ECA after ToT cut.");
131 } else if (bec == -2) {
132 pixCLEndcapC += nPixSP;
133 ATH_MSG_VERBOSE(
" Formed " << nPixSP <<
" PIX spacepoints in PIX ECC after ToT cut.");
134 }
135 }
136 }
137 const float pixQ2mod = pixCLnoToT !=0 ? std::abs(pixQ2TotSum)/pixCLnoToT : 0.0;
138 ATH_MSG_DEBUG(
"REGTEST : Formed " << pixCLBeforeCuts <<
" pixel spacepoints in total before cuts.");
139 ATH_MSG_DEBUG(
"REGTEST : " << pixCL_1 <<
" have cl size == 1 in total.");
140 ATH_MSG_DEBUG(
"REGTEST : " << pixCL_2 <<
" have cl size == 2 in total.");
141 ATH_MSG_DEBUG(
"REGTEST : " << pixCLmin3 <<
" have cl size >= 3 in total.");
142 ATH_MSG_DEBUG(
"REGTEST : Formed " << pixCLnoToT <<
" pixel spacepoints without ToT cut in total.");
143 ATH_MSG_DEBUG(
"REGTEST : Formed " << pixCL <<
" pixel spacepoints after ToT cut in total.");
144 ATH_MSG_DEBUG(
"REGTEST : Formed " << pixCLBarrel <<
" SP in pixel barrel in total.");
145 ATH_MSG_DEBUG(
"REGTEST : Formed " << pixCLEndcapA <<
" SP in pixel ECA in total.");
146 ATH_MSG_DEBUG(
"REGTEST : Formed " << pixCLEndcapC <<
" SP in pixel ECC in total.");
147
149
150 SG::ReadHandle<SpacePointContainer> SctSP(
m_sctSpKey, context);
152 ATH_MSG_DEBUG(
"Successfully retrieved SCT SP container of size " << SctSP->size());
153
154
155 int nSctSP{};
156 int sctSPBarrel{};
157 int sctSPEndcapA{};
158 int sctSPEndcapC{};
159 int sctSP{};
160 int sctModulesOverThreshold{};
161
162 for (const auto SctSPointColl : *SctSP) {
163 if (SctSPointColl == nullptr) {
164 continue;
165 }
166
167 nSctSP = (SctSPointColl)->size();
168 const Identifier Sctid = (SctSPointColl)->
identify();
169 const int bec = (
int)SctHelper->barrel_ec(Sctid);
170
172 << " with sctid module " << Sctid);
173
174
176
177 ATH_MSG_DEBUG(
" This SCT module : " << Sctid <<
" produced " << nSctSP <<
" SCT spacepoints. Ignoring these spacepoints as the number of allowed spacepoints per module is between"
179 sctModulesOverThreshold++;
180 } else {
181 if (bec == 0) {
182 sctSPBarrel += nSctSP;
184 } else if (bec == 2) {
185 sctSPEndcapA += nSctSP;
187 } else if (bec == -2) {
188 sctSPEndcapC += nSctSP;
190 }
191 }
192 }
193
194 sctSP = sctSPEndcapC + sctSPBarrel + sctSPEndcapA;
195
196 ATH_MSG_DEBUG(
"REGTEST : Formed " << sctSP <<
" sct spacepoints in total.");
197 ATH_MSG_DEBUG(
"REGTEST : Formed " << sctSPEndcapC <<
" sct ECC spacepoints in total.");
198 ATH_MSG_DEBUG(
"REGTEST : Formed " << sctSPBarrel <<
" sct Barr spacepoints in total.");
199 ATH_MSG_DEBUG(
"REGTEST : Formed " << sctSPEndcapA <<
" sct ECA spacepoints in total.");
200
201
202 SG::WriteHandle<xAOD::TrigCompositeContainer> spacePointHandle(
m_spacePointsKey, context);
203
204 auto spacePoints = std::make_unique<xAOD::TrigCompositeContainer>();
205 auto spacePointsAux = std::make_unique<xAOD::TrigCompositeAuxContainer>();
207
210
211 std::vector<std::reference_wrapper<Monitored::IMonitoredVariable>> monitoredVariables;
212
213#define SAVE_AND_MONITOR(__VARNAME) \
214 spCounts->setDetail(#__VARNAME, __VARNAME); \
215 auto mon_##__VARNAME = Monitored::Scalar(#__VARNAME, __VARNAME); \
216 monitoredVariables.emplace_back(mon_##__VARNAME);
217
231#undef SAVE_AND_MONITOR
232
233 auto mon_pixCLBeforeCuts = Monitored::Scalar<int>("pixCLBeforeCuts", pixCLBeforeCuts);
234 monitoredVariables.emplace_back(mon_pixCLBeforeCuts);
235 auto mon_pixModulesOverThreshold = Monitored::Scalar<int>("pixModulesOverThreshold", pixModulesOverThreshold);
236 monitoredVariables.emplace_back(mon_pixModulesOverThreshold);
237 auto mon_sctModulesOverThreshold = Monitored::Scalar<int>("sctModulesOverThreshold", sctModulesOverThreshold);
238 monitoredVariables.emplace_back(mon_sctModulesOverThreshold);
239 Monitored::Group(
m_monTool, monitoredVariables);
240
241 ATH_CHECK(spacePointHandle.record(std::move(spacePoints), std::move(spacePointsAux)));
242
243 return StatusCode::SUCCESS;
244}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define SAVE_AND_MONITOR(__VARNAME)
Gaudi::Property< bool > m_doOnlyBLayer
SG::ReadHandleKey< PixelID > m_pixelHelperKey
SG::ReadHandleKey< SpacePointContainer > m_pixelSpKey
Gaudi::Property< int > m_pixelClusToTCut
Gaudi::Property< int > m_pixModuleThreshold
std::set< unsigned int > m_modulesToSkipSet
SG::WriteHandleKey< xAOD::TrigCompositeContainer > m_spacePointsKey
ToolHandle< GenericMonitoringTool > m_monTool
SG::ReadHandleKey< SCT_ID > m_sctHelperKey
Gaudi::Property< int > m_sctModuleHigherThreshold
Gaudi::Property< bool > m_removeBLayerModuleEdgeNoise
Gaudi::Property< int > m_sctModuleLowerThreshold
SG::ReadHandleKey< SpacePointContainer > m_sctSpKey
const std::vector< Identifier > & rdoList() const
return the List of rdo identifiers (pointers)
TrigComposite_v1 TrigComposite
Declare the latest version of the class.
const Identifier & identify(const UncalibratedMeasurement *meas)
Returns the associated identifier from the muon measurement.