ATLAS Offline Software
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 
5 #include "TrigCountSpacePoints.h"
6 
8 namespace {
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 
29 TrigCountSpacePoints::TrigCountSpacePoints(const std::string &name, ISvcLocator *pSvcLocator) : AthReentrantAlgorithm(name, pSvcLocator) {}
30 
36  ATH_CHECK(m_spacePointsKey.initialize());
37  ATH_CHECK(m_spacePointsAuxKey.initialize());
38  if (!m_monTool.empty()) {
39  ATH_CHECK(m_monTool.retrieve());
40  }
41  m_modulesToSkipSet.insert(m_modulesToSkip.begin(), m_modulesToSkip.end());
42  return StatusCode::SUCCESS;
43 }
44 
45 StatusCode 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 
208  xAOD::TrigComposite *spCounts = new xAOD::TrigComposite();
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 }
beamspotman.r
def r
Definition: beamspotman.py:676
TrigCountSpacePoints.h
xAOD::identify
const Identifier & identify(const UncalibratedMeasurement *meas)
Returns the associated identifier from the muon measurement.
Definition: MuonSpectrometer/MuonPhaseII/Event/xAOD/xAODMuonPrepData/Root/UtilFunctions.cxx:61
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
TrigCountSpacePoints::m_removeBLayerModuleEdgeNoise
Gaudi::Property< bool > m_removeBLayerModuleEdgeNoise
Definition: TrigCountSpacePoints.h:27
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
TrigCountSpacePoints::m_pixelHelperKey
SG::ReadHandleKey< PixelID > m_pixelHelperKey
Definition: TrigCountSpacePoints.h:36
xAOD::TrigComposite
TrigComposite_v1 TrigComposite
Declare the latest version of the class.
Definition: Event/xAOD/xAODTrigger/xAODTrigger/TrigComposite.h:16
ParticleGun_SamplingFraction.bec
int bec
Definition: ParticleGun_SamplingFraction.py:89
PixelCluster.h
PixelID::barrel_ec
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition: PixelID.h:619
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
IdentifiableContainerMT::size
size_t size() const
Duplicate of fullSize for backwards compatability.
Definition: IdentifiableContainerMT.h:206
TrigCountSpacePoints::m_spacePointsKey
SG::WriteHandleKey< xAOD::TrigCompositeContainer > m_spacePointsKey
Definition: TrigCountSpacePoints.h:38
Trk::PrepRawData::rdoList
const std::vector< Identifier > & rdoList() const
return the List of rdo identifiers (pointers)
TrigCountSpacePoints::m_pixelSpKey
SG::ReadHandleKey< SpacePointContainer > m_pixelSpKey
Definition: TrigCountSpacePoints.h:34
TrigCountSpacePoints::m_doOnlyBLayer
Gaudi::Property< bool > m_doOnlyBLayer
Definition: TrigCountSpacePoints.h:26
TrigCountSpacePoints::m_pixelClusToTCut
Gaudi::Property< int > m_pixelClusToTCut
Definition: TrigCountSpacePoints.h:31
SCT_ID::barrel_ec
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition: SCT_ID.h:728
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
TrigCountSpacePoints::m_sctModuleHigherThreshold
Gaudi::Property< int > m_sctModuleHigherThreshold
Definition: TrigCountSpacePoints.h:29
TrigCountSpacePoints::m_sctSpKey
SG::ReadHandleKey< SpacePointContainer > m_sctSpKey
Definition: TrigCountSpacePoints.h:35
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
TrigCountSpacePoints::m_modulesToSkip
Gaudi::Property< std::vector< unsigned int > > m_modulesToSkip
Definition: TrigCountSpacePoints.h:32
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
Amg::z
@ z
Definition: GeoPrimitives.h:36
TrigCountSpacePoints::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: TrigCountSpacePoints.h:41
SAVE_AND_MONITOR
#define SAVE_AND_MONITOR(__VARNAME)
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
InDet::PixelCluster::totalToT
int totalToT() const
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelCluster.h:205
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TrigCountSpacePoints::initialize
virtual StatusCode initialize() override
Definition: TrigCountSpacePoints.cxx:31
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
xAOD::TrigComposite_v1
Class used to describe composite objects in the HLT.
Definition: TrigComposite_v1.h:52
TrigCountSpacePoints::m_sctHelperKey
SG::ReadHandleKey< SCT_ID > m_sctHelperKey
Definition: TrigCountSpacePoints.h:37
TrigCountSpacePoints::m_pixModuleThreshold
Gaudi::Property< int > m_pixModuleThreshold
Definition: TrigCountSpacePoints.h:28
PixelID::layer_disk
int layer_disk(const Identifier &id) const
Definition: PixelID.h:626
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
InDet::PixelCluster
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelCluster.h:49
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
TrigCountSpacePoints::m_modulesToSkipSet
std::set< unsigned int > m_modulesToSkipSet
Definition: TrigCountSpacePoints.h:33
TrigCountSpacePoints::TrigCountSpacePoints
TrigCountSpacePoints(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TrigCountSpacePoints.cxx:29
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
TrigCountSpacePoints::m_spacePointsAuxKey
SG::WriteHandleKey< xAOD::TrigCompositeAuxContainer > m_spacePointsAuxKey
Definition: TrigCountSpacePoints.h:39
TrigCountSpacePoints::m_sctModuleLowerThreshold
Gaudi::Property< int > m_sctModuleLowerThreshold
Definition: TrigCountSpacePoints.h:30
TrigCountSpacePoints::execute
virtual StatusCode execute(const EventContext &context) const override
Definition: TrigCountSpacePoints.cxx:45
Identifier
Definition: IdentifierFieldParser.cxx:14