ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
NSWDataMonAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
5 // Package : NSWRawDataMonAlg
6 // Authors: M. Biglietti (Roma Tre)
7 //
8 // DESCRIPTION:
9 // Subject: NSW-->Offline Muon Data Quality
11 
12 
13 #include "NSWDataMonAlg.h"
17 
19 // *********************************************************************
20 // Public Methods
21 // *********************************************************************
22 
23 NSWDataMonAlg::NSWDataMonAlg( const std::string& name, ISvcLocator* pSvcLocator ) :
24  AthMonitorAlgorithm(name,pSvcLocator)
25 { }
26 
27 /*---------------------------------------------------------*/
29 /*---------------------------------------------------------*/
30 {
31  //init message stream
32  ATH_MSG_DEBUG("initialize NSWDataMonAlg");
33 
36  ATH_CHECK(m_idHelperSvc.retrieve());
37 
38 
39 
40  ATH_MSG_DEBUG(" end of initialize " );
41  ATH_MSG_INFO("NSWDataMonAlg initialization DONE " );
42 
43  return StatusCode::SUCCESS;
44 }
45 
46 StatusCode NSWDataMonAlg::fillHistograms(const EventContext& ctx) const
47 {
48 
49  ATH_MSG_DEBUG("NSWDataMonAlg::MM RawData Monitoring Histograms being filled" );
51  if (!muonContainer.isValid()) {
52  ATH_MSG_FATAL("Could not get muon container: " << m_muonKey.fullKey());
53  return StatusCode::FAILURE;
54  }
55 
56  std::string NSWMonGroup = "NSWMonGroup";
57 
58  int lumiblock = GetEventInfo(ctx)->lumiBlock();
59 
61 
62  for (const xAOD::Muon* mu : *muonContainer) {
63  if(mu -> pt() < m_cutPt) continue;
64 
65 
66  if(!(mu -> author() == xAOD::Muon::Author::MuidCo || (mu -> author() == xAOD::Muon::Author::MuidSA && std::abs(mu->eta()) > 2.5) ) ) continue;
67  const xAOD::TrackParticle* saTP = mu->primaryTrackParticle();
68  if(saTP == nullptr) continue;
69  const Trk::Track* saTrack = saTP->track();
70  if(!saTrack) continue;
71 
72  float eta_mu=saTP->eta();
73 
74  int ref_sector=-99;
75  float z_nsw=-99;
76  float theta_mu=saTP->theta();
77  float phi_mu=saTP->phi();
78 
79  std::string side = "sideA";
80  int iside = 1;
81  if(eta_mu<0) {
82  side = "sideC";
83  iside=-1;
84  }
85 
86  auto mu_phi = Monitored::Scalar<float>("phi_mu_"+side, phi_mu);
87 
88  std::vector<int> layers_mm; std::vector<int> layers_stg;
89  int layer_max=-99;
90  float min_z_nsw=9999;
91 
92  for(const Trk::TrackStateOnSurface* trkState : *saTrack->trackStateOnSurfaces()) {
93  if(!(trkState)) continue;
94 
95  if (!trkState->type(Trk::TrackStateOnSurface::Measurement)) continue;
96  const Trk::MeasurementBase* meas = trkState->measurementOnTrack() ;
97  if(!meas) continue;
98 
99  const Trk::RIO_OnTrack* rot = dynamic_cast<const Trk::RIO_OnTrack*>(meas);
100  if(!rot) continue;
101 
102 
103  Identifier rot_id = rot->identify();
104 
105  int channelType = m_idHelperSvc->stgcIdHelper().channelType(rot_id);
106  if(!(m_idHelperSvc->isMM(rot_id) or channelType == sTgcIdHelper::sTgcChannelTypes::Strip)) continue;
107 
108 
109 
110  const Muon::MuonClusterOnTrack* cluster = dynamic_cast<const Muon::MuonClusterOnTrack*>(rot);
111 
112  if (!cluster) continue;
113 
114  const Muon::MuonCluster* mmPrepData = cluster->prepRawData();
115  Amg::Vector3D pos = mmPrepData->globalPosition();
116  if(fabs(pos.z())<min_z_nsw){
117  z_nsw=pos.z();
118  min_z_nsw=fabs(z_nsw);
119  }
120  int multi_mm=0;
121  int gap_mm=0;
122  int multi_stg=0;
123  int gap_stg=0;
124 
125  if(m_idHelperSvc->isMM(rot_id)) {
126  multi_mm = m_idHelperSvc->mmIdHelper().multilayer(rot_id);
127  gap_mm = m_idHelperSvc->mmIdHelper().gasGap(rot_id);
128  auto layer_mm=gap_mm+(multi_mm-1)*4;
129 
130  if (std::find(layers_mm.begin(), layers_mm.end(), layer_mm) == layers_mm.end()) layers_mm.push_back(layer_mm);
131  if(layer_mm>layer_max){
132  layer_max=layer_mm;
133  ref_sector= m_idHelperSvc->sector(rot_id) ;
134  }
135  }
136  if(m_idHelperSvc->issTgc(rot_id)) {
137  if (channelType == sTgcIdHelper::sTgcChannelTypes::Strip) {
138  multi_stg = m_idHelperSvc -> stgcIdHelper().multilayer(rot_id);
139  gap_stg = m_idHelperSvc -> stgcIdHelper().gasGap(rot_id);
140  auto layer_stg=gap_stg+(multi_stg-1)*4;
141 
142  if (std::find(layers_stg.begin(), layers_stg.end(), layer_stg) == layers_stg.end()) layers_stg.push_back(layer_stg);
143  if(layer_stg>layer_max) {
144  layer_max=layer_stg;
145  ref_sector= m_idHelperSvc->sector(rot_id) ;
146  }
147  }
148  }
149 
150  }//loop trackStates
151 
152  float x_mu=z_nsw*tan(theta_mu)*cos(phi_mu);
153  float y_mu=z_nsw*tan(theta_mu)*sin(phi_mu);
154  auto x_trk = Monitored::Scalar<float>("x_trk_"+side, x_mu);
155  auto y_trk = Monitored::Scalar<float>("y_trk_"+side, y_mu);
156 
157  int isEff= (layers_mm.size()>3 || layers_stg.size()>3);
158  auto hitcut = Monitored::Scalar<int>("hitcut", (int)isEff);
159  auto lb_side = Monitored::Scalar<float>("lb_"+side, lumiblock);
160  auto sector_phi = Monitored::Scalar<int>("sector_phi", ref_sector*iside);
161  if (ref_sector > 0) fill(NSWMonGroup, hitcut, mu_phi, lb, lb_side, sector_phi, x_trk, y_trk);
162  }
163 
164 
165  return StatusCode::SUCCESS;
166 }
muonContainer
xAOD::MuonContainer * muonContainer
Definition: TrigGlobEffCorrValidation.cxx:188
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
NSWDataMonAlg.h
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
NSWDataMonAlg::m_muonKey
SG::ReadHandleKey< xAOD::MuonContainer > m_muonKey
Definition: NSWDataMonAlg.h:37
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
python.MagFieldUtils.lumiblock
lumiblock
Definition: MagFieldUtils.py:188
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
Trk::Track::trackStateOnSurfaces
const Trk::TrackStates * trackStateOnSurfaces() const
return a pointer to a const DataVector of const TrackStateOnSurfaces.
xAOD::TrackParticle_v1::eta
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
Definition: TrackParticle_v1.cxx:77
test_pyathena.pt
pt
Definition: test_pyathena.py:11
Trk::RIO_OnTrack
Definition: RIO_OnTrack.h:70
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
Muon::MuonCluster::globalPosition
virtual const Amg::Vector3D & globalPosition() const =0
Returns the global position of the measurement (calculated on the fly)
NSWDataMonAlg::NSWDataMonAlg
NSWDataMonAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: NSWDataMonAlg.cxx:23
xAOD::Muon_v1
Class describing a Muon.
Definition: Muon_v1.h:38
MMClusterOnTrack.h
TRT::Hit::side
@ side
Definition: HitInfo.h:83
AthMonitorAlgorithm
Base class for Athena Monitoring Algorithms.
Definition: AthMonitorAlgorithm.h:36
python.BunchSpacingUtils.lb
lb
Definition: BunchSpacingUtils.py:87
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
MMPrepData.h
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
AthMonitorAlgorithm::fill
void fill(const ToolHandle< GenericMonitoringTool > &groupHandle, std::vector< std::reference_wrapper< Monitored::IMonitoredVariable >> &&variables) const
Fills a vector of variables to a group by reference.
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
AthMonitorAlgorithm::GetEventInfo
SG::ReadHandle< xAOD::EventInfo > GetEventInfo(const EventContext &) const
Return a ReadHandle for an EventInfo object (get run/event numbers, etc.)
Definition: AthMonitorAlgorithm.cxx:107
plotIsoValidation.mu_phi
mu_phi
Definition: plotIsoValidation.py:152
Trk::MeasurementBase
Definition: MeasurementBase.h:58
Trk::TrackStateOnSurface
represents the track state (measurement, material, fit parameters and quality) at a surface.
Definition: TrackStateOnSurface.h:71
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
NSWDataMonAlg::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: NSWDataMonAlg.h:38
NSWDataMonAlg::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Definition: NSWDataMonAlg.cxx:46
NSWDataMonAlg::initialize
virtual StatusCode initialize() override
initialize
Definition: NSWDataMonAlg.cxx:28
MuonParameters::MuidSA
@ MuidSA
Definition: MuonParamDefs.h:59
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
MuonDetectorManager.h
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
AthMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: AthMonitorAlgorithm.cxx:18
MuonParameters::MuidCo
@ MuidCo
Definition: MuonParamDefs.h:60
Trk::RIO_OnTrack::identify
Identifier identify() const
return the identifier -extends MeasurementBase
Definition: RIO_OnTrack.h:152
CaloCondBlobAlgs_fillNoiseFromASCII.author
string author
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:26
Muon::MuonCluster
Class representing clusters in the muon system.
Definition: MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/MuonPrepRawData/MuonCluster.h:37
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
xAOD::TrackParticle_v1::track
const Trk::Track * track() const
Returns a pointer (which can be NULL) to the Trk::Track which was used to make this TrackParticle.
Definition: TrackParticle_v1.cxx:805
NSWDataMonAlg::m_cutPt
DoubleProperty m_cutPt
Definition: NSWDataMonAlg.h:39
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
CaloNoise_fillDB.mu
mu
Definition: CaloNoise_fillDB.py:53
xAOD::TrackParticle_v1::theta
float theta() const
Returns the parameter, which has range 0 to .
Trk::TrackStateOnSurface::Measurement
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
Definition: TrackStateOnSurface.h:101
Muon::MuonClusterOnTrack
Base class for Muon cluster RIO_OnTracks.
Definition: MuonClusterOnTrack.h:34
xAOD::TrackParticle_v1::phi
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .)
Identifier
Definition: IdentifierFieldParser.cxx:14