ATLAS Offline Software
Loading...
Searching...
No Matches
TrigCountSpacePoints.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3*/
4
6
8namespace {
9 bool isInNoiseArea(float r, float zz) {
10 if(r<40){
11 if(zz>-3.5 && zz<-1.5) return true;
12 if(zz>38. && zz<40.) return true;
13 if(zz>79.5 && zz<81.5) return true;
14 if(zz>121. && zz<123.) return true;
15 if(zz>162. && zz<165.) return true;
16 if(zz>204. && zz<206.) return true;
17 if(zz>245.5 && zz<247.5) return true;
18 if(zz>-45. && zz<-43.5) return true;
19 if(zz>-86.5 && zz<-84.5) return true;
20 if(zz>-128. && zz<-126.) return true;
21 if(zz>-170. && zz<-167.) return true;
22 if(zz>-211. && zz<-209.) return true;
23 if(zz>-252.5 && zz<-250.5) return true;
24 }
25 return false;
26 }
27}
28
29TrigCountSpacePoints::TrigCountSpacePoints(const std::string &name, ISvcLocator *pSvcLocator) : AthReentrantAlgorithm(name, pSvcLocator) {}
30
32 ATH_CHECK(m_pixelSpKey.initialize());
33 ATH_CHECK(m_pixelHelperKey.initialize());
34 ATH_CHECK(m_sctSpKey.initialize());
35 ATH_CHECK(m_sctHelperKey.initialize());
36 ATH_CHECK(m_spacePointsKey.initialize());
37 ATH_CHECK(m_spacePointsAuxKey.initialize());
38 if (!m_monTool.empty()) {
39 ATH_CHECK(m_monTool.retrieve());
40 }
42 return StatusCode::SUCCESS;
43}
44
45StatusCode TrigCountSpacePoints::execute(const EventContext &context) const {
46
47 // For Pixel info decoding
48 SG::ReadHandle<PixelID> pixelHelper(m_pixelHelperKey, context);
49
50 // counters
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
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();
88 if ( m_modulesToSkipSet.count(static_cast<unsigned int>(hashId1)) != 0) {
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()); // this is complex value exp(2i*phi)
100 if (pixclToT > m_pixelClusToTCut) {
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 // total
115 if (nPixSP > m_pixModuleThreshold) {
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
151 SG::ReadHandle<SCT_ID> SctHelper(m_sctHelperKey, context);
152 ATH_MSG_DEBUG("Successfully retrieved SCT SP container of size " << SctSP->size());
153
154 // counters
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
171 ATH_MSG_VERBOSE(" Formed " << nSctSP << " sct spacepoints"
172 << " with sctid module " << Sctid);
173 // barrel
174 // total
175 if (nSctSP < m_sctModuleLowerThreshold && nSctSP > m_sctModuleHigherThreshold) {
176 // this is noise
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 { // Accept the spacepoints
181 if (bec == 0) {
182 sctSPBarrel += nSctSP;
183 ATH_MSG_VERBOSE(" Formed " << nSctSP << " SCT barrel spacepoints .");
184 } else if (bec == 2) { // endcap, side A
185 sctSPEndcapA += nSctSP;
186 ATH_MSG_VERBOSE(" Formed " << nSctSP << " SCT ECA spacepoints.");
187 } else if (bec == -2) { // endcap, side C
188 sctSPEndcapC += nSctSP;
189 ATH_MSG_VERBOSE(" Formed " << nSctSP << " SCT ECC spacepoints.");
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 // Recording Data
203
204 auto spacePoints = std::make_unique<xAOD::TrigCompositeContainer>();
205 auto spacePointsAux = std::make_unique<xAOD::TrigCompositeAuxContainer>();
206 spacePoints->setStore(spacePointsAux.get());
207
209 spacePoints->push_back(spCounts);
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
218 SAVE_AND_MONITOR(pixCL);
219 SAVE_AND_MONITOR(pixCLnoToT);
220 SAVE_AND_MONITOR(pixCL_1);
221 SAVE_AND_MONITOR(pixCL_2);
222 SAVE_AND_MONITOR(pixCLmin3);
223 SAVE_AND_MONITOR(pixCLBarrel);
224 SAVE_AND_MONITOR(pixCLEndcapA);
225 SAVE_AND_MONITOR(pixCLEndcapC);
226 SAVE_AND_MONITOR(sctSP);
227 SAVE_AND_MONITOR(sctSPBarrel);
228 SAVE_AND_MONITOR(sctSPEndcapA);
229 SAVE_AND_MONITOR(sctSPEndcapC);
230 SAVE_AND_MONITOR(pixQ2mod);
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 ATH_MSG_DEBUG(x)
#define SAVE_AND_MONITOR(__VARNAME)
An algorithm that can be simultaneously executed in multiple threads.
Group of local monitoring quantities and retain correlation when filling histograms
Declare a monitored scalar variable.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
Gaudi::Property< bool > m_doOnlyBLayer
SG::ReadHandleKey< PixelID > m_pixelHelperKey
SG::ReadHandleKey< SpacePointContainer > m_pixelSpKey
Gaudi::Property< int > m_pixelClusToTCut
virtual StatusCode initialize() override
Gaudi::Property< int > m_pixModuleThreshold
std::set< unsigned int > m_modulesToSkipSet
SG::WriteHandleKey< xAOD::TrigCompositeContainer > m_spacePointsKey
ToolHandle< GenericMonitoringTool > m_monTool
TrigCountSpacePoints(const std::string &name, ISvcLocator *pSvcLocator)
SG::ReadHandleKey< SCT_ID > m_sctHelperKey
Gaudi::Property< std::vector< unsigned int > > m_modulesToSkip
Gaudi::Property< int > m_sctModuleHigherThreshold
virtual StatusCode execute(const EventContext &context) const override
Gaudi::Property< bool > m_removeBLayerModuleEdgeNoise
Gaudi::Property< int > m_sctModuleLowerThreshold
SG::WriteHandleKey< xAOD::TrigCompositeAuxContainer > m_spacePointsAuxKey
SG::ReadHandleKey< SpacePointContainer > m_sctSpKey
const std::vector< Identifier > & rdoList() const
return the List of rdo identifiers (pointers)
int r
Definition globals.cxx:22
TrigComposite_v1 TrigComposite
Declare the latest version of the class.