ATLAS Offline Software
Classes | Public Types | Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes | Private Types | Private Member Functions | Private Attributes | List of all members
TgcRawDataMonitorAlgorithm Class Reference

#include <TgcRawDataMonitorAlgorithm.h>

Inheritance diagram for TgcRawDataMonitorAlgorithm:
Collaboration diagram for TgcRawDataMonitorAlgorithm:

Classes

struct  CtpDecMonObj
 
struct  ExtPos
 
struct  ExtTrigInfo
 
struct  TgcTrig
 
struct  TgcTrigEifi
 
struct  TgcTrigNsw
 
struct  TgcTrigRpc
 
struct  TgcTrigTile
 
struct  TimedMuon
 
struct  TimedMuonRoI
 

Public Types

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

Public Member Functions

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

Public Attributes

 flags = initConfigFlags()
 
 isMC
 
 inputs = sys.argv[1].split(',')
 
 Files
 
 HISTFileName
 
 GlobalTag
 
 cfg = MainServicesCfg(flags)
 
def 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 More...
 
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. More...
 

Protected Attributes

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

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 > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &)
 specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &)
 specialization for handling Gaudi::Property<SG::VarHandleBase> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &)
 specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
 

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",105.6583755,"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< CtpDecMonObjm_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. More...
 
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default) More...
 
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default) More...
 
std::vector< SG::VarHandleKeyArray * > m_vhka
 
bool m_varHandleArraysDeclared
 

Detailed Description

Definition at line 30 of file TgcRawDataMonitorAlgorithm.h.

Member Typedef Documentation

◆ MonVariables

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

Definition at line 314 of file TgcRawDataMonitorAlgorithm.h.

◆ MonVarVec_t

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

Definition at line 365 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 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 191 of file AthMonitorAlgorithm.h.

191  {
192  userDefined = 0,
193  monteCarlo,
194  collisions,
195  cosmics,
196  heavyIonCollisions,
197  };

◆ Environment_t

enum 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 172 of file AthMonitorAlgorithm.h.

172  {
173  user = 0,
174  online,
175  tier0,
176  tier0Raw,
177  tier0ESD,
178  AOD,
179  altprod,
180  };

◆ TgcCoinPtBitShifts

Enumerator
CoinFlagF 
CoinFlagC 
CoinFlagH 
CoinFlagEI 
CoinFlagTile 
CoinFlagRPC 
CoinFlagNSW 
CoinFlags 
InnerCoinFlags 

Definition at line 37 of file TgcRawDataMonitorAlgorithm.h.

Constructor & Destructor Documentation

◆ TgcRawDataMonitorAlgorithm()

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

Definition at line 36 of file TgcRawDataMonitorAlgorithm.cxx.

36  :
37  AthMonitorAlgorithm(name, pSvcLocator) {
38 }

◆ ~TgcRawDataMonitorAlgorithm()

virtual TgcRawDataMonitorAlgorithm::~TgcRawDataMonitorAlgorithm ( )
virtualdefault

Member Function Documentation

◆ cardinality()

unsigned int AthReentrantAlgorithm::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.

Override this to return 0 for reentrant algorithms.

Definition at line 55 of file AthReentrantAlgorithm.cxx.

56 {
57  return 0;
58 }

◆ checkTriggerInfo()

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

Definition at line 197 of file TgcRawDataMonitorAlgorithm.cxx.

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

◆ 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 221 of file AthMonitorAlgorithm.h.

221 { return m_dataType; }

◆ 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 140 of file AthMonitorAlgorithm.cxx.

140  {
141  // convert the string to all lowercase
142  std::string lowerCaseStr = str;
143  std::transform(lowerCaseStr.begin(), lowerCaseStr.end(), lowerCaseStr.begin(), ::tolower);
144 
145  // check if it matches one of the enum choices
146  if( lowerCaseStr == "userdefined" ) {
148  } else if( lowerCaseStr == "montecarlo" ) {
149  return DataType_t::monteCarlo;
150  } else if( lowerCaseStr == "collisions" ) {
151  return DataType_t::collisions;
152  } else if( lowerCaseStr == "cosmics" ) {
153  return DataType_t::cosmics;
154  } else if( lowerCaseStr == "heavyioncollisions" ) {
156  } else { // otherwise, warn the user and return "userDefined"
157  ATH_MSG_WARNING("AthMonitorAlgorithm::dataTypeStringToEnum(): Unknown data type "
158  <<str<<", returning userDefined.");
160  }
161 }

◆ declareGaudiProperty() [1/4]

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

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

Definition at line 170 of file AthCommonDataStore.h.

172  {
173  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
174  hndl.value(),
175  hndl.documentation());
176 
177  }

◆ declareGaudiProperty() [2/4]

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

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

Definition at line 156 of file AthCommonDataStore.h.

158  {
159  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
160  hndl.value(),
161  hndl.documentation());
162 
163  }

◆ declareGaudiProperty() [3/4]

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

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

Definition at line 184 of file AthCommonDataStore.h.

186  {
187  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
188  hndl.value(),
189  hndl.documentation());
190  }

◆ declareGaudiProperty() [4/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  t,
const SG::NotHandleType  
)
inlineprivateinherited

specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>

Definition at line 199 of file AthCommonDataStore.h.

200  {
201  return PBASE::declareProperty(t);
202  }

◆ declareProperty() [1/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleBase hndl,
const std::string &  doc,
const SG::VarHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleBase. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 245 of file AthCommonDataStore.h.

249  {
250  this->declare(hndl.vhKey());
251  hndl.vhKey().setOwner(this);
252 
253  return PBASE::declareProperty(name,hndl,doc);
254  }

◆ declareProperty() [2/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleKey hndl,
const std::string &  doc,
const SG::VarHandleKeyType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleKey. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 221 of file AthCommonDataStore.h.

225  {
226  this->declare(hndl);
227  hndl.setOwner(this);
228 
229  return PBASE::declareProperty(name,hndl,doc);
230  }

◆ declareProperty() [3/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleKeyArray hndArr,
const std::string &  doc,
const SG::VarHandleKeyArrayType  
)
inlineinherited

Definition at line 259 of file AthCommonDataStore.h.

263  {
264 
265  // std::ostringstream ost;
266  // ost << Algorithm::name() << " VHKA declareProp: " << name
267  // << " size: " << hndArr.keys().size()
268  // << " mode: " << hndArr.mode()
269  // << " vhka size: " << m_vhka.size()
270  // << "\n";
271  // debug() << ost.str() << endmsg;
272 
273  hndArr.setOwner(this);
274  m_vhka.push_back(&hndArr);
275 
276  Gaudi::Details::PropertyBase* p = PBASE::declareProperty(name, hndArr, doc);
277  if (p != 0) {
278  p->declareUpdateHandler(&AthCommonDataStore<PBASE>::updateVHKA, this);
279  } else {
280  ATH_MSG_ERROR("unable to call declareProperty on VarHandleKeyArray "
281  << name);
282  }
283 
284  return p;
285 
286  }

◆ declareProperty() [4/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc,
const SG::NotHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This is the generic version, for types that do not derive from SG::VarHandleKey. It just forwards to the base class version of declareProperty.

Definition at line 333 of file AthCommonDataStore.h.

337  {
338  return PBASE::declareProperty(name, property, doc);
339  }

◆ declareProperty() [5/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc = "none" 
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This dispatches to either the generic declareProperty or the one for VarHandle/Key/KeyArray.

Definition at line 352 of file AthCommonDataStore.h.

355  {
356  typedef typename SG::HandleClassifier<T>::type htype;
357  return declareProperty (name, property, doc, htype());
358  }

◆ declareProperty() [6/6]

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

Definition at line 145 of file AthCommonDataStore.h.

145  {
146  typedef typename SG::HandleClassifier<T>::type htype;
148  }

◆ 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.

95 { return m_detStore; }

◆ 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 205 of file AthMonitorAlgorithm.h.

205 { return m_environment; }

◆ 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 112 of file AthMonitorAlgorithm.cxx.

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

◆ evtStore() [1/2]

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.

85 { return m_evtStore; }

◆ evtStore() [2/2]

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

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

Definition at line 90 of file AthCommonDataStore.h.

90 { return m_evtStore; }

◆ 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 73 of file AthMonitorAlgorithm.cxx.

73  {
74 
75  // Checks that all of the DQ filters are passed. If any one of the filters
76  // fails, return SUCCESS code and do not fill the histograms with the event.
77  for ( const auto& filterItr : m_DQFilterTools ) {
78  if (!filterItr->accept()) {
79  ATH_MSG_DEBUG("Event rejected due to filter tool.");
80  return StatusCode::SUCCESS;
81  }
82  }
83 
84  // Trigger: If there is a decision tool and the chains fail, skip the event.
86  ATH_MSG_DEBUG("Event rejected due to trigger filter.");
87  return StatusCode::SUCCESS;
88  }
89 
90  ATH_MSG_DEBUG("Event accepted!");
91  return fillHistograms(ctx);
92 }

◆ 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 & AthReentrantAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

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

Definition at line 79 of file AthReentrantAlgorithm.cxx.

80 {
81  // If we didn't find any symlinks to add, just return the collection
82  // from the base class. Otherwise, return the extended collection.
83  if (!m_extendedExtraObjects.empty()) {
85  }
86  return Algorithm::extraOutputDeps();
87 }

◆ 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 753 of file TgcRawDataMonitorAlgorithm.cxx.

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

◆ fillHistogramsAfterTriggerDecision()

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

Definition at line 582 of file TgcRawDataMonitorAlgorithm.cxx.

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

◆ 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 3111 of file TgcRawDataMonitorAlgorithm.cxx.

3111  {
3112 
3113  if(m_monitorThresholdPatterns && AllBCMuonRoIs.size()>0 ){
3114  ATH_MSG_DEBUG("Filling histograms for MuonRoIs in thresholdPattern");
3116  SG::ReadDecorHandle<xAOD::MuonRoIContainer,uint64_t> thrPatternAcc = SG::makeHandle<uint64_t>(m_thresholdPatternsKey, ctx);
3117  if(l1Menu.isValid() && thrPatternAcc.isPresent() && thrPatternAcc.isAvailable()){
3118  for(const auto& item : m_thrMonList){
3119  ATH_MSG_DEBUG("Item = " << item);
3120  bool ok = false;
3121  for(const auto& m : l1Menu->thresholdNames()){
3122  ATH_MSG_DEBUG("item = " << m);
3123  if( m == item ){
3124  ok = true;
3125  break;
3126  }
3127  }
3128  if(!ok){
3129  ATH_MSG_DEBUG("skipping " << item);
3130  continue;
3131  }
3132  ATH_MSG_DEBUG("continue checking " << item);
3133  const TrigConf::L1Threshold& thr = l1Menu->threshold(item.data());
3134  std::vector<const xAOD::MuonRoI*> passed_rois;
3135  for(const auto& allBcMuonRoI : AllBCMuonRoIs){
3136  if(allBcMuonRoI.timing!=0)continue; // only current BC
3137  const xAOD::MuonRoI* roi = allBcMuonRoI.muonRoI;
3138  const uint64_t thrPattern = thrPatternAcc(*roi);
3139  bool passed = ( thrPattern & (1 << thr.mapping()) );
3140  if(passed){
3141  passed_rois.push_back(roi);
3142  ATH_MSG_DEBUG("This RoI passed "<< item <<", roiWord=" << roi->roiWord() << ", thrNumber=" << roi->getThrNumber() << " eta=" << roi->eta() << " phi=" << roi->phi());
3143  if(roiAndMenu.count(roi)==0){
3144  std::set<std::string> items;
3145  roiAndMenu.insert(std::make_pair(roi,items));
3146  }
3147  roiAndMenu[roi].insert(item);
3148  }
3149  }
3150  menuAndRoIs.insert(std::make_pair(item,passed_rois));
3151  }
3152  }
3153  ATH_MSG_DEBUG("End filling histograms for MuonRoIs in thresholdPattern");
3154  }
3155 }

◆ fillRoiHistograms()

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

Definition at line 297 of file TgcRawDataMonitorAlgorithm.cxx.

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

◆ 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 2395 of file TgcRawDataMonitorAlgorithm.cxx.

2398  {
2399  varowner.push_back(Monitored::Collection(type+"_coin_lb",tgcTrigs,[](const TgcTrig&m){return m.lb;}));
2400  variables.push_back(varowner.back());
2401  varowner.push_back(Monitored::Collection(type+"_coin_eta",tgcTrigs,[](const TgcTrig&m){return m.eta;}));
2402  variables.push_back(varowner.back());
2403  varowner.push_back(Monitored::Collection(type+"_coin_phi",tgcTrigs,[](const TgcTrig&m){return m.phi + tgc_coin_phi_small_offset;}));
2404  variables.push_back(varowner.back());
2405  varowner.push_back(Monitored::Collection(type+"_coin_bunch",tgcTrigs,[](const TgcTrig&m){return m.bunch;}));
2406  variables.push_back(varowner.back());
2407  varowner.push_back(Monitored::Collection(type+"_coin_roi",tgcTrigs,[](const TgcTrig&m){return m.roi;}));
2408  variables.push_back(varowner.back());
2409  varowner.push_back(Monitored::Collection(type+"_coin_sector",tgcTrigs,[](const TgcTrig&m){return m.sector;}));
2410  variables.push_back(varowner.back());
2411  varowner.push_back(Monitored::Collection(type+"_coin_pt",tgcTrigs,[](const TgcTrig&m){return m.pt & 0xF;}));
2412  variables.push_back(varowner.back());
2413  varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagQ",tgcTrigs,[](const TgcTrig&m){return m.isPositiveDeltaR;}));
2414  variables.push_back(varowner.back());
2415  varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagQpos",tgcTrigs,[](const TgcTrig&m){return m.isPositiveDeltaR==0;}));
2416  variables.push_back(varowner.back());
2417  varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagQneg",tgcTrigs,[](const TgcTrig&m){return m.isPositiveDeltaR==1;}));
2418  variables.push_back(varowner.back());
2419  varowner.push_back(Monitored::Collection(type+"_coin_CoinFlags",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlags)&0x7;}));
2420  variables.push_back(varowner.back());
2421  varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagF",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlagF)&0x1;}));
2422  variables.push_back(varowner.back());
2423  varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagC",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlagC)&0x1;}));
2424  variables.push_back(varowner.back());
2425  varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagH",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlagH)&0x1;}));
2426  variables.push_back(varowner.back());
2427  varowner.push_back(Monitored::Collection(type+"_coin_InnerCoinType",tgcTrigs,[](const TgcTrig&m){return (m.pt>>InnerCoinFlags)&0xF;}));
2428  variables.push_back(varowner.back());
2429  varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagEI",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlagEI)&0x1;}));
2430  variables.push_back(varowner.back());
2431  varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagTile",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlagTile)&0x1;}));
2432  variables.push_back(varowner.back());
2433  varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagRPC",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlagRPC)&0x1;}));
2434  variables.push_back(varowner.back());
2435  varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagNSW",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlagNSW)&0x1;}));
2436  variables.push_back(varowner.back());
2437  varowner.push_back(Monitored::Collection(type+"_coin_veto",tgcTrigs,[](const TgcTrig&m){return m.veto;}));
2438  variables.push_back(varowner.back());
2439  varowner.push_back(Monitored::Collection(type+"_coin_veto_sector",tgcTrigs,[](const TgcTrig&m){return (m.veto==1)?(m.sector):(-1);}));
2440  variables.push_back(varowner.back());
2441  varowner.push_back(Monitored::Collection(type+"_coin_veto_roi",tgcTrigs,[](const TgcTrig&m){return (m.veto==1)?(m.roi):(-1);}));
2442  variables.push_back(varowner.back());
2443  varowner.push_back(Monitored::Collection(type+"_coin_isPositiveDeltaR",tgcTrigs,[](const TgcTrig&m){return m.isPositiveDeltaR;}));
2444  variables.push_back(varowner.back());
2445  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt1",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==1);}));
2446  variables.push_back(varowner.back());
2447  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt2",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==2);}));
2448  variables.push_back(varowner.back());
2449  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt3",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==3);}));
2450  variables.push_back(varowner.back());
2451  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt4",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==4);}));
2452  variables.push_back(varowner.back());
2453  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt5",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==5);}));
2454  variables.push_back(varowner.back());
2455  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt6",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==6);}));
2456  variables.push_back(varowner.back());
2457  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt7",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==7);}));
2458  variables.push_back(varowner.back());
2459  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt8",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==8);}));
2460  variables.push_back(varowner.back());
2461  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt9",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==9);}));
2462  variables.push_back(varowner.back());
2463  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt10",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==10);}));
2464  variables.push_back(varowner.back());
2465  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt11",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==11);}));
2466  variables.push_back(varowner.back());
2467  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt12",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==12);}));
2468  variables.push_back(varowner.back());
2469  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt13",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==13);}));
2470  variables.push_back(varowner.back());
2471  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt14",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==14);}));
2472  variables.push_back(varowner.back());
2473  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt15",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==15);}));
2474  variables.push_back(varowner.back());
2475 }

◆ 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 2476 of file TgcRawDataMonitorAlgorithm.cxx.

2481  {
2482  for(const auto& ext : extpositions_pivot){
2483  if(ext.muon->pt() < m_pTCutOnTrigExtrapolation.value() )continue;
2484  bool matched = false;
2485  bool matchedQ = false;
2486  bool matchedF = false;
2487  bool matchedC = false;
2488  bool matchedH = false;
2489  bool matchedEI = false;
2490  bool matchedTile = false;
2491  bool matchedRPC = false;
2492  bool matchedNSW = false;
2493  for(const auto& tgcTrig : tgcTrigs){
2494  if(tgcTrig.bunch!=0)continue; // only the current bunch
2495  if(tgcTrig.isAside==1 && ext.extPos.z()<0)continue;
2496  if(tgcTrig.isAside==0 && ext.extPos.z()>0)continue;
2497  if(tgcTrig.type == Muon::TgcCoinData::TYPE_SL){
2498  const Amg::Vector3D posOut(tgcTrig.x_Out,tgcTrig.y_Out,tgcTrig.z_Out);
2499  if( Amg::deltaR(posOut,ext.extPos) > m_l1trigMatchWindowPt15 )continue;
2500  }else{
2501  TVector2 vec(tgcTrig.x_Out,tgcTrig.y_Out);
2502  double deltaPhi = vec.DeltaPhi( TVector2(ext.extPos.x(), ext.extPos.y()) );
2503  double deltaR = vec.Mod() - TVector2(ext.extPos.x(), ext.extPos.y()).Mod();
2504  if( std::abs(deltaPhi) > m_dPhiCutOnM3 || std::abs(deltaR) > m_dRCutOnM3 )continue;
2505  }
2506  matched |= 1;
2507  int charge = (tgcTrig.isPositiveDeltaR==0) ? (-1) : (+1);
2508  matchedQ |= (ext.muon->charge()*charge>0);
2509  matchedF |= (tgcTrig.pt>>CoinFlagF) & 0x1;
2510  matchedC |= (tgcTrig.pt>>CoinFlagC) & 0x1;
2511  matchedH |= (tgcTrig.pt>>CoinFlagH) & 0x1;
2512  matchedEI |= (tgcTrig.pt>>CoinFlagEI) & 0x1;
2513  matchedTile |= (tgcTrig.pt>>CoinFlagTile) & 0x1;
2514  matchedRPC |= (tgcTrig.pt>>CoinFlagRPC) & 0x1;
2515  matchedNSW |= (tgcTrig.pt>>CoinFlagNSW) & 0x1;
2516  }
2517  ExtTrigInfo extTrigInfo;
2518  extTrigInfo.eta = ext.extPos.eta();
2519  extTrigInfo.phi = ext.extPos.phi();
2520  extTrigInfo.matched = matched;
2521  extTrigInfo.matchedQ = matchedQ;
2522  extTrigInfo.matchedF = matchedF;
2523  extTrigInfo.matchedC = matchedC;
2524  extTrigInfo.matchedH = matchedH;
2525  extTrigInfo.matchedEI = matchedEI;
2526  extTrigInfo.matchedTile = matchedTile;
2527  extTrigInfo.matchedRPC = matchedRPC;
2528  extTrigInfo.matchedNSW = matchedNSW;
2529  extTrigInfoVec.push_back(extTrigInfo);
2530  }
2531  varowner.push_back(Monitored::Collection(type+"_coin_ext_eta",extTrigInfoVec,[](const ExtTrigInfo&m){return m.eta;}));
2532  variables.push_back(varowner.back());
2533  varowner.push_back(Monitored::Collection(type+"_coin_ext_phi",extTrigInfoVec,[](const ExtTrigInfo&m){return m.phi;}));
2534  variables.push_back(varowner.back());
2535  varowner.push_back(Monitored::Collection(type+"_coin_ext_matched",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matched;}));
2536  variables.push_back(varowner.back());
2537  varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_eta",extTrigInfoVec,[](const ExtTrigInfo&m){return (m.matched)?m.eta:(-10);}));
2538  variables.push_back(varowner.back());
2539  varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_phi",extTrigInfoVec,[](const ExtTrigInfo&m){return (m.matched)?m.phi:(-10);}));
2540  variables.push_back(varowner.back());
2541  varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagQ",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedQ;}));
2542  variables.push_back(varowner.back());
2543  varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagF",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedF;}));
2544  variables.push_back(varowner.back());
2545  varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagC",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedC;}));
2546  variables.push_back(varowner.back());
2547  varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagH",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedH;}));
2548  variables.push_back(varowner.back());
2549  varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagEI",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedEI;}));
2550  variables.push_back(varowner.back());
2551  varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagTile",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedTile;}));
2552  variables.push_back(varowner.back());
2553  varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagRPC",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedRPC;}));
2554  variables.push_back(varowner.back());
2555  varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagNSW",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedNSW;}));
2556  variables.push_back(varowner.back());
2557 }

◆ 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 2701 of file TgcRawDataMonitorAlgorithm.cxx.

2701  {
2702  if (m_anaTgcPrd) {
2703  ATH_MSG_DEBUG("m_anaTgcPrd = True");
2705  const MuonGM::MuonDetectorManager* muonMgr = DetectorManagerHandle.cptr();
2707  std::map<const xAOD::Muon*, std::set<std::string>> map_muon_and_tgchits;
2708  if(tgcPrd.isValid() && muonMgr!=nullptr){
2709  ATH_MSG_DEBUG("Filling TGC PRD histograms");
2710  const TgcIdHelper &tgcIdHelper = m_idHelperSvc->tgcIdHelper();
2711  std::vector < TGC::TgcHit > tgcHits;
2712  std::map<std::string, std::vector<TGC::TgcHit>> tgcHitsMap;
2713  for (const auto tgccnt : *tgcPrd) {
2714  for (const auto data : *tgccnt) {
2715  const MuonGM::TgcReadoutElement *element = data->detectorElement();
2716  const Identifier id = data->identify();
2717  const int gasGap = tgcIdHelper.gasGap(id);
2718  const int channel = tgcIdHelper.channel(id);
2719  const bool isStrip = tgcIdHelper.isStrip(id);
2720  const Amg::Vector3D &pos = isStrip ? element->stripPos(gasGap, channel) : element->wireGangPos(gasGap, channel);
2721  const double shortWidth = (isStrip)?(element->stripShortWidth(gasGap, channel)):(element->gangShortWidth(gasGap, channel));
2722  const double longWidth = (isStrip)?(element->stripLongWidth(gasGap, channel)):(element->gangLongWidth(gasGap, channel));
2723  const double length = (isStrip)?(element->stripLength()):(element->gangRadialLength(gasGap, channel));
2724  const int bcmask = data->getBcBitMap();
2725  TGC::TgcHit tgcHit(pos[0],pos[1],pos[2],
2726  shortWidth,longWidth, length,
2727  isStrip,gasGap,channel,tgcIdHelper.stationEta(id),tgcIdHelper.stationPhi(id),tgcIdHelper.stationName(id),
2728  bcmask);
2729  if(extpositions.find(tgcHit.cham_name())!=extpositions.end()){
2730  for(auto& cham : extpositions[tgcHit.cham_name()]){
2731  double newX = cham.extPos.x() + cham.extVec.x() / cham.extVec.z() * ( tgcHit.Z() - cham.extPos.z() );
2732  double newY = cham.extPos.y() + cham.extVec.y() / cham.extVec.z() * ( tgcHit.Z() - cham.extPos.z() );
2733  Identifier id2 = muonMgr->tgcIdHelper()->elementID(tgcHit.StationName(), tgcHit.StationEta(), tgcHit.StationPhi());
2734 
2735  auto detEle = muonMgr->getTgcReadoutElement(id2);
2736  double chamPhi = detEle->center().phi();
2737  TVector2 extPos(newX,newY);
2738  TVector2 hitPos(tgcHit.X(),tgcHit.Y());
2739  TVector2 rot_extPos = extPos.Rotate(-chamPhi + M_PI/2.);
2740  TVector2 rot_hitPos = hitPos.Rotate(-chamPhi + M_PI/2.);
2741  double res = (tgcHit.isStrip())? std::sin( rot_extPos.DeltaPhi( rot_hitPos ) ) * rot_extPos.Mod(): rot_hitPos.Y() - rot_extPos.Y();
2742  tgcHit.addResidual( cham.muon, res );
2743  if( std::abs(res) < m_residualWindow ){
2744  cham.chambersHasHit.insert(tgcHit.type_name());
2745  map_muon_and_tgchits[cham.muon].insert(tgcHit.channel_name());
2746  }
2747  }
2748  }
2749  tgcHits.push_back(tgcHit);
2750  tgcHitsMap[tgcHit.cham_name() + ( (tgcHit.isStrip())?("S"):("W") )].push_back(tgcHit); // <- chamber-by-chamber residual plots
2751  tgcHitsMap[tgcHit.type_name()].push_back(tgcHit); // <- gap-by-gap channel occupancy plots
2752  }
2753  }
2754 
2755  std::map<std::string, std::vector<int>> tgcHitPhiMap;
2756  std::map<std::string, std::vector<int>> tgcHitEtaMap;
2757  std::map<std::string, std::vector<int>> tgcHitPhiMapGlobal;
2758  std::map<std::string, std::vector<int>> tgcHitTiming;
2759  std::map<std::string, std::vector<int>> tgcHitPhiMapGlobalWithTrack;
2760  std::map<std::string, std::vector<int>> tgcHitTimingWithTrack;
2761  std::map<const std::string, std::vector<TGC::TgcHit>> tgcHitBCMaskMap;
2762  std::vector <int> vec_bw24sectors; // 1..12 BW-A, -1..-12 BW-C
2763  std::vector <int> vec_bw24sectors_wire;
2764  std::vector <int> vec_bw24sectors_strip;
2765  std::vector <int> vec_bwfulleta; // 0(Forward), 1..4(M1), 1..5(M2,M3)
2766  std::vector <int> vec_bwfulleta_wire;
2767  std::vector <int> vec_bwfulleta_strip;
2768  std::vector <int> vec_bwtiming;
2769  std::vector <int> vec_bwtiming_wire;
2770  std::vector <int> vec_bwtiming_strip;
2771  std::vector <int> vec_bw24sectors_wTrack; // 1..12 BW-A, -1..-12 BW-C
2772  std::vector <int> vec_bw24sectors_wire_wTrack;
2773  std::vector <int> vec_bw24sectors_strip_wTrack;
2774  std::vector <int> vec_bwfulleta_wTrack; // 0(Forward), 1..4(M1), 1..5(M2,M3)
2775  std::vector <int> vec_bwfulleta_wire_wTrack;
2776  std::vector <int> vec_bwfulleta_strip_wTrack;
2777  std::vector <int> vec_bwtiming_wTrack;
2778  std::vector <int> vec_bwtiming_wire_wTrack;
2779  std::vector <int> vec_bwtiming_strip_wTrack;
2780  for(const auto& tgcHit : tgcHits){
2781  bool hasAssociatedGoodMuonTrack = false;
2782  for(const auto& res : tgcHit.residuals()){
2783  const xAOD::Muon* muon = res.first;
2784  if(map_muon_and_tgchits[muon].find(tgcHit.channel_name()) == map_muon_and_tgchits[muon].end()) continue;
2785  int nWhits = 0;
2786  int nShits = 0;
2787  for(const auto& chamHasHit : map_muon_and_tgchits[muon]){
2788  if( chamHasHit.find(tgcHit.gap_name()) != std::string::npos ) continue; // skipping the same gap
2789  if( chamHasHit.find("M04") != std::string::npos ) continue; // skipping EI/FI
2790  if( chamHasHit.find('W') != std::string::npos ) nWhits++;
2791  if( chamHasHit.find('S') != std::string::npos ) nShits++;
2792  }
2793  if(nWhits < m_nHitsInOtherBWTGCWire) continue;
2794  if(nShits < m_nHitsInOtherBWTGCStrip) continue;
2795  hasAssociatedGoodMuonTrack = true;
2796  break;
2797  }
2798 
2799  // debugging purpose: should be False by default
2800  if(m_dumpFullChannelList)ATH_MSG_INFO("TGCHIT: " << tgcHit.channel_name());
2801 
2802  // BCID analysis for TGC TTCrx delay scan
2803  if(hasAssociatedGoodMuonTrack) tgcHitBCMaskMap[tgcHit.channel_name()].push_back(tgcHit);
2804 
2805  std::string station_name = Form("%sM%02d%s",(tgcHit.iSide()==TGC::TGCSIDE::TGCASIDE)?("A"):("C"),tgcHit.iM(),(tgcHit.isStrip())?("S"):("W"));
2806  int phimap_index = 0;
2807  int etamap_index = 0;
2808  int phimap_global_index = 0; // no empty bins compare to the above index
2809  m_tgcMonTool->getMapIndex(tgcHit,etamap_index,phimap_index,phimap_global_index );
2810  for(int bunch = -1 ; bunch <= +1 ; bunch++){
2811  if(bunch==-1 && (tgcHit.bcmask()&Muon::TgcPrepData::BCBIT_PREVIOUS)==0)continue;
2812  if(bunch== 0 && (tgcHit.bcmask()&Muon::TgcPrepData::BCBIT_CURRENT)==0)continue;
2813  if(bunch==+1 && (tgcHit.bcmask()&Muon::TgcPrepData::BCBIT_NEXT)==0)continue;
2814  tgcHitPhiMap[station_name].push_back(phimap_index);
2815  tgcHitEtaMap[station_name].push_back(etamap_index);
2816  tgcHitPhiMapGlobal[station_name].push_back(phimap_global_index);
2817  tgcHitTiming[station_name].push_back(bunch);
2818  if(hasAssociatedGoodMuonTrack){
2819  tgcHitPhiMapGlobalWithTrack[station_name].push_back(phimap_global_index);
2820  tgcHitTimingWithTrack[station_name].push_back(bunch);
2821  }
2822 
2823  if(tgcHit.iM()!=4){
2824  vec_bw24sectors.push_back((tgcHit.iSide()==TGC::TGCSIDE::TGCASIDE)?(tgcHit.iSec()):(-tgcHit.iSec()));
2825  vec_bwfulleta.push_back(tgcHit.iEta());
2826  vec_bwtiming.push_back(bunch);
2827  if(hasAssociatedGoodMuonTrack){
2828  vec_bw24sectors_wTrack.push_back((tgcHit.iSide()==TGC::TGCSIDE::TGCASIDE)?(tgcHit.iSec()):(-tgcHit.iSec()));
2829  vec_bwfulleta_wTrack.push_back(tgcHit.iEta());
2830  vec_bwtiming_wTrack.push_back(bunch);
2831  }
2832  if(tgcHit.isStrip()){
2833  vec_bw24sectors_strip.push_back((tgcHit.iSide()==TGC::TGCSIDE::TGCASIDE)?(tgcHit.iSec()):(-tgcHit.iSec()));
2834  vec_bwfulleta_strip.push_back(tgcHit.iEta());
2835  vec_bwtiming_strip.push_back(bunch);
2836  if(hasAssociatedGoodMuonTrack){
2837  vec_bw24sectors_strip_wTrack.push_back((tgcHit.iSide()==TGC::TGCSIDE::TGCASIDE)?(tgcHit.iSec()):(-tgcHit.iSec()));
2838  vec_bwfulleta_strip_wTrack.push_back(tgcHit.iEta());
2839  vec_bwtiming_strip_wTrack.push_back(bunch);
2840  }
2841  }else{
2842  vec_bw24sectors_wire.push_back((tgcHit.iSide()==TGC::TGCSIDE::TGCASIDE)?(tgcHit.iSec()):(-tgcHit.iSec()));
2843  vec_bwfulleta_wire.push_back(tgcHit.iEta());
2844  vec_bwtiming_wire.push_back(bunch);
2845  if(hasAssociatedGoodMuonTrack){
2846  vec_bw24sectors_wire_wTrack.push_back((tgcHit.iSide()==TGC::TGCSIDE::TGCASIDE)?(tgcHit.iSec()):(-tgcHit.iSec()));
2847  vec_bwfulleta_wire_wTrack.push_back(tgcHit.iEta());
2848  vec_bwtiming_wire_wTrack.push_back(bunch);
2849  }
2850  }
2851  }
2852  }
2853  }
2854 
2855  ATH_MSG_DEBUG("filling hit_variables");
2856 
2857  MonVariables hit_variables;
2858  hit_variables.push_back(mon_bcid);
2859  hit_variables.push_back(mon_pileup);
2860  hit_variables.push_back(mon_lb);
2861 
2862  auto hit_n = Monitored::Scalar<int>("hit_n", tgcHits.size());
2863  hit_variables.push_back(hit_n);
2864 
2865  auto hit_bcmask=Monitored::Collection("hit_bcmask",tgcHits,[](const TGC::TgcHit&m){return m.bcmask();});
2866  hit_variables.push_back(hit_bcmask);
2867 
2868  auto hit_sideA=Monitored::Collection("hit_sideA",tgcHits,[](const TGC::TgcHit&m){return m.Z()>0;});
2869  hit_variables.push_back(hit_sideA);
2870 
2871  auto hit_sideC=Monitored::Collection("hit_sideC",tgcHits,[](const TGC::TgcHit&m){return m.Z() < 0;});
2872  hit_variables.push_back(hit_sideC);
2873 
2874  auto hit_bw24sectors=Monitored::Collection("hit_bw24sectors",vec_bw24sectors,[](const int&m){return m;});
2875  hit_variables.push_back(hit_bw24sectors);
2876  auto hit_bw24sectors_strip=Monitored::Collection("hit_bw24sectors_strip",vec_bw24sectors_strip,[](const int&m){return m;});
2877  hit_variables.push_back(hit_bw24sectors_strip);
2878  auto hit_bw24sectors_wire=Monitored::Collection("hit_bw24sectors_wire",vec_bw24sectors_wire,[](const int&m){return m;});
2879  hit_variables.push_back(hit_bw24sectors_wire);
2880  auto hit_bwfulleta=Monitored::Collection("hit_bwfulleta",vec_bwfulleta,[](const int&m){return m;});
2881  hit_variables.push_back(hit_bwfulleta);
2882  auto hit_bwfulleta_strip=Monitored::Collection("hit_bwfulleta_strip",vec_bwfulleta_strip,[](const int&m){return m;});
2883  hit_variables.push_back(hit_bwfulleta_strip);
2884  auto hit_bwfulleta_wire=Monitored::Collection("hit_bwfulleta_wire",vec_bwfulleta_wire,[](const int&m){return m;});
2885  hit_variables.push_back(hit_bwfulleta_wire);
2886  auto hit_bwtiming=Monitored::Collection("hit_bwtiming",vec_bwtiming,[](const int&m){return m;});
2887  hit_variables.push_back(hit_bwtiming);
2888  auto hit_bwtiming_strip=Monitored::Collection("hit_bwtiming_strip",vec_bwtiming_strip,[](const int&m){return m;});
2889  hit_variables.push_back(hit_bwtiming_strip);
2890  auto hit_bwtiming_wire=Monitored::Collection("hit_bwtiming_wire",vec_bwtiming_wire,[](const int&m){return m;});
2891  hit_variables.push_back(hit_bwtiming_wire);
2892 
2893  auto hit_bw24sectors_wTrack=Monitored::Collection("hit_bw24sectors_wTrack",vec_bw24sectors_wTrack,[](const int&m){return m;});
2894  hit_variables.push_back(hit_bw24sectors_wTrack);
2895  auto hit_bw24sectors_strip_wTrack=Monitored::Collection("hit_bw24sectors_strip_wTrack",vec_bw24sectors_strip_wTrack,[](const int&m){return m;});
2896  hit_variables.push_back(hit_bw24sectors_strip_wTrack);
2897  auto hit_bw24sectors_wire_wTrack=Monitored::Collection("hit_bw24sectors_wire_wTrack",vec_bw24sectors_wire_wTrack,[](const int&m){return m;});
2898  hit_variables.push_back(hit_bw24sectors_wire_wTrack);
2899  auto hit_bwfulleta_wTrack=Monitored::Collection("hit_bwfulleta_wTrack",vec_bwfulleta_wTrack,[](const int&m){return m;});
2900  hit_variables.push_back(hit_bwfulleta_wTrack);
2901  auto hit_bwfulleta_strip_wTrack=Monitored::Collection("hit_bwfulleta_strip_wTrack",vec_bwfulleta_strip_wTrack,[](const int&m){return m;});
2902  hit_variables.push_back(hit_bwfulleta_strip_wTrack);
2903  auto hit_bwfulleta_wire_wTrack=Monitored::Collection("hit_bwfulleta_wire_wTrack",vec_bwfulleta_wire_wTrack,[](const int&m){return m;});
2904  hit_variables.push_back(hit_bwfulleta_wire_wTrack);
2905  auto hit_bwtiming_wTrack=Monitored::Collection("hit_bwtiming_wTrack",vec_bwtiming_wTrack,[](const int&m){return m;});
2906  hit_variables.push_back(hit_bwtiming_wTrack);
2907  auto hit_bwtiming_strip_wTrack=Monitored::Collection("hit_bwtiming_strip_wTrack",vec_bwtiming_strip_wTrack,[](const int&m){return m;});
2908  hit_variables.push_back(hit_bwtiming_strip_wTrack);
2909  auto hit_bwtiming_wire_wTrack=Monitored::Collection("hit_bwtiming_wire_wTrack",vec_bwtiming_wire_wTrack,[](const int&m){return m;});
2910  hit_variables.push_back(hit_bwtiming_wire_wTrack);
2911 
2912  std::vector<Monitored::ObjectsCollection<std::vector<int>, double>> varowner;
2913  varowner.reserve(tgcHitPhiMap.size() * 2 + tgcHitPhiMapGlobal.size() * 2 + tgcHitPhiMapGlobalWithTrack.size() * 2);
2914  for (const auto &phimap : tgcHitPhiMap) {
2915  varowner.push_back(Monitored::Collection(Form("hit_x_%s",phimap.first.data()),tgcHitEtaMap[phimap.first],[](const int&m){return m;}));
2916  hit_variables.push_back(varowner.back());
2917  varowner.push_back(Monitored::Collection(Form("hit_y_%s", phimap.first.data()),phimap.second,[](const int&m){return m;}));
2918  hit_variables.push_back(varowner.back());
2919  }
2920  for (const auto &phimap : tgcHitPhiMapGlobal) {
2921  varowner.push_back(Monitored::Collection(Form("hit_glblphi_%s", phimap.first.data()),phimap.second,[](const int&m){return m;}));
2922  hit_variables.push_back(varowner.back());
2923  varowner.push_back(Monitored::Collection(Form("hit_bunch_%s", phimap.first.data()),tgcHitTiming[phimap.first],[](const int&m){return m;}));
2924  hit_variables.push_back(varowner.back());
2925  }
2926  for (const auto &phimap : tgcHitPhiMapGlobalWithTrack) {
2927  varowner.push_back(Monitored::Collection(Form("hit_glblphi_wTrack_%s", phimap.first.data()),phimap.second,[](const int&m){return m;}));
2928  hit_variables.push_back(varowner.back());
2929  varowner.push_back(Monitored::Collection(Form("hit_bunch_wTrack_%s", phimap.first.data()),tgcHitTimingWithTrack[phimap.first],[](const int&m){return m;}));
2930  hit_variables.push_back(varowner.back());
2931  }
2932 
2933  // BCMask plots (for TTCrx gate delay scan)
2934  std::map<std::string, std::vector<int>> tgcHitBCMaskGlobalIndex;
2935  std::map<std::string, std::vector<int>> tgcHitBCMask;
2936  std::map<std::string, std::vector<int>> tgcHitBCMaskBWSectors;
2937  std::map<std::string, std::vector<int>> tgcHitBCMaskForBWSectors;
2938  for(const auto& channelNameAndBCMask : tgcHitBCMaskMap){
2939  if(m_maskChannelList.find(channelNameAndBCMask.first)!=m_maskChannelList.end())continue; // skipping problematic channels
2940  std::string chamberNameWithWS = channelNameAndBCMask.first.substr(0,16); // e.g. A01M01f01E01L01W
2941  int thisChannel = std::atoi( channelNameAndBCMask.first.substr(18,3).data() ); // e.g. 001 of "Ch001"
2942  std::string prev1ChannelName = Form("%sCh%03d",chamberNameWithWS.data(),thisChannel-1);
2943  std::string next1ChannelName = Form("%sCh%03d",chamberNameWithWS.data(),thisChannel+1);
2944  // vetoing if neighboring channels have hits to avoid cross-talk effect
2945  if(tgcHitBCMaskMap.find(prev1ChannelName)!=tgcHitBCMaskMap.end())continue;
2946  if(tgcHitBCMaskMap.find(next1ChannelName)!=tgcHitBCMaskMap.end())continue;
2947  std::string cham_name = channelNameAndBCMask.first.substr(0,12); // e.g. A01M01f01E01
2948  int iLay = std::atoi( channelNameAndBCMask.first.substr(13,2).data() );
2949  TGC::TgcChamber cham; cham.initChamber(cham_name);
2950  int phimap_index = 0;
2951  int etamap_index = 0;
2952  int phimap_global_index = 0;
2953  if(!m_tgcMonTool->getMapIndex(cham,iLay,etamap_index,phimap_index,phimap_global_index ))continue;
2954  std::string station_name = Form("%sM%02d%s",(cham.iSide()==TGC::TGCSIDE::TGCASIDE)?("A"):("C"),cham.iM(),channelNameAndBCMask.first.substr(15,1).data());
2955  for(const auto& tgcHit : channelNameAndBCMask.second){
2956  tgcHitBCMaskGlobalIndex[station_name].push_back(phimap_global_index);
2957  tgcHitBCMask[station_name].push_back(tgcHit.bcmask());
2958  if(cham.iM()!=4){
2959  tgcHitBCMaskBWSectors["All"].push_back( (cham.iSide()==TGC::TGCSIDE::TGCASIDE)?( +1 * cham.iSec() ):(-1 * cham.iSec()) );
2960  tgcHitBCMaskForBWSectors["All"].push_back(tgcHit.bcmask());
2961  if(chamberNameWithWS.find('W')!=std::string::npos){
2962  tgcHitBCMaskBWSectors["Wire"].push_back( (cham.iSide()==TGC::TGCSIDE::TGCASIDE)?( +1 * cham.iSec() ):(-1 * cham.iSec()) );
2963  tgcHitBCMaskForBWSectors["Wire"].push_back(tgcHit.bcmask());
2964  }else{
2965  tgcHitBCMaskBWSectors["Strip"].push_back( (cham.iSide()==TGC::TGCSIDE::TGCASIDE)?( +1 * cham.iSec() ):(-1 * cham.iSec()) );
2966  tgcHitBCMaskForBWSectors["Strip"].push_back(tgcHit.bcmask());
2967  }
2968  }
2969  }
2970  }
2971  std::vector<Monitored::ObjectsCollection<std::vector<int>, double>> varowner_bcmask;
2972  varowner_bcmask.reserve(tgcHitBCMask.size() * 2 + tgcHitBCMaskBWSectors.size() * 2);
2973  for(const auto& chamType : tgcHitBCMaskBWSectors){
2974  varowner_bcmask.push_back(Monitored::Collection(Form("hit_bcmask_bw24sectors_%s",chamType.first.data()),chamType.second,[](const int&m){return m;}));
2975  hit_variables.push_back(varowner_bcmask.back());
2976  varowner_bcmask.push_back(Monitored::Collection(Form("hit_bcmask_for_bw24sectors_%s",chamType.first.data()),tgcHitBCMaskForBWSectors[chamType.first],[](const int&m){return m;}));
2977  hit_variables.push_back(varowner_bcmask.back());
2978  }
2979  for(const auto& stationNameAndBCMask : tgcHitBCMask){
2980  varowner_bcmask.push_back(Monitored::Collection(Form("hit_bcmask_glblphi_%s",stationNameAndBCMask.first.data()),tgcHitBCMaskGlobalIndex[stationNameAndBCMask.first],[](const int&m){return m;}));
2981  hit_variables.push_back(varowner_bcmask.back());
2982  varowner_bcmask.push_back(Monitored::Collection(Form("hit_bcmask_%s",stationNameAndBCMask.first.data()),stationNameAndBCMask.second,[](const int&m){return m;}));
2983  hit_variables.push_back(varowner_bcmask.back());
2984  }
2985 
2986  // gap-by-gap efficiency by track extrapolation
2987  ATH_MSG_DEBUG("preparing for efficiency plots");
2988  std::map<std::string, std::vector<double>> tgcEffPhiMap_Denominator;
2989  std::map<std::string, std::vector<double>> tgcEffEtaMap_Denominator;
2990  std::map<std::string, std::vector<double>> tgcEffPhiMapGlobal_Denominator;
2991  std::map<std::string, std::vector<double>> tgcEffPhiMap_Numerator;
2992  std::map<std::string, std::vector<double>> tgcEffEtaMap_Numerator;
2993  std::map<std::string, std::vector<double>> tgcEffPhiMapGlobal_Numerator;
2994  std::map<std::string, std::vector<double>> tgcEffMapExtX;
2995  std::map<std::string, std::vector<double>> tgcEffMapExtY;
2996  std::map<std::string, std::vector<double>> tgcEffMapHasHit;
2997  for(const auto& exts : extpositions){
2998  const std::string& cham_name = exts.first;
2999  TGC::TgcChamber cham; cham.initChamber(cham_name);
3000  // local-coordinate x'-y'
3001  Identifier id2 = muonMgr->tgcIdHelper()->elementID(cham.StationName(), cham.StationEta(), cham.StationPhi());
3002  auto detEle = muonMgr->getTgcReadoutElement(id2);
3003  for(const auto& ext : exts.second){ // how often tracks are extrapolated to this chamber surface,e.i. denominator
3004  Amg::Vector3D extPosLocal = detEle->transform().inverse() * ext.extPos;
3005  Amg::Vector3D extVecLocal = detEle->transform().inverse() * ext.extVec;
3006  for(int iLay = 1 ; iLay <= 3 ; iLay++){
3007  int phimap_index = 0;
3008  int etamap_index = 0;
3009  int phimap_global_index = 0;
3010  if(!m_tgcMonTool->getMapIndex(cham,iLay,etamap_index,phimap_index,phimap_global_index ))continue;
3011 
3012  double newX = extPosLocal.x() - extVecLocal.x() / extVecLocal.z() * extPosLocal.z();
3013  double newY = extPosLocal.y() - extVecLocal.y() / extVecLocal.z() * extPosLocal.z();
3014  for(int iSorW = 0 ; iSorW < 2 ; iSorW++){
3015  if(cham.iM()==1 && iLay==2 && iSorW==0)continue;
3016  std::string gap_name = Form("%sL%02d",cham_name.data(),iLay);
3017  std::string type_name = Form("%sL%02d%s",cham_name.data(),iLay,(iSorW==0)?("S"):("W"));
3018  int nWhits = 0;
3019  int nShits = 0;
3020  for(const auto& chamHasHit : map_muon_and_tgchits[ext.muon]){
3021  if( chamHasHit.find(gap_name) != std::string::npos ) continue; // skipping the same gap
3022  if( chamHasHit.find("M04") != std::string::npos ) continue; // skipping EI/FI
3023  if( chamHasHit.find('W') != std::string::npos ) nWhits++;
3024  if( chamHasHit.find('S') != std::string::npos ) nShits++;
3025  }
3026  if(nWhits < m_nHitsInOtherBWTGCWire)continue;
3027  if(nShits < m_nHitsInOtherBWTGCStrip)continue;
3028  std::string station_name = Form("%sM%02d%s",(cham.iSide()==TGC::TGCSIDE::TGCASIDE)?("A"):("C"),cham.iM(),(iSorW==0)?("S"):("W"));
3029  tgcEffPhiMap_Denominator[station_name].push_back(phimap_index);
3030  tgcEffEtaMap_Denominator[station_name].push_back(etamap_index);
3031  tgcEffPhiMapGlobal_Denominator[station_name].push_back(phimap_global_index);
3032  tgcEffMapExtX[type_name].push_back(newX);
3033  tgcEffMapExtY[type_name].push_back(newY);
3034  double hitExist = 0;
3035  if( ext.chambersHasHit.find(type_name) != ext.chambersHasHit.end()) hitExist=1;
3036  tgcEffPhiMap_Numerator[station_name].push_back(hitExist);
3037  tgcEffEtaMap_Numerator[station_name].push_back(hitExist);
3038  tgcEffPhiMapGlobal_Numerator[station_name].push_back(hitExist);
3039  tgcEffMapHasHit[type_name].push_back(hitExist);
3040 
3041  }
3042  }
3043  }
3044  }
3045 
3046  std::vector<Monitored::ObjectsCollection<std::vector<double>, double>> varowner_hiteff;
3047  std::vector<Monitored::ObjectsCollection<std::vector<TGC::TgcHit>, double>> varowner_eachchamber;
3048  std::vector<Monitored::ObjectsCollection<std::vector<double>, double>> varowner_eachchamber_double;
3049  std::map<std::string,std::vector<double>> cham_and_res;
3050 
3052 
3053  ATH_MSG_DEBUG("hit efficiency plots");
3054  varowner_hiteff.reserve(tgcEffPhiMap_Denominator.size() * 4 + tgcEffPhiMapGlobal_Denominator.size() * 2 + tgcEffMapHasHit.size() * 3);
3055  for (const auto &phimap : tgcEffPhiMap_Denominator) {
3056  varowner_hiteff.push_back(Monitored::Collection(Form("hit_effden_x_%s",phimap.first.data()),tgcEffEtaMap_Denominator[phimap.first],[](const double&m){return m;}));
3057  hit_variables.push_back(varowner_hiteff.back());
3058  varowner_hiteff.push_back(Monitored::Collection(Form("hit_effden_y_%s", phimap.first.data()),tgcEffPhiMap_Denominator[phimap.first],[](const double&m){return m;}));
3059  hit_variables.push_back(varowner_hiteff.back());
3060  varowner_hiteff.push_back(Monitored::Collection(Form("hit_effnum_x_%s",phimap.first.data()),tgcEffEtaMap_Numerator[phimap.first],[](const double&m){return m;}));
3061  hit_variables.push_back(varowner_hiteff.back());
3062  varowner_hiteff.push_back(Monitored::Collection(Form("hit_effnum_y_%s", phimap.first.data()),tgcEffPhiMap_Numerator[phimap.first],[](const double&m){return m;}));
3063  hit_variables.push_back(varowner_hiteff.back());
3064  }
3065  for (const auto &phimap : tgcEffPhiMapGlobal_Denominator) {
3066  varowner_hiteff.push_back(Monitored::Collection(Form("hit_glblphi_effden_%s", phimap.first.data()),tgcEffPhiMapGlobal_Denominator[phimap.first],[](const double&m){return m;}));
3067  hit_variables.push_back(varowner_hiteff.back());
3068  varowner_hiteff.push_back(Monitored::Collection(Form("hit_glblphi_effnum_%s", phimap.first.data()),tgcEffPhiMapGlobal_Numerator[phimap.first],[](const double&m){return m;}));
3069  hit_variables.push_back(varowner_hiteff.back());
3070  }
3071  for(const auto& hiteffmap : tgcEffMapHasHit){
3072  varowner_hiteff.push_back(Monitored::Collection(Form("hit_localX_effden_%s", hiteffmap.first.data()),tgcEffMapExtX[hiteffmap.first],[](const double&m){return m;}));
3073  hit_variables.push_back(varowner_hiteff.back());
3074  varowner_hiteff.push_back(Monitored::Collection(Form("hit_localY_effden_%s", hiteffmap.first.data()),tgcEffMapExtY[hiteffmap.first],[](const double&m){return m;}));
3075  hit_variables.push_back(varowner_hiteff.back());
3076  varowner_hiteff.push_back(Monitored::Collection(Form("hit_effnum_%s", hiteffmap.first.data()),tgcEffMapHasHit[hiteffmap.first],[](const double&m){return m;}));
3077  hit_variables.push_back(varowner_hiteff.back());
3078  }
3079 
3080  ATH_MSG_DEBUG("gap-by-gap occupancy plots and residual plots");
3081  varowner_eachchamber.reserve(tgcHitsMap.size());
3082  varowner_eachchamber_double.reserve(tgcHitsMap.size());
3083  for (const auto &tgcHitMap : tgcHitsMap) {
3084  auto chanName = tgcHitMap.first;
3085  if(chanName.find('L')!=std::string::npos){ // individual gaps
3086  varowner_eachchamber.push_back(Monitored::Collection(Form("hit_on_%s",chanName.data()),tgcHitMap.second,[](const TGC::TgcHit&m){return m.channel();}));
3087  hit_variables.push_back(varowner_eachchamber.back());
3088  }else{ // only summed over the gaps
3089  for(const auto&tgcHit:tgcHitMap.second){
3090  for(const auto&tgcRes:tgcHit.residuals()){
3091  cham_and_res[chanName].push_back(tgcRes.second);
3092  }
3093  }
3094  varowner_eachchamber_double.push_back(Monitored::Collection(Form("hit_residual_on_%s",chanName.data()),cham_and_res[chanName],[](const double&m){return m;}));
3095  hit_variables.push_back(varowner_eachchamber_double.back());
3096  }
3097  }
3098 
3099  }
3100 
3101  ATH_MSG_DEBUG("before fill for hits");
3102  fill(m_packageName+"_TgcHit", hit_variables);
3103  ATH_MSG_DEBUG("End filling TGC PRD histograms");
3104  }else{
3105  ATH_MSG_WARNING("Couldn't get TGC PRD");
3106  }
3107  }
3108 }

◆ 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 2575 of file TgcRawDataMonitorAlgorithm.cxx.

2575  {
2577  for(const auto& item : m_thrMonList){
2578  std::vector<bool> passed;
2579  passed.reserve(mymuons.size());
2580  for(const auto& mymuon : mymuons){
2581  passed.push_back( mymuon.matchedL1Items.find(item) != mymuon.matchedL1Items.end() );
2582  }
2583  auto passed_rois = menuAndRoIs[item];
2584 
2585  MonVariables thrMonVariables;
2586 
2587  auto lumiBlock_l1item = Monitored::Scalar<int>(Form("lumiBlock_l1item_%s",item.data()),GetEventInfo(ctx)->lumiBlock());
2588  thrMonVariables.push_back(lumiBlock_l1item);
2589 
2590  auto muon_passed_l1item = Monitored::Collection(Form("muon_passed_l1item_%s",item.data()),passed);
2591  thrMonVariables.push_back(muon_passed_l1item);
2592 
2593  auto muon_eta_l1item=Monitored::Collection(Form("muon_eta_l1item_%s",item.data()),mymuons,[](const TimedMuon&m){
2594  return (m.muon->pt() > pt_30_cut) ? m.muon->eta() : -10;
2595  });
2596  thrMonVariables.push_back(muon_eta_l1item);
2597  auto muon_phi_l1item=Monitored::Collection(Form("muon_phi_l1item_%s",item.data()),mymuons,[](const TimedMuon&m){
2598  return (m.muon->pt() > pt_30_cut) ? m.muon->phi() : -10;
2599  });
2600  thrMonVariables.push_back(muon_phi_l1item);
2601  auto muon_pt_rpc_l1item=Monitored::Collection(Form("muon_pt_rpc_l1item_%s",item.data()),mymuons,[](const TimedMuon&m){
2602  return (std::abs(m.muon->eta()) < barrel_end) ? m.muon->pt() / Gaudi::Units::GeV : -10;
2603  });
2604  thrMonVariables.push_back(muon_pt_rpc_l1item);
2605  auto muon_pt_tgc_l1item=Monitored::Collection(Form("muon_pt_tgc_l1item_%s",item.data()),mymuons,[](const TimedMuon&m){
2606  return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end) ? m.muon->pt() / Gaudi::Units::GeV : -10;
2607  });
2608  thrMonVariables.push_back(muon_pt_tgc_l1item);
2609  auto muon_phi_rpc_l1item=Monitored::Collection(Form("muon_phi_rpc_l1item_%s",item.data()),mymuons,[](const TimedMuon&m){
2610  return (std::abs(m.muon->eta()) < barrel_end && m.muon->pt() > pt_30_cut) ? m.muon->phi() : -10;
2611  });
2612  thrMonVariables.push_back(muon_phi_rpc_l1item);
2613  auto muon_phi_tgc_l1item=Monitored::Collection(Form("muon_phi_tgc_l1item_%s",item.data()),mymuons,[](const TimedMuon&m){
2614  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;
2615  });
2616  thrMonVariables.push_back(muon_phi_tgc_l1item);
2617 
2618  auto l1item_roi_eta=Monitored::Collection(Form("l1item_roi_eta_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){return m->eta();});
2619  thrMonVariables.push_back(l1item_roi_eta);
2620  auto l1item_roi_phi=Monitored::Collection(Form("l1item_roi_phi_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){return m->phi();});
2621  thrMonVariables.push_back(l1item_roi_phi);
2622  auto l1item_roi_phi_rpc=Monitored::Collection(Form("l1item_roi_phi_rpc_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2623  return (m->getSource()==xAOD::MuonRoI::Barrel)?(m->phi()):(-10);
2624  });
2625  auto l1item_roi_phi_tgc=Monitored::Collection(Form("l1item_roi_phi_tgc_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2626  return (m->getSource()!=xAOD::MuonRoI::Barrel)?(m->phi()):(-10);
2627  });
2628  thrMonVariables.push_back(l1item_roi_phi_tgc);
2629 
2630  auto l1item_roi_phi_barrel=Monitored::Collection(Form("l1item_roi_phi_barrel_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2631  return (m->getSource() == xAOD::MuonRoI::Barrel) ? m->phi() : -10;
2632  });
2633  thrMonVariables.push_back(l1item_roi_phi_barrel);
2634  auto l1item_roi_phi_endcap=Monitored::Collection(Form("l1item_roi_phi_endcap_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2635  return (m->getSource() == xAOD::MuonRoI::Endcap) ? m->phi() : -10;
2636  });
2637  thrMonVariables.push_back(l1item_roi_phi_endcap);
2638  auto l1item_roi_phi_forward=Monitored::Collection(Form("l1item_roi_phi_forward_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2639  return (m->getSource() == xAOD::MuonRoI::Forward) ? m->phi() : -10;
2640  });
2641  thrMonVariables.push_back(l1item_roi_phi_forward);
2642  auto l1item_roi_sideA=Monitored::Collection(Form("l1item_roi_sideA_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2643  return m->getHemisphere() == xAOD::MuonRoI::Positive;
2644  });
2645  thrMonVariables.push_back(l1item_roi_sideA);
2646  auto l1item_roi_sideC=Monitored::Collection(Form("l1item_roi_sideC_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2647  return m->getHemisphere() == xAOD::MuonRoI::Negative;
2648  });
2649  thrMonVariables.push_back(l1item_roi_sideC);
2650 
2651  auto l1item_roi_roiNumber=Monitored::Collection(Form("l1item_roi_roiNumber_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2652  return m->getRoI();
2653  });
2654  thrMonVariables.push_back(l1item_roi_roiNumber);
2655 
2656  auto l1item_roi_sector = Monitored::Collection(Form("l1item_roi_sector_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m) {
2657  return (m->getHemisphere() == xAOD::MuonRoI::Positive)?(m->getSectorID()+1):(-1 * m->getSectorID()-1);
2658  });
2659  thrMonVariables.push_back(l1item_roi_sector);
2660  auto l1item_roi_barrel = Monitored::Collection(Form("l1item_roi_barrel_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m) {
2661  return m->getSource() == xAOD::MuonRoI::Barrel;
2662  });
2663  thrMonVariables.push_back(l1item_roi_barrel);
2664  auto l1item_roi_endcap = Monitored::Collection(Form("l1item_roi_endcap_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m) {
2665  return m->getSource() == xAOD::MuonRoI::Endcap;
2666  });
2667  thrMonVariables.push_back(l1item_roi_endcap);
2668  auto l1item_roi_forward = Monitored::Collection(Form("l1item_roi_forward_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m) {
2669  return m->getSource() == xAOD::MuonRoI::Forward;
2670  });
2671  thrMonVariables.push_back(l1item_roi_forward);
2672  auto l1item_roi_thrNumber=Monitored::Collection(Form("l1item_roi_thrNumber_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2673  return m->getThrNumber();
2674  });
2675  thrMonVariables.push_back(l1item_roi_thrNumber);
2676 
2677  auto l1item_roi_ismorecand=Monitored::Collection(Form("l1item_roi_ismorecand_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2678  return (m->getSource()==xAOD::MuonRoI::Barrel)?(m->isMoreCandInRoI()):(-1);
2679  });
2680  thrMonVariables.push_back(l1item_roi_ismorecand);
2681  auto l1item_roi_bw3coin=Monitored::Collection(Form("l1item_roi_bw3coin_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2682  return (m->getSource()!=xAOD::MuonRoI::Barrel)?(m->getBW3Coincidence()):(-1);
2683  });
2684  thrMonVariables.push_back(l1item_roi_bw3coin);
2685  auto l1item_roi_innercoin=Monitored::Collection(Form("l1item_roi_innercoin_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2686  return (m->getSource()!=xAOD::MuonRoI::Barrel)?(m->getInnerCoincidence()):(-1);
2687  });
2688  thrMonVariables.push_back(l1item_roi_innercoin);
2689  auto l1item_roi_goodmf=Monitored::Collection(Form("l1item_roi_goodmf_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2690  return (m->getSource()!=xAOD::MuonRoI::Barrel)?(m->getGoodMF()):(-1);
2691  });
2692  thrMonVariables.push_back(l1item_roi_goodmf);
2693 
2694  fill(m_packageName + item.data(), thrMonVariables);
2695  }
2696  }
2698 }

◆ filterPassed()

virtual bool AthReentrantAlgorithm::filterPassed ( const EventContext &  ctx) const
inlinevirtualinherited

Definition at line 135 of file AthReentrantAlgorithm.h.

135  {
136  return execState( ctx ).filterPassed();
137  }

◆ 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 107 of file AthMonitorAlgorithm.cxx.

107  {
109 }

◆ 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 164 of file AthMonitorAlgorithm.cxx.

164  {
165  // get the pointer to the tool, and check that it exists
166  auto idx = m_toolLookupMap.find(name);
167  if (ATH_LIKELY(idx != m_toolLookupMap.end())) {
168  return m_tools[idx->second];
169  }
170  else {
171  if (!isInitialized()) {
173  "It seems that the AthMonitorAlgorithm::initialize was not called "
174  "in derived class initialize method");
175  } else {
176  std::string available = std::accumulate(
177  m_toolLookupMap.begin(), m_toolLookupMap.end(), std::string(""),
178  [](const std::string& s, auto h) { return s + "," + h.first; });
179  ATH_MSG_FATAL("The tool " << name << " could not be found in the tool array of the "
180  << "monitoring algorithm " << m_name << ". This probably reflects a discrepancy between "
181  << "your python configuration and c++ filling code. Note: your available groups are {"
182  << available << "}.");
183  }
184  }
185  return m_dummy;
186 }

◆ getMatchingWindow()

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

Definition at line 2564 of file TgcRawDataMonitorAlgorithm.cxx.

2564  {
2565  // matching window
2566  double max_dr = 999;
2567  double pt = muon->pt();
2568  if (pt > pt_15_cut) max_dr = m_l1trigMatchWindowPt15;
2569  else if (pt > pt_10_cut) max_dr = m_l1trigMatchWindowPt10a + m_l1trigMatchWindowPt10b * pt / Gaudi::Units::GeV;
2571  return max_dr;
2572 }

◆ getNswRindexFromEta()

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

Definition at line 2558 of file TgcRawDataMonitorAlgorithm.cxx.

2558  {
2559  double theta = 2.0 * std::atan( std::exp(-1.0 * std::abs(eta)) );
2560  double r = std::tan( theta ) * nsw_z;
2561  double rindex = (r - nsw_rmin) / nsw_rindex_step;
2562  return rindex;
2563 }

◆ getPrimaryVertex()

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

Definition at line 221 of file TgcRawDataMonitorAlgorithm.cxx.

221  {
222  const xAOD::Vertex* primVertex = nullptr;
223  if(!m_PrimaryVertexContainerKey.empty()){
225  if(primVtxContainer.isValid()){
226  for(const auto vtx : *primVtxContainer){
227  if(vtx->vertexType() == xAOD::VxType::VertexType::PriVtx){
228  primVertex = vtx;
229  break;
230  }
231  }
232  }
233  }
234  return primVertex;
235 }

◆ getRegionsOfInterest()

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

Definition at line 238 of file TgcRawDataMonitorAlgorithm.cxx.

238  {
239 std::vector<TimedMuonRoI> AllBCMuonRoIs;
240  if (m_anaMuonRoI) {
241  ATH_MSG_DEBUG("Getting MuonRoI pointer");
242  /* raw LVL1MuonRoIs distributions */
243  bool isRun3 = false;
244  if (!m_MuonRoIContainerKey.empty()){
246  if(handle.isValid()) {
247  for(const auto roi : *handle.cptr()){
248  isRun3 = roi->isRun3();
249  TimedMuonRoI myMuonRoI(roi);// current BC
250  AllBCMuonRoIs.push_back(myMuonRoI);
251  }
252  }
253  }
254  if(isRun3){
255  if(!m_MuonRoIContainerBCm2Key.empty()){
257  if(handle.isValid()) {
258  for(const auto roi : *handle.cptr()){
259  TimedMuonRoI myMuonRoI(roi,-2);
260  AllBCMuonRoIs.push_back(myMuonRoI);
261  }
262  }
263  }
264  if(!m_MuonRoIContainerBCm1Key.empty()){
266  if(handle.isValid()) {
267  for(const auto roi : *handle.cptr()){
268  TimedMuonRoI myMuonRoI(roi,-1);
269  AllBCMuonRoIs.push_back(myMuonRoI);
270  }
271  }
272  }
273  if(!m_MuonRoIContainerBCp1Key.empty()){
275  if(handle.isValid()) {
276  for(const auto roi : *handle.cptr()){
277  TimedMuonRoI myMuonRoI(roi,+1);
278  AllBCMuonRoIs.push_back(myMuonRoI);
279  }
280  }
281  }
282  if(!m_MuonRoIContainerBCp2Key.empty()){
284  if(handle.isValid()) {
285  for(const auto roi : *handle.cptr()){
286  const TimedMuonRoI myMuonRoI(roi,+2);
287  AllBCMuonRoIs.push_back(myMuonRoI);
288  }
289  }
290  }
291  }
292  }
293  return AllBCMuonRoIs;
294 }

◆ 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 189 of file AthMonitorAlgorithm.cxx.

189  {
190  return m_trigDecTool;
191 }

◆ initialize()

StatusCode TgcRawDataMonitorAlgorithm::initialize ( )
overridevirtual

initialize

Returns
StatusCode

Reimplemented from AthMonitorAlgorithm.

Definition at line 40 of file TgcRawDataMonitorAlgorithm.cxx.

40  {
41  ATH_MSG_DEBUG("initialize()");
56 
57  ATH_CHECK(m_extrapolator.retrieve(DisableTool{m_extrapolator.empty()}));
58  ATH_CHECK(m_tgcMonTool.retrieve(DisableTool{m_tgcMonTool.empty()}));
59  ATH_CHECK(m_muonSelectionTool.retrieve(DisableTool{m_muonSelectionTool.empty()}));
60  ATH_CHECK(m_GoodRunsListSelectorTool.retrieve(DisableTool{m_GoodRunsListSelectorTool.empty()}));
61 
62  ATH_CHECK(m_L1MenuKey.initialize()); // ReadHandleKey, but DetStore (so renounce)
65 
66  m_extZposition.push_back(m_M1_Z);
67  m_extZposition.push_back(m_M2_Z);
68  m_extZposition.push_back(m_M3_Z);
69  m_extZposition.push_back(m_EI_Z);
70  m_extZposition.push_back(m_FI_Z);
71  m_extZposition.push_back(-m_M1_Z);
72  m_extZposition.push_back(-m_M2_Z);
73  m_extZposition.push_back(-m_M3_Z);
74  m_extZposition.push_back(-m_EI_Z);
75  m_extZposition.push_back(-m_FI_Z);
76 
77 
78  if(m_ctpDecMonList!=""){
79  m_CtpDecMonObj.clear();
80  TString Str = m_ctpDecMonList.value();// format="Tit:L1_MU20_Run3,Mul:1,HLT:HLT_mu26_ivarmedium_L1MU20,RPC:6,TGC:12FCH;"
81  std::unique_ptr<TObjArray> monTrigs( Str.Tokenize(";") );
82  for(int i = 0 ; i < monTrigs->GetEntries() ; i++){
83  TString monTrig = monTrigs->At(i)->GetName();
84  if(monTrig.IsNull())continue;
85  CtpDecMonObj monObj;
86  monObj.trigItem = monObj.title = "dummy";
87  monObj.rpcThr=monObj.tgcThr=monObj.multiplicity=0;
88  monObj.tgcF=monObj.tgcC=monObj.tgcH=monObj.rpcR=monObj.rpcM=false;
89  std::unique_ptr<TObjArray> monElement( monTrig.Tokenize(",") );
90  for(int j = 0 ; j < monElement->GetEntries() ; j++){
91  std::string sysItem = monElement->At(j)->GetName();
92  if(sysItem.empty())continue;
93  std::string item = sysItem.substr(4,sysItem.size());// remove "Tit:", "CTP:", "HLT:", "RPC:", "TGC:"
94  if(CxxUtils::starts_with (sysItem, "Tit")){
95  monObj.title = item;
96  }else if(CxxUtils::starts_with (sysItem, "Mul")){
97  monObj.multiplicity = std::atoi(item.data());
98  }else if(CxxUtils::starts_with (sysItem, "CTP")|| CxxUtils::starts_with (sysItem, "HLT")){
99  monObj.trigItem = item;
100  }else if(CxxUtils::starts_with (sysItem, "RPC")){
101  monObj.rpcThr = std::atoi(item.data());
102  monObj.rpcR = (item.find('R')!=std::string::npos);
103  monObj.rpcM = (item.find('M')!=std::string::npos);
104  }else if(CxxUtils::starts_with (sysItem, "TGC")){
105  monObj.tgcThr = std::atoi(item.data());
106  monObj.tgcF = (item.find('F')!=std::string::npos);
107  monObj.tgcC = (item.find('C')!=std::string::npos);
108  monObj.tgcH = (item.find('H')!=std::string::npos);
109  }
110  }
111  m_CtpDecMonObj.push_back(monObj);
112  }
113  }
114 
115  if(m_thrPatternList!=""){
116  m_thrMonList.clear();
117  TString Str = m_thrPatternList.value();
118  std::unique_ptr<TObjArray> arr( Str.Tokenize(",") );
119  for(int i = 0 ; i < arr->GetEntries() ; i++){
120  std::string name = arr->At(i)->GetName();
121  if(!CxxUtils::starts_with (name, "MU"))continue;
122  m_thrMonList.insert(name);
123  }
124  }
125 
126  if(m_maskChannelFileName!=""){
127  ATH_MSG_INFO("Opening mask channel file: " << m_maskChannelFileName);
128  std::ifstream fi(m_maskChannelFileName);
129  if(fi){
130  std::string str;
131  while(getline(fi,str)){
132  m_maskChannelList.insert(str);
133  }
134  }
135  ATH_MSG_INFO("Number of mask channels = " << m_maskChannelList.size());
136  fi.close();
137  }
138 
139  return StatusCode::SUCCESS;
140 }

◆ 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()

bool AthReentrantAlgorithm::isClonable ( ) const
overridevirtualinherited

◆ msg() [1/2]

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

Definition at line 24 of file AthCommonMsg.h.

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

◆ msg() [2/2]

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

Definition at line 27 of file AthCommonMsg.h.

27  {
28  return this->msgStream(lvl);
29  }

◆ 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 336 of file AthMonitorAlgorithm.cxx.

336  {
337  std::string item;
338  std::stringstream ss(line);
339 
340  ATH_MSG_DEBUG( "AthMonitorAlgorithm::parseList()" );
341 
342  while ( std::getline(ss, item, ',') ) {
343  std::stringstream iss(item); // remove whitespace
344  iss >> item;
345  result.push_back(item);
346  }
347 
348  return StatusCode::SUCCESS;
349 }

◆ printOutAvailableMuonTriggers()

StatusCode TgcRawDataMonitorAlgorithm::printOutAvailableMuonTriggers ( ) const
private

Definition at line 143 of file TgcRawDataMonitorAlgorithm.cxx.

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

◆ 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();
383  PBASE::renounce (h);
384  }

◆ 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  {
365  handlesArray.renounce();
366  }

◆ setFilterPassed()

virtual void AthReentrantAlgorithm::setFilterPassed ( bool  state,
const EventContext &  ctx 
) const
inlinevirtualinherited

Definition at line 139 of file AthReentrantAlgorithm.h.

139  {
140  execState( ctx ).setFilterPassed( state );
141  }

◆ sysExecute()

StatusCode AthReentrantAlgorithm::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 67 of file AthReentrantAlgorithm.cxx.

68 {
69  return Gaudi::Algorithm::sysExecute (ctx);
70 }

◆ sysInitialize()

StatusCode AthReentrantAlgorithm::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 InputMakerBase, and HypoBase.

Definition at line 96 of file AthReentrantAlgorithm.cxx.

96  {
98 
99  if (sc.isFailure()) {
100  return sc;
101  }
102 
103  ServiceHandle<ICondSvc> cs("CondSvc",name());
104  for (auto h : outputHandles()) {
105  if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
106  // do this inside the loop so we don't create the CondSvc until needed
107  if ( cs.retrieve().isFailure() ) {
108  ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
109  return StatusCode::SUCCESS;
110  }
111  if (cs->regHandle(this,*h).isFailure()) {
112  sc = StatusCode::FAILURE;
113  ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
114  << " with CondSvc");
115  }
116  }
117  }
118  return sc;
119 }

◆ 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 194 of file AthMonitorAlgorithm.cxx.

194  {
195 
196 
197  // If no triggers were given, return true.
198  if (vTrigNames.empty()) return true;
199 
200 
201  // Trigger: Check if this Algorithm is being run as an Express Stream job.
202  // Events are entering the express stream are chosen randomly, and by chain,
203  // Hence an additional check should be aplied to see if the chain(s)
204  // monitored here are responsible for the event being selected for
205  // the express stream.
206 
207  const auto group = m_trigDecTool->getChainGroup(vTrigNames);
209  const auto passedBits = m_trigDecTool->isPassedBits(group);
210  bool expressPass = passedBits & TrigDefs::Express_passed; //bitwise AND
211  if(!expressPass) {
212  return false;
213  }
214  }
215 
216  // monitor the event if any of the chains in the chain group passes the event.
217  return group->isPassed();
218 
219 }

◆ 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) {
312  std::vector<SG::VarHandleKey*> keys = a->keys();
313  for (auto k : keys) {
314  k->setOwner(this);
315  }
316  }
317  }

Member Data Documentation

◆ cfg

TgcRawDataMonitorAlgorithm.cfg = MainServicesCfg(flags)

Definition at line 1446 of file TgcRawDataMonitorAlgorithm.py.

◆ doExpressProcessing

TgcRawDataMonitorAlgorithm.doExpressProcessing

Definition at line 1467 of file TgcRawDataMonitorAlgorithm.py.

◆ False

TgcRawDataMonitorAlgorithm.False

Definition at line 1487 of file TgcRawDataMonitorAlgorithm.py.

◆ Files

TgcRawDataMonitorAlgorithm.Files

Definition at line 1431 of file TgcRawDataMonitorAlgorithm.py.

◆ FillGapByGapHistograms

TgcRawDataMonitorAlgorithm.FillGapByGapHistograms

Definition at line 1455 of file TgcRawDataMonitorAlgorithm.py.

◆ flags

TgcRawDataMonitorAlgorithm.flags = initConfigFlags()

Definition at line 1424 of file TgcRawDataMonitorAlgorithm.py.

◆ flags_dummy

TgcRawDataMonitorAlgorithm.flags_dummy = initConfigFlags()

Definition at line 1478 of file TgcRawDataMonitorAlgorithm.py.

◆ GlobalTag

TgcRawDataMonitorAlgorithm.GlobalTag

Definition at line 1439 of file TgcRawDataMonitorAlgorithm.py.

◆ GoodRunsListVec

TgcRawDataMonitorAlgorithm.GoodRunsListVec

Definition at line 1476 of file TgcRawDataMonitorAlgorithm.py.

◆ GRLTool

TgcRawDataMonitorAlgorithm.GRLTool

Definition at line 1475 of file TgcRawDataMonitorAlgorithm.py.

◆ HISTFileName

TgcRawDataMonitorAlgorithm.HISTFileName

Definition at line 1432 of file TgcRawDataMonitorAlgorithm.py.

◆ inputs

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

Definition at line 1430 of file TgcRawDataMonitorAlgorithm.py.

◆ isMC

TgcRawDataMonitorAlgorithm.isMC

Definition at line 1425 of file TgcRawDataMonitorAlgorithm.py.

◆ IsolationWindow

TgcRawDataMonitorAlgorithm.IsolationWindow

Definition at line 1460 of file TgcRawDataMonitorAlgorithm.py.

◆ m_anaMuonRoI

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

Definition at line 269 of file TgcRawDataMonitorAlgorithm.h.

◆ m_anaOfflMuon

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

Definition at line 265 of file TgcRawDataMonitorAlgorithm.h.

◆ m_anaTgcCoin

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

Definition at line 263 of file TgcRawDataMonitorAlgorithm.h.

◆ m_anaTgcPrd

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

Definition at line 262 of file TgcRawDataMonitorAlgorithm.h.

◆ m_barrelPivotPlaneHalfLength

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

Definition at line 299 of file TgcRawDataMonitorAlgorithm.h.

◆ 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 256 of file TgcRawDataMonitorAlgorithm.h.

◆ m_CtpDecMonObj

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

Definition at line 310 of file TgcRawDataMonitorAlgorithm.h.

◆ m_dataType

AthMonitorAlgorithm::DataType_t AthMonitorAlgorithm::m_dataType
protectedinherited

Instance of the DataType_t enum.

Definition at line 351 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 353 of file AthMonitorAlgorithm.h.

◆ m_defaultLBDuration

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

Default duration of one lumi block.

Definition at line 360 of file AthMonitorAlgorithm.h.

◆ m_detailLevel

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

Sets the level of detail used in the monitoring.

Definition at line 361 of file AthMonitorAlgorithm.h.

◆ m_DetectorManagerKey

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

Definition at line 331 of file TgcRawDataMonitorAlgorithm.h.

◆ 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 254 of file TgcRawDataMonitorAlgorithm.h.

◆ 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 301 of file TgcRawDataMonitorAlgorithm.h.

◆ m_DQFilterTools

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

Array of Data Quality filter tools.

Definition at line 341 of file AthMonitorAlgorithm.h.

◆ 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 302 of file TgcRawDataMonitorAlgorithm.h.

◆ m_dummy

const ToolHandle<GenericMonitoringTool> AthMonitorAlgorithm::m_dummy
privateinherited

Definition at line 369 of file AthMonitorAlgorithm.h.

◆ m_dumpFullChannelList

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

Definition at line 305 of file TgcRawDataMonitorAlgorithm.h.

◆ 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 292 of file TgcRawDataMonitorAlgorithm.h.

◆ m_endcapPivotPlaneMaximumRadius

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

Definition at line 298 of file TgcRawDataMonitorAlgorithm.h.

◆ m_endcapPivotPlaneMinimumRadius

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

Definition at line 297 of file TgcRawDataMonitorAlgorithm.h.

◆ 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 372 of file AthMonitorAlgorithm.h.

◆ m_environment

AthMonitorAlgorithm::Environment_t AthMonitorAlgorithm::m_environment
protectedinherited

Instance of the Environment_t enum.

Definition at line 350 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 352 of file AthMonitorAlgorithm.h.

◆ m_EventInfoKey

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

Key for retrieving EventInfo from StoreGate.

Definition at line 362 of file AthMonitorAlgorithm.h.

◆ 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 AthReentrantAlgorithm::m_extendedExtraObjects
privateinherited

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

Empty if no symlinks were found.

Definition at line 153 of file AthReentrantAlgorithm.h.

◆ m_extrapolator

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

Definition at line 328 of file TgcRawDataMonitorAlgorithm.h.

◆ m_extZposition

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

Definition at line 309 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 293 of file TgcRawDataMonitorAlgorithm.h.

◆ m_fileKey

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

Internal Athena name for file.

Definition at line 358 of file AthMonitorAlgorithm.h.

◆ m_fillGapByGapHistograms

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

Definition at line 264 of file TgcRawDataMonitorAlgorithm.h.

◆ m_GoodRunsListSelectorTool

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

Definition at line 327 of file TgcRawDataMonitorAlgorithm.h.

◆ m_idHelperSvc

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

Definition at line 229 of file TgcRawDataMonitorAlgorithm.h.

◆ m_isolationWindow

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

Definition at line 276 of file TgcRawDataMonitorAlgorithm.h.

◆ m_L1MenuKey

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

Definition at line 231 of file TgcRawDataMonitorAlgorithm.h.

◆ 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 274 of file TgcRawDataMonitorAlgorithm.h.

◆ 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 275 of file TgcRawDataMonitorAlgorithm.h.

◆ 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 272 of file TgcRawDataMonitorAlgorithm.h.

◆ 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 273 of file TgcRawDataMonitorAlgorithm.h.

◆ 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 271 of file TgcRawDataMonitorAlgorithm.h.

◆ m_lbDurationDataKey

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

Definition at line 345 of file AthMonitorAlgorithm.h.

◆ m_lumiDataKey

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

Definition at line 343 of file AthMonitorAlgorithm.h.

◆ 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 289 of file TgcRawDataMonitorAlgorithm.h.

◆ 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 290 of file TgcRawDataMonitorAlgorithm.h.

◆ 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 291 of file TgcRawDataMonitorAlgorithm.h.

◆ m_maskChannelFileName

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

Definition at line 306 of file TgcRawDataMonitorAlgorithm.h.

◆ m_maskChannelList

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

Definition at line 312 of file TgcRawDataMonitorAlgorithm.h.

◆ m_monitorThresholdPatterns

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

Definition at line 233 of file TgcRawDataMonitorAlgorithm.h.

◆ m_monitorTriggerMultiplicity

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

Definition at line 257 of file TgcRawDataMonitorAlgorithm.h.

◆ m_MuonContainerKey

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

Definition at line 237 of file TgcRawDataMonitorAlgorithm.h.

◆ m_muonMass

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

Definition at line 294 of file TgcRawDataMonitorAlgorithm.h.

◆ m_MuonRoIContainerBCm1Key

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

Definition at line 240 of file TgcRawDataMonitorAlgorithm.h.

◆ m_MuonRoIContainerBCm2Key

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

Definition at line 239 of file TgcRawDataMonitorAlgorithm.h.

◆ m_MuonRoIContainerBCp1Key

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

Definition at line 241 of file TgcRawDataMonitorAlgorithm.h.

◆ m_MuonRoIContainerBCp2Key

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

Definition at line 242 of file TgcRawDataMonitorAlgorithm.h.

◆ m_MuonRoIContainerKey

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

Definition at line 238 of file TgcRawDataMonitorAlgorithm.h.

◆ m_muonSelectionTool

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

Definition at line 330 of file TgcRawDataMonitorAlgorithm.h.

◆ m_muonToPVdca

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

Definition at line 253 of file TgcRawDataMonitorAlgorithm.h.

◆ m_muonToPVdz

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

Definition at line 251 of file TgcRawDataMonitorAlgorithm.h.

◆ m_muonToPVdzOffset

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

Definition at line 252 of file TgcRawDataMonitorAlgorithm.h.

◆ m_name

std::string AthMonitorAlgorithm::m_name
privateinherited

Definition at line 366 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 304 of file TgcRawDataMonitorAlgorithm.h.

◆ m_nHitsInOtherBWTGCWire

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

Definition at line 303 of file TgcRawDataMonitorAlgorithm.h.

◆ m_NswDeltaRCut

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

Definition at line 307 of file TgcRawDataMonitorAlgorithm.h.

◆ m_offlMuonCutOnAuthor

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

Definition at line 267 of file TgcRawDataMonitorAlgorithm.h.

◆ m_offlMuonCutOnMuonType

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

Definition at line 266 of file TgcRawDataMonitorAlgorithm.h.

◆ m_offlMuonCutOnQuality

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

Definition at line 268 of file TgcRawDataMonitorAlgorithm.h.

◆ m_packageName

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

Definition at line 255 of file TgcRawDataMonitorAlgorithm.h.

◆ m_PrimaryVertexContainerKey

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

Definition at line 249 of file TgcRawDataMonitorAlgorithm.h.

◆ m_printAvailableMuonTriggers

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

Definition at line 258 of file TgcRawDataMonitorAlgorithm.h.

◆ m_pTCutOnExtrapolation

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

Definition at line 287 of file TgcRawDataMonitorAlgorithm.h.

◆ m_pTCutOnTrigExtrapolation

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

Definition at line 288 of file TgcRawDataMonitorAlgorithm.h.

◆ m_requireIsolated

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

Definition at line 277 of file TgcRawDataMonitorAlgorithm.h.

◆ m_residualWindow

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

Definition at line 300 of file TgcRawDataMonitorAlgorithm.h.

◆ m_streamerFilter

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

Definition at line 235 of file TgcRawDataMonitorAlgorithm.h.

◆ m_TagAndProbe

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

Definition at line 259 of file TgcRawDataMonitorAlgorithm.h.

◆ m_TagAndProbeZmumu

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

Definition at line 260 of file TgcRawDataMonitorAlgorithm.h.

◆ 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 261 of file TgcRawDataMonitorAlgorithm.h.

◆ m_TgcCoinDataContainerCurrBCKey

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

Definition at line 246 of file TgcRawDataMonitorAlgorithm.h.

◆ m_TgcCoinDataContainerNextBCKey

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

Definition at line 247 of file TgcRawDataMonitorAlgorithm.h.

◆ m_TgcCoinDataContainerNextNextBCKey

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

Definition at line 248 of file TgcRawDataMonitorAlgorithm.h.

◆ m_TgcCoinDataContainerPrevBCKey

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

Definition at line 245 of file TgcRawDataMonitorAlgorithm.h.

◆ m_tgcMonTool

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

Definition at line 329 of file TgcRawDataMonitorAlgorithm.h.

◆ m_TgcPrepDataContainerKey

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

Definition at line 244 of file TgcRawDataMonitorAlgorithm.h.

◆ 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 232 of file TgcRawDataMonitorAlgorithm.h.

◆ m_thrMonList

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

Definition at line 311 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 234 of file TgcRawDataMonitorAlgorithm.h.

◆ m_toolLookupMap

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

Definition at line 367 of file AthMonitorAlgorithm.h.

◆ m_tools

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

Array of Generic Monitoring Tools.

Definition at line 338 of file AthMonitorAlgorithm.h.

◆ m_trigDecTool

PublicToolHandle<Trig::TrigDecisionTool> AthMonitorAlgorithm::m_trigDecTool {this, "TrigDecisionTool",""}
protectedinherited

Tool to tell whether a specific trigger is passed.

Definition at line 340 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 355 of file AthMonitorAlgorithm.h.

◆ m_trigLiveFractionDataKey

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

Definition at line 347 of file AthMonitorAlgorithm.h.

◆ m_trigMatchWindow

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

Definition at line 270 of file TgcRawDataMonitorAlgorithm.h.

◆ m_useCBTrackForExtrapolation

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

Definition at line 280 of file TgcRawDataMonitorAlgorithm.h.

◆ m_useDirectPrimaryTrackForExtrapolation

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

Definition at line 283 of file TgcRawDataMonitorAlgorithm.h.

◆ m_useExtMSTrackForExtrapolation

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

Definition at line 281 of file TgcRawDataMonitorAlgorithm.h.

◆ m_useIDTrackForExtrapolation

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

Definition at line 278 of file TgcRawDataMonitorAlgorithm.h.

◆ m_useLumi

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

Allows use of various luminosity functions.

Definition at line 359 of file AthMonitorAlgorithm.h.

◆ m_useMSOnlyExtMSTrackForExtrapolation

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

Definition at line 282 of file TgcRawDataMonitorAlgorithm.h.

◆ m_useMSTrackForExtrapolation

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

Definition at line 279 of file TgcRawDataMonitorAlgorithm.h.

◆ m_useMuonSelectorTool

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

Definition at line 286 of file TgcRawDataMonitorAlgorithm.h.

◆ m_useOnlyCombinedMuons

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

Definition at line 284 of file TgcRawDataMonitorAlgorithm.h.

◆ m_useOnlyMuidCoStacoMuons

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

Definition at line 285 of file TgcRawDataMonitorAlgorithm.h.

◆ 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 356 of file AthMonitorAlgorithm.h.

◆ m_zMass

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

Definition at line 295 of file TgcRawDataMonitorAlgorithm.h.

◆ m_zMassWindow

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

Definition at line 296 of file TgcRawDataMonitorAlgorithm.h.

◆ MaskChannelFileName

TgcRawDataMonitorAlgorithm.MaskChannelFileName

Definition at line 1464 of file TgcRawDataMonitorAlgorithm.py.

◆ MonitorThresholdPatterns

TgcRawDataMonitorAlgorithm.MonitorThresholdPatterns

Definition at line 1452 of file TgcRawDataMonitorAlgorithm.py.

◆ nHitsInOtherTGCStrip

TgcRawDataMonitorAlgorithm.nHitsInOtherTGCStrip

Definition at line 1463 of file TgcRawDataMonitorAlgorithm.py.

◆ nHitsInOtherTGCWire

TgcRawDataMonitorAlgorithm.nHitsInOtherTGCWire

Definition at line 1462 of file TgcRawDataMonitorAlgorithm.py.

◆ OutputLevel

TgcRawDataMonitorAlgorithm.OutputLevel

Definition at line 1451 of file TgcRawDataMonitorAlgorithm.py.

◆ pTCutOnTrigExtrapolation

TgcRawDataMonitorAlgorithm.pTCutOnTrigExtrapolation

Definition at line 1468 of file TgcRawDataMonitorAlgorithm.py.

◆ RequireIsolated

TgcRawDataMonitorAlgorithm.RequireIsolated

Definition at line 1459 of file TgcRawDataMonitorAlgorithm.py.

◆ ResidualWindow

TgcRawDataMonitorAlgorithm.ResidualWindow

Definition at line 1461 of file TgcRawDataMonitorAlgorithm.py.

◆ StreamerFilter

TgcRawDataMonitorAlgorithm.StreamerFilter

Definition at line 1466 of file TgcRawDataMonitorAlgorithm.py.

◆ summariseProps

TgcRawDataMonitorAlgorithm.summariseProps

Definition at line 1487 of file TgcRawDataMonitorAlgorithm.py.

◆ TagAndProbe

TgcRawDataMonitorAlgorithm.TagAndProbe

Definition at line 1453 of file TgcRawDataMonitorAlgorithm.py.

◆ TagMuonInDifferentSystem

TgcRawDataMonitorAlgorithm.TagMuonInDifferentSystem

Definition at line 1465 of file TgcRawDataMonitorAlgorithm.py.

◆ tgcRawDataMonitorAcc

def TgcRawDataMonitorAlgorithm.tgcRawDataMonitorAcc = TgcRawDataMonitoringConfig(flags)

Definition at line 1449 of file TgcRawDataMonitorAlgorithm.py.

◆ triggerConfig

TgcRawDataMonitorAlgorithm.triggerConfig

Definition at line 1480 of file TgcRawDataMonitorAlgorithm.py.

◆ triggerMenuSetup

TgcRawDataMonitorAlgorithm.triggerMenuSetup

Definition at line 1481 of file TgcRawDataMonitorAlgorithm.py.

◆ UseMuonSelectorTool

TgcRawDataMonitorAlgorithm.UseMuonSelectorTool

Definition at line 1456 of file TgcRawDataMonitorAlgorithm.py.

◆ UseOnlyCombinedMuons

TgcRawDataMonitorAlgorithm.UseOnlyCombinedMuons

Definition at line 1457 of file TgcRawDataMonitorAlgorithm.py.

◆ UseOnlyMuidCoStacoMuons

TgcRawDataMonitorAlgorithm.UseOnlyMuidCoStacoMuons

Definition at line 1458 of file TgcRawDataMonitorAlgorithm.py.

◆ withDetails

TgcRawDataMonitorAlgorithm.withDetails

Definition at line 1487 of file TgcRawDataMonitorAlgorithm.py.


The documentation for this class was generated from the following files:
TgcRawDataMonitorAlgorithm::m_tgcMonTool
ToolHandle< ITgcRawDataMonitorTool > m_tgcMonTool
Definition: TgcRawDataMonitorAlgorithm.h:329
TgcRawDataMonitorAlgorithm::m_TgcCoinDataContainerNextBCKey
SG::ReadHandleKey< Muon::TgcCoinDataContainer > m_TgcCoinDataContainerNextBCKey
Definition: TgcRawDataMonitorAlgorithm.h:247
TgcRawDataMonitorAlgorithm::m_useCBTrackForExtrapolation
BooleanProperty m_useCBTrackForExtrapolation
Definition: TgcRawDataMonitorAlgorithm.h:280
TgcRawDataMonitorAlgorithm::m_l1trigMatchWindowPt0a
DoubleProperty m_l1trigMatchWindowPt0a
Definition: TgcRawDataMonitorAlgorithm.h:274
TgcRawDataMonitorAlgorithm::m_TagAndProbeZmumu
BooleanProperty m_TagAndProbeZmumu
Definition: TgcRawDataMonitorAlgorithm.h:260
TgcRawDataMonitorAlgorithm::m_L1MenuKey
SG::ReadHandleKey< TrigConf::L1Menu > m_L1MenuKey
Definition: TgcRawDataMonitorAlgorithm.h:231
beamspotman.r
def r
Definition: beamspotman.py:676
TGC::TgcChamber::initChamber
void initChamber(const std::string &chamber_name)
Definition: TgcChamber.cxx:8
TrigConf::L1Threshold::mapping
unsigned int mapping() const
Accessor to the mapping number The mapping is unique within a type.
Definition: L1ThresholdBase.h:163
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:216
Muon::TgcCoinData::INNER_RPC_DPHI_BITSHIFT
static constexpr uint32_t INNER_RPC_DPHI_BITSHIFT
Definition: TgcCoinData.h:252
xAOD::muon
@ muon
Definition: TrackingPrimitives.h:195
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
MuonGM::MuonClusterReadoutElement::transform
virtual const Amg::Transform3D & transform() const override
Return local to global transform.
Definition: MuonClusterReadoutElement.h:124
TgcRawDataMonitorAlgorithm::m_nHitsInOtherBWTGCStrip
IntegerProperty m_nHitsInOtherBWTGCStrip
Definition: TgcRawDataMonitorAlgorithm.h:304
TgcRawDataMonitorAlgorithm::fillMuonRoisInThresholdPattern
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
Definition: TgcRawDataMonitorAlgorithm.cxx:3111
dumpTgcDigiDeadChambers.gasGap
list gasGap
Definition: dumpTgcDigiDeadChambers.py:33
TgcRawDataMonitorAlgorithm::MonVariables
std::vector< std::reference_wrapper< Monitored::IMonitoredVariable > > MonVariables
Definition: TgcRawDataMonitorAlgorithm.h:314
AthMonitorAlgorithm::Environment_t::tier0Raw
@ tier0Raw
AthMonitorAlgorithm::dataType
DataType_t dataType() const
Accessor functions for the data type.
Definition: AthMonitorAlgorithm.h:221
TgcRawDataMonitorAlgorithm::m_fillGapByGapHistograms
BooleanProperty m_fillGapByGapHistograms
Definition: TgcRawDataMonitorAlgorithm.h:264
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
checkFileSG.line
line
Definition: checkFileSG.py:75
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
xAOD::MuonRoI_v1::getPhiOverlap
bool getPhiOverlap() const
Returns whether there's overlap between barrel sectors.
xAOD::MuonRoI_v1::Endcap
@ Endcap
The muon candidate was detected in the endcap region.
Definition: MuonRoI_v1.h:39
Amg::MatrixX
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Definition: EventPrimitives.h:29
Muon::TgcCoinData::INNER_TILE_BCID_BITSHIFT
static constexpr uint32_t INNER_TILE_BCID_BITSHIFT
Definition: TgcCoinData.h:270
TgcRawDataMonitorAlgorithm::m_useIDTrackForExtrapolation
BooleanProperty m_useIDTrackForExtrapolation
Definition: TgcRawDataMonitorAlgorithm.h:278
CxxUtils::starts_with
bool starts_with(const char *s, const char *prefix)
Test whether one null-terminated byte string starts with another.
get_generator_info.result
result
Definition: get_generator_info.py:21
python.SystemOfUnits.m2
int m2
Definition: SystemOfUnits.py:92
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
Muon::TgcCoinData::INNER_RPC_DETA_BIT
static constexpr uint32_t INNER_RPC_DETA_BIT
Definition: TgcCoinData.h:251
xAOD::MuonRoI_v1::getInnerCoincidence
bool getInnerCoincidence() const
Returns whether or not there was an inner coincidence in the TGC.
checkCoolLatestUpdate.variables
variables
Definition: checkCoolLatestUpdate.py:13
TgcRawDataMonitorAlgorithm::m_l1trigMatchWindowPt15
DoubleProperty m_l1trigMatchWindowPt15
Definition: TgcRawDataMonitorAlgorithm.h:271
PowhegControl_ttHplus_NLO.ss
ss
Definition: PowhegControl_ttHplus_NLO.py:83
TGC::TgcChamber::iSec
const int & iSec() const
Definition: TgcChamber.h:46
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:28
TgcRawDataMonitorAlgorithm::m_TagAndProbe
BooleanProperty m_TagAndProbe
Definition: TgcRawDataMonitorAlgorithm.h:259
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
TrigCompositeUtils::passed
bool passed(DecisionID id, const DecisionIDContainer &idSet)
checks if required decision ID is in the set of IDs in the container
Definition: TrigCompositeUtilsRoot.cxx:117
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
AthMonitorAlgorithm::m_trigDecTool
PublicToolHandle< Trig::TrigDecisionTool > m_trigDecTool
Tool to tell whether a specific trigger is passed.
Definition: AthMonitorAlgorithm.h:340
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
xAOD::MuonRoI_v1::getThrNumber
int getThrNumber() const
Get the logic number of the highest threshold this RoI passed.
TgcIdHelper::gasGap
int gasGap(const Identifier &id) const override
get the hashes
Definition: TgcIdHelper.cxx:642
Muon::TgcCoinData::INNER_RPC_BCID_BIT
static constexpr uint32_t INNER_RPC_BCID_BIT
Definition: TgcCoinData.h:257
AthMonitorAlgorithm::Environment_t::tier0
@ tier0
AthMonitorAlgorithm::Environment_t::AOD
@ AOD
MuonGM::MuonClusterReadoutElement::center
virtual const Amg::Vector3D & center() const override
Return the center of the element.
Definition: MuonClusterReadoutElement.h:125
TgcRawDataMonitorAlgorithm::m_MuonRoIContainerBCm2Key
SG::ReadHandleKey< xAOD::MuonRoIContainer > m_MuonRoIContainerBCm2Key
Definition: TgcRawDataMonitorAlgorithm.h:239
TgcRawDataMonitorAlgorithm::CoinFlagF
@ CoinFlagF
Definition: TgcRawDataMonitorAlgorithm.h:38
TGC::TgcChamber::StationName
const int & StationName() const
Definition: TgcChamber.h:50
TgcRawDataMonitorAlgorithm::m_requireIsolated
BooleanProperty m_requireIsolated
Definition: TgcRawDataMonitorAlgorithm.h:277
TgcRawDataMonitorAlgorithm::m_streamerFilter
StringProperty m_streamerFilter
Definition: TgcRawDataMonitorAlgorithm.h:235
xAOD::MuonRoI_v1::Neg
@ Neg
Candidate is a mu- from a TGC sector.
Definition: MuonRoI_v1.h:49
TgcIdHelper
Definition: TgcIdHelper.h:50
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
Muon::TgcPrepData::BCBIT_PREVIOUS
@ BCBIT_PREVIOUS
Definition: TgcPrepData.h:97
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
TgcRawDataMonitorAlgorithm::m_DetectorManagerKey
SG::ReadCondHandleKey< MuonGM::MuonDetectorManager > m_DetectorManagerKey
Definition: TgcRawDataMonitorAlgorithm.h:331
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
TgcRawDataMonitorAlgorithm::m_MuonRoIContainerBCp2Key
SG::ReadHandleKey< xAOD::MuonRoIContainer > m_MuonRoIContainerBCp2Key
Definition: TgcRawDataMonitorAlgorithm.h:242
TgcRawDataMonitorAlgorithm::m_MuonContainerKey
SG::ReadHandleKey< xAOD::MuonContainer > m_MuonContainerKey
Definition: TgcRawDataMonitorAlgorithm.h:237
xAOD::deltaPhi
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
Definition: L2StandAloneMuon_v1.cxx:160
TgcRawDataMonitorAlgorithm::m_MuonRoIContainerBCp1Key
SG::ReadHandleKey< xAOD::MuonRoIContainer > m_MuonRoIContainerBCp1Key
Definition: TgcRawDataMonitorAlgorithm.h:241
TgcRawDataMonitorAlgorithm::fillThresholdPatternHistograms
void fillThresholdPatternHistograms(std::map< std::string, std::vector< const xAOD::MuonRoI * >> &menuAndRoIs, const std::vector< TimedMuon > &mymuons, const EventContext &ctx) const
Definition: TgcRawDataMonitorAlgorithm.cxx:2575
accumulate
bool accumulate(AccumulateMap &map, std::vector< module_t > const &modules, FPGATrackSimMatrixAccumulator const &acc)
Accumulates an accumulator (e.g.
Definition: FPGATrackSimMatrixAccumulator.cxx:22
TgcRawDataMonitorAlgorithm::m_M1_Z
DoubleProperty m_M1_Z
Definition: TgcRawDataMonitorAlgorithm.h:289
theta
Scalar theta() const
theta method
Definition: AmgMatrixBasePlugin.h:71
AthMonitorAlgorithm::m_vTrigChainNames
std::vector< std::string > m_vTrigChainNames
Vector of trigger chain names parsed from trigger chain string.
Definition: AthMonitorAlgorithm.h:356
TgcRawDataMonitorAlgorithm::m_l1trigMatchWindowPt10a
DoubleProperty m_l1trigMatchWindowPt10a
Definition: TgcRawDataMonitorAlgorithm.h:272
TgcRawDataMonitorAlgorithm::m_l1trigMatchWindowPt0b
DoubleProperty m_l1trigMatchWindowPt0b
Definition: TgcRawDataMonitorAlgorithm.h:275
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::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 > renounce(T &h)
Definition: AthCommonDataStore.h:380
TgcRawDataMonitorAlgorithm::m_TgcCoinDataContainerNextNextBCKey
SG::ReadHandleKey< Muon::TgcCoinDataContainer > m_TgcCoinDataContainerNextNextBCKey
Definition: TgcRawDataMonitorAlgorithm.h:248
AthMonitorAlgorithm::m_EventInfoKey
SG::ReadHandleKey< xAOD::EventInfo > m_EventInfoKey
Key for retrieving EventInfo from StoreGate.
Definition: AthMonitorAlgorithm.h:362
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
TgcRawDataMonitorAlgorithm::m_residualWindow
DoubleProperty m_residualWindow
Definition: TgcRawDataMonitorAlgorithm.h:300
TgcRawDataMonitorAlgorithm::m_useExtMSTrackForExtrapolation
BooleanProperty m_useExtMSTrackForExtrapolation
Definition: TgcRawDataMonitorAlgorithm.h:281
Muon::TgcCoinData::INNER_RPC_PHI_BITSHIFT
static constexpr uint32_t INNER_RPC_PHI_BITSHIFT
Definition: TgcCoinData.h:248
AthMonitorAlgorithm::getTrigDecisionTool
const ToolHandle< Trig::TrigDecisionTool > & getTrigDecisionTool() const
Get the trigger decision tool member.
Definition: AthMonitorAlgorithm.cxx:189
test_pyathena.pt
pt
Definition: test_pyathena.py:11
M_PI
#define M_PI
Definition: ActiveFraction.h:11
xAOD::passBits
passBits
Definition: TrigPassBits_v1.cxx:115
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
SG::ReadDecorHandle::isPresent
bool isPresent() const
Is the referenced container present in SG?
xAOD::MuonRoI_v1::eta
float eta() const
The pseudorapidity ( ) of the muon candidate.
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
TgcRawDataMonitorAlgorithm::m_endcapPivotPlaneMinimumRadius
DoubleProperty m_endcapPivotPlaneMinimumRadius
Definition: TgcRawDataMonitorAlgorithm.h:297
AthMonitorAlgorithm::m_toolLookupMap
std::unordered_map< std::string, size_t > m_toolLookupMap
Definition: AthMonitorAlgorithm.h:367
TgcRawDataMonitorAlgorithm::m_l1trigMatchWindowPt10b
DoubleProperty m_l1trigMatchWindowPt10b
Definition: TgcRawDataMonitorAlgorithm.h:273
MuonGM::TgcReadoutElement::stripLength
double stripLength() const
Returns the length of each strip which is equal to the height of the chamber.
AthMonitorAlgorithm::m_environment
AthMonitorAlgorithm::Environment_t m_environment
Instance of the Environment_t enum.
Definition: AthMonitorAlgorithm.h:350
Muon::TgcCoinData::TYPE_TRACKLET
@ TYPE_TRACKLET
Definition: TgcCoinData.h:50
Muon::TgcCoinData::INNER_NSW_BCID_BITSHIFT
static constexpr uint32_t INNER_NSW_BCID_BITSHIFT
Definition: TgcCoinData.h:240
TrigRoiDescriptor
nope - should be used for standalone also, perhaps need to protect the class def bits #ifndef XAOD_AN...
Definition: TrigRoiDescriptor.h:56
Trk::alongMomentum
@ alongMomentum
Definition: PropDirection.h:20
vec
std::vector< size_t > vec
Definition: CombinationsGeneratorTest.cxx:12
python.TurnDataReader.dr
dr
Definition: TurnDataReader.py:112
cosmics
Definition: cosmics.py:1
TgcRawDataMonitorAlgorithm::m_monitorThresholdPatterns
BooleanProperty m_monitorThresholdPatterns
Definition: TgcRawDataMonitorAlgorithm.h:233
TgcRawDataMonitorAlgorithm::getMatchingWindow
double getMatchingWindow(const xAOD::Muon *muon) const
Definition: TgcRawDataMonitorAlgorithm.cxx:2564
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
MuonIdHelper::stationName
int stationName(const Identifier &id) const
Definition: MuonIdHelper.cxx:804
TgcRawDataMonitorAlgorithm::m_TgcPrepDataContainerKey
SG::ReadHandleKey< Muon::TgcPrepDataContainer > m_TgcPrepDataContainerKey
Definition: TgcRawDataMonitorAlgorithm.h:244
TgcRawDataMonitorAlgorithm::m_maskChannelFileName
StringProperty m_maskChannelFileName
Definition: TgcRawDataMonitorAlgorithm.h:306
TgcRawDataMonitorAlgorithm::m_MuonRoIContainerKey
SG::ReadHandleKey< xAOD::MuonRoIContainer > m_MuonRoIContainerKey
Definition: TgcRawDataMonitorAlgorithm.h:238
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
TrigConf::L1Menu::thresholdNames
std::vector< std::string > thresholdNames() const
List of L1 thresholds names.
Definition: L1Menu.cxx:242
Muon::TgcCoinData::INNER_RPC_DETA_BITSHIFT
static constexpr uint32_t INNER_RPC_DETA_BITSHIFT
Definition: TgcCoinData.h:250
empty
bool empty(TH1 *h)
Definition: computils.cxx:294
TgcRawDataMonitorAlgorithm::m_zMassWindow
DoubleProperty m_zMassWindow
Definition: TgcRawDataMonitorAlgorithm.h:296
Identifier::is_valid
bool is_valid() const
Check if id is in a valid state.
TgcRawDataMonitorAlgorithm::fillRoiHistograms
void fillRoiHistograms(const std::vector< TgcRawDataMonitorAlgorithm::TimedMuonRoI > &roiVec, const EventContext &ctx) const
Definition: TgcRawDataMonitorAlgorithm.cxx:297
xAOD::Muon_v1
Class describing a Muon.
Definition: Muon_v1.h:38
AthMonitorAlgorithm::trigChainsArePassed
bool trigChainsArePassed(const std::vector< std::string > &vTrigNames) const
Check whether triggers are passed.
Definition: AthMonitorAlgorithm.cxx:194
TgcRawDataMonitorAlgorithm::m_useDirectPrimaryTrackForExtrapolation
BooleanProperty m_useDirectPrimaryTrackForExtrapolation
Definition: TgcRawDataMonitorAlgorithm.h:283
TgcRawDataMonitorAlgorithm::m_MuonRoIContainerBCm1Key
SG::ReadHandleKey< xAOD::MuonRoIContainer > m_MuonRoIContainerBCm1Key
Definition: TgcRawDataMonitorAlgorithm.h:240
Muon::TgcCoinData::INNER_RPC_DPHI_BIT
static constexpr uint32_t INNER_RPC_DPHI_BIT
Definition: TgcCoinData.h:253
TgcRawDataMonitorAlgorithm::m_muonToPVdca
DoubleProperty m_muonToPVdca
Definition: TgcRawDataMonitorAlgorithm.h:253
Muon::TgcCoinData::INNER_NSW_INPUT_BITSHIFT
static constexpr uint32_t INNER_NSW_INPUT_BITSHIFT
Definition: TgcCoinData.h:242
AthMonitorAlgorithm::Environment_t::user
@ user
TgcRawDataMonitorAlgorithm::m_muonToPVdzOffset
DoubleProperty m_muonToPVdzOffset
Definition: TgcRawDataMonitorAlgorithm.h:252
drawFromPickle.atan
atan
Definition: drawFromPickle.py:36
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
MuonGM::TgcReadoutElement::wireGangPos
Amg::Vector3D wireGangPos(const Identifier &id) const
Returns the global position of a wireGang.
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
Muon::TgcCoinData::INNER_NSW_DTHETA_BIT
static constexpr uint32_t INNER_NSW_DTHETA_BIT
Definition: TgcCoinData.h:233
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
TgcRawDataMonitorAlgorithm::m_pTCutOnExtrapolation
DoubleProperty m_pTCutOnExtrapolation
Definition: TgcRawDataMonitorAlgorithm.h:287
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
Muon::TgcPrepData::BCBIT_CURRENT
@ BCBIT_CURRENT
Definition: TgcPrepData.h:97
AthMonitorAlgorithm::m_dummy
const ToolHandle< GenericMonitoringTool > m_dummy
Definition: AthMonitorAlgorithm.h:369
TgcRawDataMonitorAlgorithm::m_tagMuonInDifferentSystem
BooleanProperty m_tagMuonInDifferentSystem
Definition: TgcRawDataMonitorAlgorithm.h:261
TgcRawDataMonitorAlgorithm::m_PrimaryVertexContainerKey
SG::ReadHandleKey< xAOD::VertexContainer > m_PrimaryVertexContainerKey
Definition: TgcRawDataMonitorAlgorithm.h:249
TgcIdHelper::channel
int channel(const Identifier &id) const override
Definition: TgcIdHelper.cxx:649
TgcRawDataMonitorAlgorithm::m_GoodRunsListSelectorTool
ToolHandle< IGoodRunsListSelectorTool > m_GoodRunsListSelectorTool
Definition: TgcRawDataMonitorAlgorithm.h:327
TgcRawDataMonitorAlgorithm::CoinFlagRPC
@ CoinFlagRPC
Definition: TgcRawDataMonitorAlgorithm.h:38
MuonGM::MuonDetectorManager::getTgcReadoutElement
const TgcReadoutElement * getTgcReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
Definition: MuonDetDescr/MuonReadoutGeometry/src/MuonDetectorManager.cxx:247
InDet::ExclusiveOrigin::Primary
@ Primary
Definition: InDetTrackTruthOriginDefs.h:163
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:269
PyPoolBrowser.item
item
Definition: PyPoolBrowser.py:129
CxxUtils::vec
typename vecDetail::vec_typedef< T, N >::type vec
Define a nice alias for the vectorized type.
Definition: vec.h:207
xAOD::MuonRoI_v1::isRun3
bool isRun3() const
Returns extra flag at end of RoI word indicating that it's in Run3 format.
TgcRawDataMonitorAlgorithm::m_anaOfflMuon
BooleanProperty m_anaOfflMuon
Definition: TgcRawDataMonitorAlgorithm.h:265
TgcRawDataMonitorAlgorithm::m_useMSOnlyExtMSTrackForExtrapolation
BooleanProperty m_useMSOnlyExtMSTrackForExtrapolation
Definition: TgcRawDataMonitorAlgorithm.h:282
TileSynchronizeBch.online
online
Definition: TileSynchronizeBch.py:88
xAOD::MuonRoI_v1::isMoreCandInRoI
bool isMoreCandInRoI() const
Returns if there were other muons detected in the same RoI.
TgcRawDataMonitorAlgorithm::m_useMSTrackForExtrapolation
BooleanProperty m_useMSTrackForExtrapolation
Definition: TgcRawDataMonitorAlgorithm.h:279
TgcRawDataMonitorAlgorithm::m_CtpDecMonObj
std::vector< CtpDecMonObj > m_CtpDecMonObj
Definition: TgcRawDataMonitorAlgorithm.h:310
xAOD::MuonRoI_v1::isVetoed
bool isVetoed() const
Returns the veto flag for the candidate.
TgcRawDataMonitorAlgorithm::CoinFlagC
@ CoinFlagC
Definition: TgcRawDataMonitorAlgorithm.h:38
AthCommonDataStore
Definition: AthCommonDataStore.h:52
AthMonitorAlgorithm::m_DQFilterTools
ToolHandleArray< IDQFilterTool > m_DQFilterTools
Array of Data Quality filter tools.
Definition: AthMonitorAlgorithm.h:341
TgcRawDataMonitorAlgorithm::m_NswDeltaRCut
DoubleProperty m_NswDeltaRCut
Definition: TgcRawDataMonitorAlgorithm.h:307
MuonGM::TgcReadoutElement::gangLongWidth
double gangLongWidth(int gasGap, int gang) const
Returns the length of the most top wire in the gang.
Definition: MuonDetDescr/MuonReadoutGeometry/src/TgcReadoutElement.cxx:86
Muon::TgcCoinData::TYPE_HIPT
@ TYPE_HIPT
Definition: TgcCoinData.h:51
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
SG::ReadDecorHandle
Handle class for reading a decoration on an object.
Definition: StoreGate/StoreGate/ReadDecorHandle.h:94
id2
HWIdentifier id2
Definition: LArRodBlockPhysicsV0.cxx:564
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
Return this algorithm's output handles.
sim_rttUpdate.user
def user
Definition: sim_rttUpdate.py:662
TgcRawDataMonitorAlgorithm::m_pTCutOnTrigExtrapolation
DoubleProperty m_pTCutOnTrigExtrapolation
Definition: TgcRawDataMonitorAlgorithm.h:288
lumiFormat.i
int i
Definition: lumiFormat.py:92
TgcRawDataMonitorAlgorithm::m_FI_Z
DoubleProperty m_FI_Z
Definition: TgcRawDataMonitorAlgorithm.h:293
TgcRawDataMonitorAlgorithm::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: TgcRawDataMonitorAlgorithm.h:229
TgcRawDataMonitorAlgorithm::CoinFlagH
@ CoinFlagH
Definition: TgcRawDataMonitorAlgorithm.h:38
z
#define z
xAOD::P4Helpers::deltaR
double deltaR(double rapidity1, double phi1, double rapidity2, double phi2)
from bare bare rapidity,phi
Definition: xAODP4Helpers.h:150
Muon::TgcCoinData::INNER_TILE_MODULE_BIT
static constexpr uint32_t INNER_TILE_MODULE_BIT
Definition: TgcCoinData.h:269
TgcRawDataMonitorAlgorithm::m_zMass
DoubleProperty m_zMass
Definition: TgcRawDataMonitorAlgorithm.h:295
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
AthMonitorAlgorithm::DataType_t::heavyIonCollisions
@ heavyIonCollisions
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TgcRawDataMonitorAlgorithm::m_maskChannelList
std::set< std::string > m_maskChannelList
Definition: TgcRawDataMonitorAlgorithm.h:312
MuonGM::TgcReadoutElement::gangShortWidth
double gangShortWidth(int gasGap, int gang) const
Returns the length of the most bottom wire in the gang.
Definition: MuonDetDescr/MuonReadoutGeometry/src/TgcReadoutElement.cxx:79
tolower
void tolower(std::string &s)
Definition: AthenaSummarySvc.cxx:113
AthMonitorAlgorithm::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const =0
adds event to the monitoring histograms
TgcRawDataMonitorAlgorithm::m_thresholdPatternsKey
SG::ReadDecorHandleKey< xAOD::MuonRoIContainer > m_thresholdPatternsKey
Definition: TgcRawDataMonitorAlgorithm.h:232
TgcRawDataMonitorAlgorithm::m_useOnlyCombinedMuons
BooleanProperty m_useOnlyCombinedMuons
Definition: TgcRawDataMonitorAlgorithm.h:284
createCablingJSON.station_name
int station_name
Simple script to generate a BIS78 cabling map as used for the Monte Carlo processing.
Definition: createCablingJSON.py:8
res
std::pair< std::vector< unsigned int >, bool > res
Definition: JetGroupProductTest.cxx:14
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
xAOD::VxType::PriVtx
@ PriVtx
Primary vertex.
Definition: TrackingPrimitives.h:571
xAOD::MuonRoI_v1
Class describing a LVL1 muon region of interest.
Definition: MuonRoI_v1.h:33
MuonGM::TgcReadoutElement
A TgcReadoutElement corresponds to a single TGC chamber; therefore typically a TGC station contains s...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/TgcReadoutElement.h:42
TgcRawDataMonitorAlgorithm::m_EI_Z
DoubleProperty m_EI_Z
Definition: TgcRawDataMonitorAlgorithm.h:292
Muon::TgcCoinData::INNER_RPC_ETA_BITSHIFT
static constexpr uint32_t INNER_RPC_ETA_BITSHIFT
Bit info in int inner for the RPC inner-coincidence.
Definition: TgcCoinData.h:246
TgcRawDataMonitorAlgorithm::m_muonSelectionTool
ToolHandle< CP::IMuonSelectionTool > m_muonSelectionTool
Definition: TgcRawDataMonitorAlgorithm.h:330
Muon::TgcCoinData::INNER_TILE_MODULE_BITSHIFT
static constexpr uint32_t INNER_TILE_MODULE_BITSHIFT
Bit info in int inner for the Tile inner-coincidence.
Definition: TgcCoinData.h:268
Muon::TgcCoinData::INNER_NSW_DTHETA_BITSHIFT
static constexpr uint32_t INNER_NSW_DTHETA_BITSHIFT
Definition: TgcCoinData.h:232
TgcRawDataMonitorAlgorithm::m_packageName
StringProperty m_packageName
Definition: TgcRawDataMonitorAlgorithm.h:255
MuonGM::TgcReadoutElement::gangRadialLength
double gangRadialLength(int gasGap, int gang) const
Returns the length of the wire gang along the radial direction [pitch x N_{wire}^{gang}].
Definition: MuonDetDescr/MuonReadoutGeometry/src/TgcReadoutElement.cxx:72
xAOD::uint64_t
uint64_t
Definition: EventInfo_v1.cxx:123
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
TgcRawDataMonitorAlgorithm::m_doExpressProcessing
BooleanProperty m_doExpressProcessing
Definition: TgcRawDataMonitorAlgorithm.h:254
Muon::TgcPrepData::BCBIT_NEXT
@ BCBIT_NEXT
Definition: TgcPrepData.h:97
TgcRawDataMonitorAlgorithm::m_ctpDecMonList
StringProperty m_ctpDecMonList
Definition: TgcRawDataMonitorAlgorithm.h:256
MakeFileForMJB.ext
string ext
Definition: Moriond2016/MakeFileForMJB.py:41
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
TgcRawDataMonitorAlgorithm::m_endcapPivotPlaneMaximumRadius
DoubleProperty m_endcapPivotPlaneMaximumRadius
Definition: TgcRawDataMonitorAlgorithm.h:298
xAOD::Vertex_v1::z
float z() const
Returns the z position.
AthMonitorAlgorithm::fill
void fill(const ToolHandle< GenericMonitoringTool > &groupHandle, std::vector< std::reference_wrapper< Monitored::IMonitoredVariable >> &&variables) const
Fills a vector of variables to a group by reference.
TgcRawDataMonitorAlgorithm::CoinFlagEI
@ CoinFlagEI
Definition: TgcRawDataMonitorAlgorithm.h:38
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
TgcRawDataMonitorAlgorithm::CoinFlagTile
@ CoinFlagTile
Definition: TgcRawDataMonitorAlgorithm.h:38
Muon::TgcCoinData::INNER_RPC_BCID_BITSHIFT
static constexpr uint32_t INNER_RPC_BCID_BITSHIFT
Definition: TgcCoinData.h:256
TgcRawDataMonitorAlgorithm::m_anaMuonRoI
BooleanProperty m_anaMuonRoI
Definition: TgcRawDataMonitorAlgorithm.h:269
Trk::muon
@ muon
Definition: ParticleHypothesis.h:28
AthMonitorAlgorithm::GetEventInfo
SG::ReadHandle< xAOD::EventInfo > GetEventInfo(const EventContext &) const
Return a ReadHandle for an EventInfo object (get run/event numbers, etc.)
Definition: AthMonitorAlgorithm.cxx:107
Muon::TgcCoinData::TYPE_UNKNOWN
@ TYPE_UNKNOWN
Definition: TgcCoinData.h:53
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
TgcIdHelper::isStrip
int isStrip(const Identifier &id) const
isStrip corresponds to measuresPhi
Definition: TgcIdHelper.cxx:645
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
AthMonitorAlgorithm::m_dataType
AthMonitorAlgorithm::DataType_t m_dataType
Instance of the DataType_t enum.
Definition: AthMonitorAlgorithm.h:351
AthReentrantAlgorithm::m_extendedExtraObjects
DataObjIDColl m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
Definition: AthReentrantAlgorithm.h:153
Muon::TgcCoinData::INNER_NSW_PHI_BIT
static constexpr uint32_t INNER_NSW_PHI_BIT
Definition: TgcCoinData.h:231
Trk::Combined
@ Combined
Definition: TrackSummaryTool.h:32
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
AthMonitorAlgorithm::DataType_t::cosmics
@ cosmics
TgcIdHelper::elementID
Identifier elementID(int stationName, int stationEta, int stationPhi) const
Definition: TgcIdHelper.cxx:556
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
MuonIdHelper::stationPhi
int stationPhi(const Identifier &id) const
Definition: MuonIdHelper.cxx:814
MuonGM::TgcReadoutElement::stripPos
Amg::Vector3D stripPos(int gasGap, int strip) const
Returns the global position of a strip.
TGC::TgcChamber
Definition: TgcChamber.h:10
TgcRawDataMonitorAlgorithm::getNswRindexFromEta
double getNswRindexFromEta(const double &eta) const
Definition: TgcRawDataMonitorAlgorithm.cxx:2558
AthMonitorAlgorithm::m_tools
ToolHandleArray< GenericMonitoringTool > m_tools
Array of Generic Monitoring Tools.
Definition: AthMonitorAlgorithm.h:338
xAOD::MuonRoI_v1::Barrel
@ Barrel
The muon candidate was detected in the barrel region.
Definition: MuonRoI_v1.h:38
xAOD::MuonRoI_v1::Negative
@ Negative
The candidate came from the -z side (side C)
Definition: MuonRoI_v1.h:45
dumpTgcDigiThreshold.isStrip
list isStrip
Definition: dumpTgcDigiThreshold.py:33
MuonGM::TgcReadoutElement::stripLongWidth
double stripLongWidth(int, int) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/TgcReadoutElement.cxx:162
AthMonitorAlgorithm::Environment_t::online
@ online
MuonGM::MuonDetectorManager::tgcIdHelper
const TgcIdHelper * tgcIdHelper() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonDetectorManager.h:230
TgcRawDataMonitorAlgorithm::m_dPhiCutOnM3
DoubleProperty m_dPhiCutOnM3
Definition: TgcRawDataMonitorAlgorithm.h:301
TgcRawDataMonitorAlgorithm::CoinFlags
@ CoinFlags
Definition: TgcRawDataMonitorAlgorithm.h:39
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
AthMonitorAlgorithm::Environment_t::tier0ESD
@ tier0ESD
TgcRawDataMonitorAlgorithm::m_dumpFullChannelList
BooleanProperty m_dumpFullChannelList
Definition: TgcRawDataMonitorAlgorithm.h:305
TgcRawDataMonitorAlgorithm::m_dRCutOnM3
DoubleProperty m_dRCutOnM3
Definition: TgcRawDataMonitorAlgorithm.h:302
AthMonitorAlgorithm::Environment_t::altprod
@ altprod
TrigConf::L1Menu::threshold
const TrigConf::L1Threshold & threshold(const std::string &thresholdName) const
Access to L1Threshold by name.
Definition: L1Menu.cxx:279
AthReentrantAlgorithm::sysInitialize
virtual StatusCode sysInitialize() override
Override sysInitialize.
Definition: AthReentrantAlgorithm.cxx:96
TgcRawDataMonitorAlgorithm::m_TgcCoinDataContainerPrevBCKey
SG::ReadHandleKey< Muon::TgcCoinDataContainer > m_TgcCoinDataContainerPrevBCKey
Definition: TgcRawDataMonitorAlgorithm.h:245
charge
double charge(const T &p)
Definition: AtlasPID.h:494
TgcRawDataMonitorAlgorithm::m_printAvailableMuonTriggers
BooleanProperty m_printAvailableMuonTriggers
Definition: TgcRawDataMonitorAlgorithm.h:258
TgcRawDataMonitorAlgorithm::m_thrPatternList
StringProperty m_thrPatternList
Definition: TgcRawDataMonitorAlgorithm.h:234
AthMonitorAlgorithm::m_enforceExpressTriggers
Gaudi::Property< bool > m_enforceExpressTriggers
Definition: AthMonitorAlgorithm.h:372
Muon::TgcCoinData::INNER_NSW_R_BITSHIFT
static constexpr uint32_t INNER_NSW_R_BITSHIFT
Bit info in int inner for the NSW inner-coincidence.
Definition: TgcCoinData.h:228
python.ElectronD3PDObject.matched
matched
Definition: ElectronD3PDObject.py:138
MuonParameters::MuidSA
@ MuidSA
Definition: MuonParamDefs.h:59
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
xAOD::bcid
setEventNumber setTimeStamp bcid
Definition: EventInfo_v1.cxx:133
TrigJetMonitorAlgorithm.items
items
Definition: TrigJetMonitorAlgorithm.py:79
MuonIdHelper::stationEta
int stationEta(const Identifier &id) const
Definition: MuonIdHelper.cxx:809
item
Definition: ItemListSvc.h:43
Muon::TgcCoinData::INNER_NSW_BCID_BIT
static constexpr uint32_t INNER_NSW_BCID_BIT
Definition: TgcCoinData.h:241
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
AthMonitorAlgorithm::lbAverageInteractionsPerCrossing
virtual float lbAverageInteractionsPerCrossing(const EventContext &ctx=Gaudi::Hive::currentContext()) const
Calculate the average mu, i.e.
Definition: AthMonitorAlgorithm.cxx:222
TGC::TgcChamber::StationEta
const int & StationEta() const
Definition: TgcChamber.h:51
TgcRawDataMonitorAlgorithm::m_anaTgcPrd
BooleanProperty m_anaTgcPrd
Definition: TgcRawDataMonitorAlgorithm.h:262
MuonGM::TgcReadoutElement::stripShortWidth
double stripShortWidth(int, int) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/TgcReadoutElement.cxx:150
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
Muon::TgcCoinData::INNER_RPC_ETA_BIT
static constexpr uint32_t INNER_RPC_ETA_BIT
Definition: TgcCoinData.h:247
TGC::TgcChamber::iM
const int & iM() const
Definition: TgcChamber.h:47
AthMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: AthMonitorAlgorithm.cxx:18
MuonParameters::MuidCo
@ MuidCo
Definition: MuonParamDefs.h:60
DeMoAtlasDataLoss.runNumber
string runNumber
Definition: DeMoAtlasDataLoss.py:64
ATH_LIKELY
#define ATH_LIKELY(x)
Definition: AthUnlikelyMacros.h:16
xAOD::thrPattern
thrPattern
Definition: EmTauRoI_v2.cxx:60
Amg::deltaR
double deltaR(const Amg::Vector3D &v1, const Amg::Vector3D &v2)
Definition: GeoPrimitivesHelpers.h:122
TgcRawDataMonitorAlgorithm::m_isolationWindow
DoubleProperty m_isolationWindow
Definition: TgcRawDataMonitorAlgorithm.h:276
python.testIfMatch.matrix
matrix
Definition: testIfMatch.py:66
TgcRawDataMonitorAlgorithm::m_useMuonSelectorTool
BooleanProperty m_useMuonSelectorTool
Definition: TgcRawDataMonitorAlgorithm.h:286
a
TList * a
Definition: liststreamerinfos.cxx:10
CaloLCW_tf.group
group
Definition: CaloLCW_tf.py:28
h
TgcRawDataMonitorAlgorithm::m_anaTgcCoin
BooleanProperty m_anaTgcCoin
Definition: TgcRawDataMonitorAlgorithm.h:263
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
python.CaloScaleNoiseConfig.str
str
Definition: CaloScaleNoiseConfig.py:78
MuonGM::MuonDetectorManager
The MuonDetectorManager stores the transient representation of the Muon Spectrometer geometry and pro...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonDetectorManager.h:49
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
AthMonitorAlgorithm::DataType_t::collisions
@ collisions
Muon::TgcCoinData::TYPE_SL
@ TYPE_SL
Definition: TgcCoinData.h:52
TrigRoiDescriptorCollection
Definition: TrigRoiDescriptorCollection.h:21
Trk::BoundaryCheck
Definition: BoundaryCheck.h:51
TgcRawDataMonitorAlgorithm::fillTgcCoinEff
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
Definition: TgcRawDataMonitorAlgorithm.cxx:2476
TgcRawDataMonitorAlgorithm::fillTgcCoin
void fillTgcCoin(const std::string &, const std::vector< TgcTrig > &, std::vector< Monitored::ObjectsCollection< std::vector< TgcTrig >, double >> &, MonVariables &) const
Definition: TgcRawDataMonitorAlgorithm.cxx:2395
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
AthMonitorAlgorithm::m_name
std::string m_name
Definition: AthMonitorAlgorithm.h:366
TgcRawDataMonitorAlgorithm::getPrimaryVertex
const xAOD::Vertex * getPrimaryVertex(const EventContext &ctx) const
Definition: TgcRawDataMonitorAlgorithm.cxx:221
TgcRawDataMonitorAlgorithm::m_nHitsInOtherBWTGCWire
IntegerProperty m_nHitsInOtherBWTGCWire
Definition: TgcRawDataMonitorAlgorithm.h:303
TgcRawDataMonitorAlgorithm::m_muonToPVdz
DoubleProperty m_muonToPVdz
Definition: TgcRawDataMonitorAlgorithm.h:251
TgcRawDataMonitorAlgorithm::m_extrapolator
ToolHandle< Trk::IExtrapolator > m_extrapolator
Definition: TgcRawDataMonitorAlgorithm.h:328
TgcRawDataMonitorAlgorithm::fillTgcPrdHistograms
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
Definition: TgcRawDataMonitorAlgorithm.cxx:2701
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
AthMonitorAlgorithm::AthMonitorAlgorithm
AthMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
Definition: AthMonitorAlgorithm.cxx:7
TgcRawDataMonitorAlgorithm::fillHistogramsAfterTriggerDecision
void fillHistogramsAfterTriggerDecision(std::vector< TgcRawDataMonitorAlgorithm::TimedMuonRoI > &roiVec) const
Definition: TgcRawDataMonitorAlgorithm.cxx:582
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:616
TgcRawDataMonitorAlgorithm::CoinFlagNSW
@ CoinFlagNSW
Definition: TgcRawDataMonitorAlgorithm.h:38
Muon::TgcCoinData::TYPE_TRACKLET_EIFI
@ TYPE_TRACKLET_EIFI
Definition: TgcCoinData.h:54
checkFileSG.fi
fi
Definition: checkFileSG.py:65
xAOD::MuonRoI_v1::Forward
@ Forward
The muon candidate was detected in the forward region.
Definition: MuonRoI_v1.h:40
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
CxxUtils::atoi
int atoi(std::string_view str)
Helper functions to unpack numbers decoded in string into integers and doubles The strings are requir...
Definition: Control/CxxUtils/Root/StringUtils.cxx:85
TgcRawDataMonitorAlgorithm::getRegionsOfInterest
std::vector< TgcRawDataMonitorAlgorithm::TimedMuonRoI > getRegionsOfInterest(const EventContext &ctx) const
Definition: TgcRawDataMonitorAlgorithm.cxx:238
xAOD::MuonRoI_v1::getBW3Coincidence
bool getBW3Coincidence() const
Returns whether or not there was a 3-station coincidence in the TGC.
str
Definition: BTagTrackIpAccessor.cxx:11
Muon::TgcCoinData::INNER_NSW_PHI_BITSHIFT
static constexpr uint32_t INNER_NSW_PHI_BITSHIFT
Definition: TgcCoinData.h:230
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:790
xAOD::STACO
@ STACO
Tracks produced by STACO.
Definition: TrackingPrimitives.h:99
TgcRawDataMonitorAlgorithm::m_monitorTriggerMultiplicity
BooleanProperty m_monitorTriggerMultiplicity
Definition: TgcRawDataMonitorAlgorithm.h:257
TgcRawDataMonitorAlgorithm::checkTriggerInfo
std::set< std::string > checkTriggerInfo() const
Definition: TgcRawDataMonitorAlgorithm.cxx:197
LHEF::Writer
Pythia8::Writer Writer
Definition: Prophecy4fMerger.cxx:12
Muon::TgcCoinData::INNER_RPC_PHI_BIT
static constexpr uint32_t INNER_RPC_PHI_BIT
Definition: TgcCoinData.h:249
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
xAOD::MuonRoI_v1::getCharge
Charge getCharge() const
Returns the charge sign of the muon candidate.
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
TgcRawDataMonitorAlgorithm::m_trigMatchWindow
DoubleProperty m_trigMatchWindow
Definition: TgcRawDataMonitorAlgorithm.h:270
Muon::TgcCoinData::INNER_NSW_R_BIT
static constexpr uint32_t INNER_NSW_R_BIT
Definition: TgcCoinData.h:229
TgcRawDataMonitorAlgorithm::m_thrMonList
std::set< std::string > m_thrMonList
Definition: TgcRawDataMonitorAlgorithm.h:311
AthMonitorAlgorithm::DataType_t::userDefined
@ userDefined
TgcRawDataMonitorAlgorithm::m_M2_Z
DoubleProperty m_M2_Z
Definition: TgcRawDataMonitorAlgorithm.h:290
xAOD::lumiBlock
setTeId lumiBlock
Definition: L2StandAloneMuon_v1.cxx:327
TgcRawDataMonitorAlgorithm::m_useOnlyMuidCoStacoMuons
BooleanProperty m_useOnlyMuidCoStacoMuons
Definition: TgcRawDataMonitorAlgorithm.h:285
SG::AllowEmpty
@ AllowEmpty
Definition: StoreGate/StoreGate/VarHandleKey.h:30
TgcRawDataMonitorAlgorithm::m_extZposition
std::vector< double > m_extZposition
Definition: TgcRawDataMonitorAlgorithm.h:309
TGC::TgcChamber::StationPhi
const int & StationPhi() const
Definition: TgcChamber.h:52
TgcRawDataMonitorAlgorithm::printOutAvailableMuonTriggers
StatusCode printOutAvailableMuonTriggers() const
Definition: TgcRawDataMonitorAlgorithm.cxx:143
SG::ReadDecorHandle::isAvailable
bool isAvailable()
Test to see if this variable exists in the store, for the referenced object.
Muon::TgcCoinData::INNER_NSW_INPUT_BIT
static constexpr uint32_t INNER_NSW_INPUT_BIT
Definition: TgcCoinData.h:243
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
TgcRawDataMonitorAlgorithm::m_M3_Z
DoubleProperty m_M3_Z
Definition: TgcRawDataMonitorAlgorithm.h:291
makeComparison.deltaR
float deltaR
Definition: makeComparison.py:36
xAOD::MuonRoI_v1::getSource
RoISource getSource() const
Returns the system that detected the muon candidate.
length
double length(const pvec &v)
Definition: FPGATrackSimLLPDoubletHoughTransformTool.cxx:26
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
TgcRawDataMonitorAlgorithm::m_TgcCoinDataContainerCurrBCKey
SG::ReadHandleKey< Muon::TgcCoinDataContainer > m_TgcCoinDataContainerCurrBCKey
Definition: TgcRawDataMonitorAlgorithm.h:246
TGC::TgcChamber::iSide
const TGCSIDE & iSide() const
Definition: TgcChamber.h:44
TgcRawDataMonitorAlgorithm::InnerCoinFlags
@ InnerCoinFlags
Definition: TgcRawDataMonitorAlgorithm.h:39
TGC::TgcHit
Definition: TgcHit.h:11
TGC::TGCSIDE::TGCASIDE
@ TGCASIDE
xAOD::MuonRoI_v1::Pos
@ Pos
Candidate is a mu+ from a TGC sector.
Definition: MuonRoI_v1.h:50
xAOD::MuonRoI_v1::Positive
@ Positive
The candidate came from the +z side (side A)
Definition: MuonRoI_v1.h:44
xAOD::MuonRoI_v1::roiWord
uint32_t roiWord() const
The "raw" RoI word describing the muon candidate.
AthMonitorAlgorithm::DataType_t::monteCarlo
@ monteCarlo
TrigConf::L1Threshold
Standard L1 threshold configuration.
Definition: L1ThresholdBase.h:125
fitman.k
k
Definition: fitman.py:528
xAOD::MuonRoI_v1::getEtaOverlap
bool getEtaOverlap() const
Returns whether there's overlap between the barrel-EC sectors.
xAOD::MuonRoI_v1::getGoodMF
bool getGoodMF() const
Returns whether or not there was a good magnetic field quality in the TGC.
Muon::TgcCoinData::INNER_TILE_BCID_BIT
static constexpr uint32_t INNER_TILE_BCID_BIT
Definition: TgcCoinData.h:271
ServiceHandle< ICondSvc >
xAOD::MuonRoI_v1::phi
float phi() const
The azimuthal angle ( ) of the muon candidate.
collisions
Definition: collisions.py:1