ATLAS Offline Software
Loading...
Searching...
No Matches
TgcRawDataMonitorAlgorithm Class Reference

#include <TgcRawDataMonitorAlgorithm.h>

Inheritance diagram for TgcRawDataMonitorAlgorithm:

Public Types

enum  TgcCoinPtBitShifts {
  CoinFlagF =4 , CoinFlagC , CoinFlagH , CoinFlagEI ,
  CoinFlagTile , CoinFlagRPC , CoinFlagNSW , CoinFlags = CoinFlagF ,
  InnerCoinFlags = CoinFlagEI
}
enum class  Environment_t {
  user = 0 , online , tier0 , tier0Raw ,
  tier0ESD , AOD , altprod
}
 Specifies the processing environment. More...
enum class  DataType_t {
  userDefined = 0 , monteCarlo , collisions , cosmics ,
  heavyIonCollisions
}
 Specifies what type of input data is being monitored. More...

Public Member Functions

virtual ~TgcRawDataMonitorAlgorithm ()=default
virtual StatusCode initialize () override
 initialize
virtual StatusCode fillHistograms (const EventContext &ctx) const override
 adds event to the monitoring histograms
double getNswRindexFromEta (const double &eta) const
 AthMonitorAlgorithm (const std::string &name, ISvcLocator *pSvcLocator)
 Constructor.
virtual StatusCode execute (const EventContext &ctx) const override
 Applies filters and trigger requirements.
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.
void fill (const ToolHandle< GenericMonitoringTool > &groupHandle, const std::vector< std::reference_wrapper< Monitored::IMonitoredVariable > > &variables) const
 Fills a vector of variables to a group by reference.
template<typename... T>
void fill (const ToolHandle< GenericMonitoringTool > &groupHandle, T &&... variables) const
 Fills a variadic list of variables to a group by reference.
void fill (const std::string &groupName, std::vector< std::reference_wrapper< Monitored::IMonitoredVariable > > &&variables) const
 Fills a vector of variables to a group by name.
void fill (const std::string &groupName, const std::vector< std::reference_wrapper< Monitored::IMonitoredVariable > > &variables) const
 Fills a vector of variables to a group by name.
template<typename... T>
void fill (const std::string &groupName, T &&... variables) const
 Fills a variadic list of variables to a group by name.
Environment_t environment () const
 Accessor functions for the environment.
Environment_t envStringToEnum (const std::string &str) const
 Convert the environment string from the python configuration to an enum object.
DataType_t dataType () const
 Accessor functions for the data type.
DataType_t dataTypeStringToEnum (const std::string &str) const
 Convert the data type string from the python configuration to an enum object.
const ToolHandle< GenericMonitoringTool > & getGroup (const std::string &name) const
 Get a specific monitoring tool from the tool handle array.
const ToolHandle< Trig::TrigDecisionTool > & getTrigDecisionTool () const
 Get the trigger decision tool member.
bool trigChainsArePassed (const std::vector< std::string > &vTrigNames) const
 Check whether triggers are passed.
SG::ReadHandle< xAOD::EventInfoGetEventInfo (const EventContext &) const
 Return a ReadHandle for an EventInfo object (get run/event numbers, etc.).
virtual float lbAverageInteractionsPerCrossing (const EventContext &ctx) const
 Calculate the average mu, i.e.
virtual float lbInteractionsPerCrossing (const EventContext &ctx) const
 Calculate instantaneous number of interactions, i.e.
virtual float lbAverageLuminosity (const EventContext &ctx) const
 Calculate average luminosity (in ub-1 s-1 => 10^30 cm-2 s-1).
virtual float lbLuminosityPerBCID (const EventContext &ctx) const
 Calculate the instantaneous luminosity per bunch crossing.
virtual double lbDuration (const EventContext &ctx) const
 Calculate the duration of the luminosity block (in seconds).
virtual float lbAverageLivefraction (const EventContext &ctx) const
 Calculate the average luminosity livefraction.
virtual float livefractionPerBCID (const EventContext &ctx) const
 Calculate the live fraction per bunch crossing ID.
virtual double lbLumiWeight (const EventContext &ctx) const
 Calculate the average integrated luminosity multiplied by the live fraction.
virtual StatusCode parseList (const std::string &line, std::vector< std::string > &result) const
 Parse a string into a vector.
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual bool isClonable () const override
 Specify if the algorithm is clonable.
virtual unsigned int cardinality () const override
 Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.
virtual StatusCode sysExecute (const EventContext &ctx) override
 Execute an algorithm.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
virtual bool filterPassed (const EventContext &ctx) const
virtual void setFilterPassed (bool state, const EventContext &ctx) const
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Public Attributes

 flags = initConfigFlags()
 isMC
 NumThreads
 inputs = sys.argv[1].split(',')
 Files
 HISTFileName
 GlobalTag
 cfg = MainServicesCfg(flags)
 tgcRawDataMonitorAcc = TgcRawDataMonitoringConfig(flags)
 OutputLevel
 MonitorThresholdPatterns
 TagAndProbe
 FillGapByGapHistograms
 UseMuonSelectorTool
 UseOnlyCombinedMuons
 UseOnlyMuidCoStacoMuons
 RequireIsolated
 IsolationWindow
 ResidualWindow
 nHitsInOtherTGCWire
 nHitsInOtherTGCStrip
 MaskChannelFileName
 TagMuonInDifferentSystem
 StreamerFilter
 doExpressProcessing
 pTCutOnTrigExtrapolation
 GRLTool
 GoodRunsListVec
 flags_dummy = initConfigFlags()
 triggerConfig
 triggerMenuSetup
 withDetails
 False
 summariseProps

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Protected Attributes

ToolHandleArray< GenericMonitoringToolm_tools {this,"GMTools",{}}
 Array of Generic Monitoring Tools.
PublicToolHandle< Trig::TrigDecisionToolm_trigDecTool
 Tool to tell whether a specific trigger is passed.
ToolHandleArray< IDQFilterToolm_DQFilterTools {this,"FilterTools",{}}
 Array of Data Quality filter tools.
SG::ReadCondHandleKey< LuminosityCondDatam_lumiDataKey {this,"LuminosityCondDataKey","LuminosityCondData","SG Key of LuminosityCondData object"}
SG::ReadCondHandleKey< LBDurationCondDatam_lbDurationDataKey {this,"LBDurationCondDataKey","LBDurationCondData","SG Key of LBDurationCondData object"}
SG::ReadCondHandleKey< TrigLiveFractionCondDatam_trigLiveFractionDataKey {this,"TrigLiveFractionCondDataKey","TrigLiveFractionCondData", "SG Key of TrigLiveFractionCondData object"}
AthMonitorAlgorithm::Environment_t m_environment
 Instance of the Environment_t enum.
AthMonitorAlgorithm::DataType_t m_dataType
 Instance of the DataType_t enum.
Gaudi::Property< std::string > m_environmentStr {this,"Environment","user"}
 Environment string pulled from the job option and converted to enum.
Gaudi::Property< std::string > m_dataTypeStr {this,"DataType","userDefined"}
 DataType string pulled from the job option and converted to enum.
Gaudi::Property< std::string > m_triggerChainString {this,"TriggerChain",""}
 Trigger chain string pulled from the job option and parsed into a vector.
std::vector< std::string > m_vTrigChainNames
 Vector of trigger chain names parsed from trigger chain string.
Gaudi::Property< std::string > m_fileKey {this,"FileKey",""}
 Internal Athena name for file.
Gaudi::Property< bool > m_useLumi {this,"EnableLumi",false}
 Allows use of various luminosity functions.
Gaudi::Property< float > m_defaultLBDuration {this,"DefaultLBDuration",60.}
 Default duration of one lumi block.
Gaudi::Property< int > m_detailLevel {this,"DetailLevel",0}
 Sets the level of detail used in the monitoring.
SG::ReadHandleKey< xAOD::EventInfom_EventInfoKey {this,"EventInfoKey","EventInfo"}
 Key for retrieving EventInfo from StoreGate.

Private Types

using MonVariables = std::vector < std::reference_wrapper < Monitored::IMonitoredVariable >>
typedef std::vector< std::reference_wrapper< Monitored::IMonitoredVariable > > MonVarVec_t
typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

void fillTgcCoin (const std::string &, const std::vector< TgcTrig > &, std::vector< Monitored::ObjectsCollection< std::vector< TgcTrig >, double > > &, MonVariables &) const
void fillTgcCoinEff (const std::string &, const std::vector< TgcTrig > &, const std::vector< ExtPos > &, std::vector< ExtTrigInfo > &, std::vector< Monitored::ObjectsCollection< std::vector< ExtTrigInfo >, double > > &, MonVariables &) const
double getMatchingWindow (const xAOD::Muon *muon) const
StatusCode printOutAvailableMuonTriggers () const
std::set< std::string > checkTriggerInfo () const
const xAOD::VertexgetPrimaryVertex (const EventContext &ctx) const
std::vector< TgcRawDataMonitorAlgorithm::TimedMuonRoIgetRegionsOfInterest (const EventContext &ctx) const
void fillRoiHistograms (const std::vector< TgcRawDataMonitorAlgorithm::TimedMuonRoI > &roiVec, const EventContext &ctx) const
void fillHistogramsAfterTriggerDecision (std::vector< TgcRawDataMonitorAlgorithm::TimedMuonRoI > &roiVec) const
void fillThresholdPatternHistograms (std::map< std::string, std::vector< const xAOD::MuonRoI * > > &menuAndRoIs, const std::vector< TimedMuon > &mymuons, const EventContext &ctx) const
void fillTgcPrdHistograms (Monitored::Scalar< int > &mon_bcid, Monitored::Scalar< int > &mon_pileup, Monitored::Scalar< int > &mon_lb, std::map< std::string, std::vector< ExtPos > > &extpositions, const EventContext &ctx) const
void fillMuonRoisInThresholdPattern (std::map< const xAOD::MuonRoI *, std::set< std::string > > &, std::map< std::string, std::vector< const xAOD::MuonRoI * > > &, std::vector< TimedMuonRoI > &AllBCMuonRoIs, const EventContext &ctx) const
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

ServiceHandle< Muon::IMuonIdHelperSvcm_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}
SG::ReadHandleKey< TrigConf::L1Menum_L1MenuKey {this, "L1TriggerMenu", "DetectorStore+L1TriggerMenu","L1 Menu key"}
SG::ReadDecorHandleKey< xAOD::MuonRoIContainerm_thresholdPatternsKey {this,"MuRoIThresholdPatternsKey","LVL1MuonRoIs.thresholdPatterns","Name of the muon RoI container decoration for the threshold patterns"}
BooleanProperty m_monitorThresholdPatterns {this,"MonitorThresholdPatterns",true,"start monitoring tirgger threshold patterns"}
StringProperty m_thrPatternList {this,"ThrPatternList","MU4,MU6,MU10,MU11,MU20,MU21","list of single L1MU items to be monitored by the threshold pattern"}
StringProperty m_streamerFilter {this,"StreamerFilter","","Streamer filter such as HLT_noalg_MU14FCH"}
SG::ReadHandleKey< xAOD::MuonContainerm_MuonContainerKey {this,"MuonContainerName","Muons","Offline muon track container"}
SG::ReadHandleKey< xAOD::MuonRoIContainerm_MuonRoIContainerKey {this,"MuonRoIContainerName","LVL1MuonRoIs","L1 muon RoI container"}
SG::ReadHandleKey< xAOD::MuonRoIContainerm_MuonRoIContainerBCm2Key {this,"MuonRoIContainerBCm2Name","LVL1MuonRoIsBCm2","L1 muon RoI container at -2BC"}
SG::ReadHandleKey< xAOD::MuonRoIContainerm_MuonRoIContainerBCm1Key {this,"MuonRoIContainerBCm1Name","LVL1MuonRoIsBCm1","L1 muon RoI container at -1BC"}
SG::ReadHandleKey< xAOD::MuonRoIContainerm_MuonRoIContainerBCp1Key {this,"MuonRoIContainerBCp1Name","LVL1MuonRoIsBCp1","L1 muon RoI container at +1BC"}
SG::ReadHandleKey< xAOD::MuonRoIContainerm_MuonRoIContainerBCp2Key {this,"MuonRoIContainerBCp2Name","LVL1MuonRoIsBCp2","L1 muon RoI container at +2BC"}
SG::ReadHandleKey< Muon::TgcPrepDataContainerm_TgcPrepDataContainerKey {this,"TgcPrepDataContainerName","TGC_MeasurementsAllBCs","current BC TGC PRD"}
SG::ReadHandleKey< Muon::TgcCoinDataContainerm_TgcCoinDataContainerPrevBCKey {this,"TgcCoinDataContainerPrevBCName","TrigT1CoinDataCollectionPriorBC","TGC Coin Data Container PrevBC"}
SG::ReadHandleKey< Muon::TgcCoinDataContainerm_TgcCoinDataContainerCurrBCKey {this,"TgcCoinDataContainerCurrBCName","TrigT1CoinDataCollection","TGC Coin Data Container CurrBC"}
SG::ReadHandleKey< Muon::TgcCoinDataContainerm_TgcCoinDataContainerNextBCKey {this,"TgcCoinDataContainerNextBCName","TrigT1CoinDataCollectionNextBC","TGC Coin Data Container NextBC"}
SG::ReadHandleKey< Muon::TgcCoinDataContainerm_TgcCoinDataContainerNextNextBCKey {this,"TgcCoinDataContainerNextNextBCName","TrigT1CoinDataCollectionNextNextBC","TGC Coin Data Container NextNextBC"}
SG::ReadHandleKey< xAOD::VertexContainerm_PrimaryVertexContainerKey {this,"PrimaryVertexContainerName","PrimaryVertices","Primary Vertex Container"}
DoubleProperty m_muonToPVdz {this,"MuonToPVdz",50.,"Window size in deltaZ between muon track and primary vertex"}
DoubleProperty m_muonToPVdzOffset {this,"MuonToPVdzOffset",0.,"Offset of deltaZ between muon track and primary vertex"}
DoubleProperty m_muonToPVdca {this,"MuonToPVdca",0.5,"Distance to closest approach of muon track to primary vertex"}
BooleanProperty m_doExpressProcessing {this,"doExpressProcessing",false,"Processing express_express data"}
StringProperty m_packageName {this,"PackageName","TgcRawDataMonitor","group name for histograming"}
StringProperty m_ctpDecMonList {this,"CtpDecisionMoniorList","Tit:L1_2MU4,Mul:2,HLT:HLT_2mu4,RPC:1,TGC:1;","list of L1MU items to be monitored for before/after CTP decision"}
BooleanProperty m_monitorTriggerMultiplicity {this,"MonitorTriggerMultiplicity",false,"start monitoring tirgger multiplicity performance"}
BooleanProperty m_printAvailableMuonTriggers {this,"PrintAvailableMuonTriggers",false,"debugging purpose. print out all available muon triggers in the event"}
BooleanProperty m_TagAndProbe {this,"TagAndProbe",true,"switch to perform tag-and-probe method"}
BooleanProperty m_TagAndProbeZmumu {this,"TagAndProbeZmumu",false,"switch to perform tag-and-probe method Z->mumu"}
BooleanProperty m_tagMuonInDifferentSystem {this,"TagMuonInDifferentSystem",false,"restrict the tag muons to be only in the other system (barrel or endcap)"}
BooleanProperty m_anaTgcPrd {this,"AnaTgcPrd",false,"switch to perform analysis on TGC PRD"}
BooleanProperty m_anaTgcCoin {this,"AnaTgcCoin",false,"switch to perform analysis on TGC Coin"}
BooleanProperty m_fillGapByGapHistograms {this,"FillGapByGapHistograms",true,"filling gap-by-gap histograms (many many)"}
BooleanProperty m_anaOfflMuon {this,"AnaOfflMuon",true,"switch to perform analysis on xAOD::Muon"}
BooleanProperty m_offlMuonCutOnMuonType {this,"OfflMuonCutOnMuonType",true,"applying cut on offline muon muonType"}
BooleanProperty m_offlMuonCutOnAuthor {this,"OfflMuonCutOnAuthor",true,"applying cut on offline muon author"}
BooleanProperty m_offlMuonCutOnQuality {this,"OfflMuonCutOnQuality",true,"applying cut on offline muon quality"}
BooleanProperty m_anaMuonRoI {this,"AnaMuonRoI",true,"switch to perform analysis on xAOD::LVL1MuonRoI"}
DoubleProperty m_trigMatchWindow {this,"TrigMatchingWindow",0.2,"Window size in R for trigger matching"}
DoubleProperty m_l1trigMatchWindowPt15 {this,"L1TrigMatchingWindowPt15",0.15,"Window size in R for L1 trigger matching for 15GeV muons"}
DoubleProperty m_l1trigMatchWindowPt10a {this,"L1TrigMatchingWindowPt10a",0.3,"Window size in R for L1 trigger matching for 10GeV(a) muons"}
DoubleProperty m_l1trigMatchWindowPt10b {this,"L1TrigMatchingWindowPt10b",-0.01,"Window size in R for L1 trigger matching for 10GeV(b) muons"}
DoubleProperty m_l1trigMatchWindowPt0a {this,"L1TrigMatchingWindowPt0a",0.36,"Window size in R for L1 trigger matching for 0GeV(a) muons"}
DoubleProperty m_l1trigMatchWindowPt0b {this,"L1TrigMatchingWindowPt0b",-0.0016,"Window size in R for L1 trigger matching for 0GeV(b) muons"}
DoubleProperty m_isolationWindow {this,"IsolationWindow",1.0,"Window size in R for isolation with other muons"}
BooleanProperty m_requireIsolated {this,"RequireIsolated",true,"Probe muon should be isolated from other muons"}
BooleanProperty m_useIDTrackForExtrapolation {this,"UseIDTrackForExtrapolation",false,"Use InnerDetectorTrackParticle for extrapolation"}
BooleanProperty m_useMSTrackForExtrapolation {this,"UseMSTrackForExtrapolation",false,"Use MuonSpectrometerTrackParticle for extrapolation"}
BooleanProperty m_useCBTrackForExtrapolation {this,"UseCBTrackForExtrapolation",false,"CombinedTrackParticle for extrapolation"}
BooleanProperty m_useExtMSTrackForExtrapolation {this,"UseExtMSTrackForExtrapolation",false,"Use ExtrapolatedMuonSpectrometerTrackParticle for extrapolation"}
BooleanProperty m_useMSOnlyExtMSTrackForExtrapolation {this,"UseMSOnlyExtMSTrackForExtrapolation",false,"Use MSOnlyExtrapolatedMuonSpectrometerTrackParticle for extrapolation"}
BooleanProperty m_useDirectPrimaryTrackForExtrapolation {this,"UseDirectPrimaryTrackForExtrapolation",true,"Use DirectPrimaryTrackForExtrapolation for extrapolation"}
BooleanProperty m_useOnlyCombinedMuons {this,"UseOnlyCombinedMuons",false,"use only CombinedMuons"}
BooleanProperty m_useOnlyMuidCoStacoMuons {this,"UseOnlyMuidCoStacoMuons",false,"use only MuidCo and Staco Muons"}
BooleanProperty m_useMuonSelectorTool {this,"UseMuonSelectorTool",true,"use MuonSelectorTool"}
DoubleProperty m_pTCutOnExtrapolation {this,"pTCutOnExtrapolation",5000.,"pT [in MeV] cut on the extrapolation tracks"}
DoubleProperty m_pTCutOnTrigExtrapolation {this,"pTCutOnTrigExtrapolation",20000.,"pT [in MeV] cut on the extrapolation tracks for trigger validation"}
DoubleProperty m_M1_Z {this,"M1_Z",13436.5,"z-position of TGC M1-station in mm for track extrapolate"}
DoubleProperty m_M2_Z {this,"M2_Z",14728.2,"z-position of TGC M2-station in mm for track extrapolate"}
DoubleProperty m_M3_Z {this,"M3_Z",15148.2,"z-position of TGC M3-station in mm for track extrapolate"}
DoubleProperty m_EI_Z {this,"EI_Z",7364.7,"z-position of TGC EI-station in mm for track extrapolate"}
DoubleProperty m_FI_Z {this,"FI_Z",6978.2,"z-position of TGC FI-station in mm for track extrapolate"}
DoubleProperty m_muonMass {this,"MuonMass",ParticleConstants::muonMassInMeV,"muon invariant mass in MeV"}
DoubleProperty m_zMass {this,"ZMass",91187.6,"muon invariant mass in MeV"}
DoubleProperty m_zMassWindow {this,"ZMassWindow",10000,"muon invariant mass half-window in MeV"}
DoubleProperty m_endcapPivotPlaneMinimumRadius {this,"endcapPivotPlaneMinimumRadius",0.,"minimum radius of pivot plane in endcap region"}
DoubleProperty m_endcapPivotPlaneMaximumRadius {this,"endcapPivotPlaneMaximumRadius", 11977.,"maximum radius of pivot plane in endcap region"}
DoubleProperty m_barrelPivotPlaneHalfLength {this,"barrelPivotPlaneHalfLength", 9500.,"half length of pivot plane in barrel region"}
DoubleProperty m_residualWindow {this,"ResidualWindow", 200.,"Window size in mm between hit position and track-extrapolated position"}
DoubleProperty m_dPhiCutOnM3 {this,"dPhiCutOnM3", 0.2,"Window size in delta phi on M3 between hit position and track-extrapolated position"}
DoubleProperty m_dRCutOnM3 {this,"dRCutOnM3", 3000.,"Window size in delta R (radious) on M3 between hit position and track-extrapolated position"}
IntegerProperty m_nHitsInOtherBWTGCWire {this,"nHitsInOtherTGCWire",3,"Number of hits in other BW-TGC wire channels"}
IntegerProperty m_nHitsInOtherBWTGCStrip {this,"nHitsInOtherTGCStrip",2,"Number of hits in other BW-TGC strip channels"}
BooleanProperty m_dumpFullChannelList {this,"DumpFullChannelList",false,"Dump full channel list"}
StringProperty m_maskChannelFileName {this,"MaskChannelFileName","","Name of file for mask channels"}
DoubleProperty m_NswDeltaRCut {this,"NswDeltaRCut", 20.,"Window size in delta R for NSW-TGC matching"}
std::vector< double > m_extZposition
std::vector< CtpDecMonObj > m_CtpDecMonObj
std::set< std::string > m_thrMonList
std::set< std::string > m_maskChannelList
ToolHandle< IGoodRunsListSelectorToolm_GoodRunsListSelectorTool {this,"GRLTool","GoodRunsListSelectorTool","GoodRunsListSelectorTool"}
ToolHandle< Trk::IExtrapolatorm_extrapolator {this,"TrackExtrapolator","Trk::Extrapolator/AtlasExtrapolator","Track extrapolator"}
ToolHandle< ITgcRawDataMonitorToolm_tgcMonTool {this,"TgcRawDataMonitorTool","TgcDawDataMonitorTool","TgcRawDataMonitorTool"}
ToolHandle< CP::IMuonSelectionToolm_muonSelectionTool {this,"MuonSelectionTool","CP::MuonSelectionTool/MuonSelectionTool","MuonSelectionTool"}
SG::ReadCondHandleKey< MuonGM::MuonDetectorManagerm_DetectorManagerKey {this, "DetectorManagerKey","MuonDetectorManager","Key of input MuonDetectorManager condition data"}
std::string m_name
std::unordered_map< std::string, size_t > m_toolLookupMap
const ToolHandle< GenericMonitoringToolm_dummy
Gaudi::Property< bool > m_enforceExpressTriggers
DataObjIDColl m_extendedExtraObjects
 Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default).
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default).
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 31 of file TgcRawDataMonitorAlgorithm.h.

Member Typedef Documentation

◆ MonVariables

using TgcRawDataMonitorAlgorithm::MonVariables = std::vector < std::reference_wrapper < Monitored::IMonitoredVariable >>
private

Definition at line 317 of file TgcRawDataMonitorAlgorithm.h.

◆ MonVarVec_t

typedef std::vector<std::reference_wrapper<Monitored::IMonitoredVariable> > AthMonitorAlgorithm::MonVarVec_t
privateinherited

Definition at line 370 of file AthMonitorAlgorithm.h.

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Member Enumeration Documentation

◆ DataType_t

enum class AthMonitorAlgorithm::DataType_t
stronginherited

Specifies what type of input data is being monitored.

An enumeration of the different types of data the monitoring application may be running over. This can be used to select which histograms to produce, e.g. to prevent the production of colliding-beam histograms when running on cosmic-ray data. Strings of the same names may be given as jobOptions.

Enumerator
userDefined 
monteCarlo 
collisions 
cosmics 
heavyIonCollisions 

Definition at line 194 of file AthMonitorAlgorithm.h.

194 {
195 userDefined = 0,
196 monteCarlo,
197 collisions,
198 cosmics,
199 heavyIonCollisions,
200 };
AthConfigFlags cosmics(AthConfigFlags flags, str instanceName, str recoMode)

◆ Environment_t

enum class AthMonitorAlgorithm::Environment_t
stronginherited

Specifies the processing environment.

The running environment may be used to select which histograms are produced, and where they are located in the output. For example, the output paths of the histograms are different for the "user", "online" and the various offline flags. Strings of the same names may be given as jobOptions.

Enumerator
user 
online 
tier0 
tier0Raw 
tier0ESD 
AOD 
altprod 

Definition at line 175 of file AthMonitorAlgorithm.h.

175 {
176 user = 0,
177 online,
178 tier0,
179 tier0Raw,
180 tier0ESD,
181 AOD,
182 altprod,
183 };

◆ TgcCoinPtBitShifts

enum TgcRawDataMonitorAlgorithm::TgcCoinPtBitShifts
Enumerator
CoinFlagF 
CoinFlagC 
CoinFlagH 
CoinFlagEI 
CoinFlagTile 
CoinFlagRPC 
CoinFlagNSW 
CoinFlags 
InnerCoinFlags 

Definition at line 38 of file TgcRawDataMonitorAlgorithm.h.

38 {
39 CoinFlagF=4,CoinFlagC,CoinFlagH,CoinFlagEI,CoinFlagTile,CoinFlagRPC,CoinFlagNSW,
40 CoinFlags = CoinFlagF, InnerCoinFlags = CoinFlagEI
41 };

Constructor & Destructor Documentation

◆ ~TgcRawDataMonitorAlgorithm()

virtual TgcRawDataMonitorAlgorithm::~TgcRawDataMonitorAlgorithm ( )
virtualdefault

Member Function Documentation

◆ AthMonitorAlgorithm()

AthMonitorAlgorithm::AthMonitorAlgorithm ( const std::string & name,
ISvcLocator * pSvcLocator )

Constructor.

Definition at line 45 of file AthMonitorAlgorithm.cxx.

9:AthReentrantAlgorithm(name,pSvcLocator)
10 // Put this here rather than in the header to allow forward-declaring
11 // TrigDecisionTool.
12,m_trigDecTool{this, "TrigDecisionTool",""}
13,m_environment(Environment_t::user)
14,m_dataType(DataType_t::userDefined)
15,m_vTrigChainNames({})
16{}
An algorithm that can be simultaneously executed in multiple threads.

◆ cardinality()

unsigned int AthCommonReentrantAlgorithm< Gaudi::Algorithm >::cardinality ( ) const
overridevirtualinherited

Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.

Override this to return 0 for reentrant algorithms.

Definition at line 75 of file AthCommonReentrantAlgorithm.cxx.

62{
63 return 0;
64}

◆ checkTriggerInfo()

std::set< std::string > TgcRawDataMonitorAlgorithm::checkTriggerInfo ( ) const
private

Definition at line 199 of file TgcRawDataMonitorAlgorithm.cxx.

199 {
201 ATH_MSG_DEBUG("Preparing trigger information");
202 std::set<std::string> list_of_single_muon_triggers;
203 if ( !getTrigDecisionTool().empty() ){
204 auto chainGroup = getTrigDecisionTool()->getChainGroup("HLT_.*");
205 if( chainGroup != nullptr ){
206 auto triggerList = chainGroup->getListOfTriggers();
207 if( !triggerList.empty() ){
208 for(const auto &trig : triggerList) {
209 if( trig.find("HLT_mu") != 0 )continue; // muon trigger
210 if( trig.find('-') != std::string::npos )continue; // vetoing topo item
211 if( trig.find("L1MU") == std::string::npos )continue; // RoI-seedeed L1 muon trigger
212 if( trig.find("mu") != trig.rfind("mu") )continue; // mu occurrence only once -> single muon trigger
213 if( trig.find("MU") != trig.rfind("MU") )continue; // MU occurrence only once -> single muon trigger
214 list_of_single_muon_triggers.insert( trig );
215 }
216 }
217 }
218 }
219 return list_of_single_muon_triggers;
220}
#define ATH_MSG_DEBUG(x)
static const Attributes_t empty

◆ dataType()

DataType_t AthMonitorAlgorithm::dataType ( ) const
inlineinherited

Accessor functions for the data type.

Returns
the current value of the class's DataType_t instance.

Definition at line 224 of file AthMonitorAlgorithm.h.

224{ return m_dataType; }
AthMonitorAlgorithm::DataType_t m_dataType
Instance of the DataType_t enum.

◆ dataTypeStringToEnum()

AthMonitorAlgorithm::DataType_t AthMonitorAlgorithm::dataTypeStringToEnum ( const std::string & str) const
inherited

Convert the data type string from the python configuration to an enum object.

Returns
a value in the DataType_t enumeration which matches the input string.

Definition at line 144 of file AthMonitorAlgorithm.cxx.

144 {
145 // convert the string to all lowercase
146 std::string lowerCaseStr = str;
147 std::transform(lowerCaseStr.begin(), lowerCaseStr.end(), lowerCaseStr.begin(), ::tolower);
148
149 // check if it matches one of the enum choices
150 if( lowerCaseStr == "userdefined" ) {
152 } else if( lowerCaseStr == "montecarlo" ) {
154 } else if( lowerCaseStr == "collisions" ) {
156 } else if( lowerCaseStr == "cosmics" ) {
157 return DataType_t::cosmics;
158 } else if( lowerCaseStr == "heavyioncollisions" ) {
160 } else { // otherwise, warn the user and return "userDefined"
161 ATH_MSG_WARNING("AthMonitorAlgorithm::dataTypeStringToEnum(): Unknown data type "
162 <<str<<", returning userDefined.");
164 }
165}
#define ATH_MSG_WARNING(x)
void tolower(std::string &s)

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ environment()

Environment_t AthMonitorAlgorithm::environment ( ) const
inlineinherited

Accessor functions for the environment.

Returns
the current value of the class's Environment_t instance.

Definition at line 208 of file AthMonitorAlgorithm.h.

208{ return m_environment; }
AthMonitorAlgorithm::Environment_t m_environment
Instance of the Environment_t enum.

◆ envStringToEnum()

AthMonitorAlgorithm::Environment_t AthMonitorAlgorithm::envStringToEnum ( const std::string & str) const
inherited

Convert the environment string from the python configuration to an enum object.

Returns
a value in the Environment_t enumeration which matches the input string.

Definition at line 116 of file AthMonitorAlgorithm.cxx.

116 {
117 // convert the string to all lowercase
118 std::string lowerCaseStr = str;
119 std::transform(lowerCaseStr.begin(), lowerCaseStr.end(), lowerCaseStr.begin(), ::tolower);
120
121 // check if it matches one of the enum choices
122 if( lowerCaseStr == "user" ) {
123 return Environment_t::user;
124 } else if( lowerCaseStr == "online" ) {
126 } else if( lowerCaseStr == "tier0" ) {
128 } else if( lowerCaseStr == "tier0raw" ) {
130 } else if( lowerCaseStr == "tier0esd" ) {
132 } else if( lowerCaseStr == "aod" ) {
133 return Environment_t::AOD;
134 } else if( lowerCaseStr == "altprod" ) {
136 } else { // otherwise, warn the user and return "user"
137 ATH_MSG_WARNING("AthMonitorAlgorithm::envStringToEnum(): Unknown environment "
138 <<str<<", returning user.");
139 return Environment_t::user;
140 }
141}

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode AthMonitorAlgorithm::execute ( const EventContext & ctx) const
overridevirtualinherited

Applies filters and trigger requirements.

Then, calls fillHistograms().

Parameters
ctxevent context for reentrant Athena call
Returns
StatusCode

Definition at line 77 of file AthMonitorAlgorithm.cxx.

77 {
78
79 // Checks that all of the DQ filters are passed. If any one of the filters
80 // fails, return SUCCESS code and do not fill the histograms with the event.
81 for ( const auto& filterItr : m_DQFilterTools ) {
82 if (!filterItr->accept(ctx)) {
83 ATH_MSG_DEBUG("Event rejected due to filter tool.");
84 return StatusCode::SUCCESS;
85 }
86 }
87
88 // Trigger: If there is a decision tool and the chains fail, skip the event.
90 ATH_MSG_DEBUG("Event rejected due to trigger filter.");
91 return StatusCode::SUCCESS;
92 }
93
94 ATH_MSG_DEBUG("Event accepted!");
95 return fillHistograms(ctx);
96}
virtual StatusCode fillHistograms(const EventContext &ctx) const =0
adds event to the monitoring histograms
bool trigChainsArePassed(const std::vector< std::string > &vTrigNames) const
Check whether triggers are passed.
std::vector< std::string > m_vTrigChainNames
Vector of trigger chain names parsed from trigger chain string.
PublicToolHandle< Trig::TrigDecisionTool > m_trigDecTool
Tool to tell whether a specific trigger is passed.
ToolHandleArray< IDQFilterTool > m_DQFilterTools
Array of Data Quality filter tools.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthCommonReentrantAlgorithm< Gaudi::Algorithm >::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 94 of file AthCommonReentrantAlgorithm.cxx.

88{
89 // If we didn't find any symlinks to add, just return the collection
90 // from the base class. Otherwise, return the extended collection.
91 if (!m_extendedExtraObjects.empty()) {
93 }
95}
An algorithm that can be simultaneously executed in multiple threads.

◆ fillHistograms()

StatusCode TgcRawDataMonitorAlgorithm::fillHistograms ( const EventContext & ctx) const
overridevirtual

adds event to the monitoring histograms

User will overwrite this function. Histogram booking is no longer done in C++. This function is called in execute once the filters are all passed.

Parameters
ctxforwarded from execute
Returns
StatusCode

Implements AthMonitorAlgorithm.

Definition at line 755 of file TgcRawDataMonitorAlgorithm.cxx.

755 {
756 ATH_MSG_DEBUG("fillHistograms()");
757
758 if( !m_GoodRunsListSelectorTool.empty() ){
759 int runNumber = GetEventInfo(ctx)->runNumber();
760 int lumiBlockNr = GetEventInfo(ctx)->lumiBlock();
761 if(m_GoodRunsListSelectorTool->getGRLCollection()->IsEmpty()){
762 ATH_MSG_ERROR("Empty GRL");
763 return StatusCode::FAILURE;
764 }
765 bool pass = m_GoodRunsListSelectorTool->getGRLCollection()->HasRunLumiBlock(runNumber,lumiBlockNr);
766 if(pass){
767 ATH_MSG_DEBUG("passing GRL: run=" << runNumber << " lb=" << lumiBlockNr);
768 }else{
769 ATH_MSG_DEBUG("failed GRL: run=" << runNumber << " lb=" << lumiBlockNr);
770 return StatusCode::SUCCESS;
771 }
772 }
773
774 if( !m_streamerFilter.empty() ) {
775 if(m_doExpressProcessing){
776 const unsigned int passBits = getTrigDecisionTool()->isPassedBits(m_streamerFilter);
777 const bool expressPass = passBits & TrigDefs::Express_passed;
778 if(!expressPass){
779 ATH_MSG_DEBUG("failed expressPass");
780 return StatusCode::SUCCESS;
781 }
782 }
783 bool pass = getTrigDecisionTool()->isPassed(m_streamerFilter,TrigDefs::Physics);
784 if(pass){
785 ATH_MSG_DEBUG("passing StreamerFilter: " << m_streamerFilter );
786 }else{
787 ATH_MSG_DEBUG("failed StreamerFilter: " << m_streamerFilter );
788 return StatusCode::SUCCESS;
789 }
790 }
791 if (auto sc = printOutAvailableMuonTriggers();not sc.isSuccess()) return sc;
792 auto list_of_single_muon_triggers = checkTriggerInfo();
793
795
796 const xAOD::Vertex* primVertex = getPrimaryVertex(ctx);
797
798 double primaryVertexZ = (primVertex!=nullptr)?(primVertex->z()):(-999);
799 // define common monitoring variables //
800 auto mon_bcid = Monitored::Scalar<int>("mon_bcid", GetEventInfo(ctx)->bcid());
801 auto mon_pileup = Monitored::Scalar<int>("mon_pileup", lbAverageInteractionsPerCrossing(ctx));
802 auto mon_lb = Monitored::Scalar<int>("mon_lb", GetEventInfo(ctx)->lumiBlock());
803 auto mon_primvtx_z=Monitored::Scalar<double>("mon_primvtx_z",primaryVertexZ);
804
805 fill(m_packageName+"_Common", mon_bcid, mon_pileup, mon_lb, mon_primvtx_z);
807 std::vector<TimedMuonRoI> AllBCMuonRoIs = getRegionsOfInterest(ctx);
808 fillRoiHistograms(AllBCMuonRoIs, ctx);
811
812
814 std::map<const xAOD::MuonRoI*,std::set<std::string>> roiAndMenu;
815 std::map<std::string,std::vector<const xAOD::MuonRoI*>> menuAndRoIs;
816 fillMuonRoisInThresholdPattern(roiAndMenu, menuAndRoIs, AllBCMuonRoIs, ctx);
818
820 std::vector < const xAOD::Muon* > oflmuons;
821 std::set < const xAOD::Muon* > biasedMuons;
822 std::vector < TimedMuon > mymuons;
823 std::map < std::string, std::vector< ExtPos > > extpositions;
824 std::vector< ExtPos > extpositions_pivot;
825 std::vector<double> deltaR_muons;
826 std::vector<double> deltaR_muons_roi;
827 std::vector<double> deltaR_muons_hlt;
828 std::vector<double> muon2pv_dz;
829 std::vector<double> muon2pv_dca;
830 std::vector<double> mymuon2pv_dz;
831 std::vector<double> mymuon2pv_dca;
832 if (m_anaOfflMuon) {
833 SG::ReadHandle < xAOD::MuonContainer > muons(m_MuonContainerKey, ctx);
834 if (!muons.isValid()) {
835 ATH_MSG_ERROR("Failed to get xAOD::MuonContainer");
836 return StatusCode::SUCCESS;
837 }
838 ATH_MSG_DEBUG("Filling offline muon-related histograms");
839 for (const auto muon : *muons) {
840 // skip if muon is empty
841 if (muon == nullptr) continue;
842 // standard quality cuts for muons
843 if (muon->pt() < 1000.) continue;
844 // minimum requirements
845 if ( muon->author() > xAOD::Muon::Author::MuidSA )continue;
846 if ( muon->muonType() > xAOD::Muon::MuonType::MuonStandAlone )continue;
847 // very loose-quality muons
848 oflmuons.push_back(muon);
849 // selectable requirements
850 double dz=-999,dca=-999;
851 if( dataType() != DataType_t::cosmics ){
852 if(m_useMuonSelectorTool && !m_muonSelectionTool->accept(*muon)) continue;
853 if(m_useOnlyCombinedMuons && muon->muonType()!=xAOD::Muon::MuonType::Combined) continue;
854 if(m_useOnlyMuidCoStacoMuons && (muon->author()!=xAOD::Muon::Author::MuidCo && muon->author()!=xAOD::Muon::Author::STACO)) continue;
855 if(!m_PrimaryVertexContainerKey.empty()){
856 if(primVertex==nullptr)continue;
857 auto trackParticle = muon->primaryTrackParticle();
858 if(trackParticle!=nullptr){
859 dz = trackParticle->z0() - primVertex->z();
860 dca = trackParticle->d0();
861 }
862 muon2pv_dz.push_back(dz);
863 muon2pv_dca.push_back(dca);
864 if( std::abs(dz-m_muonToPVdzOffset) > m_muonToPVdz )continue;
865 if( std::abs(dca) > m_muonToPVdca )continue;
866 }
867 }
868 // initialize for muon-isolation check
869 bool isolated = true;
870 // initialize for tag-and-probe check
871 bool probeOK = true;
872 if( m_TagAndProbe ) probeOK = false; // t&p should be performed
873 if( dataType() == DataType_t::cosmics ) probeOK = true; // won't performa t&p for cosmics because no enough muons
874 // OK, let's start looking at the second muons
875 for(const auto muon2 : *muons){
876 // skip if muon is empty
877 if (muon2 == nullptr) continue;
878
879 // skip the same muon candidate
880 if( muon == muon2 )continue;
881
882 // skip possible mismeasured muons
883 if( muon2->pt() < 1000. ) continue;
884
885 // minimum requirements on muon quality
886 if ( muon2->author() > xAOD::Muon::Author::MuidSA )continue;
887 if ( muon2->muonType() > xAOD::Muon::MuonType::MuonStandAlone )continue;
888
889 // tag muon to be only in the other region, barrel or endcap, to remove possible bias from the same region
890 if( m_tagMuonInDifferentSystem &&
891 ( (std::abs(muon->eta()) < barrel_end && std::abs(muon2->eta()) < barrel_end) ||
892 (std::abs(muon->eta()) > barrel_end && std::abs(muon2->eta()) > barrel_end) ) )continue;
893
894 // isolation calculation
895 double dr_muons = xAOD::P4Helpers::deltaR(muon,muon2,false);
896 deltaR_muons.push_back(dr_muons);
897 if( dr_muons < m_isolationWindow ) isolated = false;
898
899 // no need to check further if probeOK is already True
900 // 0) if muon-orthogonal triggers are avaialble/fired
901 // 1) if we don't use tag-and-probe
902 // 2) if TrigDecTool is not available
903 // 3) if the second muon matches the trigger requirement
904 if(probeOK)continue;
905
906 // loop over the single muon triggers if at least one of them matches this second muon
907 for (const auto &trigName : list_of_single_muon_triggers) {
908 if(m_doExpressProcessing){ // check the express_express bit
909 const unsigned int passBits = getTrigDecisionTool()->isPassedBits(trigName.data());
910 const bool expressPass = passBits & TrigDefs::Express_passed;
911 if(!expressPass)continue;
912 }
913 // check if this particular tirgger has fired in this event
914 if (!getTrigDecisionTool()->isPassed(trigName.data(),TrigDefs::Physics)) continue;
915 ATH_MSG_DEBUG("This muon trigger, " << trigName << ", is fired in this event!!");
916 // check if this second muon matches the HLT muon trigger
917 if(getTrigDecisionTool()->getNavigationFormat() == "TriggerElement") { // run 2 access
918 ATH_MSG_DEBUG("Trying Run2-style feature access");
919 auto fc = getTrigDecisionTool()->features(trigName.data(),TrigDefs::Physics);
920 for(const auto& comb : fc.getCombinations()){
921 if(!comb.active())continue;
922 auto MuFeatureContainers = comb.get<xAOD::MuonContainer>("MuonEFInfo",TrigDefs::Physics);
923 for(const auto& mucont : MuFeatureContainers){
924 if(mucont.empty())continue;
925 if(mucont.te()==nullptr)continue;
926 if(!mucont.te()->getActiveState())continue;
927 for(const auto hltmu : *mucont.cptr()){
928 if (hltmu == nullptr) continue; // skip if hltmu is empty
929 if (hltmu->pt() < 1000.)continue; // skip if pT is very small
930 double dr = xAOD::P4Helpers::deltaR(muon2,hltmu,false);
931 deltaR_muons_hlt.push_back(dr);
932 if( dr < m_trigMatchWindow ){
933 probeOK = true;
934 ATH_MSG_DEBUG("Trigger matched: "<<trigName<<" dR=" << dr );
935 biasedMuons.insert(muon2);
936 }
937 }// end loop of mucont.cptr()
938 }// end loop of MuonFeatureContainers
939 }//end loop of Combinations
940 }else{ // run 3 access
941 ATH_MSG_DEBUG("Trying Run3-style feature access");
942 auto features = getTrigDecisionTool()->features < xAOD::MuonContainer > (trigName.data(), TrigDefs::Physics, "HLT_MuonsCB_RoI");
943 for (const auto& aaa : features) {
944 if (!aaa.isValid()) continue;
945 auto hltmu_link = aaa.link;
946 if (!hltmu_link.isValid()) continue;
947 auto hltmu = *hltmu_link;
948 if (hltmu == nullptr) continue; // skip if hltmu is empty
949 if (hltmu->pt() < 1000.)continue; // skip if pT is very small
950 double dr = xAOD::P4Helpers::deltaR(muon2,hltmu,false);
951 deltaR_muons_hlt.push_back(dr);
952 if( dr < m_trigMatchWindow ){
953 probeOK = true;
954 ATH_MSG_DEBUG("Trigger matched: "<<trigName<<" dR=" << dr );
955 biasedMuons.insert(muon2);
956 }
957 } // end loop of features
958 } // end IF Run2 or Run3 feature access
959 } // end loop of single muon triggers
960 // check if the second muon matches the single muon trigger
961 if(!probeOK) continue;
962 ATH_MSG_DEBUG("Basic Tag-and-Probe is OK");
963 // check further if this muon pair satisfies Z->mumu criteria
964 if( m_TagAndProbeZmumu && muon->charge() != muon2->charge() ){
965 double m2 = 2. * muon->pt() * muon2->pt() * ( std::cosh(muon->eta() - muon2->eta()) - std::cos(muon->phi() - muon2->phi()) );
966 double m = (m2>0.) ? ( std::sqrt(m2) ) : (0.);
967 double mdiff = std::abs( m - m_zMass );
968 probeOK = mdiff < m_zMassWindow;
969 ATH_MSG_DEBUG("Checking Zmumu cut: " << probeOK);
970 }
971 ATH_MSG_DEBUG("Final condition of probleOK for this muon is: " << probeOK);
972 if(probeOK) break; // no need to check further if probeOK is already True
973 } // end loop of the second muons
974 // check if the isolation requirement is OK
975 if(m_requireIsolated && !isolated)continue;
976 // check if the tag-and-probe requirement is OK
977 if(!probeOK)continue;
978
979 TimedMuon mymuon;
980 /* fill basic info */
981 mymuon.muon = muon;
982 /* fill extrapolation info (only to TGC) */
983 if ( std::abs(muon->eta()) > 0.5 // only endcap region
984 && muon->pt() > m_pTCutOnExtrapolation ) { // only reasonably-high pT muons
985 for (const auto &z : m_extZposition) {
986 if( muon->eta()<0 && z>0 )continue;
987 if( muon->eta()>0 && z<0 )continue;
988 xAOD::Muon::TrackParticleType trkPtclType;
989 if(m_useIDTrackForExtrapolation){ trkPtclType = xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle;
990 }else if(m_useMSTrackForExtrapolation){trkPtclType = xAOD::Muon::TrackParticleType::MuonSpectrometerTrackParticle;
991 }else if(m_useCBTrackForExtrapolation){trkPtclType = xAOD::Muon::TrackParticleType::CombinedTrackParticle;
992 }else if(m_useExtMSTrackForExtrapolation){trkPtclType = xAOD::Muon::TrackParticleType::ExtrapolatedMuonSpectrometerTrackParticle;
993 }else if(m_useMSOnlyExtMSTrackForExtrapolation){trkPtclType = xAOD::Muon::TrackParticleType::MSOnlyExtrapolatedMuonSpectrometerTrackParticle;
994 }else{ trkPtclType = xAOD::Muon::TrackParticleType::Primary; } // default is Primary (i.e. same as muonType )
995 auto trackParticle = (m_useDirectPrimaryTrackForExtrapolation) ? muon->primaryTrackParticle() : muon->trackParticle( trkPtclType );
996 if(trackParticle==nullptr)continue;
997 auto matrix = std::make_unique<Amg::Transform3D>();
998 matrix->setIdentity();
999 matrix->translation().z() = z;
1000 auto disc = std::make_unique < Trk::DiscSurface > (*matrix,
1001 m_endcapPivotPlaneMinimumRadius,
1002 m_endcapPivotPlaneMaximumRadius);
1003 const Trk::BoundaryCheck boundaryCheck = true;
1004 const auto extTrkParams = m_extrapolator->extrapolate(ctx,
1005 trackParticle->perigeeParameters(),
1006 *disc,
1008 boundaryCheck,
1009 Trk::muon);
1010 if(extTrkParams != nullptr){
1011 if( std::abs(extTrkParams->position().z() - z) > 10. )continue; // wrong extrapolation
1012 ExtPos ext;
1013 ext.extPosZ = z;
1014 ext.extPos = extTrkParams->position();
1015 ext.extVec = extTrkParams->momentum();
1016 Amg::Vector3D extVec(extTrkParams->position().x(),extTrkParams->position().y(),z);
1017 ext.passedChambers = m_tgcMonTool->getPassedChambers(extVec);
1018 ext.muon = muon;
1019 if( std::abs( std::abs(z) - m_M3_Z ) < 10. && // trigger pivot plane (i.e. M3)
1020 std::abs( muon->eta() ) > 1.05 &&
1021 std::abs( muon->eta() ) < 2.40){ // only endcap
1022 extpositions_pivot.push_back(ext);
1023 }
1024 for(const auto& cham : ext.passedChambers){
1025 extpositions[cham].push_back(ext);
1026 }
1027 }
1028 }
1029 }
1030 /* L1Muon RoI matching */
1031 mymuon.matchedL1Charge=false;
1032 mymuon.passBW3Coin=false;
1033 mymuon.passInnerCoin=false;
1034 mymuon.passGoodMF=false;
1035 mymuon.passIsMoreCandInRoI=false;
1036 double max_dr = getMatchingWindow(mymuon.muon);
1037 if (AllBCMuonRoIs.size()==0) {
1038 ATH_MSG_DEBUG("No RoI matching possible as no container has been retrieved");
1039 mymuons.push_back(mymuon);
1040 continue;
1041 }
1042 for(const auto& allBcMuonRoI : AllBCMuonRoIs){
1043 const xAOD::MuonRoI* roi = allBcMuonRoI.muonRoI;
1044 double dr = xAOD::P4Helpers::deltaR(*muon,roi->eta(),roi->phi(),false);
1045 deltaR_muons_roi.push_back(dr);
1046 if( dr < max_dr ){
1047 if(roiAndMenu.count(roi)>0)mymuon.matchedL1Items.insert( roiAndMenu[roi].begin(), roiAndMenu[roi].end() );
1048 mymuon.matchedL1ThrExclusive.insert( roi->getThrNumber() );
1049 if(roi->getSource()!=xAOD::MuonRoI::Barrel)mymuon.matchedL1ThrExclusiveTGC.insert( roi->getThrNumber() );
1050 if(muon->charge()<0 && roi->getCharge()==xAOD::MuonRoI::Neg)mymuon.matchedL1Charge|=true;
1051 else if(muon->charge()>0 && roi->getCharge()==xAOD::MuonRoI::Pos)mymuon.matchedL1Charge|=true;
1052 mymuon.passBW3Coin|=roi->getBW3Coincidence();
1053 mymuon.passInnerCoin|=roi->getInnerCoincidence();
1054 mymuon.passGoodMF|=roi->getGoodMF();
1055 mymuon.passIsMoreCandInRoI|=roi->isMoreCandInRoI();
1056 }
1057 }
1058 for (int ithr = 1; ithr <= 15 ; ++ithr) { // TGC thresholds from 1 up to 15
1059 for (const auto &thr : mymuon.matchedL1ThrExclusive) {
1060 if (thr >= ithr) {
1061 mymuon.matchedL1ThrInclusive.insert(ithr);
1062 break;
1063 }
1064 }
1065 for (const auto &thr : mymuon.matchedL1ThrExclusiveTGC) {
1066 if (thr >= ithr) {
1067 mymuon.matchedL1ThrInclusiveTGC.insert(ithr);
1068 break;
1069 }
1070 }
1071 }
1072 /* store TimedMuon */
1073 mymuons.push_back(mymuon);
1074 mymuon2pv_dz.push_back(dz);
1075 mymuon2pv_dca.push_back(dca);
1076 }
1077
1078
1079 auto oflmuon_num=Monitored::Scalar<int>("oflmuon_num",(*muons).size());
1080 using namespace Muon::MuonStationIndex;
1081 auto oflmuon_muonType=Monitored::Collection("oflmuon_muonType",*muons,[](const xAOD::Muon*m){return toInt(m->muonType());});
1082 auto oflmuon_author=Monitored::Collection("oflmuon_author",*muons,[](const xAOD::Muon*m){return toInt(m->author());});
1083 auto oflmuon_quality=Monitored::Collection("oflmuon_quality",*muons,[](const xAOD::Muon*m){return toInt(m->quality());});
1084 auto oflmuon_pt=Monitored::Collection("oflmuon_pt",*muons,[](const xAOD::Muon*m){return m->pt() / Gaudi::Units::GeV;});
1085 auto oflmuon_eta=Monitored::Collection("oflmuon_eta",*muons,[](const xAOD::Muon*m){return m->eta();});
1086 auto oflmuon_phi=Monitored::Collection("oflmuon_phi",*muons,[](const xAOD::Muon*m){return m->phi();});
1087 auto oflmuon_pvdz=Monitored::Collection("oflmuon_pvdz",muon2pv_dz);
1088 auto oflmuon_pvdca=Monitored::Collection("oflmuon_pvdca",muon2pv_dca);
1089
1090 auto oflmuon_probe_num=Monitored::Scalar<int>("oflmuon_probe_num",mymuons.size());
1091 auto oflmuon_probe_muonType=Monitored::Collection("oflmuon_probe_muonType",mymuons,[](const TimedMuon&m){return toInt(m.muon->muonType());});
1092 auto oflmuon_probe_author=Monitored::Collection("oflmuon_probe_author",mymuons,[](const TimedMuon&m){return toInt(m.muon->author());});
1093 auto oflmuon_probe_quality=Monitored::Collection("oflmuon_probe_quality",mymuons,[](const TimedMuon&m){return toInt(m.muon->quality());});
1094 auto oflmuon_probe_pt=Monitored::Collection("oflmuon_probe_pt",mymuons,[](const TimedMuon&m){return m.muon->pt() / Gaudi::Units::GeV;});
1095 auto oflmuon_probe_eta=Monitored::Collection("oflmuon_probe_eta",mymuons,[](const TimedMuon&m){return m.muon->eta();});
1096 auto oflmuon_probe_phi=Monitored::Collection("oflmuon_probe_phi",mymuons,[](const TimedMuon&m){return m.muon->phi();});
1097 auto oflmuon_probe_pvdz=Monitored::Collection("oflmuon_probe_pvdz",mymuon2pv_dz);
1098 auto oflmuon_probe_pvdca=Monitored::Collection("oflmuon_probe_pvdca",mymuon2pv_dca);
1099
1100 auto oflmuon_deltaR=Monitored::Collection("oflmuon_deltaR",deltaR_muons);
1101 auto oflmuon_deltaR_roi=Monitored::Collection("oflmuon_deltaR_roi",deltaR_muons_roi);
1102 auto oflmuon_deltaR_hlt=Monitored::Collection("oflmuon_deltaR_hlt",deltaR_muons_hlt);
1103
1104
1105 fill(m_packageName+"_Muon",
1106 oflmuon_num,oflmuon_muonType,oflmuon_author,oflmuon_quality,oflmuon_pt,oflmuon_eta,oflmuon_phi,oflmuon_pvdz,oflmuon_pvdca,
1107 oflmuon_probe_num,oflmuon_probe_muonType,oflmuon_probe_author,oflmuon_probe_quality,oflmuon_probe_pt,oflmuon_probe_eta,oflmuon_probe_phi,oflmuon_probe_pvdz,oflmuon_probe_pvdca,
1108 oflmuon_deltaR, oflmuon_deltaR_roi, oflmuon_deltaR_hlt
1109 );
1110
1111
1112
1113 MonVariables oflmuon_variables;
1114 oflmuon_variables.push_back(oflmuon_num);
1115 oflmuon_variables.push_back(oflmuon_muonType);
1116 oflmuon_variables.push_back(oflmuon_author);
1117 oflmuon_variables.push_back(oflmuon_quality);
1118 oflmuon_variables.push_back(oflmuon_pt);
1119 oflmuon_variables.push_back(oflmuon_eta);
1120 oflmuon_variables.push_back(oflmuon_phi);
1121
1122
1123 auto muon_charge = Monitored::Collection("muon_charge",mymuons,[](const TimedMuon& m){
1124 return m.muon->charge();
1125 });
1126 oflmuon_variables.push_back(muon_charge);
1127 auto muon_chargePos = Monitored::Collection("muon_chargePos",mymuons,[](const TimedMuon& m){
1128return (m.muon->charge()>0);
1129 });
1130 oflmuon_variables.push_back(muon_chargePos);
1131 auto muon_chargeNeg = Monitored::Collection("muon_chargeNeg",mymuons,[](const TimedMuon& m){
1132 return (m.muon->charge()<0);
1133 });
1134 oflmuon_variables.push_back(muon_chargeNeg);
1135 auto muon_eta4gev = Monitored::Collection("muon_eta4gev",mymuons,[](const TimedMuon& m){
1136 return (m.muon->pt()>pt_4_cut)?m.muon->eta():-10;
1137 });
1138 oflmuon_variables.push_back(muon_eta4gev);
1139 auto muon_phi4gev = Monitored::Collection("muon_phi4gev",mymuons,[](const TimedMuon& m){
1140 return (m.muon->pt()>pt_4_cut)?m.muon->phi():-10;
1141 });
1142 oflmuon_variables.push_back(muon_phi4gev);
1143 auto muon_phi4gev_1p05eta1p3 = Monitored::Collection("muon_phi4gev_1p05eta1p3",mymuons,[](const TimedMuon& m){
1144 return (m.muon->pt()>pt_4_cut && std::abs(m.muon->eta())>barrel_end && std::abs(m.muon->eta())<eifi_boundary)?m.muon->phi():-10;
1145 });
1146 oflmuon_variables.push_back(muon_phi4gev_1p05eta1p3);
1147 auto muon_phi4gev_1p05eta1p3A = Monitored::Collection("muon_phi4gev_1p05eta1p3A",mymuons,[](const TimedMuon& m){
1148 return (m.muon->pt()>pt_4_cut && std::abs(m.muon->eta())>barrel_end && std::abs(m.muon->eta())<eifi_boundary && m.muon->eta()>0)?m.muon->phi():-10;
1149 });
1150 oflmuon_variables.push_back(muon_phi4gev_1p05eta1p3A);
1151 auto muon_phi4gev_1p05eta1p3C = Monitored::Collection("muon_phi4gev_1p05eta1p3C",mymuons,[](const TimedMuon& m){
1152 return (m.muon->pt()>pt_4_cut && std::abs(m.muon->eta())>barrel_end && std::abs(m.muon->eta())<eifi_boundary && m.muon->eta()<0)?m.muon->phi():-10;
1153 });
1154 oflmuon_variables.push_back(muon_phi4gev_1p05eta1p3C);
1155 auto muon_phi4gev_1p3eta2p4 = Monitored::Collection("muon_phi4gev_1p3eta2p4",mymuons,[](const TimedMuon& m){
1156 return (m.muon->pt()>pt_4_cut && std::abs(m.muon->eta())>eifi_boundary && std::abs(m.muon->eta())<trigger_end)?m.muon->phi():-10;
1157 });
1158 oflmuon_variables.push_back(muon_phi4gev_1p3eta2p4);
1159 auto muon_phi4gev_1p3eta2p4A = Monitored::Collection("muon_phi4gev_1p3eta2p4A",mymuons,[](const TimedMuon& m){
1160 return (m.muon->pt()>pt_4_cut && std::abs(m.muon->eta())>eifi_boundary && std::abs(m.muon->eta())<trigger_end && m.muon->eta()>0)?m.muon->phi():-10;
1161 });
1162 oflmuon_variables.push_back(muon_phi4gev_1p3eta2p4A);
1163 auto muon_phi4gev_1p3eta2p4C = Monitored::Collection("muon_phi4gev_1p3eta2p4C",mymuons,[](const TimedMuon& m){
1164 return (m.muon->pt()>pt_4_cut && std::abs(m.muon->eta())>eifi_boundary && std::abs(m.muon->eta())<trigger_end && m.muon->eta()<0)?m.muon->phi():-10;
1165 });
1166 oflmuon_variables.push_back(muon_phi4gev_1p3eta2p4C);
1167 auto muon_phi4gev_rpc = Monitored::Collection("muon_phi4gev_rpc",mymuons,[](const TimedMuon& m){
1168 return (std::abs(m.muon->eta()) < barrel_end && m.muon->pt() > pt_4_cut) ? m.muon->phi() : -10;
1169 });
1170 oflmuon_variables.push_back(muon_phi4gev_rpc);
1171 auto muon_phi4gev_rpcA = Monitored::Collection("muon_phi4gev_rpcA",mymuons,[](const TimedMuon& m){
1172 return (std::abs(m.muon->eta()) < barrel_end && m.muon->pt() > pt_4_cut && m.muon->eta() > 0) ? m.muon->phi() : -10;
1173 });
1174 oflmuon_variables.push_back(muon_phi4gev_rpcA);
1175 auto muon_phi4gev_rpcC = Monitored::Collection("muon_phi4gev_rpcC",mymuons,[](const TimedMuon& m){
1176 return (std::abs(m.muon->eta()) < barrel_end && m.muon->pt() > pt_4_cut && m.muon->eta() < 0) ? m.muon->phi() : -10;
1177 });
1178 oflmuon_variables.push_back(muon_phi4gev_rpcC);
1179 auto muon_phi4gev_tgc = Monitored::Collection("muon_phi4gev_tgc",mymuons,[](const TimedMuon& m){
1180 return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end && m.muon->pt() > pt_4_cut) ? m.muon->phi() : -10;
1181 });
1182 oflmuon_variables.push_back(muon_phi4gev_tgc);
1183 auto muon_phi4gev_tgcA = Monitored::Collection("muon_phi4gev_tgcA",mymuons,[](const TimedMuon& m){
1184 return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end && m.muon->pt() > pt_4_cut && m.muon->eta() > 0) ? m.muon->phi() : -10;
1185 });
1186 oflmuon_variables.push_back(muon_phi4gev_tgcA);
1187 auto muon_phi4gev_tgcC = Monitored::Collection("muon_phi4gev_tgcC",mymuons,[](const TimedMuon& m){
1188 return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end && m.muon->pt() > pt_4_cut && m.muon->eta() < 0) ? m.muon->phi() : -10;
1189 });
1190 oflmuon_variables.push_back(muon_phi4gev_tgcC);
1191 auto muon_phi0gev_tgc = Monitored::Collection("muon_phi0gev_tgc",mymuons,[](const TimedMuon& m){
1192 return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end) ? m.muon->phi() : -10;
1193 });
1194 oflmuon_variables.push_back(muon_phi0gev_tgc);
1195 auto muon_phi0gev_tgcA = Monitored::Collection("muon_phi0gev_tgcA",mymuons,[](const TimedMuon& m){
1196 return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end && m.muon->eta() > 0) ? m.muon->phi() : -10;
1197 });
1198 oflmuon_variables.push_back(muon_phi0gev_tgcA);
1199 auto muon_phi0gev_tgcC = Monitored::Collection("muon_phi0gev_tgcC",mymuons,[](const TimedMuon& m){
1200 return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end && m.muon->eta() < 0) ? m.muon->phi() : -10;
1201 });
1202 oflmuon_variables.push_back(muon_phi0gev_tgcC);
1203 auto muon_eta = Monitored::Collection("muon_eta", mymuons, [](const TimedMuon &m) {
1204 return (m.muon->pt() > pt_30_cut) ? m.muon->eta() : -10;
1205 });
1206 oflmuon_variables.push_back(muon_eta);
1207 auto muon_phi = Monitored::Collection("muon_phi", mymuons, [](const TimedMuon &m) {
1208 return (m.muon->pt() > pt_30_cut) ? m.muon->phi() : -10;
1209 });
1210 oflmuon_variables.push_back(muon_phi);
1211 auto muon_phi_rpc = Monitored::Collection("muon_phi_rpc", mymuons, [](const TimedMuon &m) {
1212 return (std::abs(m.muon->eta()) < barrel_end && m.muon->pt() > pt_30_cut) ? m.muon->phi() : -10;
1213 });
1214 oflmuon_variables.push_back(muon_phi_rpc);
1215 auto muon_phi_rpcA = Monitored::Collection("muon_phi_rpcA", mymuons, [](const TimedMuon &m) {
1216 return (std::abs(m.muon->eta()) < barrel_end && m.muon->pt() > pt_30_cut && m.muon->eta()>0) ? m.muon->phi() : -10;
1217 });
1218 oflmuon_variables.push_back(muon_phi_rpcA);
1219 auto muon_phi_rpcC = Monitored::Collection("muon_phi_rpcC", mymuons, [](const TimedMuon &m) {
1220 return (std::abs(m.muon->eta()) < barrel_end && m.muon->pt() > pt_30_cut && m.muon->eta()<0) ? m.muon->phi() : -10;
1221 });
1222 oflmuon_variables.push_back(muon_phi_rpcC);
1223 auto muon_phi_tgc = Monitored::Collection("muon_phi_tgc", mymuons, [](const TimedMuon &m) {
1224 return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end && m.muon->pt() > pt_30_cut) ? m.muon->phi() : -10;
1225 });
1226 oflmuon_variables.push_back(muon_phi_tgc);
1227 auto muon_phi_tgcA = Monitored::Collection("muon_phi_tgcA", mymuons, [](const TimedMuon &m) {
1228 return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end && m.muon->pt() > pt_30_cut && m.muon->eta()>0) ? m.muon->phi() : -10;
1229 });
1230 oflmuon_variables.push_back(muon_phi_tgcA);
1231 auto muon_phi_tgcC = Monitored::Collection("muon_phi_tgcC", mymuons, [](const TimedMuon &m) {
1232 return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end && m.muon->pt() > pt_30_cut && m.muon->eta()<0) ? m.muon->phi() : -10;
1233 });
1234 oflmuon_variables.push_back(muon_phi_tgcC);
1235 auto muon_pt_rpc = Monitored::Collection("muon_pt_rpc", mymuons, [](const TimedMuon &m) {
1236 return (std::abs(m.muon->eta()) < barrel_end) ? m.muon->pt() / Gaudi::Units::GeV : -10;
1237 });
1238 oflmuon_variables.push_back(muon_pt_rpc);
1239 auto muon_pt_tgc = Monitored::Collection("muon_pt_tgc", mymuons, [](const TimedMuon &m) {
1240 return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end) ? m.muon->pt() / Gaudi::Units::GeV : -10;
1241 });
1242 oflmuon_variables.push_back(muon_pt_tgc);
1243 auto muon_barrel = Monitored::Collection("muon_barrel", mymuons, [](const TimedMuon &m) {
1244 return (std::abs(m.muon->eta()) < barrel_end);
1245 });
1246 oflmuon_variables.push_back(muon_barrel);
1247 auto muon_endcap = Monitored::Collection("muon_endcap", mymuons, [](const TimedMuon &m) {
1248 return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < endcap_end);
1249 });
1250 oflmuon_variables.push_back(muon_endcap);
1251 auto muon_forward = Monitored::Collection("muon_forward", mymuons, [](const TimedMuon &m) {
1252 return (std::abs(m.muon->eta()) > endcap_end && std::abs(m.muon->eta()) < trigger_end);
1253 });
1254 oflmuon_variables.push_back(muon_forward);
1255 auto muon_l1passThr1TGC = Monitored::Collection("muon_l1passThr1TGC", mymuons, [](const TimedMuon &m) {
1256 return m.matchedL1ThrInclusiveTGC.find(1) != m.matchedL1ThrInclusiveTGC.end();
1257 });
1258 oflmuon_variables.push_back(muon_l1passThr1TGC);
1259 auto muon_l1passThr1 = Monitored::Collection("muon_l1passThr1", mymuons, [](const TimedMuon &m) {
1260 return m.matchedL1ThrInclusive.find(1) != m.matchedL1ThrInclusive.end();
1261 });
1262 oflmuon_variables.push_back(muon_l1passThr1);
1263 auto muon_l1passThr2 = Monitored::Collection("muon_l1passThr2", mymuons, [](const TimedMuon &m) {
1264 return m.matchedL1ThrInclusive.find(2) != m.matchedL1ThrInclusive.end();
1265 });
1266 oflmuon_variables.push_back(muon_l1passThr2);
1267 auto muon_l1passThr3 = Monitored::Collection("muon_l1passThr3", mymuons, [](const TimedMuon &m) {
1268 return m.matchedL1ThrInclusive.find(3) != m.matchedL1ThrInclusive.end();
1269 });
1270 oflmuon_variables.push_back(muon_l1passThr3);
1271 auto muon_l1passThr4 = Monitored::Collection("muon_l1passThr4", mymuons, [](const TimedMuon &m) {
1272 return m.matchedL1ThrInclusive.find(4) != m.matchedL1ThrInclusive.end();
1273 });
1274 oflmuon_variables.push_back(muon_l1passThr4);
1275 auto muon_l1passThr5 = Monitored::Collection("muon_l1passThr5", mymuons, [](const TimedMuon &m) {
1276 return m.matchedL1ThrInclusive.find(5) != m.matchedL1ThrInclusive.end();
1277 });
1278 oflmuon_variables.push_back(muon_l1passThr5);
1279 auto muon_l1passThr6 = Monitored::Collection("muon_l1passThr6", mymuons, [](const TimedMuon &m) {
1280 return m.matchedL1ThrInclusive.find(6) != m.matchedL1ThrInclusive.end();
1281 });
1282 oflmuon_variables.push_back(muon_l1passThr6);
1283 auto muon_l1passThr7 = Monitored::Collection("muon_l1passThr7", mymuons, [](const TimedMuon &m) {
1284 return m.matchedL1ThrInclusive.find(7) != m.matchedL1ThrInclusive.end();
1285 });
1286 oflmuon_variables.push_back(muon_l1passThr7);
1287 auto muon_l1passThr8 = Monitored::Collection("muon_l1passThr8", mymuons, [](const TimedMuon &m) {
1288 return m.matchedL1ThrInclusive.find(8) != m.matchedL1ThrInclusive.end();
1289 });
1290 oflmuon_variables.push_back(muon_l1passThr8);
1291 auto muon_l1passThr9 = Monitored::Collection("muon_l1passThr9", mymuons, [](const TimedMuon &m) {
1292 return m.matchedL1ThrInclusive.find(9) != m.matchedL1ThrInclusive.end();
1293 });
1294 oflmuon_variables.push_back(muon_l1passThr9);
1295 auto muon_l1passThr10 = Monitored::Collection("muon_l1passThr10", mymuons, [](const TimedMuon &m) {
1296 return m.matchedL1ThrInclusive.find(10) != m.matchedL1ThrInclusive.end();
1297 });
1298 oflmuon_variables.push_back(muon_l1passThr10);
1299 auto muon_l1passThr11 = Monitored::Collection("muon_l1passThr11", mymuons, [](const TimedMuon &m) {
1300 return m.matchedL1ThrInclusive.find(11) != m.matchedL1ThrInclusive.end();
1301 });
1302 oflmuon_variables.push_back(muon_l1passThr11);
1303 auto muon_l1passThr12 = Monitored::Collection("muon_l1passThr12", mymuons, [](const TimedMuon &m) {
1304 return m.matchedL1ThrInclusive.find(12) != m.matchedL1ThrInclusive.end();
1305 });
1306 oflmuon_variables.push_back(muon_l1passThr12);
1307 auto muon_l1passThr13 = Monitored::Collection("muon_l1passThr13", mymuons, [](const TimedMuon &m) {
1308 return m.matchedL1ThrInclusive.find(13) != m.matchedL1ThrInclusive.end();
1309 });
1310 oflmuon_variables.push_back(muon_l1passThr13);
1311 auto muon_l1passThr14 = Monitored::Collection("muon_l1passThr14", mymuons, [](const TimedMuon &m) {
1312 return m.matchedL1ThrInclusive.find(14) != m.matchedL1ThrInclusive.end();
1313 });
1314 oflmuon_variables.push_back(muon_l1passThr14);
1315 auto muon_l1passThr15 = Monitored::Collection("muon_l1passThr15", mymuons, [](const TimedMuon &m) {
1316 return m.matchedL1ThrInclusive.find(15) != m.matchedL1ThrInclusive.end();
1317 });
1318 oflmuon_variables.push_back(muon_l1passThr15);
1319 auto muon_l1passCharge = Monitored::Collection("muon_l1passCharge",mymuons,[](const TimedMuon& m){
1320 return m.matchedL1Charge;
1321 });
1322 oflmuon_variables.push_back(muon_l1passCharge);
1323 auto muon_l1passBW3Coin = Monitored::Collection("muon_l1passBW3Coin",mymuons,[](const TimedMuon& m){
1324 return m.passBW3Coin;
1325 });
1326 oflmuon_variables.push_back(muon_l1passBW3Coin);
1327 auto muon_l1passBW3CoinVeto = Monitored::Collection("muon_l1passBW3CoinVeto",mymuons,[](const TimedMuon& m){
1328 return !m.passBW3Coin;
1329 });
1330 oflmuon_variables.push_back(muon_l1passBW3CoinVeto);
1331 auto muon_l1passInnerCoin = Monitored::Collection("muon_l1passInnerCoin",mymuons,[](const TimedMuon& m){
1332 return m.passInnerCoin;
1333 });
1334 oflmuon_variables.push_back(muon_l1passInnerCoin);
1335 auto muon_l1passInnerCoinVeto = Monitored::Collection("muon_l1passInnerCoinVeto",mymuons,[](const TimedMuon& m){
1336 return !m.passInnerCoin;
1337 });
1338 oflmuon_variables.push_back(muon_l1passInnerCoinVeto);
1339 auto muon_l1passGoodMF = Monitored::Collection("muon_l1passGoodMF",mymuons,[](const TimedMuon& m){
1340 return m.passGoodMF;
1341 });
1342 oflmuon_variables.push_back(muon_l1passGoodMF);
1343 auto muon_l1passBadMF = Monitored::Collection("muon_l1passBadMF",mymuons,[](const TimedMuon& m){
1344 return !m.passGoodMF;
1345 });
1346 oflmuon_variables.push_back(muon_l1passBadMF);
1347 auto muon_l1passIsMoreCandInRoI = Monitored::Collection("muon_l1passIsMoreCandInRoI",mymuons,[](const TimedMuon& m){
1348 return m.passIsMoreCandInRoI;
1349 });
1350 oflmuon_variables.push_back(muon_l1passIsMoreCandInRoI);
1351 fill(m_packageName, oflmuon_variables);
1352
1353 ATH_MSG_DEBUG("End filling offline muon-related histograms");
1354 }
1356 fillThresholdPatternHistograms(menuAndRoIs, mymuons, ctx);
1357
1359 fillTgcPrdHistograms(mon_bcid, mon_pileup, mon_lb, extpositions,ctx);
1361
1362
1364 if(m_anaTgcCoin){
1365 SG::ReadHandle < Muon::TgcCoinDataContainer > tgcCoinPrev(m_TgcCoinDataContainerPrevBCKey, ctx);
1366 SG::ReadHandle < Muon::TgcCoinDataContainer > tgcCoinCurr(m_TgcCoinDataContainerCurrBCKey, ctx);
1367 SG::ReadHandle < Muon::TgcCoinDataContainer > tgcCoinNext(m_TgcCoinDataContainerNextBCKey, ctx);
1368 if (!tgcCoinCurr.isValid() || !tgcCoinNext.isValid() || !tgcCoinPrev.isValid()) {
1369 ATH_MSG_WARNING("Couldn't get TGC Coin Data");
1370 }else{
1371 ATH_MSG_DEBUG("Filling TGC CoinData histograms");
1372 std::map<int, SG::ReadHandle<Muon::TgcCoinDataContainer> > tgcCoin;
1373 tgcCoin[-1] = tgcCoinPrev;
1374 tgcCoin[0] = tgcCoinCurr;
1375 tgcCoin[+1] = tgcCoinNext;
1377 SG::ReadHandle < Muon::TgcCoinDataContainer > tgcCoinNextNext(m_TgcCoinDataContainerNextNextBCKey, ctx);
1378 if(tgcCoinNextNext.isValid())tgcCoin[+2] = tgcCoinNextNext;
1379 }
1380 std::vector< TgcTrig > tgcTrigMap_SL;
1381 std::vector< TgcTrig > tgcTrigMap_SL_Endcap;
1382 std::vector< TgcTrig > tgcTrigMap_SL_Forward;
1383 std::vector< TgcTrig > tgcTrigMap_HPT_Wire;
1384 std::vector< TgcTrig > tgcTrigMap_HPT_Endcap_Wire;
1385 std::vector< TgcTrig > tgcTrigMap_HPT_Forward_Wire;
1386 std::vector< TgcTrig > tgcTrigMap_HPT_Strip;
1387 std::vector< TgcTrig > tgcTrigMap_HPT_Endcap_Strip;
1388 std::vector< TgcTrig > tgcTrigMap_HPT_Forward_Strip;
1389 std::vector< TgcTrig > tgcTrigMap_LPT_Wire;
1390 std::vector< TgcTrig > tgcTrigMap_LPT_Endcap_Wire;
1391 std::vector< TgcTrig > tgcTrigMap_LPT_Forward_Wire;
1392 std::vector< TgcTrig > tgcTrigMap_LPT_Strip;
1393 std::vector< TgcTrig > tgcTrigMap_LPT_Endcap_Strip;
1394 std::vector< TgcTrig > tgcTrigMap_LPT_Forward_Strip;
1395 std::vector< TgcTrig > tgcTrigMap_EIFI_Wire;
1396 std::vector< TgcTrig > tgcTrigMap_EIFI_Endcap_Wire;
1397 std::vector< TgcTrig > tgcTrigMap_EIFI_Forward_Wire;
1398 std::vector< TgcTrig > tgcTrigMap_EIFI_Strip;
1399 std::vector< TgcTrig > tgcTrigMap_EIFI_Endcap_Strip;
1400 std::vector< TgcTrig > tgcTrigMap_EIFI_Forward_Strip;
1401 std::vector< TgcTrigTile > tgcTrigTileMap;
1402 std::vector< TgcTrigNsw > tgcTrigNswMap;
1403 std::vector< TgcTrigRpc > tgcTrigRpcMap;
1404 std::vector< TgcTrigEifi > tgcTrigEifiMap;
1405 std::map<TString, TgcTrigNsw > tgcTrigNswMapUnique;
1406 std::vector<int> multiplicity_endcap(number_of_trigger_sectors_endcap*2+1); // both A and C sides, plus one empty bin
1407 std::vector<int> multiplicity_forward(number_of_trigger_sectors_forward*2+1); // both A and C sides, plus one empty bin
1408 std::vector<int> sectors_endcap(number_of_trigger_sectors_endcap*2+1); // both A and C sides, plus one empty bin
1409 std::vector<int> sectors_forward(number_of_trigger_sectors_forward*2+1); // both A and C sides, plus one empty bin
1410 std::iota(sectors_endcap.begin(),sectors_endcap.end(),-number_of_trigger_sectors_endcap);
1411 std::iota(sectors_forward.begin(),sectors_forward.end(),-number_of_trigger_sectors_forward);
1412 int n_TgcCoin_detElementIsNull = 0;
1413 int n_TgcCoin_postOutPtrIsNull = 0;
1414 for (auto thisCoin : tgcCoin) {
1415 int bunch = thisCoin.first;
1416 for (const auto tgccnt : *(thisCoin.second)) {
1417 for (const auto data : *tgccnt) {
1418 if ( data->detectorElementOut() == nullptr ) n_TgcCoin_detElementIsNull++;
1419 if ( data->posOutPtr() == nullptr ) n_TgcCoin_postOutPtrIsNull++;
1420
1421 int slsector = (data->isForward()) ? ( data->phi() % number_of_trigger_sectors_forward + 1) : ( (data->phi() + 1) % number_of_trigger_sectors_endcap + 1); // translation from the phi index to trigger sector
1422 if(!data->isAside()) slsector *= -1;
1423
1424 if(data->type() == Muon::TgcCoinData::TYPE_UNKNOWN){ // inner muon detectors (EI/FI/Tile/NSW/RPCBIS78)
1425 if (data->isInner() && data->isStrip()) { // RPC-BIS78
1426 TgcTrigRpc rpcCoin;
1427 rpcCoin.slSector = slsector;
1429 rpcCoin.bunch = bunch;
1430 rpcCoin.currBc = (bunch==0);
1435 tgcTrigRpcMap.push_back(rpcCoin);
1436 } else if (data->isInner() && !data->isStrip()) { // NSW
1437 TgcTrigNsw nswCoin;
1438 nswCoin.slSector = slsector;
1440 int boardID = (std::abs(nswCoin.slSector)-1) / 2 + 1; // 1..24 (1..12)
1441 nswCoin.slInputIndex = (boardID-1) * 6 + nswCoin.slInput;
1442 nswCoin.isAside = data->isAside();
1443 nswCoin.isForward = data->isForward();
1445 nswCoin.bunch = bunch;
1446 nswCoin.currBc = (bunch==0);
1450 if(nswCoin.R!=0 && nswCoin.Phi!=0){
1451 tgcTrigNswMap.push_back(nswCoin);
1452 TString uniqueinfo = Form("%d:%d:%d:%d:%d:%d:%d:%d",nswCoin.slSector,nswCoin.slInput,nswCoin.slInputIndex,nswCoin.isAside,nswCoin.isForward,nswCoin.R,nswCoin.Phi,nswCoin.deltaTheta);
1453 if(tgcTrigNswMapUnique.find(uniqueinfo)==tgcTrigNswMapUnique.end()){
1454 nswCoin.bcmask = 0x1 << (1-bunch);
1455 tgcTrigNswMapUnique[uniqueinfo] = nswCoin;
1456 }else{
1457 tgcTrigNswMapUnique[uniqueinfo].bcmask |= 0x1 << (1-bunch);
1458 }
1459 }
1460 } else if (!data->isInner() && data->isStrip()) { // TMDB
1461 TgcTrigTile tileCoin;
1462 tileCoin.slSector = slsector;
1464 tileCoin.bunch = bunch;
1465 tileCoin.currBc = (bunch==0);
1467 if(tileCoin.tmdbDecisions!=0)
1468 tgcTrigTileMap.push_back(tileCoin);
1469 } else if (!data->isInner() && !data->isStrip()) { // EI
1470 TgcTrigEifi eifiCoin;
1471 eifiCoin.slSector = slsector;
1472 eifiCoin.bunch = bunch;
1473 eifiCoin.currBc = (bunch==0);
1474 tgcTrigEifiMap.push_back(eifiCoin);
1475 }
1476 }
1477
1478 if ( data->detectorElementOut() == nullptr ||
1479 data->posOutPtr() == nullptr )continue; // to avoid FPE
1480 TgcTrig tgcTrig;
1481 tgcTrig.lb = GetEventInfo(ctx)->lumiBlock();
1482 const Amg::Vector3D &posIn = data->globalposIn();
1483 tgcTrig.x_In = posIn[0];
1484 tgcTrig.y_In = posIn[1];
1485 tgcTrig.z_In = posIn[2];
1486 const Amg::Vector3D &posOut = data->globalposOut();
1487 tgcTrig.x_Out = posOut[0];
1488 tgcTrig.y_Out = posOut[1];
1489 tgcTrig.z_Out = posOut[2];
1490 tgcTrig.eta = posOut.eta();
1491 tgcTrig.phi = posOut.phi();
1492 tgcTrig.width_In = data->widthIn();
1493 tgcTrig.width_Out = data->widthOut();
1494 if (data->type() == Muon::TgcCoinData::TYPE_SL) {
1495 const Amg::MatrixX &matrix = data->errMat();
1496 tgcTrig.width_R = matrix(0, 0);
1497 tgcTrig.width_Phi = matrix(1, 1);
1498
1499 tgcTrig.muonMatched = 0;
1500 for(const auto& ext : extpositions_pivot){
1501 if(ext.muon->pt() < m_pTCutOnTrigExtrapolation.value() )continue;
1502 if(data->isAside() && ext.extPos.z()<0)continue;
1503 if(!data->isAside()&& ext.extPos.z()>0)continue;
1504 if( Amg::deltaR(posOut,ext.extPos) > m_l1trigMatchWindowPt15 )continue;
1505 tgcTrig.muonMatched = 1;
1506 break;
1507 }
1508
1509 tgcTrig.loosemuonMatched = 0;
1510 for (const auto& muon : oflmuons) {
1511 double max_dr = getMatchingWindow(muon);
1512 double dr = xAOD::P4Helpers::deltaR(*muon,tgcTrig.eta,tgcTrig.phi,false);
1513 if( dr > max_dr )continue;
1514 tgcTrig.loosemuonMatched = 1;
1515 break;
1516 }
1517
1518 tgcTrig.isBiased = 0;
1519 for(const auto& muon : biasedMuons){
1520 double max_dr = getMatchingWindow(muon);
1521 double dr = xAOD::P4Helpers::deltaR(*muon,tgcTrig.eta,tgcTrig.phi,false);
1522 if( dr > max_dr )continue;
1523 tgcTrig.isBiased = 1;
1524 break;
1525 }
1526 // real1: if biasedMuons.size()==1, reject biased muon
1527 // real2: if biasedMuons.size()>=2, use any muons.
1528 // fake: just reject biased muons
1529 if(biasedMuons.size()>=2) tgcTrig.isBiased = 0;
1530
1531 } else {
1532 tgcTrig.width_R = 0.;
1533 tgcTrig.width_Phi = 0.;
1534 }
1535 int etaout = 0;
1536 int etain = 0;
1537 const Identifier tcdidout = data->channelIdOut();
1538 if (tcdidout.is_valid()) {
1539 etaout = std::abs(int(m_idHelperSvc->tgcIdHelper().stationEta(tcdidout)));
1540 }
1541 const Identifier tcdidin = data->channelIdIn();
1542 if (tcdidin.is_valid()) {
1543 etain = std::abs(int(m_idHelperSvc->tgcIdHelper().stationEta(tcdidin)));
1544 }
1545 tgcTrig.etaout = etaout;
1546 tgcTrig.etain = etain;
1547 tgcTrig.isAside = data->isAside();
1548 tgcTrig.isForward = data->isForward();
1549 tgcTrig.isStrip = data->isStrip();
1550 tgcTrig.isInner = data->isInner();
1551 tgcTrig.isPositiveDeltaR = data->isPositiveDeltaR();
1552 tgcTrig.type = data->type();
1553 tgcTrig.trackletId = data->trackletId();
1554 tgcTrig.trackletIdStrip = data->trackletIdStrip();
1555 tgcTrig.sector = slsector;
1556 tgcTrig.roi = data->roi();
1557 tgcTrig.pt = data->pt();
1558 tgcTrig.delta = data->delta();
1559 tgcTrig.sub = data->sub();
1560 tgcTrig.veto = data->veto();
1561 tgcTrig.bunch = bunch;
1562 tgcTrig.bcid = (GetEventInfo(ctx)->bcid() & 0xF);
1563 tgcTrig.inner = data->inner();
1564 if( !data->isInner() ){
1565 if (data->type() == Muon::TgcCoinData::TYPE_SL && !data->isForward()) {
1566 tgcTrigMap_SL_Endcap.push_back(tgcTrig);
1567 tgcTrigMap_SL.push_back(tgcTrig);
1568 multiplicity_endcap[ slsector + number_of_trigger_sectors_endcap ]++;
1569 }else if (data->type() == Muon::TgcCoinData::TYPE_SL && data->isForward()) {
1570 tgcTrigMap_SL_Forward.push_back(tgcTrig);
1571 tgcTrigMap_SL.push_back(tgcTrig);
1572 multiplicity_forward[ slsector + number_of_trigger_sectors_forward ]++;
1573 }else if(data->type() == Muon::TgcCoinData::TYPE_HIPT && !data->isForward()){
1574 if(tgcTrig.isStrip){
1575 tgcTrigMap_HPT_Endcap_Strip.push_back(tgcTrig);
1576 tgcTrigMap_HPT_Strip.push_back(tgcTrig);
1577 }else{
1578 tgcTrigMap_HPT_Endcap_Wire.push_back(tgcTrig);
1579 tgcTrigMap_HPT_Wire.push_back(tgcTrig);
1580 }
1581 }else if(data->type() == Muon::TgcCoinData::TYPE_HIPT && data->isForward()){
1582 if(tgcTrig.isStrip){
1583 tgcTrigMap_HPT_Forward_Strip.push_back(tgcTrig);
1584 tgcTrigMap_HPT_Strip.push_back(tgcTrig);
1585 }else{
1586 tgcTrigMap_HPT_Forward_Wire.push_back(tgcTrig);
1587 tgcTrigMap_HPT_Wire.push_back(tgcTrig);
1588 }
1589 }else if(data->type() == Muon::TgcCoinData::TYPE_TRACKLET && !data->isForward()){
1590 if(tgcTrig.isStrip){
1591 tgcTrigMap_LPT_Endcap_Strip.push_back(tgcTrig);
1592 tgcTrigMap_LPT_Strip.push_back(tgcTrig);
1593 }else{
1594 tgcTrigMap_LPT_Endcap_Wire.push_back(tgcTrig);
1595 tgcTrigMap_LPT_Wire.push_back(tgcTrig);
1596 }
1597 }else if(data->type() == Muon::TgcCoinData::TYPE_TRACKLET && data->isForward()){
1598 if(tgcTrig.isStrip){
1599 tgcTrigMap_LPT_Forward_Strip.push_back(tgcTrig);
1600 tgcTrigMap_LPT_Strip.push_back(tgcTrig);
1601 }else{
1602 tgcTrigMap_LPT_Forward_Wire.push_back(tgcTrig);
1603 tgcTrigMap_LPT_Wire.push_back(tgcTrig);
1604 }
1605 }else if(data->type() == Muon::TgcCoinData::TYPE_TRACKLET_EIFI && !data->isForward()){
1606 if(tgcTrig.isStrip){
1607 tgcTrigMap_EIFI_Endcap_Strip.push_back(tgcTrig);
1608 tgcTrigMap_EIFI_Strip.push_back(tgcTrig);
1609 }else{
1610 tgcTrigMap_EIFI_Endcap_Wire.push_back(tgcTrig);
1611 tgcTrigMap_EIFI_Wire.push_back(tgcTrig);
1612 }
1613 }else if(data->type() == Muon::TgcCoinData::TYPE_TRACKLET_EIFI && data->isForward()){
1614 if(tgcTrig.isStrip){
1615 tgcTrigMap_EIFI_Forward_Strip.push_back(tgcTrig);
1616 tgcTrigMap_EIFI_Strip.push_back(tgcTrig);
1617 }else{
1618 tgcTrigMap_EIFI_Forward_Wire.push_back(tgcTrig);
1619 tgcTrigMap_EIFI_Wire.push_back(tgcTrig);
1620 }
1621 }
1622 }else{ // inner coincidence, i.e. EI/FI/Tile/BIS78/NSW
1623
1624 }
1625 }
1626 }
1627 }
1628
1629
1630 for(auto& sl : tgcTrigMap_SL){
1631 if( sl.bunch != 0 )continue;
1632 for(auto& inner : tgcTrigRpcMap){
1633 if( sl.isForward == 1 )break;
1634 if( sl.sector != inner.slSector )continue;
1635 inner.roiEta = sl.eta;
1636 inner.roiPhi = sl.phi;
1637 inner.roiNum = sl.roi;
1638 inner.deltaBcid = (sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0) ? (inner.bcid - sl.bcid) : -999;
1639 inner.deltaTiming = (sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0) ? (inner.bunch - sl.bunch) : -999;
1640 inner.goodBcid0 = inner.deltaBcid==0;
1641 inner.goodBcid1 = (std::abs(inner.deltaBcid)<=1 || (16-std::abs(inner.deltaBcid))<=1);
1642 inner.goodBcid2 = (std::abs(inner.deltaBcid)<=2 || (16-std::abs(inner.deltaBcid))<=2);
1643 inner.goodTiming = (inner.bunch==sl.bunch && sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0);
1644 sl.rpc.push_back(&inner);
1645 }
1646 for(auto& inner : tgcTrigNswMap){
1647 if( sl.sector != inner.slSector )continue;
1648 if( sl.isForward != inner.isForward )continue;
1649 inner.deltaR = inner.R - std::abs(getNswRindexFromEta(sl.eta));
1650 inner.roiEta = sl.eta;
1651 inner.roiPhi = sl.phi;
1652 inner.roiNum = sl.roi;
1653 if( std::abs(inner.deltaR) < m_NswDeltaRCut ){
1654 inner.deltaBcid = (sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0) ? (inner.bcid - sl.bcid) : -999;
1655 inner.deltaTiming = (sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0) ? (inner.bunch - sl.bunch) : -999;
1656 inner.goodBcid0 = inner.deltaBcid==0;
1657 inner.goodBcid1 = (std::abs(inner.deltaBcid)<=1 || (16-std::abs(inner.deltaBcid))<=1);
1658 inner.goodBcid2 = (std::abs(inner.deltaBcid)<=2 || (16-std::abs(inner.deltaBcid))<=2);
1659 inner.goodTiming = (inner.bunch==sl.bunch && sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0);
1660 sl.nsw.push_back(&inner);
1661 }
1662 }
1663 for(auto& inner : tgcTrigNswMapUnique){
1664 if( sl.sector != inner.second.slSector )continue;
1665 if( sl.isForward != inner.second.isForward )continue;
1666 inner.second.deltaR = inner.second.R - std::abs(getNswRindexFromEta(sl.eta));
1667 inner.second.roiEta = sl.eta;
1668 inner.second.roiPhi = sl.phi;
1669 inner.second.roiNum = sl.roi;
1670 if( std::abs(inner.second.deltaR) < m_NswDeltaRCut ){
1671 inner.second.deltaBcid = (sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0) ? (inner.second.bcid - sl.bcid) : -999;
1672 inner.second.deltaTiming = (sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0) ? (inner.second.bunch - sl.bunch) : -999;
1673 inner.second.goodBcid0 = inner.second.deltaBcid==0;
1674 inner.second.goodBcid1 = (std::abs(inner.second.deltaBcid)<=1 || (16-std::abs(inner.second.deltaBcid))<=1);
1675 inner.second.goodBcid2 = (std::abs(inner.second.deltaBcid)<=2 || (16-std::abs(inner.second.deltaBcid))<=2);
1676 inner.second.goodTiming = (inner.second.bunch==sl.bunch && sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0);
1677 sl.nsw_unique.push_back(&inner.second);
1678 }
1679 }
1680 for(auto& inner : tgcTrigTileMap){
1681 if( sl.isForward == 1 )break;
1682 if( sl.sector != inner.slSector )continue;
1683 inner.roiEta = sl.eta;
1684 inner.roiPhi = sl.phi;
1685 inner.roiNum = sl.roi;
1686 inner.deltaBcid = (sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0) ? (inner.bcid - sl.bcid) : -999;
1687 inner.deltaTiming = (sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0) ? (inner.bunch - sl.bunch) : -999;
1688 inner.goodBcid0 = inner.deltaBcid==0;
1689 inner.goodBcid1 = (std::abs(inner.deltaBcid)<=1 || (16-std::abs(inner.deltaBcid))<=1);
1690 inner.goodBcid2 = (std::abs(inner.deltaBcid)<=2 || (16-std::abs(inner.deltaBcid))<=2);
1691 inner.goodTiming = (inner.bunch==sl.bunch && sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0);
1692 sl.tile.push_back(&inner);
1693 }
1694 for(auto& inner : tgcTrigEifiMap){
1695 if( sl.isForward == 1 )break;
1696 if( sl.sector != inner.slSector )continue;
1697 inner.roiEta = sl.eta;
1698 inner.roiPhi = sl.phi;
1699 inner.roiNum = sl.roi;
1700 inner.deltaTiming = (sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0) ? (inner.bunch - sl.bunch) : -999;
1701 inner.goodTiming = (inner.bunch==sl.bunch && sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0);
1702 sl.eifi.push_back(&inner);
1703 }
1704 }
1705
1706 std::vector< TgcTrigTile > tgcTrigTileMap_allmods;
1707 for(auto& inner : tgcTrigTileMap){
1708 if(inner.roiNum<0)continue;
1709 for(int i = 0 ; i < 12 ; i++){
1710 TgcTrigTile inner2 = inner;
1711 if((inner.tmdbDecisions>>i) & 0x1){
1712 inner2.tmdbDecisions = (i+3)%3 + 1;
1713 tgcTrigTileMap_allmods.push_back(inner2);
1714 }
1715 }
1716 }
1717
1718
1719
1720 MonVariables tgcCoin_variables;
1721 tgcCoin_variables.push_back(mon_bcid);
1722 tgcCoin_variables.push_back(mon_pileup);
1723 tgcCoin_variables.push_back(mon_lb);
1724
1725 auto mon_nTgcCoin_detElementIsNull = Monitored::Scalar<int>("nTgcCoinDetElementIsNull", n_TgcCoin_detElementIsNull);
1726 auto mon_nTgcCoin_postOutPtrIsNull = Monitored::Scalar<int>("nTgcCoinPostOutPtrIsNull", n_TgcCoin_postOutPtrIsNull);
1727 auto mon_sectors_endcap = Monitored::Collection("trigger_sectors_endcap", sectors_endcap);
1728 auto mon_sectors_forward = Monitored::Collection("trigger_sectors_forward", sectors_forward);
1729 auto mon_multiplicity_endcap = Monitored::Collection("trigger_multiplicity_endcap", multiplicity_endcap);
1730 auto mon_multiplicity_forward = Monitored::Collection("trigger_multiplicity_forward", multiplicity_forward);
1731 tgcCoin_variables.emplace_back(mon_nTgcCoin_detElementIsNull);
1732 tgcCoin_variables.emplace_back(mon_nTgcCoin_postOutPtrIsNull);
1733 tgcCoin_variables.emplace_back(mon_sectors_endcap);
1734 tgcCoin_variables.emplace_back(mon_sectors_forward);
1735 tgcCoin_variables.emplace_back(mon_multiplicity_endcap);
1736 tgcCoin_variables.emplace_back(mon_multiplicity_forward);
1737
1738
1739 std::vector<Monitored::ObjectsCollection<std::vector<TgcTrig>, double>> vo_coin;
1740 vo_coin.reserve(38 * 21);
1741
1742 fillTgcCoin("SL",tgcTrigMap_SL,vo_coin,tgcCoin_variables);
1743 fillTgcCoin("SL_Endcap",tgcTrigMap_SL_Endcap,vo_coin,tgcCoin_variables);
1744 fillTgcCoin("SL_Forward",tgcTrigMap_SL_Forward,vo_coin,tgcCoin_variables);
1745 fillTgcCoin("HPT_Wire",tgcTrigMap_HPT_Wire,vo_coin,tgcCoin_variables);
1746 fillTgcCoin("HPT_Endcap_Wire",tgcTrigMap_HPT_Endcap_Wire,vo_coin,tgcCoin_variables);
1747 fillTgcCoin("HPT_Forward_Wire",tgcTrigMap_HPT_Forward_Wire,vo_coin,tgcCoin_variables);
1748 fillTgcCoin("HPT_Strip",tgcTrigMap_HPT_Strip,vo_coin,tgcCoin_variables);
1749 fillTgcCoin("HPT_Endcap_Strip",tgcTrigMap_HPT_Endcap_Strip,vo_coin,tgcCoin_variables);
1750 fillTgcCoin("HPT_Forward_Strip",tgcTrigMap_HPT_Forward_Strip,vo_coin,tgcCoin_variables);
1751 fillTgcCoin("LPT_Wire",tgcTrigMap_LPT_Wire,vo_coin,tgcCoin_variables);
1752 fillTgcCoin("LPT_Endcap_Wire",tgcTrigMap_LPT_Endcap_Wire,vo_coin,tgcCoin_variables);
1753 fillTgcCoin("LPT_Forward_Wire",tgcTrigMap_LPT_Forward_Wire,vo_coin,tgcCoin_variables);
1754 fillTgcCoin("LPT_Strip",tgcTrigMap_LPT_Strip,vo_coin,tgcCoin_variables);
1755 fillTgcCoin("LPT_Endcap_Strip",tgcTrigMap_LPT_Endcap_Strip,vo_coin,tgcCoin_variables);
1756 fillTgcCoin("LPT_Forward_Strip",tgcTrigMap_LPT_Forward_Strip,vo_coin,tgcCoin_variables);
1757 fillTgcCoin("EIFI_Wire",tgcTrigMap_EIFI_Wire,vo_coin,tgcCoin_variables);
1758 fillTgcCoin("EIFI_Endcap_Wire",tgcTrigMap_EIFI_Endcap_Wire,vo_coin,tgcCoin_variables);
1759 fillTgcCoin("EIFI_Forward_Wire",tgcTrigMap_EIFI_Forward_Wire,vo_coin,tgcCoin_variables);
1760 fillTgcCoin("EIFI_Strip",tgcTrigMap_EIFI_Strip,vo_coin,tgcCoin_variables);
1761 fillTgcCoin("EIFI_Endcap_Strip",tgcTrigMap_EIFI_Endcap_Strip,vo_coin,tgcCoin_variables);
1762 fillTgcCoin("EIFI_Forward_Strip",tgcTrigMap_EIFI_Forward_Strip,vo_coin,tgcCoin_variables);
1763
1764 std::vector<Monitored::ObjectsCollection<std::vector<ExtTrigInfo>, double>> vo_exttriginfo;
1765 vo_exttriginfo.reserve(13 * 5);
1766 std::vector<ExtTrigInfo> extTrigInfo_SL;
1767 std::vector<ExtTrigInfo> extTrigInfo_HPT_Wire;
1768 std::vector<ExtTrigInfo> extTrigInfo_HPT_Strip;
1769 std::vector<ExtTrigInfo> extTrigInfo_LPT_Wire;
1770 std::vector<ExtTrigInfo> extTrigInfo_LPT_Strip;
1771 fillTgcCoinEff("SL",tgcTrigMap_SL,extpositions_pivot,extTrigInfo_SL,vo_exttriginfo,tgcCoin_variables);
1772 fillTgcCoinEff("HPT_Wire",tgcTrigMap_HPT_Wire,extpositions_pivot,extTrigInfo_HPT_Wire,vo_exttriginfo,tgcCoin_variables);
1773 fillTgcCoinEff("HPT_Strip",tgcTrigMap_HPT_Strip,extpositions_pivot,extTrigInfo_HPT_Strip,vo_exttriginfo,tgcCoin_variables);
1774 fillTgcCoinEff("LPT_Wire",tgcTrigMap_LPT_Wire,extpositions_pivot,extTrigInfo_LPT_Wire,vo_exttriginfo,tgcCoin_variables);
1775 fillTgcCoinEff("LPT_Strip",tgcTrigMap_LPT_Strip,extpositions_pivot,extTrigInfo_LPT_Strip,vo_exttriginfo,tgcCoin_variables);
1776
1777 // TGC
1778 auto coin_inner_tgc_roi=Monitored::Collection("coin_inner_tgc_roi",tgcTrigMap_SL,[](const TgcTrig&m){
1779 return m.roi;
1780 });
1781 tgcCoin_variables.push_back(coin_inner_tgc_roi);
1782 auto coin_inner_tgc_sector=Monitored::Collection("coin_inner_tgc_sector",tgcTrigMap_SL,[](const TgcTrig&m){
1783 return (m.bunch==0 && m.muonMatched==1 && m.isBiased==0) ? (m.sector) : -999;
1784 });
1785 tgcCoin_variables.push_back(coin_inner_tgc_sector);
1786 auto coin_inner_tgc_fake_sector=Monitored::Collection("coin_inner_tgc_fake_sector",tgcTrigMap_SL,[](const TgcTrig&m){
1787 return (m.bunch==0 && m.muonMatched==0 && m.loosemuonMatched==0 && m.isBiased==0) ? (m.sector) : -999;
1788 });
1789 tgcCoin_variables.push_back(coin_inner_tgc_fake_sector);
1790
1791 auto coin_inner_tgc_eta=Monitored::Collection("coin_inner_tgc_eta",tgcTrigMap_SL,[](const TgcTrig&m){
1792 return (m.bunch==0 && m.muonMatched==1 && m.isBiased==0) ? (m.eta) : -999;
1793 });
1794 tgcCoin_variables.push_back(coin_inner_tgc_eta);
1795 auto coin_inner_tgc_phi=Monitored::Collection("coin_inner_tgc_phi",tgcTrigMap_SL,[](const TgcTrig&m){
1796 return (m.bunch==0 && m.muonMatched==1 && m.isBiased==0) ? (m.phi) : -999;
1797 });
1798 tgcCoin_variables.push_back(coin_inner_tgc_phi);
1799
1800 auto coin_inner_tgc_fake_eta=Monitored::Collection("coin_inner_tgc_fake_eta",tgcTrigMap_SL,[](const TgcTrig&m){
1801 return (m.bunch==0 && m.muonMatched==0 && m.loosemuonMatched==0 && m.isBiased==0) ? (m.eta) : -999;
1802 });
1803 tgcCoin_variables.push_back(coin_inner_tgc_fake_eta);
1804 auto coin_inner_tgc_fake_phi=Monitored::Collection("coin_inner_tgc_fake_phi",tgcTrigMap_SL,[](const TgcTrig&m){
1805 return (m.bunch==0 && m.muonMatched==0 && m.loosemuonMatched==0 && m.isBiased==0) ? (m.phi) : -999;
1806 });
1807 tgcCoin_variables.push_back(coin_inner_tgc_fake_phi);
1808
1809 auto coin_inner_tgc_forward=Monitored::Collection("coin_inner_tgc_forward",tgcTrigMap_SL,[](const TgcTrig&m){
1810 return m.isForward==1;
1811 });
1812 tgcCoin_variables.push_back(coin_inner_tgc_forward);
1813 auto coin_inner_tgc_endcap=Monitored::Collection("coin_inner_tgc_endcap",tgcTrigMap_SL,[](const TgcTrig&m){
1814 return m.isForward==0;
1815 });
1816 tgcCoin_variables.push_back(coin_inner_tgc_endcap);
1817 auto coin_inner_tgc_etaupto1p3=Monitored::Collection("coin_inner_tgc_etaupto1p3",tgcTrigMap_SL,[](const TgcTrig&m){
1818 return std::abs(m.eta) < 1.3;
1819 });
1820 tgcCoin_variables.push_back(coin_inner_tgc_etaupto1p3);
1821 auto coin_inner_tgc_etafrom1p3_endcap=Monitored::Collection("coin_inner_tgc_etafrom1p3_endcap",tgcTrigMap_SL,[](const TgcTrig&m){
1822 return std::abs(m.eta) > 1.3 && m.isForward==0;
1823 });
1824 tgcCoin_variables.push_back(coin_inner_tgc_etafrom1p3_endcap);
1825
1826 auto coin_inner_tgc_coinflagEifi=Monitored::Collection("coin_inner_tgc_coinflagEifi",tgcTrigMap_SL,[](const TgcTrig&m){
1827 return (((m.pt>>CoinFlagEI)&0x1)!=0) ? 1.0 : 0.0;
1828 });
1829 tgcCoin_variables.push_back(coin_inner_tgc_coinflagEifi);
1830 auto coin_inner_tgc_coinflagTile=Monitored::Collection("coin_inner_tgc_coinflagTile",tgcTrigMap_SL,[](const TgcTrig&m){
1831 return (((m.pt>>CoinFlagTile)&0x1)!=0) ? 1.0 : 0.0;
1832 });
1833 tgcCoin_variables.push_back(coin_inner_tgc_coinflagTile);
1834 auto coin_inner_tgc_coinflagRpc=Monitored::Collection("coin_inner_tgc_coinflagRpc",tgcTrigMap_SL,[](const TgcTrig&m){
1835 return (((m.pt>>CoinFlagRPC)&0x1)!=0) ? 1.0 : 0.0;
1836 });
1837 tgcCoin_variables.push_back(coin_inner_tgc_coinflagRpc);
1838 auto coin_inner_tgc_coinflagNsw=Monitored::Collection("coin_inner_tgc_coinflagNsw",tgcTrigMap_SL,[](const TgcTrig&m){
1839 return (((m.pt>>CoinFlagNSW)&0x1)!=0) ? 1.0 : 0.0;
1840 });
1841 tgcCoin_variables.push_back(coin_inner_tgc_coinflagNsw);
1842 auto coin_inner_tgc_coinflagC=Monitored::Collection("coin_inner_tgc_coinflagC",tgcTrigMap_SL,[](const TgcTrig&m){
1843 return (((m.pt>>CoinFlagC)&0x1)!=0) ? 1.0 : 0.0;
1844 });
1845 tgcCoin_variables.push_back(coin_inner_tgc_coinflagC);
1846
1847 // RPC
1848 auto coin_inner_tgc_anyBcRpc=Monitored::Collection("coin_inner_tgc_anyBcRpc",tgcTrigMap_SL,[](const TgcTrig&m) -> double{
1849 return (m.rpc.size()>0);
1850 });
1851 tgcCoin_variables.push_back(coin_inner_tgc_anyBcRpc);
1852 auto coin_inner_tgc_prevBcRpc=Monitored::Collection("coin_inner_tgc_prevBcRpc",tgcTrigMap_SL,[](const TgcTrig&m){
1853 for(const auto& inner : m.rpc){
1854 if(inner->bunch == -1) return 1.;
1855 }
1856 return 0.;
1857 });
1858 tgcCoin_variables.push_back(coin_inner_tgc_prevBcRpc);
1859 auto coin_inner_tgc_currBcRpc=Monitored::Collection("coin_inner_tgc_currBcRpc",tgcTrigMap_SL,[](const TgcTrig&m){
1860 for(const auto& inner : m.rpc){
1861 if(inner->bunch == 0) return 1.;
1862 }
1863 return 0.;
1864 });
1865 tgcCoin_variables.push_back(coin_inner_tgc_currBcRpc);
1866 auto coin_inner_tgc_currBcRpc_goodBcid0=Monitored::Collection("coin_inner_tgc_currBcRpc_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
1867 for(const auto& inner : m.rpc){
1868 if(inner->bunch == 0 && inner->goodBcid0 == 1) return 1.;
1869 }
1870 return 0.;
1871 });
1872 tgcCoin_variables.push_back(coin_inner_tgc_currBcRpc_goodBcid0);
1873 auto coin_inner_tgc_currBcRpc_goodBcid1=Monitored::Collection("coin_inner_tgc_currBcRpc_goodBcid1",tgcTrigMap_SL,[](const TgcTrig&m){
1874 for(const auto& inner : m.rpc){
1875 if(inner->bunch == 0 && inner->goodBcid1 == 1) return 1.;
1876 }
1877 return 0.;
1878 });
1879 tgcCoin_variables.push_back(coin_inner_tgc_currBcRpc_goodBcid1);
1880 auto coin_inner_tgc_currBcRpc_goodBcid2=Monitored::Collection("coin_inner_tgc_currBcRpc_goodBcid2",tgcTrigMap_SL,[](const TgcTrig&m){
1881 for(const auto& inner : m.rpc){
1882 if(inner->bunch == 0 && inner->goodBcid2 == 1) return 1.;
1883 }
1884 return 0.;
1885 });
1886 tgcCoin_variables.push_back(coin_inner_tgc_currBcRpc_goodBcid2);
1887 auto coin_inner_tgc_nextBcRpc=Monitored::Collection("coin_inner_tgc_nextBcRpc",tgcTrigMap_SL,[](const TgcTrig&m){
1888 for(const auto& inner : m.rpc){
1889 if(inner->bunch == 1) return 1.;
1890 }
1891 return 0.;
1892 });
1893 tgcCoin_variables.push_back(coin_inner_tgc_nextBcRpc);
1894 auto coin_inner_tgc_nextnextBcRpc=Monitored::Collection("coin_inner_tgc_nextnextBcRpc",tgcTrigMap_SL,[](const TgcTrig&m){
1895 for(const auto& inner : m.rpc){
1896 if(inner->bunch == 2) return 1.;
1897 }
1898 return 0.;
1899 });
1900 tgcCoin_variables.push_back(coin_inner_tgc_nextnextBcRpc);
1901
1902 auto coin_inner_tgc_prevBcRpc_goodBcid0=Monitored::Collection("coin_inner_tgc_prevBcRpc_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
1903 for(const auto& inner : m.rpc){
1904 if(inner->bunch == -1 && inner->goodBcid0 == 1) return 1.;
1905 }
1906 return 0.;
1907 });
1908 tgcCoin_variables.push_back(coin_inner_tgc_prevBcRpc_goodBcid0);
1909 auto coin_inner_tgc_nextBcRpc_goodBcid0=Monitored::Collection("coin_inner_tgc_nextBcRpc_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
1910 for(const auto& inner : m.rpc){
1911 if(inner->bunch == 1 && inner->goodBcid0 == 1) return 1.;
1912 }
1913 return 0.;
1914 });
1915 tgcCoin_variables.push_back(coin_inner_tgc_nextBcRpc_goodBcid0);
1916 auto coin_inner_tgc_nextnextBcRpc_goodBcid0=Monitored::Collection("coin_inner_tgc_nextnextBcRpc_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
1917 for(const auto& inner : m.rpc){
1918 if(inner->bunch == 2 && inner->goodBcid0 == 1) return 1.;
1919 }
1920 return 0.;
1921 });
1922 tgcCoin_variables.push_back(coin_inner_tgc_nextnextBcRpc_goodBcid0);
1923
1924 // NSW
1925 auto coin_inner_tgc_anyBcNsw=Monitored::Collection("coin_inner_tgc_anyBcNsw",tgcTrigMap_SL,[](const TgcTrig&m) -> double{
1926 return (m.nsw.size()>0);
1927 });
1928 tgcCoin_variables.push_back(coin_inner_tgc_anyBcNsw);
1929 auto coin_inner_tgc_prevBcNsw=Monitored::Collection("coin_inner_tgc_prevBcNsw",tgcTrigMap_SL,[](const TgcTrig&m){
1930 for(const auto& inner : m.nsw){
1931 if(inner->bunch == -1) return 1.;
1932 }
1933 return 0.;
1934 });
1935 tgcCoin_variables.push_back(coin_inner_tgc_prevBcNsw);
1936 auto coin_inner_tgc_currBcNsw=Monitored::Collection("coin_inner_tgc_currBcNsw",tgcTrigMap_SL,[](const TgcTrig&m){
1937 for(const auto& inner : m.nsw){
1938 if(inner->bunch == 0) return 1.;
1939 }
1940 return 0.;
1941 });
1942 tgcCoin_variables.push_back(coin_inner_tgc_currBcNsw);
1943 auto coin_inner_tgc_currBcNsw_goodBcid0=Monitored::Collection("coin_inner_tgc_currBcNsw_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
1944 for(const auto& inner : m.nsw){
1945 if(inner->bunch == 0 && inner->goodBcid0 == 1) return 1.;
1946 }
1947 return 0.;
1948 });
1949 tgcCoin_variables.push_back(coin_inner_tgc_currBcNsw_goodBcid0);
1950 auto coin_inner_tgc_currBcNsw_goodBcid1=Monitored::Collection("coin_inner_tgc_currBcNsw_goodBcid1",tgcTrigMap_SL,[](const TgcTrig&m){
1951 for(const auto& inner : m.nsw){
1952 if(inner->bunch == 0 && inner->goodBcid1 == 1) return 1.;
1953 }
1954 return 0.;
1955 });
1956 tgcCoin_variables.push_back(coin_inner_tgc_currBcNsw_goodBcid1);
1957 auto coin_inner_tgc_currBcNsw_goodBcid2=Monitored::Collection("coin_inner_tgc_currBcNsw_goodBcid2",tgcTrigMap_SL,[](const TgcTrig&m){
1958 for(const auto& inner : m.nsw){
1959 if(inner->bunch == 0 && inner->goodBcid2 == 1) return 1.;
1960 }
1961 return 0.;
1962 });
1963 tgcCoin_variables.push_back(coin_inner_tgc_currBcNsw_goodBcid2);
1964 auto coin_inner_tgc_nextBcNsw=Monitored::Collection("coin_inner_tgc_nextBcNsw",tgcTrigMap_SL,[](const TgcTrig&m){
1965 for(const auto& inner : m.nsw){
1966 if(inner->bunch == 1) return 1.;
1967 }
1968 return 0.;
1969 });
1970 tgcCoin_variables.push_back(coin_inner_tgc_nextBcNsw);
1971 auto coin_inner_tgc_nextnextBcNsw=Monitored::Collection("coin_inner_tgc_nextnextBcNsw",tgcTrigMap_SL,[](const TgcTrig&m){
1972 for(const auto& inner : m.nsw){
1973 if(inner->bunch == 2) return 1.;
1974 }
1975 return 0.;
1976 });
1977 tgcCoin_variables.push_back(coin_inner_tgc_nextnextBcNsw);
1978
1979 auto coin_inner_tgc_prevBcNsw_goodBcid0=Monitored::Collection("coin_inner_tgc_prevBcNsw_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
1980 for(const auto& inner : m.nsw){
1981 if(inner->bunch == -1 && inner->goodBcid0 == 1) return 1.;
1982 }
1983 return 0.;
1984 });
1985 tgcCoin_variables.push_back(coin_inner_tgc_prevBcNsw_goodBcid0);
1986 auto coin_inner_tgc_nextBcNsw_goodBcid0=Monitored::Collection("coin_inner_tgc_nextBcNsw_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
1987 for(const auto& inner : m.nsw){
1988 if(inner->bunch == 1 && inner->goodBcid0 == 1) return 1.;
1989 }
1990 return 0.;
1991 });
1992 tgcCoin_variables.push_back(coin_inner_tgc_nextBcNsw_goodBcid0);
1993 auto coin_inner_tgc_nextnextBcNsw_goodBcid0=Monitored::Collection("coin_inner_tgc_nextnextBcNsw_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
1994 for(const auto& inner : m.nsw){
1995 if(inner->bunch == 2 && inner->goodBcid0 == 1) return 1.;
1996 }
1997 return 0.;
1998 });
1999 tgcCoin_variables.push_back(coin_inner_tgc_nextnextBcNsw_goodBcid0);
2000 auto coin_inner_tgc_Nsw_bcmask1=Monitored::Collection("coin_inner_tgc_Nsw_bcmask1",tgcTrigMap_SL,[](const TgcTrig&m){
2001 for(const auto& inner : m.nsw_unique){
2002 if(inner->bcmask==1) return 1.;
2003 }
2004 return 0.;
2005 });
2006 tgcCoin_variables.push_back(coin_inner_tgc_Nsw_bcmask1);
2007 auto coin_inner_tgc_Nsw_bcmask2=Monitored::Collection("coin_inner_tgc_Nsw_bcmask2",tgcTrigMap_SL,[](const TgcTrig&m){
2008 for(const auto& inner : m.nsw_unique){
2009 if(inner->bcmask==2) return 1.;
2010 }
2011 return 0.;
2012 });
2013 tgcCoin_variables.push_back(coin_inner_tgc_Nsw_bcmask2);
2014 auto coin_inner_tgc_Nsw_bcmask3=Monitored::Collection("coin_inner_tgc_Nsw_bcmask3",tgcTrigMap_SL,[](const TgcTrig&m){
2015 for(const auto& inner : m.nsw_unique){
2016 if(inner->bcmask==3) return 1.;
2017 }
2018 return 0.;
2019 });
2020 tgcCoin_variables.push_back(coin_inner_tgc_Nsw_bcmask3);
2021 auto coin_inner_tgc_Nsw_bcmask4=Monitored::Collection("coin_inner_tgc_Nsw_bcmask4",tgcTrigMap_SL,[](const TgcTrig&m){
2022 for(const auto& inner : m.nsw_unique){
2023 if(inner->bcmask==4) return 1.;
2024 }
2025 return 0.;
2026 });
2027 tgcCoin_variables.push_back(coin_inner_tgc_Nsw_bcmask4);
2028 auto coin_inner_tgc_Nsw_bcmask5=Monitored::Collection("coin_inner_tgc_Nsw_bcmask5",tgcTrigMap_SL,[](const TgcTrig&m){
2029 for(const auto& inner : m.nsw_unique){
2030 if(inner->bcmask==5) return 1.;
2031 }
2032 return 0.;
2033 });
2034 tgcCoin_variables.push_back(coin_inner_tgc_Nsw_bcmask5);
2035 auto coin_inner_tgc_Nsw_bcmask6=Monitored::Collection("coin_inner_tgc_Nsw_bcmask6",tgcTrigMap_SL,[](const TgcTrig&m){
2036 for(const auto& inner : m.nsw_unique){
2037 if(inner->bcmask==6) return 1.;
2038 }
2039 return 0.;
2040 });
2041 tgcCoin_variables.push_back(coin_inner_tgc_Nsw_bcmask6);
2042 auto coin_inner_tgc_Nsw_bcmask7=Monitored::Collection("coin_inner_tgc_Nsw_bcmask7",tgcTrigMap_SL,[](const TgcTrig&m){
2043 for(const auto& inner : m.nsw_unique){
2044 if(inner->bcmask==7) return 1.;
2045 }
2046 return 0.;
2047 });
2048 tgcCoin_variables.push_back(coin_inner_tgc_Nsw_bcmask7);
2049
2050 // Tile
2051 auto coin_inner_tgc_anyBcTile=Monitored::Collection("coin_inner_tgc_anyBcTile",tgcTrigMap_SL,[](const TgcTrig&m) -> double{
2052 return (m.tile.size()>0);
2053 });
2054 tgcCoin_variables.push_back(coin_inner_tgc_anyBcTile);
2055 auto coin_inner_tgc_prevBcTile=Monitored::Collection("coin_inner_tgc_prevBcTile",tgcTrigMap_SL,[](const TgcTrig&m){
2056 for(const auto& inner : m.tile){
2057 if(inner->bunch == -1) return 1.;
2058 }
2059 return 0.;
2060 });
2061 tgcCoin_variables.push_back(coin_inner_tgc_prevBcTile);
2062 auto coin_inner_tgc_currBcTile=Monitored::Collection("coin_inner_tgc_currBcTile",tgcTrigMap_SL,[](const TgcTrig&m){
2063 for(const auto& inner : m.tile){
2064 if(inner->bunch == 0) return 1.;
2065 }
2066 return 0.;
2067 });
2068 tgcCoin_variables.push_back(coin_inner_tgc_currBcTile);
2069 auto coin_inner_tgc_currBcTile_goodBcid0=Monitored::Collection("coin_inner_tgc_currBcTile_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
2070 for(const auto& inner : m.tile){
2071 if(inner->bunch == 0 && inner->goodBcid0 == 1) return 1.;
2072 }
2073 return 0.;
2074 });
2075 tgcCoin_variables.push_back(coin_inner_tgc_currBcTile_goodBcid0);
2076 auto coin_inner_tgc_currBcTile_goodBcid1=Monitored::Collection("coin_inner_tgc_currBcTile_goodBcid1",tgcTrigMap_SL,[](const TgcTrig&m){
2077 for(const auto& inner : m.tile){
2078 if(inner->bunch == 0 && inner->goodBcid1 == 1) return 1.;
2079 }
2080 return 0.;
2081 });
2082 tgcCoin_variables.push_back(coin_inner_tgc_currBcTile_goodBcid1);
2083 auto coin_inner_tgc_currBcTile_goodBcid2=Monitored::Collection("coin_inner_tgc_currBcTile_goodBcid2",tgcTrigMap_SL,[](const TgcTrig&m){
2084 for(const auto& inner : m.tile){
2085 if(inner->bunch == 0 && inner->goodBcid2 == 1) return 1.;
2086 }
2087 return 0.;
2088 });
2089 tgcCoin_variables.push_back(coin_inner_tgc_currBcTile_goodBcid2);
2090 auto coin_inner_tgc_nextBcTile=Monitored::Collection("coin_inner_tgc_nextBcTile",tgcTrigMap_SL,[](const TgcTrig&m){
2091 for(const auto& inner : m.tile){
2092 if(inner->bunch == 1) return 1.;
2093 }
2094 return 0.;
2095 });
2096 tgcCoin_variables.push_back(coin_inner_tgc_nextBcTile);
2097 auto coin_inner_tgc_nextnextBcTile=Monitored::Collection("coin_inner_tgc_nextnextBcTile",tgcTrigMap_SL,[](const TgcTrig&m){
2098 for(const auto inner : m.tile){
2099 if(inner->bunch == 2) return 1.;
2100 }
2101 return 0.;
2102 });
2103 tgcCoin_variables.push_back(coin_inner_tgc_nextnextBcTile);
2104
2105 auto coin_inner_tgc_prevBcTile_goodBcid0=Monitored::Collection("coin_inner_tgc_prevBcTile_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
2106 for(const auto& inner : m.tile){
2107 if(inner->bunch == -1 && inner->goodBcid0 == 1) return 1.;
2108 }
2109 return 0.;
2110 });
2111 tgcCoin_variables.push_back(coin_inner_tgc_prevBcTile_goodBcid0);
2112 auto coin_inner_tgc_nextBcTile_goodBcid0=Monitored::Collection("coin_inner_tgc_nextBcTile_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
2113 for(const auto& inner : m.tile){
2114 if(inner->bunch == 1 && inner->goodBcid0 == 1) return 1.;
2115 }
2116 return 0.;
2117 });
2118 tgcCoin_variables.push_back(coin_inner_tgc_nextBcTile_goodBcid0);
2119 auto coin_inner_tgc_nextnextBcTile_goodBcid0=Monitored::Collection("coin_inner_tgc_nextnextBcTile_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
2120 for(const auto inner : m.tile){
2121 if(inner->bunch == 2 && inner->goodBcid0 == 1) return 1.;
2122 }
2123 return 0.;
2124 });
2125 tgcCoin_variables.push_back(coin_inner_tgc_nextnextBcTile_goodBcid0);
2126
2127 // EIFI
2128 auto coin_inner_tgc_anyBcEifi=Monitored::Collection("coin_inner_tgc_anyBcEifi",tgcTrigMap_SL,[](const TgcTrig&m) -> double{
2129 return (m.eifi.size()>0);
2130 });
2131 tgcCoin_variables.push_back(coin_inner_tgc_anyBcEifi);
2132 auto coin_inner_tgc_prevBcEifi=Monitored::Collection("coin_inner_tgc_prevBcEifi",tgcTrigMap_SL,[](const TgcTrig&m){
2133 for(const auto& inner : m.eifi){
2134 if(inner->bunch == -1) return 1.;
2135 }
2136 return 0.;
2137 });
2138 tgcCoin_variables.push_back(coin_inner_tgc_prevBcEifi);
2139 auto coin_inner_tgc_currBcEifi=Monitored::Collection("coin_inner_tgc_currBcEifi",tgcTrigMap_SL,[](const TgcTrig&m){
2140 for(const auto& inner : m.eifi){
2141 if(inner->bunch == 0) return 1.;
2142 }
2143 return 0.;
2144 });
2145 tgcCoin_variables.push_back(coin_inner_tgc_currBcEifi);
2146 auto coin_inner_tgc_nextBcEifi=Monitored::Collection("coin_inner_tgc_nextBcEifi",tgcTrigMap_SL,[](const TgcTrig&m){
2147 for(const auto& inner : m.eifi){
2148 if(inner->bunch == 1) return 1.;
2149 }
2150 return 0.;
2151 });
2152 tgcCoin_variables.push_back(coin_inner_tgc_nextBcEifi);
2153 auto coin_inner_tgc_nextnextBcEifi=Monitored::Collection("coin_inner_tgc_nextnextBcEifi",tgcTrigMap_SL,[](const TgcTrig&m){
2154 for(const auto inner : m.eifi){
2155 if(inner->bunch == 2) return 1.;
2156 }
2157 return 0.;
2158 });
2159 tgcCoin_variables.push_back(coin_inner_tgc_nextnextBcEifi);
2160
2161
2162 // RPC BIS78 inner coincidence
2163 auto coin_inner_rpc_slSector=Monitored::Collection("coin_inner_rpc_slSector",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2164 return m.slSector;
2165 });
2166 tgcCoin_variables.push_back(coin_inner_rpc_slSector);
2167 auto coin_inner_rpc_slSector_goodTiming=Monitored::Collection("coin_inner_rpc_slSector_goodTiming",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2168 return (m.goodTiming) ? m.slSector : -999;
2169 });
2170 tgcCoin_variables.push_back(coin_inner_rpc_slSector_goodTiming);
2171 auto coin_inner_rpc_roiEta=Monitored::Collection("coin_inner_rpc_roiEta",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2172 return m.roiEta;
2173 });
2174 tgcCoin_variables.push_back(coin_inner_rpc_roiEta);
2175 auto coin_inner_rpc_roiPhi=Monitored::Collection("coin_inner_rpc_roiPhi",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2176 return m.roiPhi;
2177 });
2178 tgcCoin_variables.push_back(coin_inner_rpc_roiPhi);
2179 auto coin_inner_rpc_roiNum=Monitored::Collection("coin_inner_rpc_roiNum",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2180 return m.roiNum;
2181 });
2182 tgcCoin_variables.push_back(coin_inner_rpc_roiNum);
2183 auto coin_inner_rpc_deltaBcid=Monitored::Collection("coin_inner_rpc_deltaBcid",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2184 return m.deltaBcid;
2185 });
2186 tgcCoin_variables.push_back(coin_inner_rpc_deltaBcid);
2187 auto coin_inner_rpc_deltaTiming=Monitored::Collection("coin_inner_rpc_deltaTiming",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2188 return m.deltaTiming;
2189 });
2190 tgcCoin_variables.push_back(coin_inner_rpc_deltaTiming);
2191 auto coin_inner_rpc_rpcEta=Monitored::Collection("coin_inner_rpc_rpcEta",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2192 return m.rpcEta;
2193 });
2194 tgcCoin_variables.push_back(coin_inner_rpc_rpcEta);
2195 auto coin_inner_rpc_rpcPhi=Monitored::Collection("coin_inner_rpc_rpcPhi",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2196 return m.rpcPhi;
2197 });
2198 tgcCoin_variables.push_back(coin_inner_rpc_rpcPhi);
2199 auto coin_inner_rpc_rpcDEta=Monitored::Collection("coin_inner_rpc_rpcDEta",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2200 return m.rpcDEta;
2201 });
2202 tgcCoin_variables.push_back(coin_inner_rpc_rpcDEta);
2203 auto coin_inner_rpc_rpcDPhi=Monitored::Collection("coin_inner_rpc_rpcDPhi",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2204 return m.rpcDPhi;
2205 });
2206 tgcCoin_variables.push_back(coin_inner_rpc_rpcDPhi);
2207 auto coin_inner_rpc_currBc=Monitored::Collection("coin_inner_rpc_currBc",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2208 return m.currBc;
2209 });
2210 tgcCoin_variables.push_back(coin_inner_rpc_currBc);
2211 auto coin_inner_rpc_goodBcid0=Monitored::Collection("coin_inner_rpc_goodBcid0",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2212 return m.goodBcid0;
2213 });
2214 tgcCoin_variables.push_back(coin_inner_rpc_goodBcid0);
2215 auto coin_inner_rpc_goodBcid1=Monitored::Collection("coin_inner_rpc_goodBcid1",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2216 return m.goodBcid1;
2217 });
2218 tgcCoin_variables.push_back(coin_inner_rpc_goodBcid1);
2219 auto coin_inner_rpc_goodBcid2=Monitored::Collection("coin_inner_rpc_goodBcid2",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2220 return m.goodBcid2;
2221 });
2222 tgcCoin_variables.push_back(coin_inner_rpc_goodBcid2);
2223 auto coin_inner_rpc_goodTiming=Monitored::Collection("coin_inner_rpc_goodTiming",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2224 return m.goodTiming;
2225 });
2226 tgcCoin_variables.push_back(coin_inner_rpc_goodTiming);
2227
2228
2229 // NSW inner coincidence
2230 auto coin_inner_nsw_deltaR=Monitored::Collection("coin_inner_nsw_deltaR",tgcTrigNswMap,[](const TgcTrigNsw&m){
2231 return m.deltaR;
2232 });
2233 tgcCoin_variables.push_back(coin_inner_nsw_deltaR);
2234 auto coin_inner_nsw_slSector=Monitored::Collection("coin_inner_nsw_slSector",tgcTrigNswMap,[](const TgcTrigNsw&m){
2235 return m.slSector;
2236 });
2237 tgcCoin_variables.push_back(coin_inner_nsw_slSector);
2238 auto coin_inner_nsw_slSector_goodTiming=Monitored::Collection("coin_inner_nsw_slSector_goodTiming",tgcTrigNswMap,[](const TgcTrigNsw&m){
2239 return (m.goodTiming) ? m.slSector : -999;
2240 });
2241 tgcCoin_variables.push_back(coin_inner_nsw_slSector_goodTiming);
2242 auto coin_inner_nsw_slSector_endcap=Monitored::Collection("coin_inner_nsw_slSector_endcap",tgcTrigNswMap,[](const TgcTrigNsw&m){
2243 return (std::abs(m.roiEta)>1.3 && m.isForward==0) ? m.slSector : -999;
2244 });
2245 tgcCoin_variables.push_back(coin_inner_nsw_slSector_endcap);
2246 auto coin_inner_nsw_slSector_forward=Monitored::Collection("coin_inner_nsw_slSector_forward",tgcTrigNswMap,[](const TgcTrigNsw&m){
2247 return (m.isForward==1) ? m.slSector : -999;
2248 });
2249 tgcCoin_variables.push_back(coin_inner_nsw_slSector_forward);
2250 auto coin_inner_nsw_slSector_goodTiming_endcap=Monitored::Collection("coin_inner_nsw_slSector_goodTiming_endcap",tgcTrigNswMap,[](const TgcTrigNsw&m){
2251 return (std::abs(m.roiEta)>1.3 && m.isForward==0 && m.goodTiming) ? m.slSector : -999;
2252 });
2253 tgcCoin_variables.push_back(coin_inner_nsw_slSector_goodTiming_endcap);
2254 auto coin_inner_nsw_slSector_goodTiming_forward=Monitored::Collection("coin_inner_nsw_slSector_goodTiming_forward",tgcTrigNswMap,[](const TgcTrigNsw&m){
2255 return (m.isForward==1 && m.goodTiming) ? m.slSector : -999;
2256 });
2257 tgcCoin_variables.push_back(coin_inner_nsw_slSector_goodTiming_forward);
2258 auto coin_inner_nsw_roiEta=Monitored::Collection("coin_inner_nsw_roiEta",tgcTrigNswMap,[](const TgcTrigNsw&m){
2259 return m.roiEta;
2260 });
2261 tgcCoin_variables.push_back(coin_inner_nsw_roiEta);
2262 auto coin_inner_nsw_roiPhi=Monitored::Collection("coin_inner_nsw_roiPhi",tgcTrigNswMap,[](const TgcTrigNsw&m){
2263 return m.roiPhi;
2264 });
2265 tgcCoin_variables.push_back(coin_inner_nsw_roiPhi);
2266 auto coin_inner_nsw_roiNum=Monitored::Collection("coin_inner_nsw_roiNum",tgcTrigNswMap,[](const TgcTrigNsw&m){
2267 return m.roiNum;
2268 });
2269 tgcCoin_variables.push_back(coin_inner_nsw_roiNum);
2270 auto coin_inner_nsw_deltaBcid=Monitored::Collection("coin_inner_nsw_deltaBcid",tgcTrigNswMap,[](const TgcTrigNsw&m){
2271 return m.deltaBcid;
2272 });
2273 tgcCoin_variables.push_back(coin_inner_nsw_deltaBcid);
2274 auto coin_inner_nsw_deltaTiming=Monitored::Collection("coin_inner_nsw_deltaTiming",tgcTrigNswMap,[](const TgcTrigNsw&m){
2275 return m.deltaTiming;
2276 });
2277 tgcCoin_variables.push_back(coin_inner_nsw_deltaTiming);
2278 auto coin_inner_nsw_R=Monitored::Collection("coin_inner_nsw_R",tgcTrigNswMap,[](const TgcTrigNsw&m){
2279 return m.R;
2280 });
2281 tgcCoin_variables.push_back(coin_inner_nsw_R);
2282 auto coin_inner_nsw_Phi=Monitored::Collection("coin_inner_nsw_Phi",tgcTrigNswMap,[](const TgcTrigNsw&m){
2283 return m.Phi;
2284 });
2285 tgcCoin_variables.push_back(coin_inner_nsw_Phi);
2286 auto coin_inner_nsw_deltaTheta=Monitored::Collection("coin_inner_nsw_deltaTheta",tgcTrigNswMap,[](const TgcTrigNsw&m){
2287 return m.deltaTheta;
2288 });
2289 tgcCoin_variables.push_back(coin_inner_nsw_deltaTheta);
2290 auto coin_inner_nsw_isForward=Monitored::Collection("coin_inner_nsw_isForward",tgcTrigNswMap,[](const TgcTrigNsw&m){
2291 return m.isForward==1;
2292 });
2293 tgcCoin_variables.push_back(coin_inner_nsw_isForward);
2294 auto coin_inner_nsw_isEndcap=Monitored::Collection("coin_inner_nsw_isEndcap",tgcTrigNswMap,[](const TgcTrigNsw&m){
2295 return m.isForward==0;
2296 });
2297 tgcCoin_variables.push_back(coin_inner_nsw_isEndcap);
2298 auto coin_inner_nsw_currBc=Monitored::Collection("coin_inner_nsw_currBc",tgcTrigNswMap,[](const TgcTrigNsw&m){
2299 return m.currBc;
2300 });
2301 tgcCoin_variables.push_back(coin_inner_nsw_currBc);
2302 auto coin_inner_nsw_endcap_currBc=Monitored::Collection("coin_inner_nsw_endcap_currBc",tgcTrigNswMap,[](const TgcTrigNsw&m){
2303 return (m.isForward==0 && m.currBc==1);
2304 });
2305 tgcCoin_variables.push_back(coin_inner_nsw_endcap_currBc);
2306 auto coin_inner_nsw_forward_currBc=Monitored::Collection("coin_inner_nsw_forward_currBc",tgcTrigNswMap,[](const TgcTrigNsw&m){
2307 return (m.isForward==1 && m.currBc==1);
2308 });
2309 tgcCoin_variables.push_back(coin_inner_nsw_forward_currBc);
2310 auto coin_inner_nsw_goodBcid0=Monitored::Collection("coin_inner_nsw_goodBcid0",tgcTrigNswMap,[](const TgcTrigNsw&m){
2311 return m.goodBcid0;
2312 });
2313 tgcCoin_variables.push_back(coin_inner_nsw_goodBcid0);
2314 auto coin_inner_nsw_goodBcid1=Monitored::Collection("coin_inner_nsw_goodBcid1",tgcTrigNswMap,[](const TgcTrigNsw&m){
2315 return m.goodBcid1;
2316 });
2317 tgcCoin_variables.push_back(coin_inner_nsw_goodBcid1);
2318 auto coin_inner_nsw_goodBcid2=Monitored::Collection("coin_inner_nsw_goodBcid2",tgcTrigNswMap,[](const TgcTrigNsw&m){
2319 return m.goodBcid2;
2320 });
2321 tgcCoin_variables.push_back(coin_inner_nsw_goodBcid2);
2322 auto coin_inner_nsw_goodTiming=Monitored::Collection("coin_inner_nsw_goodTiming",tgcTrigNswMap,[](const TgcTrigNsw&m){
2323 return m.goodTiming;
2324 });
2325 tgcCoin_variables.push_back(coin_inner_nsw_goodTiming);
2326
2327 auto coin_inner_nsw_slInputIndex=Monitored::Collection("coin_inner_nsw_slInputIndex",tgcTrigNswMap,[](const TgcTrigNsw&m){
2328 return m.slInputIndex;
2329 });
2330 tgcCoin_variables.push_back(coin_inner_nsw_slInputIndex);
2331 auto coin_inner_nsw_slInputIndex_AEndcap=Monitored::Collection("coin_inner_nsw_slInputIndex_AEndcap",tgcTrigNswMap,[](const TgcTrigNsw&m){
2332 return (m.isAside==1 && m.isForward==0) ? m.slInputIndex : -999;
2333 });
2334 tgcCoin_variables.push_back(coin_inner_nsw_slInputIndex_AEndcap);
2335 auto coin_inner_nsw_slInputIndex_CEndcap=Monitored::Collection("coin_inner_nsw_slInputIndex_CEndcap",tgcTrigNswMap,[](const TgcTrigNsw&m){
2336 return (m.isAside==0 && m.isForward==0) ? m.slInputIndex : -999;
2337 });
2338 tgcCoin_variables.push_back(coin_inner_nsw_slInputIndex_CEndcap);
2339 auto coin_inner_nsw_slInputIndex_AForward=Monitored::Collection("coin_inner_nsw_slInputIndex_AForward",tgcTrigNswMap,[](const TgcTrigNsw&m){
2340 return (m.isAside==1 && m.isForward==1) ? m.slInputIndex : -999;
2341 });
2342 tgcCoin_variables.push_back(coin_inner_nsw_slInputIndex_AForward);
2343 auto coin_inner_nsw_slInputIndex_CForward=Monitored::Collection("coin_inner_nsw_slInputIndex_CForward",tgcTrigNswMap,[](const TgcTrigNsw&m){
2344 return (m.isAside==0 && m.isForward==1) ? m.slInputIndex : -999;
2345 });
2346 tgcCoin_variables.push_back(coin_inner_nsw_slInputIndex_CForward);
2347
2348 auto coin_inner_nsw_goodTimingBcid0=Monitored::Collection("coin_inner_nsw_goodTimingBcid0",tgcTrigNswMap,[](const TgcTrigNsw&m){
2349 return (m.goodTiming==1 && m.goodBcid0==1);
2350 });
2351 tgcCoin_variables.push_back(coin_inner_nsw_goodTimingBcid0);
2352 auto coin_inner_nsw_goodTimingBcid1=Monitored::Collection("coin_inner_nsw_goodTimingBcid1",tgcTrigNswMap,[](const TgcTrigNsw&m){
2353 return (m.goodTiming==1 && m.goodBcid1==1);
2354 });
2355 tgcCoin_variables.push_back(coin_inner_nsw_goodTimingBcid1);
2356 auto coin_inner_nsw_goodTimingBcid2=Monitored::Collection("coin_inner_nsw_goodTimingBcid2",tgcTrigNswMap,[](const TgcTrigNsw&m){
2357 return (m.goodTiming==1 && m.goodBcid2==1);
2358 });
2359 tgcCoin_variables.push_back(coin_inner_nsw_goodTimingBcid2);
2360 auto coin_inner_nsw_BcPrev=Monitored::Collection("coin_inner_nsw_BcPrev",tgcTrigNswMap,[](const TgcTrigNsw&m){
2361 return m.deltaTiming==-1;
2362 });
2363 tgcCoin_variables.push_back(coin_inner_nsw_BcPrev);
2364 auto coin_inner_nsw_BcCurr=Monitored::Collection("coin_inner_nsw_BcCurr",tgcTrigNswMap,[](const TgcTrigNsw&m){
2365 return m.deltaTiming==0;
2366 });
2367 tgcCoin_variables.push_back(coin_inner_nsw_BcCurr);
2368 auto coin_inner_nsw_BcNext=Monitored::Collection("coin_inner_nsw_BcNext",tgcTrigNswMap,[](const TgcTrigNsw&m){
2369 return m.deltaTiming==1;
2370 });
2371 tgcCoin_variables.push_back(coin_inner_nsw_BcNext);
2372 auto coin_inner_nsw_BcNextNext=Monitored::Collection("coin_inner_nsw_BcNextNext",tgcTrigNswMap,[](const TgcTrigNsw&m){
2373 return m.deltaTiming==2;
2374 });
2375 tgcCoin_variables.push_back(coin_inner_nsw_BcNextNext);
2376
2377 // Tile inner coincidence
2378 auto coin_inner_tile_slSector=Monitored::Collection("coin_inner_tile_slSector",tgcTrigTileMap,[](const TgcTrigTile&m){
2379 return m.slSector;
2380 });
2381 tgcCoin_variables.push_back(coin_inner_tile_slSector);
2382 auto coin_inner_tile_slSector_goodTiming=Monitored::Collection("coin_inner_tile_slSector_goodTiming",tgcTrigTileMap,[](const TgcTrigTile&m){
2383 return (m.goodTiming) ? m.slSector : -999;
2384 });
2385 tgcCoin_variables.push_back(coin_inner_tile_slSector_goodTiming);
2386 auto coin_inner_tile_roiEta=Monitored::Collection("coin_inner_tile_roiEta",tgcTrigTileMap,[](const TgcTrigTile&m){
2387 return m.roiEta;
2388 });
2389 tgcCoin_variables.push_back(coin_inner_tile_roiEta);
2390 auto coin_inner_tile_roiPhi=Monitored::Collection("coin_inner_tile_roiPhi",tgcTrigTileMap,[](const TgcTrigTile&m){
2391 return m.roiPhi;
2392 });
2393 tgcCoin_variables.push_back(coin_inner_tile_roiPhi);
2394 auto coin_inner_tile_roiNum=Monitored::Collection("coin_inner_tile_roiNum",tgcTrigTileMap,[](const TgcTrigTile&m){
2395 return m.roiNum;
2396 });
2397 tgcCoin_variables.push_back(coin_inner_tile_roiNum);
2398 auto coin_inner_tile_deltaBcid=Monitored::Collection("coin_inner_tile_deltaBcid",tgcTrigTileMap,[](const TgcTrigTile&m){
2399 return m.deltaBcid;
2400 });
2401 tgcCoin_variables.push_back(coin_inner_tile_deltaBcid);
2402 auto coin_inner_tile_deltaTiming=Monitored::Collection("coin_inner_tile_deltaTiming",tgcTrigTileMap,[](const TgcTrigTile&m){
2403 return m.deltaTiming;
2404 });
2405 tgcCoin_variables.push_back(coin_inner_tile_deltaTiming);
2406 auto coin_inner_tile_tmdbDecisions=Monitored::Collection("coin_inner_tile_tmdbDecisions",tgcTrigTileMap,[](const TgcTrigTile&m){
2407 return m.tmdbDecisions;
2408 });
2409 tgcCoin_variables.push_back(coin_inner_tile_tmdbDecisions);
2410 auto coin_inner_tile_currBc=Monitored::Collection("coin_inner_tile_currBc",tgcTrigTileMap,[](const TgcTrigTile&m){
2411 return m.currBc;
2412 });
2413 tgcCoin_variables.push_back(coin_inner_tile_currBc);
2414 auto coin_inner_tile_goodBcid0=Monitored::Collection("coin_inner_tile_goodBcid0",tgcTrigTileMap,[](const TgcTrigTile&m){
2415 return m.goodBcid0;
2416 });
2417 tgcCoin_variables.push_back(coin_inner_tile_goodBcid0);
2418 auto coin_inner_tile_goodBcid1=Monitored::Collection("coin_inner_tile_goodBcid1",tgcTrigTileMap,[](const TgcTrigTile&m){
2419 return m.goodBcid1;
2420 });
2421 tgcCoin_variables.push_back(coin_inner_tile_goodBcid1);
2422 auto coin_inner_tile_goodBcid2=Monitored::Collection("coin_inner_tile_goodBcid2",tgcTrigTileMap,[](const TgcTrigTile&m){
2423 return m.goodBcid2;
2424 });
2425 tgcCoin_variables.push_back(coin_inner_tile_goodBcid2);
2426 auto coin_inner_tile_goodTiming=Monitored::Collection("coin_inner_tile_goodTiming",tgcTrigTileMap,[](const TgcTrigTile&m){
2427 return m.goodTiming;
2428 });
2429 tgcCoin_variables.push_back(coin_inner_tile_goodTiming);
2430 // Tile inner coincidence (modified decisions)
2431 auto coin_inner_tile2_slSector=Monitored::Collection("coin_inner_tile2_slSector",tgcTrigTileMap_allmods,[](const TgcTrigTile&m){
2432 return m.slSector;
2433 });
2434 tgcCoin_variables.push_back(coin_inner_tile2_slSector);
2435 auto coin_inner_tile2_currBc=Monitored::Collection("coin_inner_tile2_currBc",tgcTrigTileMap_allmods,[](const TgcTrigTile&m){
2436 return m.currBc;
2437 });
2438 tgcCoin_variables.push_back(coin_inner_tile2_currBc);
2439 auto coin_inner_tile2_tmdbDecisions=Monitored::Collection("coin_inner_tile2_tmdbDecisions",tgcTrigTileMap_allmods,[](const TgcTrigTile&m){
2440 return m.tmdbDecisions;
2441 });
2442 tgcCoin_variables.push_back(coin_inner_tile2_tmdbDecisions);
2443
2444 // EIFI inner coincidence
2445 auto coin_inner_eifi_slSector_goodTiming=Monitored::Collection("coin_inner_eifi_slSector_goodTiming",tgcTrigEifiMap,[](const TgcTrigEifi&m){
2446 return (m.goodTiming) ? m.slSector : -999;
2447 });
2448 tgcCoin_variables.push_back(coin_inner_eifi_slSector_goodTiming);
2449 auto coin_inner_eifi_slSector=Monitored::Collection("coin_inner_eifi_slSector",tgcTrigEifiMap,[](const TgcTrigEifi&m){
2450 return m.slSector;
2451 });
2452 tgcCoin_variables.push_back(coin_inner_eifi_slSector);
2453 auto coin_inner_eifi_roiEta=Monitored::Collection("coin_inner_eifi_roiEta",tgcTrigEifiMap,[](const TgcTrigEifi&m){
2454 return m.roiEta;
2455 });
2456 tgcCoin_variables.push_back(coin_inner_eifi_roiEta);
2457 auto coin_inner_eifi_roiPhi=Monitored::Collection("coin_inner_eifi_roiPhi",tgcTrigEifiMap,[](const TgcTrigEifi&m){
2458 return m.roiPhi;
2459 });
2460 tgcCoin_variables.push_back(coin_inner_eifi_roiPhi);
2461 auto coin_inner_eifi_roiNum=Monitored::Collection("coin_inner_eifi_roiNum",tgcTrigEifiMap,[](const TgcTrigEifi&m){
2462 return m.roiNum;
2463 });
2464 tgcCoin_variables.push_back(coin_inner_eifi_roiNum);
2465 auto coin_inner_eifi_deltaTiming=Monitored::Collection("coin_inner_eifi_deltaTiming",tgcTrigEifiMap,[](const TgcTrigEifi&m){
2466 return m.deltaTiming;
2467 });
2468 tgcCoin_variables.push_back(coin_inner_eifi_deltaTiming);
2469 auto coin_inner_eifi_currBc=Monitored::Collection("coin_inner_eifi_currBc",tgcTrigEifiMap,[](const TgcTrigEifi&m){
2470 return m.currBc;
2471 });
2472 tgcCoin_variables.push_back(coin_inner_eifi_currBc);
2473 auto coin_inner_eifi_goodTiming=Monitored::Collection("coin_inner_eifi_goodTiming",tgcTrigEifiMap,[](const TgcTrigEifi&m){
2474 return m.goodTiming;
2475 });
2476 tgcCoin_variables.push_back(coin_inner_eifi_goodTiming);
2477
2478
2479 fill(m_packageName+"_TgcCoin", tgcCoin_variables);
2480
2481 ATH_MSG_DEBUG("End filling TGC CoinData histograms");
2482 }
2483 }
2484
2486 ATH_MSG_DEBUG("Done fillHistograms()");
2487 return StatusCode::SUCCESS;
2488}
#define ATH_MSG_ERROR(x)
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
static Double_t sc
#define z
DataType_t dataType() const
Accessor functions for the data type.
const ToolHandle< Trig::TrigDecisionTool > & getTrigDecisionTool() const
Get the trigger decision tool member.
SG::ReadHandle< xAOD::EventInfo > GetEventInfo(const EventContext &) const
Return a ReadHandle for an EventInfo object (get run/event numbers, etc.).
bool is_valid() const
Check if id is in a valid state.
static constexpr uint32_t INNER_TILE_MODULE_BITSHIFT
Bit info in int inner for the Tile inner-coincidence.
static constexpr uint32_t INNER_TILE_BCID_BIT
static constexpr uint32_t INNER_RPC_PHI_BIT
static constexpr uint32_t INNER_NSW_BCID_BIT
static constexpr uint32_t INNER_RPC_ETA_BIT
static constexpr uint32_t INNER_RPC_DPHI_BIT
static constexpr uint32_t INNER_TILE_MODULE_BIT
static constexpr uint32_t INNER_RPC_BCID_BITSHIFT
static constexpr uint32_t INNER_RPC_ETA_BITSHIFT
Bit info in int inner for the RPC inner-coincidence.
static constexpr uint32_t INNER_RPC_PHI_BITSHIFT
static constexpr uint32_t INNER_RPC_DPHI_BITSHIFT
static constexpr uint32_t INNER_NSW_PHI_BITSHIFT
static constexpr uint32_t INNER_RPC_DETA_BIT
static constexpr uint32_t INNER_RPC_BCID_BIT
static constexpr uint32_t INNER_NSW_BCID_BITSHIFT
static constexpr uint32_t INNER_RPC_DETA_BITSHIFT
static constexpr uint32_t INNER_NSW_R_BITSHIFT
Bit info in int inner for the NSW inner-coincidence.
static constexpr uint32_t INNER_TILE_BCID_BITSHIFT
static constexpr uint32_t INNER_NSW_PHI_BIT
static constexpr uint32_t INNER_NSW_INPUT_BITSHIFT
static constexpr uint32_t INNER_NSW_DTHETA_BITSHIFT
static constexpr uint32_t INNER_NSW_R_BIT
static constexpr uint32_t INNER_NSW_INPUT_BIT
static constexpr uint32_t INNER_NSW_DTHETA_BIT
void fillRoiHistograms(const std::vector< TgcRawDataMonitorAlgorithm::TimedMuonRoI > &roiVec, const EventContext &ctx) const
void fillTgcCoinEff(const std::string &, const std::vector< TgcTrig > &, const std::vector< ExtPos > &, std::vector< ExtTrigInfo > &, std::vector< Monitored::ObjectsCollection< std::vector< ExtTrigInfo >, double > > &, MonVariables &) const
void fillMuonRoisInThresholdPattern(std::map< const xAOD::MuonRoI *, std::set< std::string > > &, std::map< std::string, std::vector< const xAOD::MuonRoI * > > &, std::vector< TimedMuonRoI > &AllBCMuonRoIs, const EventContext &ctx) const
SG::ReadHandleKey< xAOD::VertexContainer > m_PrimaryVertexContainerKey
double getMatchingWindow(const xAOD::Muon *muon) const
const xAOD::Vertex * getPrimaryVertex(const EventContext &ctx) const
void fillTgcCoin(const std::string &, const std::vector< TgcTrig > &, std::vector< Monitored::ObjectsCollection< std::vector< TgcTrig >, double > > &, MonVariables &) const
std::vector< std::reference_wrapper< Monitored::IMonitoredVariable > > MonVariables
SG::ReadHandleKey< Muon::TgcCoinDataContainer > m_TgcCoinDataContainerNextNextBCKey
std::vector< TgcRawDataMonitorAlgorithm::TimedMuonRoI > getRegionsOfInterest(const EventContext &ctx) const
std::set< std::string > checkTriggerInfo() const
double getNswRindexFromEta(const double &eta) const
void fillTgcPrdHistograms(Monitored::Scalar< int > &mon_bcid, Monitored::Scalar< int > &mon_pileup, Monitored::Scalar< int > &mon_lb, std::map< std::string, std::vector< ExtPos > > &extpositions, const EventContext &ctx) const
BooleanProperty m_useDirectPrimaryTrackForExtrapolation
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
ToolHandle< CP::IMuonSelectionTool > m_muonSelectionTool
ToolHandle< ITgcRawDataMonitorTool > m_tgcMonTool
ToolHandle< Trk::IExtrapolator > m_extrapolator
void fillHistogramsAfterTriggerDecision(std::vector< TgcRawDataMonitorAlgorithm::TimedMuonRoI > &roiVec) const
void fillThresholdPatternHistograms(std::map< std::string, std::vector< const xAOD::MuonRoI * > > &menuAndRoIs, const std::vector< TimedMuon > &mymuons, const EventContext &ctx) const
float eta() const
The pseudorapidity ( ) of the muon candidate.
bool getInnerCoincidence() const
Returns whether or not there was an inner coincidence in the TGC.
bool getBW3Coincidence() const
Returns whether or not there was a 3-station coincidence in the TGC.
RoISource getSource() const
Returns the system that detected the muon candidate.
int getThrNumber() const
Get the logic number of the highest threshold this RoI passed.
bool isMoreCandInRoI() const
Returns if there were other muons detected in the same RoI.
float phi() const
The azimuthal angle ( ) of the muon candidate.
@ Barrel
The muon candidate was detected in the barrel region.
Definition MuonRoI_v1.h:34
Charge getCharge() const
Returns the charge sign of the muon candidate.
@ Neg
Candidate is a mu- from a TGC sector.
Definition MuonRoI_v1.h:45
@ Pos
Candidate is a mu+ from a TGC sector.
Definition MuonRoI_v1.h:46
bool getGoodMF() const
Returns whether or not there was a good magnetic field quality in the TGC.
float z() const
Returns the z position.
virtual float lbAverageInteractionsPerCrossing(const EventContext &ctx) const
Calculate the average mu, i.e.
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Matrix< double, 3, 1 > Vector3D
double deltaR(const Amg::Vector3D &v1, const Amg::Vector3D &v2)
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
constexpr int toInt(const EnumType enumVal)
@ alongMomentum
double deltaR(double rapidity1, double phi1, double rapidity2, double phi2)
from bare bare rapidity,phi
setTeId lumiBlock
Vertex_v1 Vertex
Define the latest version of the vertex class.
Muon_v1 Muon
Reference the current persistent version:
setEventNumber setTimeStamp bcid
MuonContainer_v1 MuonContainer
Definition of the current "Muon container version".
MuonRoI_v1 MuonRoI
Definition MuonRoI.h:15
void fill(H5::Group &out_file, size_t iterations)

◆ fillHistogramsAfterTriggerDecision()

void TgcRawDataMonitorAlgorithm::fillHistogramsAfterTriggerDecision ( std::vector< TgcRawDataMonitorAlgorithm::TimedMuonRoI > & roiVec) const
private

Definition at line 584 of file TgcRawDataMonitorAlgorithm.cxx.

584 {
586 if ( !getTrigDecisionTool().empty() && roiVec.size()>0 && m_monitorTriggerMultiplicity ) {
587 ATH_MSG_DEBUG("Filling histograms for MuonRoIs after trigger decision");
588 for(const auto& monObj : m_CtpDecMonObj){
589 std::set<unsigned int> allCands;
590 std::set<unsigned int> ctpMuonCands;
591 std::set<unsigned int> inputMuonCands;
592 // collecting roiWords out of the CTP decision
593 bool isRun2Legacy = false;
594 if(getTrigDecisionTool()->getNavigationFormat() == "TriggerElement") { // run 2 access
595 isRun2Legacy = true;
596 if(monObj.title.find("Run2Legacy")==std::string::npos) continue;
597 auto fc = getTrigDecisionTool()->features(monObj.trigItem.data(),TrigDefs::alsoDeactivateTEs);
598 for(const auto& comb : fc.getCombinations()){
599 auto initRoIs = comb.get<TrigRoiDescriptor>("initialRoI",TrigDefs::alsoDeactivateTEs);
600 for(const auto& roi : initRoIs){
601 if( roi.empty() )continue;
602 if( roi.cptr()==nullptr ) continue;
603 ctpMuonCands.insert(roi.cptr()->roiWord());
604 allCands.insert(roi.cptr()->roiWord());
605 }
606 }
607 }else{ // run 3 access
608 auto initialRoIs = getTrigDecisionTool()->features<TrigRoiDescriptorCollection>(monObj.trigItem.data(), TrigDefs::includeFailedDecisions, "", TrigDefs::lastFeatureOfType, "initialRoI");
609 for(const auto& roiLinkInfo : initialRoIs) {
610 if( !roiLinkInfo.isValid() )continue;
611 auto roiEL = roiLinkInfo.link;
612 if( !roiEL.isValid() )continue;
613 auto roi = *roiEL;
614 if( roi==nullptr ) continue;
615 ctpMuonCands.insert(roi->roiWord());
616 allCands.insert(roi->roiWord());
617 }
618 }
619 // collecting roiWords out of RPC/TGC
620 bool isRun3 = false;
621 for(const auto& allBcMuonRoI : roiVec){
622 const xAOD::MuonRoI* roi = allBcMuonRoI.muonRoI;
623 isRun3 = roi->isRun3();
625 if(roi->getThrNumber()<monObj.rpcThr)continue;
626 if(monObj.rpcM && !roi->isMoreCandInRoI())continue;
627 }else{
628 if(roi->getThrNumber()<monObj.tgcThr)continue;
629 if(monObj.tgcF && !roi->getBW3Coincidence())continue;
630 if(monObj.tgcC && !roi->getInnerCoincidence())continue;
631 if(monObj.tgcH && !roi->getGoodMF())continue;
632 }
633 inputMuonCands.insert(roi->roiWord());
634 allCands.insert(roi->roiWord());
635 }
636 if(!isRun3 && isRun2Legacy && monObj.title.find("Run2Legacy")==std::string::npos)continue; // Run2Legacy
637 if(!isRun3 && !isRun2Legacy && (monObj.title.find("Run2Legacy")!=std::string::npos||monObj.title.find("Run3")!=std::string::npos))continue; // Run2
638 if(isRun3 && monObj.title.find("Run3")==std::string::npos)continue; // Run3
639
640 if(ctpMuonCands.size()==0 && inputMuonCands.size()<monObj.multiplicity)continue;
641
642 std::vector<int> roiMatching_CTPin;
643 std::vector<int> roiMatching_CTPout;
644
645 std::vector<double> roi_Eta;
646 std::vector<double> roi_Phi;
647 std::vector<double> roi_dRmin;
648 std::vector<double> roi_pTdiff;
649 std::vector<int> roi_ThrNum;
650 std::vector<int> roi_Charge;
651 std::vector<int> roi_BW3Coin;
652 std::vector<int> roi_InnerCoin;
653 std::vector<int> roi_GoodMF;
654 std::vector<int> roi_IsMoreCandInRoI;
655 std::vector<int> roi_PhiOverlap;
656 std::vector<int> roi_EtaOverlap;
657 std::vector<int> roi_isVetoed;
658 std::vector<bool> roi_inOk_outOk;
659 std::vector<bool> roi_inOk_outNg;
660 std::vector<bool> roi_inNg_outOk;
661
662 for(const auto& allBcMuonRoI : roiVec){ // scan all MuonRoIs
663 const xAOD::MuonRoI* roi = allBcMuonRoI.muonRoI;
664 bool ctp_in = inputMuonCands.find(roi->roiWord())!=inputMuonCands.end();
665 bool ctp_out = ctpMuonCands.find(roi->roiWord())!=ctpMuonCands.end();
666 if(!ctp_in && !ctp_out)continue;
667 roiMatching_CTPin.push_back(ctp_in?1:0);
668 roiMatching_CTPout.push_back(ctp_out?1:0);
669 double dRmin = 1000;
670 double pTdiff = -15;
671 for(const auto& allBcMuonRoI2 : roiVec){ // scan all the other MuonRoIs to check the isolation
672 const xAOD::MuonRoI* roi2 = allBcMuonRoI2.muonRoI;
673 if(roi == roi2)continue;
674 double dr = xAOD::P4Helpers::deltaR(roi->eta(),roi->phi(),roi2->eta(),roi2->phi());
675 if(dr < dRmin){
676 dRmin = dr;
677 pTdiff = roi2->getThrNumber() - roi->getThrNumber();
678 }
679 }
680 // adjust the value so that the value can be in the histgram range
681 if(dRmin>999) dRmin = -0.05;
682 else if(dRmin>1.0) dRmin = 0.95;
683 roi_Eta.push_back(roi->eta());
684 roi_Phi.push_back(roi->phi());
685 roi_dRmin.push_back(dRmin);
686 roi_pTdiff.push_back(pTdiff);
687 roi_ThrNum.push_back((roi->getSource()==xAOD::MuonRoI::Barrel)?(roi->getThrNumber()):(-roi->getThrNumber()));
688 roi_Charge.push_back((roi->getCharge()==xAOD::MuonRoI::Neg)?(-1):((roi->getCharge()==xAOD::MuonRoI::Pos)?(+1):(0)));
689 roi_BW3Coin.push_back((roi->getSource()!=xAOD::MuonRoI::Barrel)?roi->getBW3Coincidence():-1);
690 roi_InnerCoin.push_back((roi->getSource()!=xAOD::MuonRoI::Barrel)?roi->getInnerCoincidence():-1);
691 roi_GoodMF.push_back((roi->getSource()!=xAOD::MuonRoI::Barrel)?roi->getGoodMF():-1);
692 roi_IsMoreCandInRoI.push_back((roi->getSource()==xAOD::MuonRoI::Barrel)?roi->isMoreCandInRoI():-1);
693 roi_PhiOverlap.push_back((roi->getSource()==xAOD::MuonRoI::Barrel)?roi->getPhiOverlap():-1);
694 roi_EtaOverlap.push_back(roi->getEtaOverlap());
695 roi_isVetoed.push_back(roi->isVetoed());
696 roi_inOk_outOk.push_back( ctp_in && ctp_out );
697 roi_inOk_outNg.push_back( ctp_in && !ctp_out );
698 roi_inNg_outOk.push_back( !ctp_in && ctp_out );
699 }
700
701 MonVariables ctpMonVariables;
702 auto val_roiMatching_CTPin = Monitored::Collection("roiMatching_CTPin", roiMatching_CTPin);
703 auto val_roiMatching_CTPout = Monitored::Collection("roiMatching_CTPout", roiMatching_CTPout);
704
705 auto val_ctpMultiplicity = Monitored::Scalar<int>("ctpMultiplicity",ctpMuonCands.size());
706 auto val_rawMultiplicity = Monitored::Scalar<int>("rawMultiplicity",inputMuonCands.size());
707 auto val_countDiff = Monitored::Scalar<int>("countDiff",ctpMuonCands.size()-inputMuonCands.size());
708
709 auto val_roi_Eta = Monitored::Collection("Eta",roi_Eta);
710 auto val_roi_Phi = Monitored::Collection("Phi",roi_Phi);
711 auto val_roi_dRmin = Monitored::Collection("dRmin",roi_dRmin);
712 auto val_roi_pTdiff = Monitored::Collection("pTdiff",roi_pTdiff);
713 auto val_roi_ThrNum = Monitored::Collection("ThrNum",roi_ThrNum);
714 auto val_roi_Charge = Monitored::Collection("Charge",roi_Charge);
715 auto val_roi_BW3Coin = Monitored::Collection("BW3Coin",roi_BW3Coin);
716 auto val_roi_InnerCoin = Monitored::Collection("InnerCoin",roi_InnerCoin);
717 auto val_roi_GoodMF = Monitored::Collection("GoodMF",roi_GoodMF);
718 auto val_roi_IsMoreCandInRoI = Monitored::Collection("IsMoreCandInRoI",roi_IsMoreCandInRoI);
719 auto val_roi_PhiOverlap = Monitored::Collection("PhiOverlap",roi_PhiOverlap);
720 auto val_roi_EtaOverlap = Monitored::Collection("EtaOverlap",roi_EtaOverlap);
721 auto val_roi_isVetoed = Monitored::Collection("isVetoed",roi_isVetoed);
722 auto val_roi_inOk_outOk = Monitored::Collection("inOk_outOk",roi_inOk_outOk);
723 auto val_roi_inOk_outNg = Monitored::Collection("inOk_outNg",roi_inOk_outNg);
724 auto val_roi_inNg_outOk = Monitored::Collection("inNg_outOk",roi_inNg_outOk);
725
726 ctpMonVariables.push_back(val_roiMatching_CTPin);
727 ctpMonVariables.push_back(val_roiMatching_CTPout);
728 ctpMonVariables.push_back(val_ctpMultiplicity);
729 ctpMonVariables.push_back(val_rawMultiplicity);
730 ctpMonVariables.push_back(val_countDiff);
731 ctpMonVariables.push_back(val_roi_Eta);
732 ctpMonVariables.push_back(val_roi_Phi);
733 ctpMonVariables.push_back(val_roi_dRmin);
734 ctpMonVariables.push_back(val_roi_pTdiff);
735 ctpMonVariables.push_back(val_roi_ThrNum);
736 ctpMonVariables.push_back(val_roi_Charge);
737 ctpMonVariables.push_back(val_roi_BW3Coin);
738 ctpMonVariables.push_back(val_roi_InnerCoin);
739 ctpMonVariables.push_back(val_roi_GoodMF);
740 ctpMonVariables.push_back(val_roi_IsMoreCandInRoI);
741 ctpMonVariables.push_back(val_roi_PhiOverlap);
742 ctpMonVariables.push_back(val_roi_EtaOverlap);
743 ctpMonVariables.push_back(val_roi_isVetoed);
744 ctpMonVariables.push_back(val_roi_inOk_outOk);
745 ctpMonVariables.push_back(val_roi_inOk_outNg);
746 ctpMonVariables.push_back(val_roi_inNg_outOk);
747 fill(m_packageName + monObj.title, ctpMonVariables);
748 }
749 ATH_MSG_DEBUG("End filling histograms for MuonRoIs after trigger decision");
750 }
752}
Athena::TPCnvVers::Current Athena::TPCnvVers::Old TrigRoiDescriptorCollection
nope - should be used for standalone also, perhaps need to protect the class def bits ifndef XAOD_ANA...
bool isVetoed() const
Returns the veto flag for the candidate.
uint32_t roiWord() const
The "raw" RoI word describing the muon candidate.
bool getEtaOverlap() const
Returns whether there's overlap between the barrel-EC sectors.
bool getPhiOverlap() const
Returns whether there's overlap between barrel sectors.
bool isRun3() const
Returns extra flag at end of RoI word indicating that it's in Run3 format.
static const unsigned int includeFailedDecisions
Run3 synonym of alsoDeactivateTEs.
static const unsigned int lastFeatureOfType
Run 3 "enum". Only return the final feature along each route through the navigation.

◆ fillMuonRoisInThresholdPattern()

void TgcRawDataMonitorAlgorithm::fillMuonRoisInThresholdPattern ( std::map< const xAOD::MuonRoI *, std::set< std::string > > & roiAndMenu,
std::map< std::string, std::vector< const xAOD::MuonRoI * > > & menuAndRoIs,
std::vector< TimedMuonRoI > & AllBCMuonRoIs,
const EventContext & ctx ) const
private

Definition at line 3257 of file TgcRawDataMonitorAlgorithm.cxx.

3257 {
3258
3259 if(m_monitorThresholdPatterns && AllBCMuonRoIs.size()>0 ){
3260 ATH_MSG_DEBUG("Filling histograms for MuonRoIs in thresholdPattern");
3261 SG::ReadHandle<TrigConf::L1Menu> l1Menu = SG::makeHandle(m_L1MenuKey, ctx);
3262 SG::ReadDecorHandle<xAOD::MuonRoIContainer,uint64_t> thrPatternAcc = SG::makeHandle<uint64_t>(m_thresholdPatternsKey, ctx);
3263 if(l1Menu.isValid() && thrPatternAcc.isPresent() && thrPatternAcc.isAvailable()){
3264 for(const auto& item : m_thrMonList){
3265 ATH_MSG_DEBUG("Item = " << item);
3266 bool ok = false;
3267 for(const auto& m : l1Menu->thresholdNames()){
3268 ATH_MSG_DEBUG("item = " << m);
3269 if( m == item ){
3270 ok = true;
3271 break;
3272 }
3273 }
3274 if(!ok){
3275 ATH_MSG_DEBUG("skipping " << item);
3276 continue;
3277 }
3278 ATH_MSG_DEBUG("continue checking " << item);
3279 const TrigConf::L1Threshold& thr = l1Menu->threshold(item.data());
3280 std::vector<const xAOD::MuonRoI*> passed_rois;
3281 for(const auto& allBcMuonRoI : AllBCMuonRoIs){
3282 if(allBcMuonRoI.timing!=0)continue; // only current BC
3283 const xAOD::MuonRoI* roi = allBcMuonRoI.muonRoI;
3284 const uint64_t thrPattern = thrPatternAcc(*roi);
3285 bool passed = ( thrPattern & (1 << thr.mapping()) );
3286 if(passed){
3287 passed_rois.push_back(roi);
3288 ATH_MSG_DEBUG("This RoI passed "<< item <<", roiWord=" << roi->roiWord() << ", thrNumber=" << roi->getThrNumber() << " eta=" << roi->eta() << " phi=" << roi->phi());
3289 if(roiAndMenu.count(roi)==0){
3290 std::set<std::string> items;
3291 roiAndMenu.insert(std::make_pair(roi,items));
3292 }
3293 roiAndMenu[roi].insert(item);
3294 }
3295 }
3296 menuAndRoIs.insert(std::make_pair(item,passed_rois));
3297 }
3298 }
3299 ATH_MSG_DEBUG("End filling histograms for MuonRoIs in thresholdPattern");
3300 }
3301}
bool passed(DecisionID id, const DecisionIDContainer &)
checks if required decision ID is in the set of IDs in the container
Handle class for reading a decoration on an object.
bool isPresent() const
Is the referenced container present in SG?
bool isAvailable()
Test to see if this variable exists in the store, for the referenced object.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())

◆ fillRoiHistograms()

void TgcRawDataMonitorAlgorithm::fillRoiHistograms ( const std::vector< TgcRawDataMonitorAlgorithm::TimedMuonRoI > & roiVec,
const EventContext & ctx ) const
private

Definition at line 299 of file TgcRawDataMonitorAlgorithm.cxx.

299 {
301 if( not roiVec.empty() ){
302 ATH_MSG_DEBUG("Filling MuonRoI-only histograms");
303 MonVariables roi_variables;
304 auto roi_bcid = Monitored::Scalar<int>("roi_bcid", GetEventInfo(ctx)->bcid());
305 roi_variables.push_back(roi_bcid);
306 auto roi_pileup = Monitored::Scalar<int>("roi_pileup", lbAverageInteractionsPerCrossing(ctx));
307 roi_variables.push_back(roi_pileup);
308 auto roi_lumiBlock = Monitored::Scalar<int>("roi_lumiBlock", GetEventInfo(ctx)->lumiBlock());
309 roi_variables.push_back(roi_lumiBlock);
310 auto roi_timing = Monitored::Collection("roi_timing", roiVec, [](const TimedMuonRoI& m) {
311 return m.timing;
312 });
313 roi_variables.push_back(roi_timing);
314 auto roi_currentBC = Monitored::Collection("roi_currentBC", roiVec, [](const TimedMuonRoI& m) {
315 return m.timing==0;
316 });
317 roi_variables.push_back(roi_currentBC);
318 auto roi_previousBC = Monitored::Collection("roi_previousBC", roiVec, [](const TimedMuonRoI& m) {
319 return m.timing==-1;
320 });
321 roi_variables.push_back(roi_previousBC);
322 auto roi_nextBC = Monitored::Collection("roi_nextBC", roiVec, [](const TimedMuonRoI& m) {
323 return m.timing==+1;
324 });
325 roi_variables.push_back(roi_nextBC);
326 auto roi_roiNumber = Monitored::Collection("roi_roiNumber", roiVec, [](const TimedMuonRoI& m) {
327 return m.muonRoI->getRoI();
328 });
329 roi_variables.push_back(roi_roiNumber);
330 auto roi_sector = Monitored::Collection("roi_sector", roiVec, [](const TimedMuonRoI& m) {
331 return (m.muonRoI->getHemisphere() == xAOD::MuonRoI::Positive)?(m.muonRoI->getSectorID()+1):(-1 * m.muonRoI->getSectorID()-1);
332 });
333 roi_variables.push_back(roi_sector);
334 auto roi_sectorAbs = Monitored::Collection("roi_sectorAbs", roiVec, [](const TimedMuonRoI& m) {
335 return m.muonRoI->getSectorID()+1;
336 });
337 roi_variables.push_back(roi_sectorAbs);
338 auto roi_sector_wBW3Coin = Monitored::Collection("roi_sector_wBW3Coin", roiVec, [](const TimedMuonRoI& m) {
339 return (m.muonRoI->getBW3Coincidence()) ? ((m.muonRoI->getHemisphere() == xAOD::MuonRoI::Positive)?(m.muonRoI->getSectorID()+1):(-1 * m.muonRoI->getSectorID()-1)) : (-999);
340 });
341 roi_variables.push_back(roi_sector_wBW3Coin);
342 auto roi_sector_wInnerCoin = Monitored::Collection("roi_sector_wInnerCoin", roiVec, [](const TimedMuonRoI& m) {
343 return (m.muonRoI->getInnerCoincidence()) ? ((m.muonRoI->getHemisphere() == xAOD::MuonRoI::Positive)?(m.muonRoI->getSectorID()+1):(-1 * m.muonRoI->getSectorID()-1)) : (-999);
344 });
345 roi_variables.push_back(roi_sector_wInnerCoin);
346 auto roi_eta = Monitored::Collection("roi_eta", roiVec, [](const TimedMuonRoI& m) {
347 return m.muonRoI->eta();
348 });
349 roi_variables.push_back(roi_eta);
350 auto roi_eta_rpc = Monitored::Collection("roi_eta_rpc", roiVec, [](const TimedMuonRoI& m) {
351 return (m.muonRoI->getSource() == xAOD::MuonRoI::Barrel)?(m.muonRoI->eta()):(-10);
352 });
353 roi_variables.push_back(roi_eta_rpc);
354 auto roi_eta_tgc = Monitored::Collection("roi_eta_tgc", roiVec, [](const TimedMuonRoI& m) {
355 return (m.muonRoI->getSource() != xAOD::MuonRoI::Barrel)?(m.muonRoI->eta()):(-10);
356 });
357 roi_variables.push_back(roi_eta_tgc);
358 auto roi_wInnerCoinEtaUpTo1p3 = Monitored::Collection("roi_wInnerCoinEtaUpTo1p3", roiVec, [](const TimedMuonRoI& m) {
359 return (m.muonRoI->getSource() != xAOD::MuonRoI::Barrel && std::abs(m.muonRoI->eta()) < 1.3 && m.muonRoI->getInnerCoincidence());
360 });
361 roi_variables.push_back(roi_wInnerCoinEtaUpTo1p3);
362 auto roi_wInnerCoinEtaBeyond1p3 = Monitored::Collection("roi_wInnerCoinEtaBeyond1p3", roiVec, [](const TimedMuonRoI& m) {
363 return (m.muonRoI->getSource() != xAOD::MuonRoI::Barrel && std::abs(m.muonRoI->eta()) > 1.3 && m.muonRoI->getInnerCoincidence());
364 });
365 roi_variables.push_back(roi_wInnerCoinEtaBeyond1p3);
366 auto roi_eta_wInnerCoin = Monitored::Collection("roi_eta_wInnerCoin", roiVec, [](const TimedMuonRoI& m) {
367 return (m.muonRoI->getInnerCoincidence() && m.muonRoI->getSource() != xAOD::MuonRoI::Barrel)?(m.muonRoI->eta()):(-10);
368 });
369 roi_variables.push_back(roi_eta_wInnerCoin);
370 auto roi_eta_wBW3Coin = Monitored::Collection("roi_eta_wBW3Coin", roiVec, [](const TimedMuonRoI& m) {
371 return (m.muonRoI->getBW3Coincidence() && m.muonRoI->getSource() != xAOD::MuonRoI::Barrel)?(m.muonRoI->eta()):(-10);
372 });
373 roi_variables.push_back(roi_eta_wBW3Coin);
374 auto roi_eta_wInnerCoinVeto = Monitored::Collection("roi_eta_wInnerCoinVeto", roiVec, [](const TimedMuonRoI& m) {
375 return (!m.muonRoI->getInnerCoincidence() && m.muonRoI->getSource() != xAOD::MuonRoI::Barrel)?(m.muonRoI->eta()):(-10);
376 });
377 roi_variables.push_back(roi_eta_wInnerCoinVeto);
378 auto roi_eta_wBW3CoinVeto = Monitored::Collection("roi_eta_wBW3CoinVeto", roiVec, [](const TimedMuonRoI& m) {
379 return (!m.muonRoI->getBW3Coincidence() && m.muonRoI->getSource() != xAOD::MuonRoI::Barrel)?(m.muonRoI->eta()):(-10);
380 });
381 roi_variables.push_back(roi_eta_wBW3CoinVeto);
382 auto roi_phi = Monitored::Collection("roi_phi", roiVec, [](const TimedMuonRoI& m) {
383 return m.muonRoI->phi();
384 });
385 roi_variables.push_back(roi_phi);
386 auto roi_phi_sideA = Monitored::Collection("roi_phi_sideA", roiVec, [](const TimedMuonRoI& m) {
387 return ( (m.muonRoI->getHemisphere() == xAOD::MuonRoI::Positive)?(m.muonRoI->phi()):(-10) );
388 });
389 roi_variables.push_back(roi_phi_sideA);
390 auto roi_phi_sideC = Monitored::Collection("roi_phi_sideC", roiVec, [](const TimedMuonRoI& m) {
391 return ( (m.muonRoI->getHemisphere() == xAOD::MuonRoI::Negative)?(m.muonRoI->phi()):(-10) );
392 });
393 roi_variables.push_back(roi_phi_sideC);
394 auto roi_phi_rpc = Monitored::Collection("roi_phi_rpc", roiVec, [](const TimedMuonRoI& m) {
395 return (m.muonRoI->getSource() == xAOD::MuonRoI::Barrel) ? m.muonRoI->phi() : -10;
396 });
397 roi_variables.push_back(roi_phi_rpc);
398 auto roi_phi_tgc = Monitored::Collection("roi_phi_tgc", roiVec, [](const TimedMuonRoI& m) {
399 return (m.muonRoI->getSource() != xAOD::MuonRoI::Barrel) ? m.muonRoI->phi() : -10;
400 });
401 roi_variables.push_back(roi_phi_tgc);
402 auto roi_phi_wInnerCoin = Monitored::Collection("roi_phi_wInnerCoin", roiVec, [](const TimedMuonRoI& m) {
403 return (m.muonRoI->getInnerCoincidence() && m.muonRoI->getSource() != xAOD::MuonRoI::Barrel)?(m.muonRoI->phi()):(-10);;
404 });
405 roi_variables.push_back(roi_phi_wInnerCoin);
406 auto roi_phi_wBW3Coin = Monitored::Collection("roi_phi_wBW3Coin", roiVec, [](const TimedMuonRoI& m) {
407 return (m.muonRoI->getBW3Coincidence() && m.muonRoI->getSource() != xAOD::MuonRoI::Barrel)?(m.muonRoI->phi()):(-10);;
408 });
409 roi_variables.push_back(roi_phi_wBW3Coin);
410 auto roi_phi_wInnerCoinVeto = Monitored::Collection("roi_phi_wInnerCoinVeto", roiVec, [](const TimedMuonRoI& m) {
411 return (!m.muonRoI->getInnerCoincidence() && m.muonRoI->getSource() != xAOD::MuonRoI::Barrel)?(m.muonRoI->phi()):(-10);;
412 });
413 roi_variables.push_back(roi_phi_wInnerCoinVeto);
414 auto roi_phi_wBW3CoinVeto = Monitored::Collection("roi_phi_wBW3CoinVeto", roiVec, [](const TimedMuonRoI& m) {
415 return (!m.muonRoI->getBW3Coincidence() && m.muonRoI->getSource() != xAOD::MuonRoI::Barrel)?(m.muonRoI->phi()):(-10);;
416 });
417 roi_variables.push_back(roi_phi_wBW3CoinVeto);
418 auto roi_phi_wBW3Coin_sideA = Monitored::Collection("roi_phi_wBW3Coin_sideA", roiVec, [](const TimedMuonRoI& m) {
419 return (m.muonRoI->getBW3Coincidence() && m.muonRoI->getHemisphere() == xAOD::MuonRoI::Positive)?(m.muonRoI->phi()):(-10);;
420 });
421 roi_variables.push_back(roi_phi_wBW3Coin_sideA);
422 auto roi_phi_wBW3Coin_sideC = Monitored::Collection("roi_phi_wBW3Coin_sideC", roiVec, [](const TimedMuonRoI& m) {
423 return (m.muonRoI->getBW3Coincidence() && m.muonRoI->getHemisphere() == xAOD::MuonRoI::Negative)?(m.muonRoI->phi()):(-10);;
424 });
425 roi_variables.push_back(roi_phi_wBW3Coin_sideC);
426 auto roi_phi_wBW3CoinVeto_sideA = Monitored::Collection("roi_phi_wBW3CoinVeto_sideA", roiVec, [](const TimedMuonRoI& m) {
427 return (!m.muonRoI->getBW3Coincidence() && m.muonRoI->getHemisphere() == xAOD::MuonRoI::Positive)?(m.muonRoI->phi()):(-10);;
428 });
429 roi_variables.push_back(roi_phi_wBW3CoinVeto_sideA);
430 auto roi_phi_wBW3CoinVeto_sideC = Monitored::Collection("roi_phi_wBW3CoinVeto_sideC", roiVec, [](const TimedMuonRoI& m) {
431 return (!m.muonRoI->getBW3Coincidence() && m.muonRoI->getHemisphere() == xAOD::MuonRoI::Negative)?(m.muonRoI->phi()):(-10);;
432 });
433 roi_variables.push_back(roi_phi_wBW3CoinVeto_sideC);
434 auto roi_thr = Monitored::Collection("roi_thr", roiVec, [](const TimedMuonRoI& m) {
435 return m.muonRoI->getThrNumber();
436 });
437 roi_variables.push_back(roi_thr);
438 auto roi_rpc = Monitored::Collection("roi_rpc", roiVec, [](const TimedMuonRoI& m) {
439 return m.muonRoI->getSource() == xAOD::MuonRoI::Barrel;
440 });
441 roi_variables.push_back(roi_rpc);
442 auto roi_tgc = Monitored::Collection("roi_tgc", roiVec, [](const TimedMuonRoI& m) {
443 return m.muonRoI->getSource() != xAOD::MuonRoI::Barrel;
444 });
445 roi_variables.push_back(roi_tgc);
446 auto roi_barrel = Monitored::Collection("roi_barrel", roiVec, [](const TimedMuonRoI& m) {
447 return m.muonRoI->getSource() == xAOD::MuonRoI::Barrel;
448 });
449 roi_variables.push_back(roi_barrel);
450 auto roi_endcap = Monitored::Collection("roi_endcap", roiVec, [](const TimedMuonRoI& m) {
451 return m.muonRoI->getSource() == xAOD::MuonRoI::Endcap;
452 });
453 roi_variables.push_back(roi_endcap);
454 auto roi_forward = Monitored::Collection("roi_forward", roiVec, [](const TimedMuonRoI& m) {
455 return m.muonRoI->getSource() == xAOD::MuonRoI::Forward;
456 });
457 roi_variables.push_back(roi_forward);
458 auto roi_phi_barrel = Monitored::Collection("roi_phi_barrel", roiVec, [](const TimedMuonRoI& m) {
459 return (m.muonRoI->getSource() == xAOD::MuonRoI::Barrel) ? m.muonRoI->phi() : -10;
460 });
461 roi_variables.push_back(roi_phi_barrel);
462 auto roi_phi_endcap = Monitored::Collection("roi_phi_endcap", roiVec, [](const TimedMuonRoI& m) {
463 return (m.muonRoI->getSource() == xAOD::MuonRoI::Endcap) ? m.muonRoI->phi() : -10;
464 });
465 roi_variables.push_back(roi_phi_endcap);
466 auto roi_phi_forward = Monitored::Collection("roi_phi_forward", roiVec, [](const TimedMuonRoI& m) {
467 return (m.muonRoI->getSource() == xAOD::MuonRoI::Forward) ? m.muonRoI->phi() : -10;
468 });
469 roi_variables.push_back(roi_phi_forward);
470 auto roi_sideA = Monitored::Collection("roi_sideA", roiVec, [](const TimedMuonRoI& m) {
471 return m.muonRoI->getHemisphere() == xAOD::MuonRoI::Positive;
472 });
473 roi_variables.push_back(roi_sideA);
474 auto roi_sideC = Monitored::Collection("roi_sideC", roiVec, [](const TimedMuonRoI& m) {
475 return m.muonRoI->getHemisphere() == xAOD::MuonRoI::Negative;
476 });
477 roi_variables.push_back(roi_sideC);
478 auto thrmask1 = Monitored::Collection("thrmask1", roiVec, [](const TimedMuonRoI& m) {
479 return m.muonRoI->getThrNumber() == 1;
480 });
481 roi_variables.push_back(thrmask1);
482 auto thrmask2 = Monitored::Collection("thrmask2", roiVec, [](const TimedMuonRoI& m) {
483 return m.muonRoI->getThrNumber() == 2;
484 });
485 roi_variables.push_back(thrmask2);
486 auto thrmask3 = Monitored::Collection("thrmask3", roiVec, [](const TimedMuonRoI& m) {
487 return m.muonRoI->getThrNumber() == 3;
488 });
489 roi_variables.push_back(thrmask3);
490 auto thrmask4 = Monitored::Collection("thrmask4", roiVec, [](const TimedMuonRoI& m) {
491 return m.muonRoI->getThrNumber() == 4;
492 });
493 roi_variables.push_back(thrmask4);
494 auto thrmask5 = Monitored::Collection("thrmask5", roiVec, [](const TimedMuonRoI& m) {
495 return m.muonRoI->getThrNumber() == 5;
496 });
497 roi_variables.push_back(thrmask5);
498 auto thrmask6 = Monitored::Collection("thrmask6", roiVec, [](const TimedMuonRoI& m) {
499 return m.muonRoI->getThrNumber() == 6;
500 });
501 roi_variables.push_back(thrmask6);
502 auto thrmask7 = Monitored::Collection("thrmask7", roiVec, [](const TimedMuonRoI& m) {
503 return m.muonRoI->getThrNumber() == 7;
504 });
505 roi_variables.push_back(thrmask7);
506 auto thrmask8 = Monitored::Collection("thrmask8", roiVec, [](const TimedMuonRoI& m) {
507 return m.muonRoI->getThrNumber() == 8;
508 });
509 roi_variables.push_back(thrmask8);
510 auto thrmask9 = Monitored::Collection("thrmask9", roiVec, [](const TimedMuonRoI& m) {
511 return m.muonRoI->getThrNumber() == 9;
512 });
513 roi_variables.push_back(thrmask9);
514 auto thrmask10 = Monitored::Collection("thrmask10", roiVec, [](const TimedMuonRoI& m) {
515 return m.muonRoI->getThrNumber() == 10;
516 });
517 roi_variables.push_back(thrmask10);
518 auto thrmask11 = Monitored::Collection("thrmask11", roiVec, [](const TimedMuonRoI& m) {
519 return m.muonRoI->getThrNumber() == 11;
520 });
521 roi_variables.push_back(thrmask11);
522 auto thrmask12 = Monitored::Collection("thrmask12", roiVec, [](const TimedMuonRoI& m) {
523 return m.muonRoI->getThrNumber() == 12;
524 });
525 roi_variables.push_back(thrmask12);
526 auto thrmask13 = Monitored::Collection("thrmask13", roiVec, [](const TimedMuonRoI& m) {
527 return m.muonRoI->getThrNumber() == 13;
528 });
529 roi_variables.push_back(thrmask13);
530 auto thrmask14 = Monitored::Collection("thrmask14", roiVec, [](const TimedMuonRoI& m) {
531 return m.muonRoI->getThrNumber() == 14;
532 });
533 roi_variables.push_back(thrmask14);
534 auto thrmask15 = Monitored::Collection("thrmask15", roiVec, [](const TimedMuonRoI& m) {
535 return m.muonRoI->getThrNumber() == 15;
536 });
537 roi_variables.push_back(thrmask15);
538 auto roi_charge = Monitored::Collection("roi_charge", roiVec, [](const TimedMuonRoI& m) {
539 return (m.muonRoI->getCharge()==xAOD::MuonRoI::Neg)?(-1):((m.muonRoI->getCharge()==xAOD::MuonRoI::Pos)?(+1):(0));
540 });
541 roi_variables.push_back(roi_charge);
542 auto roi_bw3coin = Monitored::Collection("roi_bw3coin",roiVec,[](const TimedMuonRoI& m) {
543 return m.muonRoI->getBW3Coincidence();
544 });
545 roi_variables.push_back(roi_bw3coin);
546 auto roi_bw3coinveto = Monitored::Collection("roi_bw3coinveto",roiVec,[](const TimedMuonRoI& m) {
547 return !m.muonRoI->getBW3Coincidence() && m.muonRoI->getSource()!=xAOD::MuonRoI::Barrel;
548 });
549 roi_variables.push_back(roi_bw3coinveto);
550 auto roi_innercoin = Monitored::Collection("roi_innercoin",roiVec,[](const TimedMuonRoI& m) {
551 return m.muonRoI->getInnerCoincidence();
552 });
553 roi_variables.push_back(roi_innercoin);
554 auto roi_innveto = Monitored::Collection("roi_innveto",roiVec,[](const TimedMuonRoI& m) {
555 return !m.muonRoI->getInnerCoincidence() && m.muonRoI->getSource()!=xAOD::MuonRoI::Barrel;
556 });
557 roi_variables.push_back(roi_innveto);
558 auto roi_goodmf = Monitored::Collection("roi_goodmf",roiVec,[](const TimedMuonRoI& m) {
559 return m.muonRoI->getGoodMF();
560 });
561 roi_variables.push_back(roi_goodmf);
562 auto roi_badmf = Monitored::Collection("roi_badmf",roiVec,[](const TimedMuonRoI& m){
563 return !m.muonRoI->getGoodMF() && m.muonRoI->getSource()!=xAOD::MuonRoI::Barrel;
564 });
565 roi_variables.push_back(roi_badmf);
566 auto roi_ismorecand = Monitored::Collection("roi_ismorecand",roiVec,[](const TimedMuonRoI& m){
567 return m.muonRoI->isMoreCandInRoI();
568 });
569 roi_variables.push_back(roi_ismorecand);
570 auto roi_posCharge = Monitored::Collection("roi_posCharge",roiVec,[](const TimedMuonRoI& m){
571 return m.muonRoI->getCharge()==xAOD::MuonRoI::Pos;
572 });
573 roi_variables.push_back(roi_posCharge);
574 auto roi_negCharge = Monitored::Collection("roi_negCharge",roiVec,[](const TimedMuonRoI& m){
575 return m.muonRoI->getCharge()==xAOD::MuonRoI::Neg;
576 });
577 roi_variables.push_back(roi_negCharge);
578 fill(m_packageName, roi_variables);
579 ATH_MSG_DEBUG("End filling MuonRoI-only histograms");
580 }
581}
Declare a monitored scalar variable.
@ Endcap
The muon candidate was detected in the endcap region.
Definition MuonRoI_v1.h:35
@ Forward
The muon candidate was detected in the forward region.
Definition MuonRoI_v1.h:36
@ Positive
The candidate came from the +z side (side A).
Definition MuonRoI_v1.h:40
@ Negative
The candidate came from the -z side (side C).
Definition MuonRoI_v1.h:41

◆ fillTgcCoin()

void TgcRawDataMonitorAlgorithm::fillTgcCoin ( const std::string & type,
const std::vector< TgcTrig > & tgcTrigs,
std::vector< Monitored::ObjectsCollection< std::vector< TgcTrig >, double > > & varowner,
MonVariables & variables ) const
private

Definition at line 2490 of file TgcRawDataMonitorAlgorithm.cxx.

2493 {
2494 varowner.push_back(Monitored::Collection(type+"_coin_lb",tgcTrigs,[](const TgcTrig&m){return m.lb;}));
2495 variables.push_back(varowner.back());
2496 varowner.push_back(Monitored::Collection(type+"_coin_eta",tgcTrigs,[](const TgcTrig&m){return m.eta;}));
2497 variables.push_back(varowner.back());
2498 varowner.push_back(Monitored::Collection(type+"_coin_phi",tgcTrigs,[](const TgcTrig&m){return m.phi + tgc_coin_phi_small_offset;}));
2499 variables.push_back(varowner.back());
2500 varowner.push_back(Monitored::Collection(type+"_coin_bunch",tgcTrigs,[](const TgcTrig&m){return m.bunch;}));
2501 variables.push_back(varowner.back());
2502 varowner.push_back(Monitored::Collection(type+"_coin_roi",tgcTrigs,[](const TgcTrig&m){return m.roi;}));
2503 variables.push_back(varowner.back());
2504 varowner.push_back(Monitored::Collection(type+"_coin_sector",tgcTrigs,[](const TgcTrig&m){return m.sector;}));
2505 variables.push_back(varowner.back());
2506 varowner.push_back(Monitored::Collection(type+"_coin_pt",tgcTrigs,[](const TgcTrig&m){return m.pt & 0xF;}));
2507 variables.push_back(varowner.back());
2508 varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagQ",tgcTrigs,[](const TgcTrig&m){return m.isPositiveDeltaR;}));
2509 variables.push_back(varowner.back());
2510 varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagQpos",tgcTrigs,[](const TgcTrig&m){return m.isPositiveDeltaR==0;}));
2511 variables.push_back(varowner.back());
2512 varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagQneg",tgcTrigs,[](const TgcTrig&m){return m.isPositiveDeltaR==1;}));
2513 variables.push_back(varowner.back());
2514 varowner.push_back(Monitored::Collection(type+"_coin_CoinFlags",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlags)&0x7;}));
2515 variables.push_back(varowner.back());
2516 varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagF",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlagF)&0x1;}));
2517 variables.push_back(varowner.back());
2518 varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagC",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlagC)&0x1;}));
2519 variables.push_back(varowner.back());
2520 varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagH",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlagH)&0x1;}));
2521 variables.push_back(varowner.back());
2522 varowner.push_back(Monitored::Collection(type+"_coin_InnerCoinType",tgcTrigs,[](const TgcTrig&m){return (m.pt>>InnerCoinFlags)&0xF;}));
2523 variables.push_back(varowner.back());
2524 varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagEI",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlagEI)&0x1;}));
2525 variables.push_back(varowner.back());
2526 varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagTile",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlagTile)&0x1;}));
2527 variables.push_back(varowner.back());
2528 varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagRPC",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlagRPC)&0x1;}));
2529 variables.push_back(varowner.back());
2530 varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagNSW",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlagNSW)&0x1;}));
2531 variables.push_back(varowner.back());
2532 varowner.push_back(Monitored::Collection(type+"_coin_veto",tgcTrigs,[](const TgcTrig&m){return m.veto;}));
2533 variables.push_back(varowner.back());
2534 varowner.push_back(Monitored::Collection(type+"_coin_veto_sector",tgcTrigs,[](const TgcTrig&m){return (m.veto==1)?(m.sector):(-1);}));
2535 variables.push_back(varowner.back());
2536 varowner.push_back(Monitored::Collection(type+"_coin_veto_roi",tgcTrigs,[](const TgcTrig&m){return (m.veto==1)?(m.roi):(-1);}));
2537 variables.push_back(varowner.back());
2538 varowner.push_back(Monitored::Collection(type+"_coin_isPositiveDeltaR",tgcTrigs,[](const TgcTrig&m){return m.isPositiveDeltaR;}));
2539 variables.push_back(varowner.back());
2540 varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt1",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==1);}));
2541 variables.push_back(varowner.back());
2542 varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt2",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==2);}));
2543 variables.push_back(varowner.back());
2544 varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt3",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==3);}));
2545 variables.push_back(varowner.back());
2546 varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt4",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==4);}));
2547 variables.push_back(varowner.back());
2548 varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt5",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==5);}));
2549 variables.push_back(varowner.back());
2550 varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt6",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==6);}));
2551 variables.push_back(varowner.back());
2552 varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt7",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==7);}));
2553 variables.push_back(varowner.back());
2554 varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt8",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==8);}));
2555 variables.push_back(varowner.back());
2556 varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt9",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==9);}));
2557 variables.push_back(varowner.back());
2558 varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt10",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==10);}));
2559 variables.push_back(varowner.back());
2560 varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt11",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==11);}));
2561 variables.push_back(varowner.back());
2562 varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt12",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==12);}));
2563 variables.push_back(varowner.back());
2564 varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt13",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==13);}));
2565 variables.push_back(varowner.back());
2566 varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt14",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==14);}));
2567 variables.push_back(varowner.back());
2568 varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt15",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==15);}));
2569 variables.push_back(varowner.back());
2570}

◆ fillTgcCoinEff()

void TgcRawDataMonitorAlgorithm::fillTgcCoinEff ( const std::string & type,
const std::vector< TgcTrig > & tgcTrigs,
const std::vector< ExtPos > & extpositions_pivot,
std::vector< ExtTrigInfo > & extTrigInfoVec,
std::vector< Monitored::ObjectsCollection< std::vector< ExtTrigInfo >, double > > & varowner,
MonVariables & variables ) const
private

Definition at line 2571 of file TgcRawDataMonitorAlgorithm.cxx.

2576 {
2577 for(const auto& ext : extpositions_pivot){
2578 if(ext.muon->pt() < m_pTCutOnTrigExtrapolation.value() )continue;
2579 bool matched = false;
2580 bool matchedQ = false;
2581 bool matchedF = false;
2582 bool matchedC = false;
2583 bool matchedH = false;
2584 bool matchedEI = false;
2585 bool matchedTile = false;
2586 bool matchedRPC = false;
2587 bool matchedNSW = false;
2588 for(const auto& tgcTrig : tgcTrigs){
2589 if(tgcTrig.bunch!=0)continue; // only the current bunch
2590 if(tgcTrig.isAside==1 && ext.extPos.z()<0)continue;
2591 if(tgcTrig.isAside==0 && ext.extPos.z()>0)continue;
2592 if(tgcTrig.type == Muon::TgcCoinData::TYPE_SL){
2593 const Amg::Vector3D posOut(tgcTrig.x_Out,tgcTrig.y_Out,tgcTrig.z_Out);
2594 if( Amg::deltaR(posOut,ext.extPos) > m_l1trigMatchWindowPt15 )continue;
2595 }else{
2596 TVector2 vec(tgcTrig.x_Out,tgcTrig.y_Out);
2597 double deltaPhi = vec.DeltaPhi( TVector2(ext.extPos.x(), ext.extPos.y()) );
2598 double deltaR = vec.Mod() - TVector2(ext.extPos.x(), ext.extPos.y()).Mod();
2599 if( std::abs(deltaPhi) > m_dPhiCutOnM3 || std::abs(deltaR) > m_dRCutOnM3 )continue;
2600 }
2601 matched |= 1;
2602 int charge = (tgcTrig.isPositiveDeltaR==0) ? (-1) : (+1);
2603 matchedQ |= (ext.muon->charge()*charge>0);
2604 matchedF |= (tgcTrig.pt>>CoinFlagF) & 0x1;
2605 matchedC |= (tgcTrig.pt>>CoinFlagC) & 0x1;
2606 matchedH |= (tgcTrig.pt>>CoinFlagH) & 0x1;
2607 matchedEI |= (tgcTrig.pt>>CoinFlagEI) & 0x1;
2608 matchedTile |= (tgcTrig.pt>>CoinFlagTile) & 0x1;
2609 matchedRPC |= (tgcTrig.pt>>CoinFlagRPC) & 0x1;
2610 matchedNSW |= (tgcTrig.pt>>CoinFlagNSW) & 0x1;
2611 }
2612 ExtTrigInfo extTrigInfo;
2613 extTrigInfo.eta = ext.extPos.eta();
2614 extTrigInfo.phi = ext.extPos.phi();
2615 extTrigInfo.matched = matched;
2616 extTrigInfo.matchedQ = matchedQ;
2617 extTrigInfo.matchedF = matchedF;
2618 extTrigInfo.matchedC = matchedC;
2619 extTrigInfo.matchedH = matchedH;
2620 extTrigInfo.matchedEI = matchedEI;
2621 extTrigInfo.matchedTile = matchedTile;
2622 extTrigInfo.matchedRPC = matchedRPC;
2623 extTrigInfo.matchedNSW = matchedNSW;
2624 extTrigInfoVec.push_back(extTrigInfo);
2625 }
2626 varowner.push_back(Monitored::Collection(type+"_coin_ext_eta",extTrigInfoVec,[](const ExtTrigInfo&m){return m.eta;}));
2627 variables.push_back(varowner.back());
2628 varowner.push_back(Monitored::Collection(type+"_coin_ext_phi",extTrigInfoVec,[](const ExtTrigInfo&m){return m.phi;}));
2629 variables.push_back(varowner.back());
2630 varowner.push_back(Monitored::Collection(type+"_coin_ext_matched",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matched;}));
2631 variables.push_back(varowner.back());
2632 varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_eta",extTrigInfoVec,[](const ExtTrigInfo&m){return (m.matched)?m.eta:(-10);}));
2633 variables.push_back(varowner.back());
2634 varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_phi",extTrigInfoVec,[](const ExtTrigInfo&m){return (m.matched)?m.phi:(-10);}));
2635 variables.push_back(varowner.back());
2636 varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagQ",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedQ;}));
2637 variables.push_back(varowner.back());
2638 varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagF",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedF;}));
2639 variables.push_back(varowner.back());
2640 varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagC",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedC;}));
2641 variables.push_back(varowner.back());
2642 varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagH",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedH;}));
2643 variables.push_back(varowner.back());
2644 varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagEI",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedEI;}));
2645 variables.push_back(varowner.back());
2646 varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagTile",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedTile;}));
2647 variables.push_back(varowner.back());
2648 varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagRPC",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedRPC;}));
2649 variables.push_back(varowner.back());
2650 varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagNSW",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedNSW;}));
2651 variables.push_back(varowner.back());
2652}
Scalar deltaPhi(const MatrixBase< Derived > &vec) const
Scalar deltaR(const MatrixBase< Derived > &vec) const
double charge(const T &p)
Definition AtlasPID.h:997
std::vector< size_t > vec

◆ fillTgcPrdHistograms()

void TgcRawDataMonitorAlgorithm::fillTgcPrdHistograms ( Monitored::Scalar< int > & mon_bcid,
Monitored::Scalar< int > & mon_pileup,
Monitored::Scalar< int > & mon_lb,
std::map< std::string, std::vector< ExtPos > > & extpositions,
const EventContext & ctx ) const
private

Definition at line 2796 of file TgcRawDataMonitorAlgorithm.cxx.

2796 {
2797 if (m_anaTgcPrd) {
2798 ATH_MSG_DEBUG("m_anaTgcPrd = True");
2799 SG::ReadCondHandle<MuonGM::MuonDetectorManager> DetectorManagerHandle{m_DetectorManagerKey,ctx};
2800 const MuonGM::MuonDetectorManager* muonMgr = DetectorManagerHandle.cptr();
2801 SG::ReadHandle < Muon::TgcPrepDataContainer > tgcPrd(m_TgcPrepDataContainerKey, ctx);
2802 std::map<const xAOD::Muon*, std::set<std::string>> map_muon_and_tgchits;
2803 if(tgcPrd.isValid() && muonMgr!=nullptr){
2804 ATH_MSG_DEBUG("Filling TGC PRD histograms");
2805 const TgcIdHelper &tgcIdHelper = m_idHelperSvc->tgcIdHelper();
2806 std::vector < TGC::TgcHit > tgcHits;
2807 std::map<std::string, std::vector<TGC::TgcHit>> tgcHitsMap;
2808 for (const auto tgccnt : *tgcPrd) {
2809 for (const auto data : *tgccnt) {
2810 const MuonGM::TgcReadoutElement *element = data->detectorElement();
2811 const Identifier id = data->identify();
2812 const int gasGap = tgcIdHelper.gasGap(id);
2813 const int channel = tgcIdHelper.channel(id);
2814 const bool isStrip = tgcIdHelper.isStrip(id);
2815 const Amg::Vector3D &pos = isStrip ? element->stripPos(gasGap, channel) : element->wireGangPos(gasGap, channel);
2816 const double shortWidth = (isStrip)?(element->stripShortWidth(gasGap, channel)):(element->gangShortWidth(gasGap, channel));
2817 const double longWidth = (isStrip)?(element->stripLongWidth(gasGap, channel)):(element->gangLongWidth(gasGap, channel));
2818 const double length = (isStrip)?(element->stripLength()):(element->gangRadialLength(gasGap, channel));
2819 const int bcmask = data->getBcBitMap();
2820 TGC::TgcHit tgcHit(pos[0],pos[1],pos[2],
2821 shortWidth,longWidth, length,
2822 isStrip,gasGap,channel,tgcIdHelper.stationEta(id),tgcIdHelper.stationPhi(id),tgcIdHelper.stationName(id),
2823 bcmask);
2824 if(extpositions.find(tgcHit.cham_name())!=extpositions.end()){
2825 for(auto& cham : extpositions[tgcHit.cham_name()]){
2826 double newX = cham.extPos.x() + cham.extVec.x() / cham.extVec.z() * ( tgcHit.Z() - cham.extPos.z() );
2827 double newY = cham.extPos.y() + cham.extVec.y() / cham.extVec.z() * ( tgcHit.Z() - cham.extPos.z() );
2828 Identifier id2 = muonMgr->tgcIdHelper()->elementID(tgcHit.StationName(), tgcHit.StationEta(), tgcHit.StationPhi());
2829
2830 auto detEle = muonMgr->getTgcReadoutElement(id2);
2831 double chamPhi = detEle->center().phi();
2832 TVector2 extPos(newX,newY);
2833 TVector2 hitPos(tgcHit.X(),tgcHit.Y());
2834 TVector2 rot_extPos = extPos.Rotate(-chamPhi + M_PI/2.);
2835 TVector2 rot_hitPos = hitPos.Rotate(-chamPhi + M_PI/2.);
2836 double res = (tgcHit.isStrip())? std::sin( rot_extPos.DeltaPhi( rot_hitPos ) ) * rot_extPos.Mod(): rot_hitPos.Y() - rot_extPos.Y();
2837 tgcHit.addResidual( cham.muon, res );
2838 if( std::abs(res) < m_residualWindow ){
2839 cham.chambersHasHit.insert(tgcHit.type_name());
2840 map_muon_and_tgchits[cham.muon].insert(tgcHit.channel_name());
2841 }
2842 }
2843 }
2844 tgcHits.push_back(tgcHit);
2845 tgcHitsMap[tgcHit.cham_name() + ( (tgcHit.isStrip())?("S"):("W") )].push_back(tgcHit); // <- chamber-by-chamber residual plots
2846 tgcHitsMap[tgcHit.type_name()].push_back(tgcHit); // <- gap-by-gap channel occupancy plots
2847 }
2848 }
2849
2850 std::map<std::string, std::vector<int>> tgcHitPhiMap;
2851 std::map<std::string, std::vector<int>> tgcHitEtaMap;
2852 std::map<std::string, std::vector<int>> tgcHitPhiMapGlobal;
2853 std::map<std::string, std::vector<int>> tgcHitPhiMapOnline;
2854 std::map<std::string, std::vector<int>> tgcHitEtaMapOnline;
2855 std::map<std::string, std::vector<int>> tgcHitPhiMapGlobalOnline;
2856 std::map<std::string, std::vector<int>> tgcHitTiming;
2857 std::map<std::string, std::vector<int>> tgcHitPhiMapGlobalWithTrack;
2858 std::map<std::string, std::vector<int>> tgcHitTimingWithTrack;
2859 std::map<const std::string, std::vector<TGC::TgcHit>> tgcHitBCMaskMap;
2860 std::vector <int> vec_bw24sectors; // 1..12 BW-A, -1..-12 BW-C
2861 std::vector <int> vec_bw24sectors_wire;
2862 std::vector <int> vec_bw24sectors_strip;
2863 std::vector <int> vec_bwfulleta; // 0(Forward), 1..4(M1), 1..5(M2,M3)
2864 std::vector <int> vec_bwfulleta_wire;
2865 std::vector <int> vec_bwfulleta_strip;
2866 std::vector <int> vec_bwtiming;
2867 std::vector <int> vec_bwtiming_wire;
2868 std::vector <int> vec_bwtiming_strip;
2869 std::vector <int> vec_bw24sectors_wTrack; // 1..12 BW-A, -1..-12 BW-C
2870 std::vector <int> vec_bw24sectors_wire_wTrack;
2871 std::vector <int> vec_bw24sectors_strip_wTrack;
2872 std::vector <int> vec_bwfulleta_wTrack; // 0(Forward), 1..4(M1), 1..5(M2,M3)
2873 std::vector <int> vec_bwfulleta_wire_wTrack;
2874 std::vector <int> vec_bwfulleta_strip_wTrack;
2875 std::vector <int> vec_bwtiming_wTrack;
2876 std::vector <int> vec_bwtiming_wire_wTrack;
2877 std::vector <int> vec_bwtiming_strip_wTrack;
2878 for(const auto& tgcHit : tgcHits){
2879 bool hasAssociatedGoodMuonTrack = false;
2880 for(const auto& res : tgcHit.residuals()){
2881 const xAOD::Muon* muon = res.first;
2882 if(map_muon_and_tgchits[muon].find(tgcHit.channel_name()) == map_muon_and_tgchits[muon].end()) continue;
2883 int nWhits = 0;
2884 int nShits = 0;
2885 for(const auto& chamHasHit : map_muon_and_tgchits[muon]){
2886 if( chamHasHit.find(tgcHit.gap_name()) != std::string::npos ) continue; // skipping the same gap
2887 if( chamHasHit.find("M04") != std::string::npos ) continue; // skipping EI/FI
2888 if( chamHasHit.find('W') != std::string::npos ) nWhits++;
2889 if( chamHasHit.find('S') != std::string::npos ) nShits++;
2890 }
2891 if(nWhits < m_nHitsInOtherBWTGCWire) continue;
2892 if(nShits < m_nHitsInOtherBWTGCStrip) continue;
2893 hasAssociatedGoodMuonTrack = true;
2894 break;
2895 }
2896
2897 // debugging purpose: should be False by default
2898 if(m_dumpFullChannelList)ATH_MSG_INFO("TGCHIT: " << tgcHit.channel_name());
2899
2900 // BCID analysis for TGC TTCrx delay scan
2901 if(hasAssociatedGoodMuonTrack) tgcHitBCMaskMap[tgcHit.channel_name()].push_back(tgcHit);
2902
2903 std::string station_name = Form("%sM%02d%s",(tgcHit.iSide()==TGC::TGCSIDE::TGCASIDE)?("A"):("C"),tgcHit.iM(),(tgcHit.isStrip())?("S"):("W"));
2904 int phimap_index = 0;
2905 int etamap_index = 0;
2906 int phimap_global_index = 0; // no empty bins compare to the above index
2907 m_tgcMonTool->getMapIndex(tgcHit,etamap_index,phimap_index,phimap_global_index );
2908 int phimap_index_online = 0;
2909 int etamap_index_online = 0;
2910 int phimap_global_index_online = 0;
2911 m_tgcMonTool->getMapIndexOnline(tgcHit.type_name(),etamap_index_online,phimap_index_online,phimap_global_index_online );
2912 std::string wire_or_strip = (tgcHit.type_name().size()==16) ? Form("%c_%s",tgcHit.type_name()[0],(tgcHit.type_name()[15]=='W')?("wire"):("strip")) : "null";
2913 for(int bunch = -1 ; bunch <= +1 ; bunch++){
2914 if(bunch==-1 && (tgcHit.bcmask()&Muon::TgcPrepData::BCBIT_PREVIOUS)==0)continue;
2915 if(bunch== 0 && (tgcHit.bcmask()&Muon::TgcPrepData::BCBIT_CURRENT)==0)continue;
2916 if(bunch==+1 && (tgcHit.bcmask()&Muon::TgcPrepData::BCBIT_NEXT)==0)continue;
2917 tgcHitPhiMap[station_name].push_back(phimap_index);
2918 tgcHitEtaMap[station_name].push_back(etamap_index);
2919 tgcHitPhiMapGlobal[station_name].push_back(phimap_global_index);
2920 tgcHitTiming[station_name].push_back(bunch);
2921 tgcHitPhiMapOnline[wire_or_strip].push_back(phimap_index_online);
2922 tgcHitEtaMapOnline[wire_or_strip].push_back(etamap_index_online);
2923 tgcHitPhiMapGlobalOnline[wire_or_strip].push_back(phimap_global_index_online);
2924 if(hasAssociatedGoodMuonTrack){
2925 tgcHitPhiMapGlobalWithTrack[station_name].push_back(phimap_global_index);
2926 tgcHitTimingWithTrack[station_name].push_back(bunch);
2927 }
2928
2929 if(tgcHit.iM()!=4){
2930 vec_bw24sectors.push_back((tgcHit.iSide()==TGC::TGCSIDE::TGCASIDE)?(tgcHit.iSec()):(-tgcHit.iSec()));
2931 vec_bwfulleta.push_back(tgcHit.iEta());
2932 vec_bwtiming.push_back(bunch);
2933 if(hasAssociatedGoodMuonTrack){
2934 vec_bw24sectors_wTrack.push_back((tgcHit.iSide()==TGC::TGCSIDE::TGCASIDE)?(tgcHit.iSec()):(-tgcHit.iSec()));
2935 vec_bwfulleta_wTrack.push_back(tgcHit.iEta());
2936 vec_bwtiming_wTrack.push_back(bunch);
2937 }
2938 if(tgcHit.isStrip()){
2939 vec_bw24sectors_strip.push_back((tgcHit.iSide()==TGC::TGCSIDE::TGCASIDE)?(tgcHit.iSec()):(-tgcHit.iSec()));
2940 vec_bwfulleta_strip.push_back(tgcHit.iEta());
2941 vec_bwtiming_strip.push_back(bunch);
2942 if(hasAssociatedGoodMuonTrack){
2943 vec_bw24sectors_strip_wTrack.push_back((tgcHit.iSide()==TGC::TGCSIDE::TGCASIDE)?(tgcHit.iSec()):(-tgcHit.iSec()));
2944 vec_bwfulleta_strip_wTrack.push_back(tgcHit.iEta());
2945 vec_bwtiming_strip_wTrack.push_back(bunch);
2946 }
2947 }else{
2948 vec_bw24sectors_wire.push_back((tgcHit.iSide()==TGC::TGCSIDE::TGCASIDE)?(tgcHit.iSec()):(-tgcHit.iSec()));
2949 vec_bwfulleta_wire.push_back(tgcHit.iEta());
2950 vec_bwtiming_wire.push_back(bunch);
2951 if(hasAssociatedGoodMuonTrack){
2952 vec_bw24sectors_wire_wTrack.push_back((tgcHit.iSide()==TGC::TGCSIDE::TGCASIDE)?(tgcHit.iSec()):(-tgcHit.iSec()));
2953 vec_bwfulleta_wire_wTrack.push_back(tgcHit.iEta());
2954 vec_bwtiming_wire_wTrack.push_back(bunch);
2955 }
2956 }
2957 }
2958 }
2959 }
2960
2961 ATH_MSG_DEBUG("filling hit_variables");
2962
2963 MonVariables hit_variables;
2964 hit_variables.push_back(mon_bcid);
2965 hit_variables.push_back(mon_pileup);
2966 hit_variables.push_back(mon_lb);
2967
2968 auto hit_n = Monitored::Scalar<int>("hit_n", tgcHits.size());
2969 hit_variables.push_back(hit_n);
2970
2971 auto hit_bcmask=Monitored::Collection("hit_bcmask",tgcHits,[](const TGC::TgcHit&m){return m.bcmask();});
2972 hit_variables.push_back(hit_bcmask);
2973
2974 auto hit_sideA=Monitored::Collection("hit_sideA",tgcHits,[](const TGC::TgcHit&m){return m.Z()>0;});
2975 hit_variables.push_back(hit_sideA);
2976
2977 auto hit_sideC=Monitored::Collection("hit_sideC",tgcHits,[](const TGC::TgcHit&m){return m.Z() < 0;});
2978 hit_variables.push_back(hit_sideC);
2979
2980 auto hit_bw24sectors=Monitored::Collection("hit_bw24sectors",vec_bw24sectors,[](const int&m){return m;});
2981 hit_variables.push_back(hit_bw24sectors);
2982 auto hit_bw24sectors_strip=Monitored::Collection("hit_bw24sectors_strip",vec_bw24sectors_strip,[](const int&m){return m;});
2983 hit_variables.push_back(hit_bw24sectors_strip);
2984 auto hit_bw24sectors_wire=Monitored::Collection("hit_bw24sectors_wire",vec_bw24sectors_wire,[](const int&m){return m;});
2985 hit_variables.push_back(hit_bw24sectors_wire);
2986 auto hit_bwfulleta=Monitored::Collection("hit_bwfulleta",vec_bwfulleta,[](const int&m){return m;});
2987 hit_variables.push_back(hit_bwfulleta);
2988 auto hit_bwfulleta_strip=Monitored::Collection("hit_bwfulleta_strip",vec_bwfulleta_strip,[](const int&m){return m;});
2989 hit_variables.push_back(hit_bwfulleta_strip);
2990 auto hit_bwfulleta_wire=Monitored::Collection("hit_bwfulleta_wire",vec_bwfulleta_wire,[](const int&m){return m;});
2991 hit_variables.push_back(hit_bwfulleta_wire);
2992 auto hit_bwtiming=Monitored::Collection("hit_bwtiming",vec_bwtiming,[](const int&m){return m;});
2993 hit_variables.push_back(hit_bwtiming);
2994 auto hit_bwtiming_strip=Monitored::Collection("hit_bwtiming_strip",vec_bwtiming_strip,[](const int&m){return m;});
2995 hit_variables.push_back(hit_bwtiming_strip);
2996 auto hit_bwtiming_wire=Monitored::Collection("hit_bwtiming_wire",vec_bwtiming_wire,[](const int&m){return m;});
2997 hit_variables.push_back(hit_bwtiming_wire);
2998
2999 auto hit_bw24sectors_wTrack=Monitored::Collection("hit_bw24sectors_wTrack",vec_bw24sectors_wTrack,[](const int&m){return m;});
3000 hit_variables.push_back(hit_bw24sectors_wTrack);
3001 auto hit_bw24sectors_strip_wTrack=Monitored::Collection("hit_bw24sectors_strip_wTrack",vec_bw24sectors_strip_wTrack,[](const int&m){return m;});
3002 hit_variables.push_back(hit_bw24sectors_strip_wTrack);
3003 auto hit_bw24sectors_wire_wTrack=Monitored::Collection("hit_bw24sectors_wire_wTrack",vec_bw24sectors_wire_wTrack,[](const int&m){return m;});
3004 hit_variables.push_back(hit_bw24sectors_wire_wTrack);
3005 auto hit_bwfulleta_wTrack=Monitored::Collection("hit_bwfulleta_wTrack",vec_bwfulleta_wTrack,[](const int&m){return m;});
3006 hit_variables.push_back(hit_bwfulleta_wTrack);
3007 auto hit_bwfulleta_strip_wTrack=Monitored::Collection("hit_bwfulleta_strip_wTrack",vec_bwfulleta_strip_wTrack,[](const int&m){return m;});
3008 hit_variables.push_back(hit_bwfulleta_strip_wTrack);
3009 auto hit_bwfulleta_wire_wTrack=Monitored::Collection("hit_bwfulleta_wire_wTrack",vec_bwfulleta_wire_wTrack,[](const int&m){return m;});
3010 hit_variables.push_back(hit_bwfulleta_wire_wTrack);
3011 auto hit_bwtiming_wTrack=Monitored::Collection("hit_bwtiming_wTrack",vec_bwtiming_wTrack,[](const int&m){return m;});
3012 hit_variables.push_back(hit_bwtiming_wTrack);
3013 auto hit_bwtiming_strip_wTrack=Monitored::Collection("hit_bwtiming_strip_wTrack",vec_bwtiming_strip_wTrack,[](const int&m){return m;});
3014 hit_variables.push_back(hit_bwtiming_strip_wTrack);
3015 auto hit_bwtiming_wire_wTrack=Monitored::Collection("hit_bwtiming_wire_wTrack",vec_bwtiming_wire_wTrack,[](const int&m){return m;});
3016 hit_variables.push_back(hit_bwtiming_wire_wTrack);
3017
3018 std::vector<Monitored::ObjectsCollection<std::vector<int>, double>> varowner;
3019 varowner.reserve(tgcHitPhiMap.size() * 2 + tgcHitPhiMapGlobal.size() * 2 + tgcHitPhiMapOnline.size() * 3 + tgcHitPhiMapGlobalWithTrack.size() * 2);
3020 for (const auto &phimap : tgcHitPhiMap) {
3021 varowner.push_back(Monitored::Collection(Form("hit_x_%s",phimap.first.data()),tgcHitEtaMap[phimap.first],[](const int&m){return m;}));
3022 hit_variables.push_back(varowner.back());
3023 varowner.push_back(Monitored::Collection(Form("hit_y_%s", phimap.first.data()),phimap.second,[](const int&m){return m;}));
3024 hit_variables.push_back(varowner.back());
3025 }
3026 for (const auto &phimap : tgcHitPhiMapOnline) {
3027 varowner.push_back(Monitored::Collection(Form("hit_online_x_%s",phimap.first.data()),tgcHitEtaMapOnline[phimap.first],[](const int&m){return m;}));
3028 hit_variables.push_back(varowner.back());
3029 varowner.push_back(Monitored::Collection(Form("hit_online_y_%s", phimap.first.data()),phimap.second,[](const int&m){return m;}));
3030 hit_variables.push_back(varowner.back());
3031 varowner.push_back(Monitored::Collection(Form("hit_online_glblphi_%s", phimap.first.data()),tgcHitPhiMapGlobalOnline[phimap.first],[](const int&m){return m;}));
3032 hit_variables.push_back(varowner.back());
3033 }
3034
3035 for (const auto &phimap : tgcHitPhiMapGlobal) {
3036 varowner.push_back(Monitored::Collection(Form("hit_glblphi_%s", phimap.first.data()),phimap.second,[](const int&m){return m;}));
3037 hit_variables.push_back(varowner.back());
3038 varowner.push_back(Monitored::Collection(Form("hit_bunch_%s", phimap.first.data()),tgcHitTiming[phimap.first],[](const int&m){return m;}));
3039 hit_variables.push_back(varowner.back());
3040 }
3041 for (const auto &phimap : tgcHitPhiMapGlobalWithTrack) {
3042 varowner.push_back(Monitored::Collection(Form("hit_glblphi_wTrack_%s", phimap.first.data()),phimap.second,[](const int&m){return m;}));
3043 hit_variables.push_back(varowner.back());
3044 varowner.push_back(Monitored::Collection(Form("hit_bunch_wTrack_%s", phimap.first.data()),tgcHitTimingWithTrack[phimap.first],[](const int&m){return m;}));
3045 hit_variables.push_back(varowner.back());
3046 }
3047
3048 // BCMask plots (for TTCrx gate delay scan)
3049 std::map<std::string, std::vector<int>> tgcHitBCMaskGlobalIndex;
3050 std::map<std::string, std::vector<int>> tgcHitBCMask;
3051 std::map<std::string, std::vector<int>> tgcHitBCMaskBWSectors;
3052 std::map<std::string, std::vector<int>> tgcHitBCMaskForBWSectors;
3053 for(const auto& channelNameAndBCMask : tgcHitBCMaskMap){
3054 if(m_maskChannelList.find(channelNameAndBCMask.first)!=m_maskChannelList.end())continue; // skipping problematic channels
3055 std::string chamberNameWithWS = channelNameAndBCMask.first.substr(0,16); // e.g. A01M01f01E01L01W
3056 int thisChannel = std::atoi( channelNameAndBCMask.first.substr(18,3).data() ); // e.g. 001 of "Ch001"
3057 std::string prev1ChannelName = Form("%sCh%03d",chamberNameWithWS.data(),thisChannel-1);
3058 std::string next1ChannelName = Form("%sCh%03d",chamberNameWithWS.data(),thisChannel+1);
3059 // vetoing if neighboring channels have hits to avoid cross-talk effect
3060 if(tgcHitBCMaskMap.find(prev1ChannelName)!=tgcHitBCMaskMap.end())continue;
3061 if(tgcHitBCMaskMap.find(next1ChannelName)!=tgcHitBCMaskMap.end())continue;
3062 std::string cham_name = channelNameAndBCMask.first.substr(0,12); // e.g. A01M01f01E01
3063 int iLay = std::atoi( channelNameAndBCMask.first.substr(13,2).data() );
3064 TGC::TgcChamber cham; cham.initChamber(cham_name);
3065 int phimap_index = 0;
3066 int etamap_index = 0;
3067 int phimap_global_index = 0;
3068 if(!m_tgcMonTool->getMapIndex(cham,iLay,etamap_index,phimap_index,phimap_global_index ))continue;
3069 std::string station_name = Form("%sM%02d%s",(cham.iSide()==TGC::TGCSIDE::TGCASIDE)?("A"):("C"),cham.iM(),channelNameAndBCMask.first.substr(15,1).data());
3070 for(const auto& tgcHit : channelNameAndBCMask.second){
3071 tgcHitBCMaskGlobalIndex[station_name].push_back(phimap_global_index);
3072 tgcHitBCMask[station_name].push_back(tgcHit.bcmask());
3073 if(cham.iM()!=4){
3074 tgcHitBCMaskBWSectors["All"].push_back( (cham.iSide()==TGC::TGCSIDE::TGCASIDE)?( +1 * cham.iSec() ):(-1 * cham.iSec()) );
3075 tgcHitBCMaskForBWSectors["All"].push_back(tgcHit.bcmask());
3076 if(chamberNameWithWS.find('W')!=std::string::npos){
3077 tgcHitBCMaskBWSectors["Wire"].push_back( (cham.iSide()==TGC::TGCSIDE::TGCASIDE)?( +1 * cham.iSec() ):(-1 * cham.iSec()) );
3078 tgcHitBCMaskForBWSectors["Wire"].push_back(tgcHit.bcmask());
3079 }else{
3080 tgcHitBCMaskBWSectors["Strip"].push_back( (cham.iSide()==TGC::TGCSIDE::TGCASIDE)?( +1 * cham.iSec() ):(-1 * cham.iSec()) );
3081 tgcHitBCMaskForBWSectors["Strip"].push_back(tgcHit.bcmask());
3082 }
3083 }
3084 }
3085 }
3086 std::vector<Monitored::ObjectsCollection<std::vector<int>, double>> varowner_bcmask;
3087 varowner_bcmask.reserve(tgcHitBCMask.size() * 2 + tgcHitBCMaskBWSectors.size() * 2);
3088 for(const auto& chamType : tgcHitBCMaskBWSectors){
3089 varowner_bcmask.push_back(Monitored::Collection(Form("hit_bcmask_bw24sectors_%s",chamType.first.data()),chamType.second,[](const int&m){return m;}));
3090 hit_variables.push_back(varowner_bcmask.back());
3091 varowner_bcmask.push_back(Monitored::Collection(Form("hit_bcmask_for_bw24sectors_%s",chamType.first.data()),tgcHitBCMaskForBWSectors[chamType.first],[](const int&m){return m;}));
3092 hit_variables.push_back(varowner_bcmask.back());
3093 }
3094 for(const auto& stationNameAndBCMask : tgcHitBCMask){
3095 varowner_bcmask.push_back(Monitored::Collection(Form("hit_bcmask_glblphi_%s",stationNameAndBCMask.first.data()),tgcHitBCMaskGlobalIndex[stationNameAndBCMask.first],[](const int&m){return m;}));
3096 hit_variables.push_back(varowner_bcmask.back());
3097 varowner_bcmask.push_back(Monitored::Collection(Form("hit_bcmask_%s",stationNameAndBCMask.first.data()),stationNameAndBCMask.second,[](const int&m){return m;}));
3098 hit_variables.push_back(varowner_bcmask.back());
3099 }
3100
3101 // gap-by-gap efficiency by track extrapolation
3102 ATH_MSG_DEBUG("preparing for efficiency plots");
3103 std::map<std::string, std::vector<double>> tgcEffPhiMap_Denominator;
3104 std::map<std::string, std::vector<double>> tgcEffEtaMap_Denominator;
3105 std::map<std::string, std::vector<double>> tgcEffPhiMapGlobal_Denominator;
3106 std::map<std::string, std::vector<double>> tgcEffPhiMap_Numerator;
3107 std::map<std::string, std::vector<double>> tgcEffEtaMap_Numerator;
3108 std::map<std::string, std::vector<double>> tgcEffPhiMapGlobal_Numerator;
3109 std::map<std::string, std::vector<double>> tgcEffPhiMapOnline_Denominator;
3110 std::map<std::string, std::vector<double>> tgcEffEtaMapOnline_Denominator;
3111 std::map<std::string, std::vector<double>> tgcEffPhiMapGlobalOnline_Denominator;
3112 std::map<std::string, std::vector<double>> tgcEffPhiMapOnline_Numerator;
3113 std::map<std::string, std::vector<double>> tgcEffEtaMapOnline_Numerator;
3114 std::map<std::string, std::vector<double>> tgcEffPhiMapGlobalOnline_Numerator;
3115 std::map<std::string, std::vector<double>> tgcEffMapExtX;
3116 std::map<std::string, std::vector<double>> tgcEffMapExtY;
3117 std::map<std::string, std::vector<double>> tgcEffMapHasHit;
3118 for(const auto& exts : extpositions){
3119 const std::string& cham_name = exts.first;
3120 TGC::TgcChamber cham; cham.initChamber(cham_name);
3121 // local-coordinate x'-y'
3122 Identifier id2 = muonMgr->tgcIdHelper()->elementID(cham.StationName(), cham.StationEta(), cham.StationPhi());
3123 auto detEle = muonMgr->getTgcReadoutElement(id2);
3124 for(const auto& ext : exts.second){ // how often tracks are extrapolated to this chamber surface,e.i. denominator
3125 Amg::Vector3D extPosLocal = detEle->transform().inverse() * ext.extPos;
3126 Amg::Vector3D extVecLocal = detEle->transform().inverse() * ext.extVec;
3127 for(int iLay = 1 ; iLay <= 3 ; iLay++){
3128 int phimap_index = 0;
3129 int etamap_index = 0;
3130 int phimap_global_index = 0;
3131 if(!m_tgcMonTool->getMapIndex(cham,iLay,etamap_index,phimap_index,phimap_global_index ))continue;
3132
3133 double newX = extPosLocal.x() - extVecLocal.x() / extVecLocal.z() * extPosLocal.z();
3134 double newY = extPosLocal.y() - extVecLocal.y() / extVecLocal.z() * extPosLocal.z();
3135 for(int iSorW = 0 ; iSorW < 2 ; iSorW++){
3136 if(cham.iM()==1 && iLay==2 && iSorW==0)continue;
3137 std::string gap_name = Form("%sL%02d",cham_name.data(),iLay);
3138 std::string type_name = Form("%sL%02d%s",cham_name.data(),iLay,(iSorW==0)?("S"):("W"));
3139 int nWhits = 0;
3140 int nShits = 0;
3141 for(const auto& chamHasHit : map_muon_and_tgchits[ext.muon]){
3142 if( chamHasHit.find(gap_name) != std::string::npos ) continue; // skipping the same gap
3143 if( chamHasHit.find("M04") != std::string::npos ) continue; // skipping EI/FI
3144 if( chamHasHit.find('W') != std::string::npos ) nWhits++;
3145 if( chamHasHit.find('S') != std::string::npos ) nShits++;
3146 }
3147 if(nWhits < m_nHitsInOtherBWTGCWire)continue;
3148 if(nShits < m_nHitsInOtherBWTGCStrip)continue;
3149 std::string station_name = Form("%sM%02d%s",(cham.iSide()==TGC::TGCSIDE::TGCASIDE)?("A"):("C"),cham.iM(),(iSorW==0)?("S"):("W"));
3150 int phimap_index_online = 0;
3151 int etamap_index_online = 0;
3152 int phimap_global_index_online = 0;
3153 m_tgcMonTool->getMapIndexOnline(type_name,etamap_index_online,phimap_index_online,phimap_global_index_online );
3154 std::string wire_or_strip = (type_name.size()==16) ? Form("%c_%s",type_name[0],(type_name[15]=='W')?("wire"):("strip")) : ("null");
3155 tgcEffPhiMap_Denominator[station_name].push_back(phimap_index);
3156 tgcEffEtaMap_Denominator[station_name].push_back(etamap_index);
3157 tgcEffPhiMapGlobal_Denominator[station_name].push_back(phimap_global_index);
3158 tgcEffPhiMapOnline_Denominator[wire_or_strip].push_back(phimap_index_online);
3159 tgcEffEtaMapOnline_Denominator[wire_or_strip].push_back(etamap_index_online);
3160 tgcEffPhiMapGlobalOnline_Denominator[wire_or_strip].push_back(phimap_global_index_online);
3161 tgcEffMapExtX[type_name].push_back(newX);
3162 tgcEffMapExtY[type_name].push_back(newY);
3163 double hitExist = 0;
3164 if( ext.chambersHasHit.find(type_name) != ext.chambersHasHit.end()) hitExist=1;
3165 tgcEffPhiMap_Numerator[station_name].push_back(hitExist);
3166 tgcEffEtaMap_Numerator[station_name].push_back(hitExist);
3167 tgcEffPhiMapGlobal_Numerator[station_name].push_back(hitExist);
3168 tgcEffPhiMapOnline_Numerator[wire_or_strip].push_back(hitExist);
3169 tgcEffEtaMapOnline_Numerator[wire_or_strip].push_back(hitExist);
3170 tgcEffPhiMapGlobalOnline_Numerator[wire_or_strip].push_back(hitExist);
3171 tgcEffMapHasHit[type_name].push_back(hitExist);
3172
3173 }
3174 }
3175 }
3176 }
3177
3178 std::vector<Monitored::ObjectsCollection<std::vector<double>, double>> varowner_hiteff;
3179 std::vector<Monitored::ObjectsCollection<std::vector<TGC::TgcHit>, double>> varowner_eachchamber;
3180 std::vector<Monitored::ObjectsCollection<std::vector<double>, double>> varowner_eachchamber_double;
3181 std::map<std::string,std::vector<double>> cham_and_res;
3182
3183 if(m_fillGapByGapHistograms){
3184
3185 ATH_MSG_DEBUG("hit efficiency plots");
3186 varowner_hiteff.reserve(tgcEffPhiMap_Denominator.size() * 4 + tgcEffPhiMapGlobal_Denominator.size() * 2 + tgcEffMapHasHit.size() * 3 + tgcEffPhiMapOnline_Denominator.size() * 6);
3187 for (const auto &phimap : tgcEffPhiMap_Denominator) {
3188 varowner_hiteff.push_back(Monitored::Collection(Form("hit_effden_x_%s",phimap.first.data()),tgcEffEtaMap_Denominator[phimap.first],[](const double&m){return m;}));
3189 hit_variables.push_back(varowner_hiteff.back());
3190 varowner_hiteff.push_back(Monitored::Collection(Form("hit_effden_y_%s", phimap.first.data()),tgcEffPhiMap_Denominator[phimap.first],[](const double&m){return m;}));
3191 hit_variables.push_back(varowner_hiteff.back());
3192 varowner_hiteff.push_back(Monitored::Collection(Form("hit_effnum_x_%s",phimap.first.data()),tgcEffEtaMap_Numerator[phimap.first],[](const double&m){return m;}));
3193 hit_variables.push_back(varowner_hiteff.back());
3194 varowner_hiteff.push_back(Monitored::Collection(Form("hit_effnum_y_%s", phimap.first.data()),tgcEffPhiMap_Numerator[phimap.first],[](const double&m){return m;}));
3195 hit_variables.push_back(varowner_hiteff.back());
3196 }
3197 for (const auto &phimap : tgcEffPhiMapGlobal_Denominator) {
3198 varowner_hiteff.push_back(Monitored::Collection(Form("hit_glblphi_effden_%s", phimap.first.data()),tgcEffPhiMapGlobal_Denominator[phimap.first],[](const double&m){return m;}));
3199 hit_variables.push_back(varowner_hiteff.back());
3200 varowner_hiteff.push_back(Monitored::Collection(Form("hit_glblphi_effnum_%s", phimap.first.data()),tgcEffPhiMapGlobal_Numerator[phimap.first],[](const double&m){return m;}));
3201 hit_variables.push_back(varowner_hiteff.back());
3202 }
3203 for (const auto &phimap : tgcEffPhiMapOnline_Denominator) {
3204 varowner_hiteff.push_back(Monitored::Collection(Form("hit_online_effden_x_%s",phimap.first.data()),tgcEffEtaMapOnline_Denominator[phimap.first],[](const double&m){return m;}));
3205 hit_variables.push_back(varowner_hiteff.back());
3206 varowner_hiteff.push_back(Monitored::Collection(Form("hit_online_effden_y_%s", phimap.first.data()),tgcEffPhiMapOnline_Denominator[phimap.first],[](const double&m){return m;}));
3207 hit_variables.push_back(varowner_hiteff.back());
3208 varowner_hiteff.push_back(Monitored::Collection(Form("hit_online_effnum_x_%s",phimap.first.data()),tgcEffEtaMapOnline_Numerator[phimap.first],[](const double&m){return m;}));
3209 hit_variables.push_back(varowner_hiteff.back());
3210 varowner_hiteff.push_back(Monitored::Collection(Form("hit_online_effnum_y_%s", phimap.first.data()),tgcEffPhiMapOnline_Numerator[phimap.first],[](const double&m){return m;}));
3211 hit_variables.push_back(varowner_hiteff.back());
3212 varowner_hiteff.push_back(Monitored::Collection(Form("hit_online_glblphi_effden_%s", phimap.first.data()),tgcEffPhiMapGlobalOnline_Denominator[phimap.first],[](const double&m){return m;}));
3213 hit_variables.push_back(varowner_hiteff.back());
3214 varowner_hiteff.push_back(Monitored::Collection(Form("hit_online_glblphi_effnum_%s", phimap.first.data()),tgcEffPhiMapGlobalOnline_Numerator[phimap.first],[](const double&m){return m;}));
3215 hit_variables.push_back(varowner_hiteff.back());
3216 }
3217 for(const auto& hiteffmap : tgcEffMapHasHit){
3218 varowner_hiteff.push_back(Monitored::Collection(Form("hit_localX_effden_%s", hiteffmap.first.data()),tgcEffMapExtX[hiteffmap.first],[](const double&m){return m;}));
3219 hit_variables.push_back(varowner_hiteff.back());
3220 varowner_hiteff.push_back(Monitored::Collection(Form("hit_localY_effden_%s", hiteffmap.first.data()),tgcEffMapExtY[hiteffmap.first],[](const double&m){return m;}));
3221 hit_variables.push_back(varowner_hiteff.back());
3222 varowner_hiteff.push_back(Monitored::Collection(Form("hit_effnum_%s", hiteffmap.first.data()),tgcEffMapHasHit[hiteffmap.first],[](const double&m){return m;}));
3223 hit_variables.push_back(varowner_hiteff.back());
3224 }
3225
3226 ATH_MSG_DEBUG("gap-by-gap occupancy plots and residual plots");
3227 varowner_eachchamber.reserve(tgcHitsMap.size());
3228 varowner_eachchamber_double.reserve(tgcHitsMap.size());
3229 for (const auto &tgcHitMap : tgcHitsMap) {
3230 auto chanName = tgcHitMap.first;
3231 if(chanName.find('L')!=std::string::npos){ // individual gaps
3232 varowner_eachchamber.push_back(Monitored::Collection(Form("hit_on_%s",chanName.data()),tgcHitMap.second,[](const TGC::TgcHit&m){return m.channel();}));
3233 hit_variables.push_back(varowner_eachchamber.back());
3234 }else{ // only summed over the gaps
3235 for(const auto&tgcHit:tgcHitMap.second){
3236 for(const auto&tgcRes:tgcHit.residuals()){
3237 cham_and_res[chanName].push_back(tgcRes.second);
3238 }
3239 }
3240 varowner_eachchamber_double.push_back(Monitored::Collection(Form("hit_residual_on_%s",chanName.data()),cham_and_res[chanName],[](const double&m){return m;}));
3241 hit_variables.push_back(varowner_eachchamber_double.back());
3242 }
3243 }
3244
3245 }
3246
3247 ATH_MSG_DEBUG("before fill for hits");
3248 fill(m_packageName+"_TgcHit", hit_variables);
3249 ATH_MSG_DEBUG("End filling TGC PRD histograms");
3250 }else{
3251 ATH_MSG_WARNING("Couldn't get TGC PRD");
3252 }
3253 }
3254}
#define M_PI
#define ATH_MSG_INFO(x)
double length(const pvec &v)
std::pair< std::vector< unsigned int >, bool > res
size_t size() const
Number of registered mappings.
virtual const Amg::Vector3D & center() const override
Return the center of the element.
The MuonDetectorManager stores the transient representation of the Muon Spectrometer geometry and pro...
const TgcReadoutElement * getTgcReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
A TgcReadoutElement corresponds to a single TGC chamber; therefore typically a TGC station contains s...
double stripLength() const
Returns the length of each strip which is equal to the height of the chamber.
double gangShortWidth(int gasGap, int gang) const
Returns the length of the most bottom wire in the gang.
double gangLongWidth(int gasGap, int gang) const
Returns the length of the most top wire in the gang.
Amg::Vector3D stripPos(int gasGap, int strip) const
Returns the global position of a strip.
double gangRadialLength(int gasGap, int gang) const
Returns the length of the wire gang along the radial direction [pitch x N_{wire}^{gang}...
Amg::Vector3D wireGangPos(const Identifier &id) const
Returns the global position of a wireGang.
int stationEta(const Identifier &id) const
int stationPhi(const Identifier &id) const
int stationName(const Identifier &id) const
const_pointer_type cptr()
const int & StationPhi() const
Definition TgcChamber.h:52
const int & iM() const
Definition TgcChamber.h:47
const int & StationName() const
Definition TgcChamber.h:50
const int & StationEta() const
Definition TgcChamber.h:51
void initChamber(const std::string &chamber_name)
Definition TgcChamber.cxx:8
const int & iSec() const
Definition TgcChamber.h:46
const TGCSIDE & iSide() const
Definition TgcChamber.h:44
Identifier elementID(int stationName, int stationEta, int stationPhi) const
int channel(const Identifier &id) const override
int gasGap(const Identifier &id) const override
get the hashes
int isStrip(const Identifier &id) const
isStrip corresponds to measuresPhi
std::set< std::string > m_maskChannelList
std::string find(const std::string &s)
return a remapped string
Definition hcg.cxx:140
str station_name
Simple script to generate a BIS78 cabling map as used for the Monte Carlo processing.

◆ fillThresholdPatternHistograms()

void TgcRawDataMonitorAlgorithm::fillThresholdPatternHistograms ( std::map< std::string, std::vector< const xAOD::MuonRoI * > > & menuAndRoIs,
const std::vector< TimedMuon > & mymuons,
const EventContext & ctx ) const
private

Definition at line 2670 of file TgcRawDataMonitorAlgorithm.cxx.

2670 {
2671 if(m_monitorThresholdPatterns){
2672 for(const auto& item : m_thrMonList){
2673 std::vector<bool> passed;
2674 passed.reserve(mymuons.size());
2675 for(const auto& mymuon : mymuons){
2676 passed.push_back( mymuon.matchedL1Items.find(item) != mymuon.matchedL1Items.end() );
2677 }
2678 auto passed_rois = menuAndRoIs[item];
2679
2680 MonVariables thrMonVariables;
2681
2682 auto lumiBlock_l1item = Monitored::Scalar<int>(Form("lumiBlock_l1item_%s",item.data()),GetEventInfo(ctx)->lumiBlock());
2683 thrMonVariables.push_back(lumiBlock_l1item);
2684
2685 auto muon_passed_l1item = Monitored::Collection(Form("muon_passed_l1item_%s",item.data()),passed);
2686 thrMonVariables.push_back(muon_passed_l1item);
2687
2688 auto muon_eta_l1item=Monitored::Collection(Form("muon_eta_l1item_%s",item.data()),mymuons,[](const TimedMuon&m){
2689 return (m.muon->pt() > pt_30_cut) ? m.muon->eta() : -10;
2690 });
2691 thrMonVariables.push_back(muon_eta_l1item);
2692 auto muon_phi_l1item=Monitored::Collection(Form("muon_phi_l1item_%s",item.data()),mymuons,[](const TimedMuon&m){
2693 return (m.muon->pt() > pt_30_cut) ? m.muon->phi() : -10;
2694 });
2695 thrMonVariables.push_back(muon_phi_l1item);
2696 auto muon_pt_rpc_l1item=Monitored::Collection(Form("muon_pt_rpc_l1item_%s",item.data()),mymuons,[](const TimedMuon&m){
2697 return (std::abs(m.muon->eta()) < barrel_end) ? m.muon->pt() / Gaudi::Units::GeV : -10;
2698 });
2699 thrMonVariables.push_back(muon_pt_rpc_l1item);
2700 auto muon_pt_tgc_l1item=Monitored::Collection(Form("muon_pt_tgc_l1item_%s",item.data()),mymuons,[](const TimedMuon&m){
2701 return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end) ? m.muon->pt() / Gaudi::Units::GeV : -10;
2702 });
2703 thrMonVariables.push_back(muon_pt_tgc_l1item);
2704 auto muon_phi_rpc_l1item=Monitored::Collection(Form("muon_phi_rpc_l1item_%s",item.data()),mymuons,[](const TimedMuon&m){
2705 return (std::abs(m.muon->eta()) < barrel_end && m.muon->pt() > pt_30_cut) ? m.muon->phi() : -10;
2706 });
2707 thrMonVariables.push_back(muon_phi_rpc_l1item);
2708 auto muon_phi_tgc_l1item=Monitored::Collection(Form("muon_phi_tgc_l1item_%s",item.data()),mymuons,[](const TimedMuon&m){
2709 return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end && m.muon->pt() > pt_30_cut) ? m.muon->phi() : -10;
2710 });
2711 thrMonVariables.push_back(muon_phi_tgc_l1item);
2712
2713 auto l1item_roi_eta=Monitored::Collection(Form("l1item_roi_eta_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){return m->eta();});
2714 thrMonVariables.push_back(l1item_roi_eta);
2715 auto l1item_roi_phi=Monitored::Collection(Form("l1item_roi_phi_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){return m->phi();});
2716 thrMonVariables.push_back(l1item_roi_phi);
2717 auto l1item_roi_phi_rpc=Monitored::Collection(Form("l1item_roi_phi_rpc_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2718 return (m->getSource()==xAOD::MuonRoI::Barrel)?(m->phi()):(-10);
2719 });
2720 auto l1item_roi_phi_tgc=Monitored::Collection(Form("l1item_roi_phi_tgc_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2721 return (m->getSource()!=xAOD::MuonRoI::Barrel)?(m->phi()):(-10);
2722 });
2723 thrMonVariables.push_back(l1item_roi_phi_tgc);
2724
2725 auto l1item_roi_phi_barrel=Monitored::Collection(Form("l1item_roi_phi_barrel_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2726 return (m->getSource() == xAOD::MuonRoI::Barrel) ? m->phi() : -10;
2727 });
2728 thrMonVariables.push_back(l1item_roi_phi_barrel);
2729 auto l1item_roi_phi_endcap=Monitored::Collection(Form("l1item_roi_phi_endcap_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2730 return (m->getSource() == xAOD::MuonRoI::Endcap) ? m->phi() : -10;
2731 });
2732 thrMonVariables.push_back(l1item_roi_phi_endcap);
2733 auto l1item_roi_phi_forward=Monitored::Collection(Form("l1item_roi_phi_forward_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2734 return (m->getSource() == xAOD::MuonRoI::Forward) ? m->phi() : -10;
2735 });
2736 thrMonVariables.push_back(l1item_roi_phi_forward);
2737 auto l1item_roi_sideA=Monitored::Collection(Form("l1item_roi_sideA_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2738 return m->getHemisphere() == xAOD::MuonRoI::Positive;
2739 });
2740 thrMonVariables.push_back(l1item_roi_sideA);
2741 auto l1item_roi_sideC=Monitored::Collection(Form("l1item_roi_sideC_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2742 return m->getHemisphere() == xAOD::MuonRoI::Negative;
2743 });
2744 thrMonVariables.push_back(l1item_roi_sideC);
2745
2746 auto l1item_roi_roiNumber=Monitored::Collection(Form("l1item_roi_roiNumber_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2747 return m->getRoI();
2748 });
2749 thrMonVariables.push_back(l1item_roi_roiNumber);
2750
2751 auto l1item_roi_sector = Monitored::Collection(Form("l1item_roi_sector_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m) {
2752 return (m->getHemisphere() == xAOD::MuonRoI::Positive)?(m->getSectorID()+1):(-1 * m->getSectorID()-1);
2753 });
2754 thrMonVariables.push_back(l1item_roi_sector);
2755 auto l1item_roi_barrel = Monitored::Collection(Form("l1item_roi_barrel_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m) {
2756 return m->getSource() == xAOD::MuonRoI::Barrel;
2757 });
2758 thrMonVariables.push_back(l1item_roi_barrel);
2759 auto l1item_roi_endcap = Monitored::Collection(Form("l1item_roi_endcap_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m) {
2760 return m->getSource() == xAOD::MuonRoI::Endcap;
2761 });
2762 thrMonVariables.push_back(l1item_roi_endcap);
2763 auto l1item_roi_forward = Monitored::Collection(Form("l1item_roi_forward_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m) {
2764 return m->getSource() == xAOD::MuonRoI::Forward;
2765 });
2766 thrMonVariables.push_back(l1item_roi_forward);
2767 auto l1item_roi_thrNumber=Monitored::Collection(Form("l1item_roi_thrNumber_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2768 return m->getThrNumber();
2769 });
2770 thrMonVariables.push_back(l1item_roi_thrNumber);
2771
2772 auto l1item_roi_ismorecand=Monitored::Collection(Form("l1item_roi_ismorecand_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2773 return (m->getSource()==xAOD::MuonRoI::Barrel)?(m->isMoreCandInRoI()):(-1);
2774 });
2775 thrMonVariables.push_back(l1item_roi_ismorecand);
2776 auto l1item_roi_bw3coin=Monitored::Collection(Form("l1item_roi_bw3coin_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2777 return (m->getSource()!=xAOD::MuonRoI::Barrel)?(m->getBW3Coincidence()):(-1);
2778 });
2779 thrMonVariables.push_back(l1item_roi_bw3coin);
2780 auto l1item_roi_innercoin=Monitored::Collection(Form("l1item_roi_innercoin_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2781 return (m->getSource()!=xAOD::MuonRoI::Barrel)?(m->getInnerCoincidence()):(-1);
2782 });
2783 thrMonVariables.push_back(l1item_roi_innercoin);
2784 auto l1item_roi_goodmf=Monitored::Collection(Form("l1item_roi_goodmf_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2785 return (m->getSource()!=xAOD::MuonRoI::Barrel)?(m->getGoodMF()):(-1);
2786 });
2787 thrMonVariables.push_back(l1item_roi_goodmf);
2788
2789 fill(m_packageName + item.data(), thrMonVariables);
2790 }
2791 }
2793}

◆ filterPassed()

virtual bool AthCommonReentrantAlgorithm< Gaudi::Algorithm >::filterPassed ( const EventContext & ctx) const
inlinevirtualinherited

Definition at line 96 of file AthCommonReentrantAlgorithm.h.

96 {
97 return execState( ctx ).filterPassed();
98 }
virtual bool filterPassed(const EventContext &ctx) const

◆ GetEventInfo()

SG::ReadHandle< xAOD::EventInfo > AthMonitorAlgorithm::GetEventInfo ( const EventContext & ctx) const
inherited

Return a ReadHandle for an EventInfo object (get run/event numbers, etc.).

Parameters
ctxEventContext for the event
Returns
a SG::ReadHandle<xAOD::EventInfo>

Definition at line 111 of file AthMonitorAlgorithm.cxx.

111 {
112 return SG::ReadHandle<xAOD::EventInfo>(m_EventInfoKey, ctx);
113}
SG::ReadHandleKey< xAOD::EventInfo > m_EventInfoKey
Key for retrieving EventInfo from StoreGate.

◆ getGroup()

const ToolHandle< GenericMonitoringTool > & AthMonitorAlgorithm::getGroup ( const std::string & name) const
inherited

Get a specific monitoring tool from the tool handle array.

Finds a specific GenericMonitoringTool instance from the list of monitoring tools (a ToolHandleArray). Throws a FATAL warning if the object found is empty.

Parameters
namestring name of the desired tool
Returns
reference to the desired monitoring tool

Definition at line 168 of file AthMonitorAlgorithm.cxx.

168 {
169 // get the pointer to the tool, and check that it exists
170 auto idx = m_toolLookupMap.find(name);
171 //Check if the tool exists in the map
172 if (ATH_LIKELY(idx != m_toolLookupMap.end())) {
173 return m_tools[idx->second];
174 }
175 else {
176 //Check if the map is empty
177 if (m_toolLookupMap.empty()) {
178 ATH_MSG_FATAL("The m_toolLookupMap is empty. The tool " << name << " cannot be found in an empty map.");
179 return m_dummy;
180 }
181 //If the map is not empty and the tool was not found, print a fatal error
182 if (!m_toolLookupMap.empty()) {
183 std::string available = std::accumulate(
184 m_toolLookupMap.begin(), m_toolLookupMap.end(), std::string(""),
185 [](const std::string& s, auto h) { return s + "," + h.first; });
186 ATH_MSG_FATAL("The tool " << name << " could not be found in the tool array of the "
187 << "monitoring algorithm " << m_name << ". This probably reflects a discrepancy between "
188 << "your python configuration and c++ filling code. Note: your available groups are {"
189 << available << "}.");
190
191 return m_dummy;
192 }
193 if (!isInitialized()) {
195 "It seems that the AthMonitorAlgorithm::initialize was not called "
196 "in derived class initialize method, group name: " << name);
197 }
198 }
199 return m_dummy;
200}
#define ATH_MSG_FATAL(x)
#define ATH_LIKELY(x)
std::unordered_map< std::string, size_t > m_toolLookupMap
const ToolHandle< GenericMonitoringTool > m_dummy
ToolHandleArray< GenericMonitoringTool > m_tools
Array of Generic Monitoring Tools.

◆ getMatchingWindow()

double TgcRawDataMonitorAlgorithm::getMatchingWindow ( const xAOD::Muon * muon) const
private

Definition at line 2659 of file TgcRawDataMonitorAlgorithm.cxx.

2659 {
2660 // matching window
2661 double max_dr = 999;
2662 double pt = muon->pt();
2663 if (pt > pt_15_cut) max_dr = m_l1trigMatchWindowPt15;
2664 else if (pt > pt_10_cut) max_dr = m_l1trigMatchWindowPt10a + m_l1trigMatchWindowPt10b * pt / Gaudi::Units::GeV;
2665 else max_dr = m_l1trigMatchWindowPt0a + m_l1trigMatchWindowPt0b * pt / Gaudi::Units::GeV;
2666 return max_dr;
2667}

◆ getNswRindexFromEta()

double TgcRawDataMonitorAlgorithm::getNswRindexFromEta ( const double & eta) const

Definition at line 2653 of file TgcRawDataMonitorAlgorithm.cxx.

2653 {
2654 double theta = 2.0 * std::atan( std::exp(-1.0 * std::abs(eta)) );
2655 double r = std::tan( theta ) * nsw_z;
2656 double rindex = (r - nsw_rmin) / nsw_rindex_step;
2657 return rindex;
2658}
Scalar eta() const
pseudorapidity method
Scalar theta() const
theta method
int r
Definition globals.cxx:22

◆ getPrimaryVertex()

const xAOD::Vertex * TgcRawDataMonitorAlgorithm::getPrimaryVertex ( const EventContext & ctx) const
private

Definition at line 223 of file TgcRawDataMonitorAlgorithm.cxx.

223 {
224 const xAOD::Vertex* primVertex = nullptr;
225 if(!m_PrimaryVertexContainerKey.empty()){
226 SG::ReadHandle <xAOD::VertexContainer> primVtxContainer(m_PrimaryVertexContainerKey, ctx);
227 if(primVtxContainer.isValid()){
228 for(const auto vtx : *primVtxContainer){
229 if(vtx->vertexType() == xAOD::VxType::VertexType::PriVtx){
230 primVertex = vtx;
231 break;
232 }
233 }
234 }
235 }
236 return primVertex;
237}
@ PriVtx
Primary vertex.

◆ getRegionsOfInterest()

std::vector< TgcRawDataMonitorAlgorithm::TimedMuonRoI > TgcRawDataMonitorAlgorithm::getRegionsOfInterest ( const EventContext & ctx) const
private

Definition at line 240 of file TgcRawDataMonitorAlgorithm.cxx.

240 {
241std::vector<TimedMuonRoI> AllBCMuonRoIs;
242 if (m_anaMuonRoI) {
243 ATH_MSG_DEBUG("Getting MuonRoI pointer");
244 /* raw LVL1MuonRoIs distributions */
245 bool isRun3 = false;
246 if (!m_MuonRoIContainerKey.empty()){
247 SG::ReadHandle<xAOD::MuonRoIContainer > handle( m_MuonRoIContainerKey, ctx);
248 if(handle.isValid()) {
249 for(const auto roi : *handle.cptr()){
250 isRun3 = roi->isRun3();
251 TimedMuonRoI myMuonRoI(roi);// current BC
252 AllBCMuonRoIs.push_back(myMuonRoI);
253 }
254 }
255 }
256 if(isRun3){
258 SG::ReadHandle<xAOD::MuonRoIContainer > handle( m_MuonRoIContainerBCm2Key, ctx);
259 if(handle.isValid()) {
260 for(const auto roi : *handle.cptr()){
261 TimedMuonRoI myMuonRoI(roi,-2);
262 AllBCMuonRoIs.push_back(myMuonRoI);
263 }
264 }
265 }
267 SG::ReadHandle<xAOD::MuonRoIContainer > handle( m_MuonRoIContainerBCm1Key, ctx);
268 if(handle.isValid()) {
269 for(const auto roi : *handle.cptr()){
270 TimedMuonRoI myMuonRoI(roi,-1);
271 AllBCMuonRoIs.push_back(myMuonRoI);
272 }
273 }
274 }
276 SG::ReadHandle<xAOD::MuonRoIContainer > handle( m_MuonRoIContainerBCp1Key, ctx);
277 if(handle.isValid()) {
278 for(const auto roi : *handle.cptr()){
279 TimedMuonRoI myMuonRoI(roi,+1);
280 AllBCMuonRoIs.push_back(myMuonRoI);
281 }
282 }
283 }
285 SG::ReadHandle<xAOD::MuonRoIContainer > handle( m_MuonRoIContainerBCp2Key, ctx);
286 if(handle.isValid()) {
287 for(const auto roi : *handle.cptr()){
288 const TimedMuonRoI myMuonRoI(roi,+2);
289 AllBCMuonRoIs.push_back(myMuonRoI);
290 }
291 }
292 }
293 }
294 }
295 return AllBCMuonRoIs;
296}
bool empty() const
Test if the key is blank.
SG::ReadHandleKey< xAOD::MuonRoIContainer > m_MuonRoIContainerBCm2Key
SG::ReadHandleKey< xAOD::MuonRoIContainer > m_MuonRoIContainerBCm1Key
SG::ReadHandleKey< xAOD::MuonRoIContainer > m_MuonRoIContainerBCp2Key
SG::ReadHandleKey< xAOD::MuonRoIContainer > m_MuonRoIContainerBCp1Key
virtual void handle(const Incident &inc)
Handle end of run incidents to save the metadata at that point.

◆ getTrigDecisionTool()

const ToolHandle< Trig::TrigDecisionTool > & AthMonitorAlgorithm::getTrigDecisionTool ( ) const
inherited

Get the trigger decision tool member.

The trigger decision tool is used to check whether a specific trigger is passed by an event.

Returns
m_trigDecTool

Definition at line 203 of file AthMonitorAlgorithm.cxx.

203 {
204 return m_trigDecTool;
205}

◆ initialize()

StatusCode TgcRawDataMonitorAlgorithm::initialize ( )
overridevirtual

initialize

Returns
StatusCode

Reimplemented from AthMonitorAlgorithm.

Definition at line 42 of file TgcRawDataMonitorAlgorithm.cxx.

42 {
43 ATH_MSG_DEBUG("initialize()");
45 ATH_CHECK(m_DetectorManagerKey.initialize());
46 ATH_CHECK(m_MuonContainerKey.initialize(SG::AllowEmpty));
47 ATH_CHECK(m_MuonRoIContainerKey.initialize(SG::AllowEmpty));
48 ATH_CHECK(m_MuonRoIContainerBCm2Key.initialize(SG::AllowEmpty));
49 ATH_CHECK(m_MuonRoIContainerBCm1Key.initialize(SG::AllowEmpty));
50 ATH_CHECK(m_MuonRoIContainerBCp1Key.initialize(SG::AllowEmpty));
51 ATH_CHECK(m_MuonRoIContainerBCp2Key.initialize(SG::AllowEmpty));
52 ATH_CHECK(m_TgcPrepDataContainerKey.initialize(SG::AllowEmpty));
53 ATH_CHECK(m_TgcCoinDataContainerCurrBCKey.initialize(SG::AllowEmpty));
54 ATH_CHECK(m_TgcCoinDataContainerNextBCKey.initialize(SG::AllowEmpty));
55 ATH_CHECK(m_TgcCoinDataContainerNextNextBCKey.initialize(SG::AllowEmpty));
56 ATH_CHECK(m_TgcCoinDataContainerPrevBCKey.initialize(SG::AllowEmpty));
57 ATH_CHECK(m_PrimaryVertexContainerKey.initialize(SG::AllowEmpty));
58
59 ATH_CHECK(m_extrapolator.retrieve(DisableTool{m_extrapolator.empty()}));
60 ATH_CHECK(m_tgcMonTool.retrieve(DisableTool{m_tgcMonTool.empty()}));
61 ATH_CHECK(m_muonSelectionTool.retrieve(DisableTool{m_muonSelectionTool.empty()}));
62 ATH_CHECK(m_GoodRunsListSelectorTool.retrieve(DisableTool{m_GoodRunsListSelectorTool.empty()}));
63
64 ATH_CHECK(m_L1MenuKey.initialize()); // ReadHandleKey, but DetStore (so renounce)
65 renounce(m_L1MenuKey);
66 ATH_CHECK(m_thresholdPatternsKey.initialize(m_monitorThresholdPatterns));
67
68 m_extZposition.push_back(m_M1_Z);
69 m_extZposition.push_back(m_M2_Z);
70 m_extZposition.push_back(m_M3_Z);
71 m_extZposition.push_back(m_EI_Z);
72 m_extZposition.push_back(m_FI_Z);
73 m_extZposition.push_back(-m_M1_Z);
74 m_extZposition.push_back(-m_M2_Z);
75 m_extZposition.push_back(-m_M3_Z);
76 m_extZposition.push_back(-m_EI_Z);
77 m_extZposition.push_back(-m_FI_Z);
78
79
80 if(m_ctpDecMonList!=""){
81 m_CtpDecMonObj.clear();
82 TString Str = m_ctpDecMonList.value();// format="Tit:L1_MU20_Run3,Mul:1,HLT:HLT_mu26_ivarmedium_L1MU20,RPC:6,TGC:12FCH;"
83 std::unique_ptr<TObjArray> monTrigs( Str.Tokenize(";") );
84 for(int i = 0 ; i < monTrigs->GetEntries() ; i++){
85 TString monTrig = monTrigs->At(i)->GetName();
86 if(monTrig.IsNull())continue;
87 CtpDecMonObj monObj;
88 monObj.trigItem = monObj.title = "dummy";
89 monObj.rpcThr=monObj.tgcThr=monObj.multiplicity=0;
90 monObj.tgcF=monObj.tgcC=monObj.tgcH=monObj.rpcR=monObj.rpcM=false;
91 std::unique_ptr<TObjArray> monElement( monTrig.Tokenize(",") );
92 for(int j = 0 ; j < monElement->GetEntries() ; j++){
93 std::string sysItem = monElement->At(j)->GetName();
94 if(sysItem.empty())continue;
95 std::string item = sysItem.substr(4,sysItem.size());// remove "Tit:", "CTP:", "HLT:", "RPC:", "TGC:"
96 if(sysItem.starts_with( "Tit")){
97 monObj.title = item;
98 }else if(sysItem.starts_with( "Mul")){
99 monObj.multiplicity = std::atoi(item.data());
100 }else if(sysItem.starts_with( "CTP")|| sysItem.starts_with( "HLT")){
101 monObj.trigItem = item;
102 }else if(sysItem.starts_with( "RPC")){
103 monObj.rpcThr = std::atoi(item.data());
104 monObj.rpcR = (item.find('R')!=std::string::npos);
105 monObj.rpcM = (item.find('M')!=std::string::npos);
106 }else if(sysItem.starts_with( "TGC")){
107 monObj.tgcThr = std::atoi(item.data());
108 monObj.tgcF = (item.find('F')!=std::string::npos);
109 monObj.tgcC = (item.find('C')!=std::string::npos);
110 monObj.tgcH = (item.find('H')!=std::string::npos);
111 }
112 }
113 m_CtpDecMonObj.push_back(monObj);
114 }
115 }
116
117 if(m_thrPatternList!=""){
118 m_thrMonList.clear();
119 TString Str = m_thrPatternList.value();
120 std::unique_ptr<TObjArray> arr( Str.Tokenize(",") );
121 for(int i = 0 ; i < arr->GetEntries() ; i++){
122 std::string name = arr->At(i)->GetName();
123 if(!name.starts_with( "MU"))continue;
124 m_thrMonList.insert(name);
125 }
126 }
127
128 if(m_maskChannelFileName!=""){
129 ATH_MSG_INFO("Opening mask channel file: " << m_maskChannelFileName);
130 std::ifstream fi(m_maskChannelFileName);
131 if(fi){
132 std::string str;
133 while(getline(fi,str)){
134 m_maskChannelList.insert(str);
135 }
136 }
137 ATH_MSG_INFO("Number of mask channels = " << m_maskChannelList.size());
138 fi.close();
139 }
140
141 return StatusCode::SUCCESS;
142}
#define ATH_CHECK
Evaluate an expression and check for errors.
virtual StatusCode initialize() override
initialize
StatusCode initialize(bool used=true)
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
std::vector< CtpDecMonObj > m_CtpDecMonObj

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ isClonable()

◆ msg()

MsgStream & AthCommonMsg< Gaudi::Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< Gaudi::Algorithm >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ parseList()

StatusCode AthMonitorAlgorithm::parseList ( const std::string & line,
std::vector< std::string > & result ) const
virtualinherited

Parse a string into a vector.

The input string is a single long string of all of the trigger names. It parses this string and turns it into a vector, where each element is one trigger or trigger category.

Parameters
lineThe input string.
resultThe parsed output vector of strings.
Returns
StatusCode

Definition at line 350 of file AthMonitorAlgorithm.cxx.

350 {
351 std::string item;
352 std::stringstream ss(line);
353
354 ATH_MSG_DEBUG( "AthMonitorAlgorithm::parseList()" );
355
356 while ( std::getline(ss, item, ',') ) {
357 std::stringstream iss(item); // remove whitespace
358 iss >> item;
359 result.push_back(item);
360 }
361
362 return StatusCode::SUCCESS;
363}
static Double_t ss

◆ printOutAvailableMuonTriggers()

StatusCode TgcRawDataMonitorAlgorithm::printOutAvailableMuonTriggers ( ) const
private

Definition at line 145 of file TgcRawDataMonitorAlgorithm.cxx.

145 {
146 // Print out all available muon triggers
147 // This is to be used when making a list of triggers
148 // to be monitored, and writted in .py config file
149 // The defult should be FALSE
150 if( m_printAvailableMuonTriggers ){
151 ATH_MSG_DEBUG("printAvailableMuonTriggers");
152 if( getTrigDecisionTool().empty() ){
153 ATH_MSG_ERROR("TDT is not availeble");
154 return StatusCode::FAILURE;
155 }else{
156 std::set<std::string> available_muon_triggers;
157 auto chainGroup = getTrigDecisionTool()->getChainGroup(".*");
158 if( chainGroup != nullptr ){
159 auto triggerList = chainGroup->getListOfTriggers();
160 if( !triggerList.empty() ){
161 for(const auto &trig : triggerList) {
162 std::string thisTrig = trig;
163 if( thisTrig.find("mu")==std::string::npos && thisTrig.find("MU")==std::string::npos)continue;
164 if(getTrigDecisionTool()->getNavigationFormat() == "TriggerElement") { // run 2 access
165 auto fc = getTrigDecisionTool()->features(thisTrig.data(),TrigDefs::alsoDeactivateTEs);
166 for(const auto& comb : fc.getCombinations()){
167 auto initRoIs = comb.get<TrigRoiDescriptor>("initialRoI",TrigDefs::alsoDeactivateTEs);
168 for(const auto& roi : initRoIs){
169 if( roi.empty() )continue;
170 if( roi.cptr()==nullptr ) continue;
171 // found an available muon trigger here
172 available_muon_triggers.insert(thisTrig);
173 }
174 }
175 }else{ // run 3 access
176 auto initialRoIs = getTrigDecisionTool()->features<TrigRoiDescriptorCollection>(thisTrig.data(), TrigDefs::includeFailedDecisions, "", TrigDefs::lastFeatureOfType, "initialRoI");
177 for(const auto& roiLinkInfo : initialRoIs) {
178 if( !roiLinkInfo.isValid() )continue;
179 auto roiEL = roiLinkInfo.link;
180 if( !roiEL.isValid() )continue;
181 auto roi = *roiEL;
182 if( roi==nullptr ) continue;
183 // found an available muon trigger here
184 available_muon_triggers.insert(thisTrig);
185 }
186 }
187 }
188 }
189 }
190 for(const auto& trig : available_muon_triggers){
191 ATH_MSG_INFO("Available Muon Trigger: " << trig);
192 }
193 }
194 }
195 return StatusCode::SUCCESS;
196}

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ setFilterPassed()

virtual void AthCommonReentrantAlgorithm< Gaudi::Algorithm >::setFilterPassed ( bool state,
const EventContext & ctx ) const
inlinevirtualinherited

Definition at line 100 of file AthCommonReentrantAlgorithm.h.

100 {
102 }
virtual void setFilterPassed(bool state, const EventContext &ctx) const

◆ sysExecute()

StatusCode AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysExecute ( const EventContext & ctx)
overridevirtualinherited

Execute an algorithm.

We override this in order to work around an issue with the Algorithm base class storing the event context in a member variable that can cause crashes in MT jobs.

Definition at line 85 of file AthCommonReentrantAlgorithm.cxx.

75{
76 return BaseAlg::sysExecute (ctx);
77}

◆ sysInitialize()

StatusCode AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >.

Reimplemented in HypoBase, and InputMakerBase.

Definition at line 61 of file AthCommonReentrantAlgorithm.cxx.

105 {
107
108 if (sc.isFailure()) {
109 return sc;
110 }
111
112 ServiceHandle<ICondSvc> cs("CondSvc",name());
113 for (auto h : outputHandles()) {
114 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
115 // do this inside the loop so we don't create the CondSvc until needed
116 if ( cs.retrieve().isFailure() ) {
117 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
118 return StatusCode::SUCCESS;
119 }
120 if (cs->regHandle(this,*h).isFailure()) {
122 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
123 << " with CondSvc");
124 }
125 }
126 }
127 return sc;
128}
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ trigChainsArePassed()

bool AthMonitorAlgorithm::trigChainsArePassed ( const std::vector< std::string > & vTrigNames) const
inherited

Check whether triggers are passed.

For the event, use the trigger decision tool to check that at least one of the triggers listed in the supplied vector is passed.

Parameters
vTrigNamesList of trigger names.
Returns
If empty input, default to true. If at least one trigger is specified, returns whether at least one trigger was passed.

Definition at line 208 of file AthMonitorAlgorithm.cxx.

208 {
209
210
211 // If no triggers were given, return true.
212 if (vTrigNames.empty()) return true;
213
214
215 // Trigger: Check if this Algorithm is being run as an Express Stream job.
216 // Events are entering the express stream are chosen randomly, and by chain,
217 // Hence an additional check should be aplied to see if the chain(s)
218 // monitored here are responsible for the event being selected for
219 // the express stream.
220
221 const auto group = m_trigDecTool->getChainGroup(vTrigNames);
223 const auto passedBits = m_trigDecTool->isPassedBits(group);
224 bool expressPass = passedBits & TrigDefs::Express_passed; //bitwise AND
225 if(!expressPass) {
226 return false;
227 }
228 }
229
230 // monitor the event if any of the chains in the chain group passes the event.
231 return group->isPassed();
232
233}
Gaudi::Property< bool > m_enforceExpressTriggers

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }

Member Data Documentation

◆ cfg

TgcRawDataMonitorAlgorithm.cfg = MainServicesCfg(flags)

Definition at line 1556 of file TgcRawDataMonitorAlgorithm.py.

◆ doExpressProcessing

TgcRawDataMonitorAlgorithm.doExpressProcessing

Definition at line 1577 of file TgcRawDataMonitorAlgorithm.py.

◆ False

TgcRawDataMonitorAlgorithm.False

Definition at line 1597 of file TgcRawDataMonitorAlgorithm.py.

◆ Files

TgcRawDataMonitorAlgorithm.Files

Definition at line 1541 of file TgcRawDataMonitorAlgorithm.py.

◆ FillGapByGapHistograms

TgcRawDataMonitorAlgorithm.FillGapByGapHistograms

Definition at line 1565 of file TgcRawDataMonitorAlgorithm.py.

◆ flags

TgcRawDataMonitorAlgorithm.flags = initConfigFlags()

Definition at line 1533 of file TgcRawDataMonitorAlgorithm.py.

◆ flags_dummy

TgcRawDataMonitorAlgorithm.flags_dummy = initConfigFlags()

Definition at line 1588 of file TgcRawDataMonitorAlgorithm.py.

◆ GlobalTag

TgcRawDataMonitorAlgorithm.GlobalTag

Definition at line 1549 of file TgcRawDataMonitorAlgorithm.py.

◆ GoodRunsListVec

TgcRawDataMonitorAlgorithm.GoodRunsListVec

Definition at line 1586 of file TgcRawDataMonitorAlgorithm.py.

◆ GRLTool

TgcRawDataMonitorAlgorithm.GRLTool

Definition at line 1585 of file TgcRawDataMonitorAlgorithm.py.

◆ HISTFileName

TgcRawDataMonitorAlgorithm.HISTFileName

Definition at line 1542 of file TgcRawDataMonitorAlgorithm.py.

◆ inputs

TgcRawDataMonitorAlgorithm.inputs = sys.argv[1].split(',')

Definition at line 1540 of file TgcRawDataMonitorAlgorithm.py.

◆ isMC

TgcRawDataMonitorAlgorithm.isMC

Definition at line 1534 of file TgcRawDataMonitorAlgorithm.py.

◆ IsolationWindow

TgcRawDataMonitorAlgorithm.IsolationWindow

Definition at line 1570 of file TgcRawDataMonitorAlgorithm.py.

◆ m_anaMuonRoI

BooleanProperty TgcRawDataMonitorAlgorithm::m_anaMuonRoI {this,"AnaMuonRoI",true,"switch to perform analysis on xAOD::LVL1MuonRoI"}
private

Definition at line 272 of file TgcRawDataMonitorAlgorithm.h.

272{this,"AnaMuonRoI",true,"switch to perform analysis on xAOD::LVL1MuonRoI"};

◆ m_anaOfflMuon

BooleanProperty TgcRawDataMonitorAlgorithm::m_anaOfflMuon {this,"AnaOfflMuon",true,"switch to perform analysis on xAOD::Muon"}
private

Definition at line 268 of file TgcRawDataMonitorAlgorithm.h.

268{this,"AnaOfflMuon",true,"switch to perform analysis on xAOD::Muon"};

◆ m_anaTgcCoin

BooleanProperty TgcRawDataMonitorAlgorithm::m_anaTgcCoin {this,"AnaTgcCoin",false,"switch to perform analysis on TGC Coin"}
private

Definition at line 266 of file TgcRawDataMonitorAlgorithm.h.

266{this,"AnaTgcCoin",false,"switch to perform analysis on TGC Coin"};

◆ m_anaTgcPrd

BooleanProperty TgcRawDataMonitorAlgorithm::m_anaTgcPrd {this,"AnaTgcPrd",false,"switch to perform analysis on TGC PRD"}
private

Definition at line 265 of file TgcRawDataMonitorAlgorithm.h.

265{this,"AnaTgcPrd",false,"switch to perform analysis on TGC PRD"};

◆ m_barrelPivotPlaneHalfLength

DoubleProperty TgcRawDataMonitorAlgorithm::m_barrelPivotPlaneHalfLength {this,"barrelPivotPlaneHalfLength", 9500.,"half length of pivot plane in barrel region"}
private

Definition at line 302 of file TgcRawDataMonitorAlgorithm.h.

302{this,"barrelPivotPlaneHalfLength", 9500.,"half length of pivot plane in barrel region"};

◆ m_ctpDecMonList

StringProperty TgcRawDataMonitorAlgorithm::m_ctpDecMonList {this,"CtpDecisionMoniorList","Tit:L1_2MU4,Mul:2,HLT:HLT_2mu4,RPC:1,TGC:1;","list of L1MU items to be monitored for before/after CTP decision"}
private

Definition at line 259 of file TgcRawDataMonitorAlgorithm.h.

259{this,"CtpDecisionMoniorList","Tit:L1_2MU4,Mul:2,HLT:HLT_2mu4,RPC:1,TGC:1;","list of L1MU items to be monitored for before/after CTP decision"};

◆ m_CtpDecMonObj

std::vector<CtpDecMonObj> TgcRawDataMonitorAlgorithm::m_CtpDecMonObj
private

Definition at line 313 of file TgcRawDataMonitorAlgorithm.h.

◆ m_dataType

AthMonitorAlgorithm::DataType_t AthMonitorAlgorithm::m_dataType
protectedinherited

Instance of the DataType_t enum.

Definition at line 356 of file AthMonitorAlgorithm.h.

◆ m_dataTypeStr

Gaudi::Property<std::string> AthMonitorAlgorithm::m_dataTypeStr {this,"DataType","userDefined"}
protectedinherited

DataType string pulled from the job option and converted to enum.

Definition at line 358 of file AthMonitorAlgorithm.h.

358{this,"DataType","userDefined"};

◆ m_defaultLBDuration

Gaudi::Property<float> AthMonitorAlgorithm::m_defaultLBDuration {this,"DefaultLBDuration",60.}
protectedinherited

Default duration of one lumi block.

Definition at line 365 of file AthMonitorAlgorithm.h.

365{this,"DefaultLBDuration",60.};

◆ m_detailLevel

Gaudi::Property<int> AthMonitorAlgorithm::m_detailLevel {this,"DetailLevel",0}
protectedinherited

Sets the level of detail used in the monitoring.

Definition at line 366 of file AthMonitorAlgorithm.h.

366{this,"DetailLevel",0};

◆ m_DetectorManagerKey

SG::ReadCondHandleKey<MuonGM::MuonDetectorManager> TgcRawDataMonitorAlgorithm::m_DetectorManagerKey {this, "DetectorManagerKey","MuonDetectorManager","Key of input MuonDetectorManager condition data"}
private

Definition at line 334 of file TgcRawDataMonitorAlgorithm.h.

334{this, "DetectorManagerKey","MuonDetectorManager","Key of input MuonDetectorManager condition data"};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default).

Definition at line 393 of file AthCommonDataStore.h.

◆ m_doExpressProcessing

BooleanProperty TgcRawDataMonitorAlgorithm::m_doExpressProcessing {this,"doExpressProcessing",false,"Processing express_express data"}
private

Definition at line 257 of file TgcRawDataMonitorAlgorithm.h.

257{this,"doExpressProcessing",false,"Processing express_express data"};

◆ m_dPhiCutOnM3

DoubleProperty TgcRawDataMonitorAlgorithm::m_dPhiCutOnM3 {this,"dPhiCutOnM3", 0.2,"Window size in delta phi on M3 between hit position and track-extrapolated position"}
private

Definition at line 304 of file TgcRawDataMonitorAlgorithm.h.

304{this,"dPhiCutOnM3", 0.2,"Window size in delta phi on M3 between hit position and track-extrapolated position"};

◆ m_DQFilterTools

ToolHandleArray<IDQFilterTool> AthMonitorAlgorithm::m_DQFilterTools {this,"FilterTools",{}}
protectedinherited

Array of Data Quality filter tools.

Definition at line 346 of file AthMonitorAlgorithm.h.

346{this,"FilterTools",{}};

◆ m_dRCutOnM3

DoubleProperty TgcRawDataMonitorAlgorithm::m_dRCutOnM3 {this,"dRCutOnM3", 3000.,"Window size in delta R (radious) on M3 between hit position and track-extrapolated position"}
private

Definition at line 305 of file TgcRawDataMonitorAlgorithm.h.

305{this,"dRCutOnM3", 3000.,"Window size in delta R (radious) on M3 between hit position and track-extrapolated position"};

◆ m_dummy

const ToolHandle<GenericMonitoringTool> AthMonitorAlgorithm::m_dummy
privateinherited

Definition at line 374 of file AthMonitorAlgorithm.h.

◆ m_dumpFullChannelList

BooleanProperty TgcRawDataMonitorAlgorithm::m_dumpFullChannelList {this,"DumpFullChannelList",false,"Dump full channel list"}
private

Definition at line 308 of file TgcRawDataMonitorAlgorithm.h.

308{this,"DumpFullChannelList",false,"Dump full channel list"};

◆ m_EI_Z

DoubleProperty TgcRawDataMonitorAlgorithm::m_EI_Z {this,"EI_Z",7364.7,"z-position of TGC EI-station in mm for track extrapolate"}
private

Definition at line 295 of file TgcRawDataMonitorAlgorithm.h.

295{this,"EI_Z",7364.7,"z-position of TGC EI-station in mm for track extrapolate"};

◆ m_endcapPivotPlaneMaximumRadius

DoubleProperty TgcRawDataMonitorAlgorithm::m_endcapPivotPlaneMaximumRadius {this,"endcapPivotPlaneMaximumRadius", 11977.,"maximum radius of pivot plane in endcap region"}
private

Definition at line 301 of file TgcRawDataMonitorAlgorithm.h.

301{this,"endcapPivotPlaneMaximumRadius", 11977.,"maximum radius of pivot plane in endcap region"};

◆ m_endcapPivotPlaneMinimumRadius

DoubleProperty TgcRawDataMonitorAlgorithm::m_endcapPivotPlaneMinimumRadius {this,"endcapPivotPlaneMinimumRadius",0.,"minimum radius of pivot plane in endcap region"}
private

Definition at line 300 of file TgcRawDataMonitorAlgorithm.h.

300{this,"endcapPivotPlaneMinimumRadius",0.,"minimum radius of pivot plane in endcap region"};

◆ m_enforceExpressTriggers

Gaudi::Property<bool> AthMonitorAlgorithm::m_enforceExpressTriggers
privateinherited
Initial value:
{this,
"EnforceExpressTriggers", false,
"Requires that matched triggers made the event enter the express stream"}

Definition at line 377 of file AthMonitorAlgorithm.h.

377 {this,
378 "EnforceExpressTriggers", false,
379 "Requires that matched triggers made the event enter the express stream"};

◆ m_environment

AthMonitorAlgorithm::Environment_t AthMonitorAlgorithm::m_environment
protectedinherited

Instance of the Environment_t enum.

Definition at line 355 of file AthMonitorAlgorithm.h.

◆ m_environmentStr

Gaudi::Property<std::string> AthMonitorAlgorithm::m_environmentStr {this,"Environment","user"}
protectedinherited

Environment string pulled from the job option and converted to enum.

Definition at line 357 of file AthMonitorAlgorithm.h.

357{this,"Environment","user"};

◆ m_EventInfoKey

SG::ReadHandleKey<xAOD::EventInfo> AthMonitorAlgorithm::m_EventInfoKey {this,"EventInfoKey","EventInfo"}
protectedinherited

Key for retrieving EventInfo from StoreGate.

Definition at line 367 of file AthMonitorAlgorithm.h.

367{this,"EventInfoKey","EventInfo"};

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default).

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthCommonReentrantAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
privateinherited

Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.

Empty if no symlinks were found.

Definition at line 114 of file AthCommonReentrantAlgorithm.h.

◆ m_extrapolator

ToolHandle<Trk::IExtrapolator> TgcRawDataMonitorAlgorithm::m_extrapolator {this,"TrackExtrapolator","Trk::Extrapolator/AtlasExtrapolator","Track extrapolator"}
private

Definition at line 331 of file TgcRawDataMonitorAlgorithm.h.

331{this,"TrackExtrapolator","Trk::Extrapolator/AtlasExtrapolator","Track extrapolator"};

◆ m_extZposition

std::vector<double> TgcRawDataMonitorAlgorithm::m_extZposition
private

Definition at line 312 of file TgcRawDataMonitorAlgorithm.h.

◆ m_FI_Z

DoubleProperty TgcRawDataMonitorAlgorithm::m_FI_Z {this,"FI_Z",6978.2,"z-position of TGC FI-station in mm for track extrapolate"}
private

Definition at line 296 of file TgcRawDataMonitorAlgorithm.h.

296{this,"FI_Z",6978.2,"z-position of TGC FI-station in mm for track extrapolate"};

◆ m_fileKey

Gaudi::Property<std::string> AthMonitorAlgorithm::m_fileKey {this,"FileKey",""}
protectedinherited

Internal Athena name for file.

Definition at line 363 of file AthMonitorAlgorithm.h.

363{this,"FileKey",""};

◆ m_fillGapByGapHistograms

BooleanProperty TgcRawDataMonitorAlgorithm::m_fillGapByGapHistograms {this,"FillGapByGapHistograms",true,"filling gap-by-gap histograms (many many)"}
private

Definition at line 267 of file TgcRawDataMonitorAlgorithm.h.

267{this,"FillGapByGapHistograms",true,"filling gap-by-gap histograms (many many)"};

◆ m_GoodRunsListSelectorTool

ToolHandle<IGoodRunsListSelectorTool> TgcRawDataMonitorAlgorithm::m_GoodRunsListSelectorTool {this,"GRLTool","GoodRunsListSelectorTool","GoodRunsListSelectorTool"}
private

Definition at line 330 of file TgcRawDataMonitorAlgorithm.h.

330{this,"GRLTool","GoodRunsListSelectorTool","GoodRunsListSelectorTool"};

◆ m_idHelperSvc

ServiceHandle<Muon::IMuonIdHelperSvc> TgcRawDataMonitorAlgorithm::m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}
private

Definition at line 232 of file TgcRawDataMonitorAlgorithm.h.

232{this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};

◆ m_isolationWindow

DoubleProperty TgcRawDataMonitorAlgorithm::m_isolationWindow {this,"IsolationWindow",1.0,"Window size in R for isolation with other muons"}
private

Definition at line 279 of file TgcRawDataMonitorAlgorithm.h.

279{this,"IsolationWindow",1.0,"Window size in R for isolation with other muons"};

◆ m_L1MenuKey

SG::ReadHandleKey<TrigConf::L1Menu> TgcRawDataMonitorAlgorithm::m_L1MenuKey {this, "L1TriggerMenu", "DetectorStore+L1TriggerMenu","L1 Menu key"}
private

Definition at line 234 of file TgcRawDataMonitorAlgorithm.h.

234{this, "L1TriggerMenu", "DetectorStore+L1TriggerMenu","L1 Menu key"};

◆ m_l1trigMatchWindowPt0a

DoubleProperty TgcRawDataMonitorAlgorithm::m_l1trigMatchWindowPt0a {this,"L1TrigMatchingWindowPt0a",0.36,"Window size in R for L1 trigger matching for 0GeV(a) muons"}
private

Definition at line 277 of file TgcRawDataMonitorAlgorithm.h.

277{this,"L1TrigMatchingWindowPt0a",0.36,"Window size in R for L1 trigger matching for 0GeV(a) muons"};

◆ m_l1trigMatchWindowPt0b

DoubleProperty TgcRawDataMonitorAlgorithm::m_l1trigMatchWindowPt0b {this,"L1TrigMatchingWindowPt0b",-0.0016,"Window size in R for L1 trigger matching for 0GeV(b) muons"}
private

Definition at line 278 of file TgcRawDataMonitorAlgorithm.h.

278{this,"L1TrigMatchingWindowPt0b",-0.0016,"Window size in R for L1 trigger matching for 0GeV(b) muons"};

◆ m_l1trigMatchWindowPt10a

DoubleProperty TgcRawDataMonitorAlgorithm::m_l1trigMatchWindowPt10a {this,"L1TrigMatchingWindowPt10a",0.3,"Window size in R for L1 trigger matching for 10GeV(a) muons"}
private

Definition at line 275 of file TgcRawDataMonitorAlgorithm.h.

275{this,"L1TrigMatchingWindowPt10a",0.3,"Window size in R for L1 trigger matching for 10GeV(a) muons"};

◆ m_l1trigMatchWindowPt10b

DoubleProperty TgcRawDataMonitorAlgorithm::m_l1trigMatchWindowPt10b {this,"L1TrigMatchingWindowPt10b",-0.01,"Window size in R for L1 trigger matching for 10GeV(b) muons"}
private

Definition at line 276 of file TgcRawDataMonitorAlgorithm.h.

276{this,"L1TrigMatchingWindowPt10b",-0.01,"Window size in R for L1 trigger matching for 10GeV(b) muons"};

◆ m_l1trigMatchWindowPt15

DoubleProperty TgcRawDataMonitorAlgorithm::m_l1trigMatchWindowPt15 {this,"L1TrigMatchingWindowPt15",0.15,"Window size in R for L1 trigger matching for 15GeV muons"}
private

Definition at line 274 of file TgcRawDataMonitorAlgorithm.h.

274{this,"L1TrigMatchingWindowPt15",0.15,"Window size in R for L1 trigger matching for 15GeV muons"};

◆ m_lbDurationDataKey

SG::ReadCondHandleKey<LBDurationCondData> AthMonitorAlgorithm::m_lbDurationDataKey {this,"LBDurationCondDataKey","LBDurationCondData","SG Key of LBDurationCondData object"}
protectedinherited

Definition at line 350 of file AthMonitorAlgorithm.h.

351{this,"LBDurationCondDataKey","LBDurationCondData","SG Key of LBDurationCondData object"};

◆ m_lumiDataKey

SG::ReadCondHandleKey<LuminosityCondData> AthMonitorAlgorithm::m_lumiDataKey {this,"LuminosityCondDataKey","LuminosityCondData","SG Key of LuminosityCondData object"}
protectedinherited

Definition at line 348 of file AthMonitorAlgorithm.h.

349{this,"LuminosityCondDataKey","LuminosityCondData","SG Key of LuminosityCondData object"};

◆ m_M1_Z

DoubleProperty TgcRawDataMonitorAlgorithm::m_M1_Z {this,"M1_Z",13436.5,"z-position of TGC M1-station in mm for track extrapolate"}
private

Definition at line 292 of file TgcRawDataMonitorAlgorithm.h.

292{this,"M1_Z",13436.5,"z-position of TGC M1-station in mm for track extrapolate"};

◆ m_M2_Z

DoubleProperty TgcRawDataMonitorAlgorithm::m_M2_Z {this,"M2_Z",14728.2,"z-position of TGC M2-station in mm for track extrapolate"}
private

Definition at line 293 of file TgcRawDataMonitorAlgorithm.h.

293{this,"M2_Z",14728.2,"z-position of TGC M2-station in mm for track extrapolate"};

◆ m_M3_Z

DoubleProperty TgcRawDataMonitorAlgorithm::m_M3_Z {this,"M3_Z",15148.2,"z-position of TGC M3-station in mm for track extrapolate"}
private

Definition at line 294 of file TgcRawDataMonitorAlgorithm.h.

294{this,"M3_Z",15148.2,"z-position of TGC M3-station in mm for track extrapolate"};

◆ m_maskChannelFileName

StringProperty TgcRawDataMonitorAlgorithm::m_maskChannelFileName {this,"MaskChannelFileName","","Name of file for mask channels"}
private

Definition at line 309 of file TgcRawDataMonitorAlgorithm.h.

309{this,"MaskChannelFileName","","Name of file for mask channels"};

◆ m_maskChannelList

std::set<std::string> TgcRawDataMonitorAlgorithm::m_maskChannelList
private

Definition at line 315 of file TgcRawDataMonitorAlgorithm.h.

◆ m_monitorThresholdPatterns

BooleanProperty TgcRawDataMonitorAlgorithm::m_monitorThresholdPatterns {this,"MonitorThresholdPatterns",true,"start monitoring tirgger threshold patterns"}
private

Definition at line 236 of file TgcRawDataMonitorAlgorithm.h.

236{this,"MonitorThresholdPatterns",true,"start monitoring tirgger threshold patterns"};

◆ m_monitorTriggerMultiplicity

BooleanProperty TgcRawDataMonitorAlgorithm::m_monitorTriggerMultiplicity {this,"MonitorTriggerMultiplicity",false,"start monitoring tirgger multiplicity performance"}
private

Definition at line 260 of file TgcRawDataMonitorAlgorithm.h.

260{this,"MonitorTriggerMultiplicity",false,"start monitoring tirgger multiplicity performance"};

◆ m_MuonContainerKey

SG::ReadHandleKey<xAOD::MuonContainer> TgcRawDataMonitorAlgorithm::m_MuonContainerKey {this,"MuonContainerName","Muons","Offline muon track container"}
private

Definition at line 240 of file TgcRawDataMonitorAlgorithm.h.

240{this,"MuonContainerName","Muons","Offline muon track container"};

◆ m_muonMass

DoubleProperty TgcRawDataMonitorAlgorithm::m_muonMass {this,"MuonMass",ParticleConstants::muonMassInMeV,"muon invariant mass in MeV"}
private

Definition at line 297 of file TgcRawDataMonitorAlgorithm.h.

297{this,"MuonMass",ParticleConstants::muonMassInMeV,"muon invariant mass in MeV"};
constexpr double muonMassInMeV
the mass of the muon (in MeV)

◆ m_MuonRoIContainerBCm1Key

SG::ReadHandleKey<xAOD::MuonRoIContainer> TgcRawDataMonitorAlgorithm::m_MuonRoIContainerBCm1Key {this,"MuonRoIContainerBCm1Name","LVL1MuonRoIsBCm1","L1 muon RoI container at -1BC"}
private

Definition at line 243 of file TgcRawDataMonitorAlgorithm.h.

243{this,"MuonRoIContainerBCm1Name","LVL1MuonRoIsBCm1","L1 muon RoI container at -1BC"};

◆ m_MuonRoIContainerBCm2Key

SG::ReadHandleKey<xAOD::MuonRoIContainer> TgcRawDataMonitorAlgorithm::m_MuonRoIContainerBCm2Key {this,"MuonRoIContainerBCm2Name","LVL1MuonRoIsBCm2","L1 muon RoI container at -2BC"}
private

Definition at line 242 of file TgcRawDataMonitorAlgorithm.h.

242{this,"MuonRoIContainerBCm2Name","LVL1MuonRoIsBCm2","L1 muon RoI container at -2BC"};

◆ m_MuonRoIContainerBCp1Key

SG::ReadHandleKey<xAOD::MuonRoIContainer> TgcRawDataMonitorAlgorithm::m_MuonRoIContainerBCp1Key {this,"MuonRoIContainerBCp1Name","LVL1MuonRoIsBCp1","L1 muon RoI container at +1BC"}
private

Definition at line 244 of file TgcRawDataMonitorAlgorithm.h.

244{this,"MuonRoIContainerBCp1Name","LVL1MuonRoIsBCp1","L1 muon RoI container at +1BC"};

◆ m_MuonRoIContainerBCp2Key

SG::ReadHandleKey<xAOD::MuonRoIContainer> TgcRawDataMonitorAlgorithm::m_MuonRoIContainerBCp2Key {this,"MuonRoIContainerBCp2Name","LVL1MuonRoIsBCp2","L1 muon RoI container at +2BC"}
private

Definition at line 245 of file TgcRawDataMonitorAlgorithm.h.

245{this,"MuonRoIContainerBCp2Name","LVL1MuonRoIsBCp2","L1 muon RoI container at +2BC"};

◆ m_MuonRoIContainerKey

SG::ReadHandleKey<xAOD::MuonRoIContainer> TgcRawDataMonitorAlgorithm::m_MuonRoIContainerKey {this,"MuonRoIContainerName","LVL1MuonRoIs","L1 muon RoI container"}
private

Definition at line 241 of file TgcRawDataMonitorAlgorithm.h.

241{this,"MuonRoIContainerName","LVL1MuonRoIs","L1 muon RoI container"};

◆ m_muonSelectionTool

ToolHandle<CP::IMuonSelectionTool> TgcRawDataMonitorAlgorithm::m_muonSelectionTool {this,"MuonSelectionTool","CP::MuonSelectionTool/MuonSelectionTool","MuonSelectionTool"}
private

Definition at line 333 of file TgcRawDataMonitorAlgorithm.h.

333{this,"MuonSelectionTool","CP::MuonSelectionTool/MuonSelectionTool","MuonSelectionTool"};

◆ m_muonToPVdca

DoubleProperty TgcRawDataMonitorAlgorithm::m_muonToPVdca {this,"MuonToPVdca",0.5,"Distance to closest approach of muon track to primary vertex"}
private

Definition at line 256 of file TgcRawDataMonitorAlgorithm.h.

256{this,"MuonToPVdca",0.5,"Distance to closest approach of muon track to primary vertex"};

◆ m_muonToPVdz

DoubleProperty TgcRawDataMonitorAlgorithm::m_muonToPVdz {this,"MuonToPVdz",50.,"Window size in deltaZ between muon track and primary vertex"}
private

Definition at line 254 of file TgcRawDataMonitorAlgorithm.h.

254{this,"MuonToPVdz",50.,"Window size in deltaZ between muon track and primary vertex"};

◆ m_muonToPVdzOffset

DoubleProperty TgcRawDataMonitorAlgorithm::m_muonToPVdzOffset {this,"MuonToPVdzOffset",0.,"Offset of deltaZ between muon track and primary vertex"}
private

Definition at line 255 of file TgcRawDataMonitorAlgorithm.h.

255{this,"MuonToPVdzOffset",0.,"Offset of deltaZ between muon track and primary vertex"};

◆ m_name

std::string AthMonitorAlgorithm::m_name
privateinherited

Definition at line 371 of file AthMonitorAlgorithm.h.

◆ m_nHitsInOtherBWTGCStrip

IntegerProperty TgcRawDataMonitorAlgorithm::m_nHitsInOtherBWTGCStrip {this,"nHitsInOtherTGCStrip",2,"Number of hits in other BW-TGC strip channels"}
private

Definition at line 307 of file TgcRawDataMonitorAlgorithm.h.

307{this,"nHitsInOtherTGCStrip",2,"Number of hits in other BW-TGC strip channels"};

◆ m_nHitsInOtherBWTGCWire

IntegerProperty TgcRawDataMonitorAlgorithm::m_nHitsInOtherBWTGCWire {this,"nHitsInOtherTGCWire",3,"Number of hits in other BW-TGC wire channels"}
private

Definition at line 306 of file TgcRawDataMonitorAlgorithm.h.

306{this,"nHitsInOtherTGCWire",3,"Number of hits in other BW-TGC wire channels"};

◆ m_NswDeltaRCut

DoubleProperty TgcRawDataMonitorAlgorithm::m_NswDeltaRCut {this,"NswDeltaRCut", 20.,"Window size in delta R for NSW-TGC matching"}
private

Definition at line 310 of file TgcRawDataMonitorAlgorithm.h.

310{this,"NswDeltaRCut", 20.,"Window size in delta R for NSW-TGC matching"};

◆ m_offlMuonCutOnAuthor

BooleanProperty TgcRawDataMonitorAlgorithm::m_offlMuonCutOnAuthor {this,"OfflMuonCutOnAuthor",true,"applying cut on offline muon author"}
private

Definition at line 270 of file TgcRawDataMonitorAlgorithm.h.

270{this,"OfflMuonCutOnAuthor",true,"applying cut on offline muon author"};

◆ m_offlMuonCutOnMuonType

BooleanProperty TgcRawDataMonitorAlgorithm::m_offlMuonCutOnMuonType {this,"OfflMuonCutOnMuonType",true,"applying cut on offline muon muonType"}
private

Definition at line 269 of file TgcRawDataMonitorAlgorithm.h.

269{this,"OfflMuonCutOnMuonType",true,"applying cut on offline muon muonType"};

◆ m_offlMuonCutOnQuality

BooleanProperty TgcRawDataMonitorAlgorithm::m_offlMuonCutOnQuality {this,"OfflMuonCutOnQuality",true,"applying cut on offline muon quality"}
private

Definition at line 271 of file TgcRawDataMonitorAlgorithm.h.

271{this,"OfflMuonCutOnQuality",true,"applying cut on offline muon quality"};

◆ m_packageName

StringProperty TgcRawDataMonitorAlgorithm::m_packageName {this,"PackageName","TgcRawDataMonitor","group name for histograming"}
private

Definition at line 258 of file TgcRawDataMonitorAlgorithm.h.

258{this,"PackageName","TgcRawDataMonitor","group name for histograming"};

◆ m_PrimaryVertexContainerKey

SG::ReadHandleKey<xAOD::VertexContainer> TgcRawDataMonitorAlgorithm::m_PrimaryVertexContainerKey {this,"PrimaryVertexContainerName","PrimaryVertices","Primary Vertex Container"}
private

Definition at line 252 of file TgcRawDataMonitorAlgorithm.h.

252{this,"PrimaryVertexContainerName","PrimaryVertices","Primary Vertex Container"};

◆ m_printAvailableMuonTriggers

BooleanProperty TgcRawDataMonitorAlgorithm::m_printAvailableMuonTriggers {this,"PrintAvailableMuonTriggers",false,"debugging purpose. print out all available muon triggers in the event"}
private

Definition at line 261 of file TgcRawDataMonitorAlgorithm.h.

261{this,"PrintAvailableMuonTriggers",false,"debugging purpose. print out all available muon triggers in the event"};

◆ m_pTCutOnExtrapolation

DoubleProperty TgcRawDataMonitorAlgorithm::m_pTCutOnExtrapolation {this,"pTCutOnExtrapolation",5000.,"pT [in MeV] cut on the extrapolation tracks"}
private

Definition at line 290 of file TgcRawDataMonitorAlgorithm.h.

290{this,"pTCutOnExtrapolation",5000.,"pT [in MeV] cut on the extrapolation tracks"};

◆ m_pTCutOnTrigExtrapolation

DoubleProperty TgcRawDataMonitorAlgorithm::m_pTCutOnTrigExtrapolation {this,"pTCutOnTrigExtrapolation",20000.,"pT [in MeV] cut on the extrapolation tracks for trigger validation"}
private

Definition at line 291 of file TgcRawDataMonitorAlgorithm.h.

291{this,"pTCutOnTrigExtrapolation",20000.,"pT [in MeV] cut on the extrapolation tracks for trigger validation"};

◆ m_requireIsolated

BooleanProperty TgcRawDataMonitorAlgorithm::m_requireIsolated {this,"RequireIsolated",true,"Probe muon should be isolated from other muons"}
private

Definition at line 280 of file TgcRawDataMonitorAlgorithm.h.

280{this,"RequireIsolated",true,"Probe muon should be isolated from other muons"};

◆ m_residualWindow

DoubleProperty TgcRawDataMonitorAlgorithm::m_residualWindow {this,"ResidualWindow", 200.,"Window size in mm between hit position and track-extrapolated position"}
private

Definition at line 303 of file TgcRawDataMonitorAlgorithm.h.

303{this,"ResidualWindow", 200.,"Window size in mm between hit position and track-extrapolated position"};

◆ m_streamerFilter

StringProperty TgcRawDataMonitorAlgorithm::m_streamerFilter {this,"StreamerFilter","","Streamer filter such as HLT_noalg_MU14FCH"}
private

Definition at line 238 of file TgcRawDataMonitorAlgorithm.h.

238{this,"StreamerFilter","","Streamer filter such as HLT_noalg_MU14FCH"};

◆ m_TagAndProbe

BooleanProperty TgcRawDataMonitorAlgorithm::m_TagAndProbe {this,"TagAndProbe",true,"switch to perform tag-and-probe method"}
private

Definition at line 262 of file TgcRawDataMonitorAlgorithm.h.

262{this,"TagAndProbe",true,"switch to perform tag-and-probe method"};

◆ m_TagAndProbeZmumu

BooleanProperty TgcRawDataMonitorAlgorithm::m_TagAndProbeZmumu {this,"TagAndProbeZmumu",false,"switch to perform tag-and-probe method Z->mumu"}
private

Definition at line 263 of file TgcRawDataMonitorAlgorithm.h.

263{this,"TagAndProbeZmumu",false,"switch to perform tag-and-probe method Z->mumu"};

◆ m_tagMuonInDifferentSystem

BooleanProperty TgcRawDataMonitorAlgorithm::m_tagMuonInDifferentSystem {this,"TagMuonInDifferentSystem",false,"restrict the tag muons to be only in the other system (barrel or endcap)"}
private

Definition at line 264 of file TgcRawDataMonitorAlgorithm.h.

264{this,"TagMuonInDifferentSystem",false,"restrict the tag muons to be only in the other system (barrel or endcap)"};

◆ m_TgcCoinDataContainerCurrBCKey

SG::ReadHandleKey<Muon::TgcCoinDataContainer> TgcRawDataMonitorAlgorithm::m_TgcCoinDataContainerCurrBCKey {this,"TgcCoinDataContainerCurrBCName","TrigT1CoinDataCollection","TGC Coin Data Container CurrBC"}
private

Definition at line 249 of file TgcRawDataMonitorAlgorithm.h.

249{this,"TgcCoinDataContainerCurrBCName","TrigT1CoinDataCollection","TGC Coin Data Container CurrBC"};

◆ m_TgcCoinDataContainerNextBCKey

SG::ReadHandleKey<Muon::TgcCoinDataContainer> TgcRawDataMonitorAlgorithm::m_TgcCoinDataContainerNextBCKey {this,"TgcCoinDataContainerNextBCName","TrigT1CoinDataCollectionNextBC","TGC Coin Data Container NextBC"}
private

Definition at line 250 of file TgcRawDataMonitorAlgorithm.h.

250{this,"TgcCoinDataContainerNextBCName","TrigT1CoinDataCollectionNextBC","TGC Coin Data Container NextBC"};

◆ m_TgcCoinDataContainerNextNextBCKey

SG::ReadHandleKey<Muon::TgcCoinDataContainer> TgcRawDataMonitorAlgorithm::m_TgcCoinDataContainerNextNextBCKey {this,"TgcCoinDataContainerNextNextBCName","TrigT1CoinDataCollectionNextNextBC","TGC Coin Data Container NextNextBC"}
private

Definition at line 251 of file TgcRawDataMonitorAlgorithm.h.

251{this,"TgcCoinDataContainerNextNextBCName","TrigT1CoinDataCollectionNextNextBC","TGC Coin Data Container NextNextBC"};

◆ m_TgcCoinDataContainerPrevBCKey

SG::ReadHandleKey<Muon::TgcCoinDataContainer> TgcRawDataMonitorAlgorithm::m_TgcCoinDataContainerPrevBCKey {this,"TgcCoinDataContainerPrevBCName","TrigT1CoinDataCollectionPriorBC","TGC Coin Data Container PrevBC"}
private

Definition at line 248 of file TgcRawDataMonitorAlgorithm.h.

248{this,"TgcCoinDataContainerPrevBCName","TrigT1CoinDataCollectionPriorBC","TGC Coin Data Container PrevBC"};

◆ m_tgcMonTool

ToolHandle<ITgcRawDataMonitorTool> TgcRawDataMonitorAlgorithm::m_tgcMonTool {this,"TgcRawDataMonitorTool","TgcDawDataMonitorTool","TgcRawDataMonitorTool"}
private

Definition at line 332 of file TgcRawDataMonitorAlgorithm.h.

332{this,"TgcRawDataMonitorTool","TgcDawDataMonitorTool","TgcRawDataMonitorTool"};

◆ m_TgcPrepDataContainerKey

SG::ReadHandleKey<Muon::TgcPrepDataContainer> TgcRawDataMonitorAlgorithm::m_TgcPrepDataContainerKey {this,"TgcPrepDataContainerName","TGC_MeasurementsAllBCs","current BC TGC PRD"}
private

Definition at line 247 of file TgcRawDataMonitorAlgorithm.h.

247{this,"TgcPrepDataContainerName","TGC_MeasurementsAllBCs","current BC TGC PRD"};

◆ m_thresholdPatternsKey

SG::ReadDecorHandleKey<xAOD::MuonRoIContainer> TgcRawDataMonitorAlgorithm::m_thresholdPatternsKey {this,"MuRoIThresholdPatternsKey","LVL1MuonRoIs.thresholdPatterns","Name of the muon RoI container decoration for the threshold patterns"}
private

Definition at line 235 of file TgcRawDataMonitorAlgorithm.h.

235{this,"MuRoIThresholdPatternsKey","LVL1MuonRoIs.thresholdPatterns","Name of the muon RoI container decoration for the threshold patterns"};

◆ m_thrMonList

std::set<std::string> TgcRawDataMonitorAlgorithm::m_thrMonList
private

Definition at line 314 of file TgcRawDataMonitorAlgorithm.h.

◆ m_thrPatternList

StringProperty TgcRawDataMonitorAlgorithm::m_thrPatternList {this,"ThrPatternList","MU4,MU6,MU10,MU11,MU20,MU21","list of single L1MU items to be monitored by the threshold pattern"}
private

Definition at line 237 of file TgcRawDataMonitorAlgorithm.h.

237{this,"ThrPatternList","MU4,MU6,MU10,MU11,MU20,MU21","list of single L1MU items to be monitored by the threshold pattern"};

◆ m_toolLookupMap

std::unordered_map<std::string, size_t> AthMonitorAlgorithm::m_toolLookupMap
privateinherited

Definition at line 372 of file AthMonitorAlgorithm.h.

◆ m_tools

ToolHandleArray<GenericMonitoringTool> AthMonitorAlgorithm::m_tools {this,"GMTools",{}}
protectedinherited

Array of Generic Monitoring Tools.

Definition at line 341 of file AthMonitorAlgorithm.h.

341{this,"GMTools",{}};

◆ m_trigDecTool

PublicToolHandle<Trig::TrigDecisionTool> AthMonitorAlgorithm::m_trigDecTool
protectedinherited

Tool to tell whether a specific trigger is passed.

Definition at line 345 of file AthMonitorAlgorithm.h.

◆ m_triggerChainString

Gaudi::Property<std::string> AthMonitorAlgorithm::m_triggerChainString {this,"TriggerChain",""}
protectedinherited

Trigger chain string pulled from the job option and parsed into a vector.

Definition at line 360 of file AthMonitorAlgorithm.h.

360{this,"TriggerChain",""};

◆ m_trigLiveFractionDataKey

SG::ReadCondHandleKey<TrigLiveFractionCondData> AthMonitorAlgorithm::m_trigLiveFractionDataKey {this,"TrigLiveFractionCondDataKey","TrigLiveFractionCondData", "SG Key of TrigLiveFractionCondData object"}
protectedinherited

Definition at line 352 of file AthMonitorAlgorithm.h.

353{this,"TrigLiveFractionCondDataKey","TrigLiveFractionCondData", "SG Key of TrigLiveFractionCondData object"};

◆ m_trigMatchWindow

DoubleProperty TgcRawDataMonitorAlgorithm::m_trigMatchWindow {this,"TrigMatchingWindow",0.2,"Window size in R for trigger matching"}
private

Definition at line 273 of file TgcRawDataMonitorAlgorithm.h.

273{this,"TrigMatchingWindow",0.2,"Window size in R for trigger matching"};

◆ m_useCBTrackForExtrapolation

BooleanProperty TgcRawDataMonitorAlgorithm::m_useCBTrackForExtrapolation {this,"UseCBTrackForExtrapolation",false,"CombinedTrackParticle for extrapolation"}
private

Definition at line 283 of file TgcRawDataMonitorAlgorithm.h.

283{this,"UseCBTrackForExtrapolation",false,"CombinedTrackParticle for extrapolation"};

◆ m_useDirectPrimaryTrackForExtrapolation

BooleanProperty TgcRawDataMonitorAlgorithm::m_useDirectPrimaryTrackForExtrapolation {this,"UseDirectPrimaryTrackForExtrapolation",true,"Use DirectPrimaryTrackForExtrapolation for extrapolation"}
private

Definition at line 286 of file TgcRawDataMonitorAlgorithm.h.

286{this,"UseDirectPrimaryTrackForExtrapolation",true,"Use DirectPrimaryTrackForExtrapolation for extrapolation"};

◆ m_useExtMSTrackForExtrapolation

BooleanProperty TgcRawDataMonitorAlgorithm::m_useExtMSTrackForExtrapolation {this,"UseExtMSTrackForExtrapolation",false,"Use ExtrapolatedMuonSpectrometerTrackParticle for extrapolation"}
private

Definition at line 284 of file TgcRawDataMonitorAlgorithm.h.

284{this,"UseExtMSTrackForExtrapolation",false,"Use ExtrapolatedMuonSpectrometerTrackParticle for extrapolation"};

◆ m_useIDTrackForExtrapolation

BooleanProperty TgcRawDataMonitorAlgorithm::m_useIDTrackForExtrapolation {this,"UseIDTrackForExtrapolation",false,"Use InnerDetectorTrackParticle for extrapolation"}
private

Definition at line 281 of file TgcRawDataMonitorAlgorithm.h.

281{this,"UseIDTrackForExtrapolation",false,"Use InnerDetectorTrackParticle for extrapolation"};

◆ m_useLumi

Gaudi::Property<bool> AthMonitorAlgorithm::m_useLumi {this,"EnableLumi",false}
protectedinherited

Allows use of various luminosity functions.

Definition at line 364 of file AthMonitorAlgorithm.h.

364{this,"EnableLumi",false};

◆ m_useMSOnlyExtMSTrackForExtrapolation

BooleanProperty TgcRawDataMonitorAlgorithm::m_useMSOnlyExtMSTrackForExtrapolation {this,"UseMSOnlyExtMSTrackForExtrapolation",false,"Use MSOnlyExtrapolatedMuonSpectrometerTrackParticle for extrapolation"}
private

Definition at line 285 of file TgcRawDataMonitorAlgorithm.h.

285{this,"UseMSOnlyExtMSTrackForExtrapolation",false,"Use MSOnlyExtrapolatedMuonSpectrometerTrackParticle for extrapolation"};

◆ m_useMSTrackForExtrapolation

BooleanProperty TgcRawDataMonitorAlgorithm::m_useMSTrackForExtrapolation {this,"UseMSTrackForExtrapolation",false,"Use MuonSpectrometerTrackParticle for extrapolation"}
private

Definition at line 282 of file TgcRawDataMonitorAlgorithm.h.

282{this,"UseMSTrackForExtrapolation",false,"Use MuonSpectrometerTrackParticle for extrapolation"};

◆ m_useMuonSelectorTool

BooleanProperty TgcRawDataMonitorAlgorithm::m_useMuonSelectorTool {this,"UseMuonSelectorTool",true,"use MuonSelectorTool"}
private

Definition at line 289 of file TgcRawDataMonitorAlgorithm.h.

289{this,"UseMuonSelectorTool",true,"use MuonSelectorTool"};

◆ m_useOnlyCombinedMuons

BooleanProperty TgcRawDataMonitorAlgorithm::m_useOnlyCombinedMuons {this,"UseOnlyCombinedMuons",false,"use only CombinedMuons"}
private

Definition at line 287 of file TgcRawDataMonitorAlgorithm.h.

287{this,"UseOnlyCombinedMuons",false,"use only CombinedMuons"};

◆ m_useOnlyMuidCoStacoMuons

BooleanProperty TgcRawDataMonitorAlgorithm::m_useOnlyMuidCoStacoMuons {this,"UseOnlyMuidCoStacoMuons",false,"use only MuidCo and Staco Muons"}
private

Definition at line 288 of file TgcRawDataMonitorAlgorithm.h.

288{this,"UseOnlyMuidCoStacoMuons",false,"use only MuidCo and Staco Muons"};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.

◆ m_vTrigChainNames

std::vector<std::string> AthMonitorAlgorithm::m_vTrigChainNames
protectedinherited

Vector of trigger chain names parsed from trigger chain string.

Definition at line 361 of file AthMonitorAlgorithm.h.

◆ m_zMass

DoubleProperty TgcRawDataMonitorAlgorithm::m_zMass {this,"ZMass",91187.6,"muon invariant mass in MeV"}
private

Definition at line 298 of file TgcRawDataMonitorAlgorithm.h.

298{this,"ZMass",91187.6,"muon invariant mass in MeV"};

◆ m_zMassWindow

DoubleProperty TgcRawDataMonitorAlgorithm::m_zMassWindow {this,"ZMassWindow",10000,"muon invariant mass half-window in MeV"}
private

Definition at line 299 of file TgcRawDataMonitorAlgorithm.h.

299{this,"ZMassWindow",10000,"muon invariant mass half-window in MeV"};

◆ MaskChannelFileName

TgcRawDataMonitorAlgorithm.MaskChannelFileName

Definition at line 1574 of file TgcRawDataMonitorAlgorithm.py.

◆ MonitorThresholdPatterns

TgcRawDataMonitorAlgorithm.MonitorThresholdPatterns

Definition at line 1562 of file TgcRawDataMonitorAlgorithm.py.

◆ nHitsInOtherTGCStrip

TgcRawDataMonitorAlgorithm.nHitsInOtherTGCStrip

Definition at line 1573 of file TgcRawDataMonitorAlgorithm.py.

◆ nHitsInOtherTGCWire

TgcRawDataMonitorAlgorithm.nHitsInOtherTGCWire

Definition at line 1572 of file TgcRawDataMonitorAlgorithm.py.

◆ NumThreads

TgcRawDataMonitorAlgorithm.NumThreads

Definition at line 1535 of file TgcRawDataMonitorAlgorithm.py.

◆ OutputLevel

TgcRawDataMonitorAlgorithm.OutputLevel

Definition at line 1561 of file TgcRawDataMonitorAlgorithm.py.

◆ pTCutOnTrigExtrapolation

TgcRawDataMonitorAlgorithm.pTCutOnTrigExtrapolation

Definition at line 1578 of file TgcRawDataMonitorAlgorithm.py.

◆ RequireIsolated

TgcRawDataMonitorAlgorithm.RequireIsolated

Definition at line 1569 of file TgcRawDataMonitorAlgorithm.py.

◆ ResidualWindow

TgcRawDataMonitorAlgorithm.ResidualWindow

Definition at line 1571 of file TgcRawDataMonitorAlgorithm.py.

◆ StreamerFilter

TgcRawDataMonitorAlgorithm.StreamerFilter

Definition at line 1576 of file TgcRawDataMonitorAlgorithm.py.

◆ summariseProps

TgcRawDataMonitorAlgorithm.summariseProps

Definition at line 1597 of file TgcRawDataMonitorAlgorithm.py.

◆ TagAndProbe

TgcRawDataMonitorAlgorithm.TagAndProbe

Definition at line 1563 of file TgcRawDataMonitorAlgorithm.py.

◆ TagMuonInDifferentSystem

TgcRawDataMonitorAlgorithm.TagMuonInDifferentSystem

Definition at line 1575 of file TgcRawDataMonitorAlgorithm.py.

◆ tgcRawDataMonitorAcc

TgcRawDataMonitorAlgorithm.tgcRawDataMonitorAcc = TgcRawDataMonitoringConfig(flags)

Definition at line 1559 of file TgcRawDataMonitorAlgorithm.py.

◆ triggerConfig

TgcRawDataMonitorAlgorithm.triggerConfig

Definition at line 1590 of file TgcRawDataMonitorAlgorithm.py.

◆ triggerMenuSetup

TgcRawDataMonitorAlgorithm.triggerMenuSetup

Definition at line 1591 of file TgcRawDataMonitorAlgorithm.py.

◆ UseMuonSelectorTool

TgcRawDataMonitorAlgorithm.UseMuonSelectorTool

Definition at line 1566 of file TgcRawDataMonitorAlgorithm.py.

◆ UseOnlyCombinedMuons

TgcRawDataMonitorAlgorithm.UseOnlyCombinedMuons

Definition at line 1567 of file TgcRawDataMonitorAlgorithm.py.

◆ UseOnlyMuidCoStacoMuons

TgcRawDataMonitorAlgorithm.UseOnlyMuidCoStacoMuons

Definition at line 1568 of file TgcRawDataMonitorAlgorithm.py.

◆ withDetails

TgcRawDataMonitorAlgorithm.withDetails

Definition at line 1597 of file TgcRawDataMonitorAlgorithm.py.


The documentation for this class was generated from the following files: