diff --git a/Reconstruction/tauMonitoring/python/TauMonitoringConfig.py b/Reconstruction/tauMonitoring/python/TauMonitoringConfig.py new file mode 100644 index 0000000000000000000000000000000000000000..a2cb5d279c747b56356208d740ffa655c25c782b --- /dev/null +++ b/Reconstruction/tauMonitoring/python/TauMonitoringConfig.py @@ -0,0 +1,12 @@ +# +# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# + +def TauMonitoringConfig(flags): + from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator + result = ComponentAccumulator() + + from .tauMonitorAlgorithm import tauMonitoringConfig + result.merge(tauMonitoringConfig(flags)) + + return result diff --git a/Reconstruction/tauMonitoring/python/tauMonitorAlgorithm.py b/Reconstruction/tauMonitoring/python/tauMonitorAlgorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..903d827410ded14c1d8bafe515942e0afddb3526 --- /dev/null +++ b/Reconstruction/tauMonitoring/python/tauMonitorAlgorithm.py @@ -0,0 +1,131 @@ +# +# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# + +'''@file tauMonitorAlgorithm.py +@author C. D. Burton +@author P. Onyisi +@date 2018-01-11 +@brief tau python configuration for the Run III AthenaMonitoring package +''' + +def tauMonitoringConfig(inputFlags): + '''Function to configures some algorithms in the monitoring system.''' + + ### STEP 1 ### + + # The following class will make a sequence, configure algorithms, and link + # them to GenericMonitoringTools + from AthenaMonitoring import AthMonitorCfgHelper + cfgHelper = AthMonitorCfgHelper(inputFlags, monName='tauMonitorAlgFamily') + + + ### STEP 2 ### + # Adding an algorithm to the helper. Here, we will use the example + # algorithm in the AthenaMonitoring package. Just pass the type to the + # helper. Then, the helper will instantiate an instance and set up the + # base class configuration following the inputFlags. The returned object + # is the algorithm. + from tauMonitoring.tauMonitoringConf import tauMonitorAlgorithm + tauMonAlgBA = cfgHelper.addAlgorithm( tauMonitorAlgorithm, name='tauMonAlgBA') + tauMonAlgCR = cfgHelper.addAlgorithm( tauMonitorAlgorithm, name='tauMonAlgCR') + tauMonAlgEC = cfgHelper.addAlgorithm( tauMonitorAlgorithm, name='tauMonAlgEC') + + + + ### STEP 3 ### + # Edit properties of a algorithm + # some generic property + # exampleMonAlg.RandomHist = True + # to enable a trigger filter, for example: + #exampleMonAlg.TriggerChain = 'HLT_mu26_ivarmedium' + + tauMonAlgBA.etaMin = -1. + tauMonAlgBA.etaMax = 1.3 + tauMonAlgCR.etaMin = 1.3 + tauMonAlgCR.etaMax = 1.7 + tauMonAlgEC.etaMin = 1.7 + tauMonAlgEC.etaMax = 3.5 + + tauMonAlgBA.kinGroupName = 'tauMonKinGroupBA' + tauMonAlgCR.kinGroupName = 'tauMonKinGroupCR' + tauMonAlgEC.kinGroupName = 'tauMonKinGroupEC' + + ### STEP 4 ### + # Add some tools. N.B. Do not use your own trigger decion tool. Use the + # standard one that is included with AthMonitorAlgorithm. + + + # Add a generic monitoring tool (a "group" in old language). The returned + # object here is the standard GenericMonitoringTool. + myKinGroupBA = cfgHelper.addGroup(alg=tauMonAlgBA, name='tauMonKinGroupBA', topPath='run/BA/' ) + myKinGroupCR = cfgHelper.addGroup(alg=tauMonAlgCR, name='tauMonKinGroupCR', topPath='run/CR/' ) + myKinGroupEC = cfgHelper.addGroup(alg=tauMonAlgEC, name='tauMonKinGroupEC', topPath='run/EC/' ) + + # Add a GMT for the other example monitor algorithm + # anotherGroup = cfgHelper.addGroup(anotherTauMonAlg,'tauMonitor') + + + ### STEP 5 ### + # Configure histograms + + for itup in [(myKinGroupBA,'BA'),(myKinGroupCR,'CR'),(myKinGroupEC,'EC')]: + (igroup, postfix) = itup + igroup.defineHistogram('Eflow', title='Eflow;Eflow;Events', path='Kinematics', + xbins=100, xmin=0., xmax=1000.) + igroup.defineHistogram('eta,phi', type='TH2F', title='PhiVsEtaTitle;#eta;#phi', path='Kinematics', + #xbins=[0,.1,.2,.4,.8,1.6],ybins=[0,10,30,40,60,70,90]) + #xbins=[0,4.,8.,10.,15.],ybins=[0.,1.,2.,3.,4.]) + xbins=30,xmin=-3.0,xmax=3.0,ybins=32,ymin=-3.15,ymax=3.15) + + + + ### STEP 6 ### + # Finalize. The return value should be a tuple of the ComponentAccumulator + # and the sequence containing the created algorithms. If we haven't called + # any configuration other than the AthMonitorCfgHelper here, then we can + # just return directly (and not create "result" above) + + return cfgHelper.result() + + # # Otherwise, merge with result object and return + # acc = cfgHelper.result() + # result.merge(acc) + # return result + +if __name__=='__main__': + # Setup the Run III behavior + from AthenaCommon.Configurable import Configurable + Configurable.configurableRun3Behavior = 1 + + # Setup logs + from AthenaCommon.Logging import log + from AthenaCommon.Constants import INFO + log.setLevel(INFO) + + # Set the Athena configuration flags + from AthenaConfiguration.AllConfigFlags import ConfigFlags + nightly = '/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/CommonInputs/' + file = 'data16_13TeV.00311321.physics_Main.recon.AOD.r9264/AOD.11038520._000001.pool.root.1' + ConfigFlags.Input.Files = [nightly+file] + ConfigFlags.Input.isMC = False + ConfigFlags.Output.HISTFileName = 'tauRegions.root' + + ConfigFlags.lock() + + # Initialize configuration object, add accumulator, merge, and run. + from AthenaConfiguration.MainServicesConfig import MainServicesSerialCfg + from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg + cfg = MainServicesSerialCfg() + cfg.merge(PoolReadCfg(ConfigFlags)) + + exampleMonitorAcc = tauMonitoringConfig(ConfigFlags) # calls the main function above + cfg.merge(exampleMonitorAcc) + + # If you want to turn on more detailed messages ... + exampleMonitorAcc.getEventAlgo('tauMonAlgBA').OutputLevel = 2 # DEBUG + exampleMonitorAcc.getEventAlgo('tauMonAlgCR').OutputLevel = 2 # DEBUG + exampleMonitorAcc.getEventAlgo('tauMonAlgEC').OutputLevel = 2 # DEBUG + cfg.printConfig(withDetails=True) # set True for exhaustive info + + cfg.run() #use cfg.run(20) to only run on first 20 events diff --git a/Reconstruction/tauMonitoring/src/components/tauMonitoring_entries.cxx b/Reconstruction/tauMonitoring/src/components/tauMonitoring_entries.cxx index 6d4d47a983dffbe4ed7db3b7fc50bf8b1658512a..862f5b18869dfd057eaf2bf00ba96fdd02805362 100644 --- a/Reconstruction/tauMonitoring/src/components/tauMonitoring_entries.cxx +++ b/Reconstruction/tauMonitoring/src/components/tauMonitoring_entries.cxx @@ -1,4 +1,5 @@ #include "tauMonitoring/tauMonTool.h" +#include "tauMonitoring/tauMonitorAlgorithm.h" DECLARE_COMPONENT( tauMonTool ) - +DECLARE_COMPONENT( tauMonitorAlgorithm ) diff --git a/Reconstruction/tauMonitoring/src/tauMonitorAlgorithm.cxx b/Reconstruction/tauMonitoring/src/tauMonitorAlgorithm.cxx new file mode 100644 index 0000000000000000000000000000000000000000..878a11339fe2ec51c1bdba5cb33ec3886cb3ddcf --- /dev/null +++ b/Reconstruction/tauMonitoring/src/tauMonitorAlgorithm.cxx @@ -0,0 +1,68 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ + +#include "tauMonitoring/tauMonitorAlgorithm.h" + +tauMonitorAlgorithm::tauMonitorAlgorithm( const std::string& name, ISvcLocator* pSvcLocator ) +:AthMonitorAlgorithm(name,pSvcLocator) +,m_doRandom(true) +{ + declareProperty("TauRecContainer", m_TauContainerKey="TauJets"); + + declareProperty("etaMin", m_etaMin=-1.); + declareProperty("etaMax", m_etaMax=2.6); + + declareProperty("kinGroupName", m_kinGroupName="tauMonKinGroupBA"); + +} + + +tauMonitorAlgorithm::~tauMonitorAlgorithm() {} + + +StatusCode tauMonitorAlgorithm::initialize() { + using namespace Monitored; + + ATH_CHECK( m_TauContainerKey.initialize() ); + + return AthMonitorAlgorithm::initialize(); +} + + +StatusCode tauMonitorAlgorithm::fillHistograms( const EventContext& ctx ) const { + using namespace Monitored; + + + auto Eflow = Monitored::Scalar<float>("Eflow",-1.); + auto eta = Monitored::Scalar<float>("eta",-4.0); + auto phi = Monitored::Scalar<float>("phi",-1.0); + + + SG::ReadHandle<xAOD::TauJetContainer> taus(m_TauContainerKey, ctx); + if (! taus.isValid() ) { + ATH_MSG_ERROR("evtStore() does not contain tau Collection with name "<< m_TauContainerKey); + return StatusCode::FAILURE; + } + + ATH_MSG_DEBUG("Number of taus: " << taus->size()); + + bool test = false; + + for (const auto& tau : *taus) { + // do stuff with taus + + eta = tau->eta(); + phi = tau->phi(); + ATH_MSG_DEBUG(m_etaMin << m_etaMax << eta); + if ( (fabs(eta) < m_etaMin) || (fabs(eta) > m_etaMax)) continue; + + test=tau->detail(xAOD::TauJetParameters::mEflowApprox, Eflow); + if (test) fill(m_kinGroupName, Eflow, eta, phi ); + + + } + + + return StatusCode::SUCCESS; +} diff --git a/Reconstruction/tauMonitoring/tauMonitoring/tauMonitorAlgorithm.h b/Reconstruction/tauMonitoring/tauMonitoring/tauMonitorAlgorithm.h new file mode 100644 index 0000000000000000000000000000000000000000..d86d07159eec20f6fb2fe53b099d9cbd928c6478 --- /dev/null +++ b/Reconstruction/tauMonitoring/tauMonitoring/tauMonitorAlgorithm.h @@ -0,0 +1,39 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef TAUMONITORALGORITHM_H +#define TAUMONITORALGORITHM_H + +#include "AthenaMonitoring/AthMonitorAlgorithm.h" +#include "AthenaMonitoring/Monitored.h" + +#include "TRandom3.h" + +#include "StoreGate/ReadCondHandleKey.h" +#include "StoreGate/ReadHandleKey.h" + +#include "xAODTau/TauJetContainer.h" + +class tauMonitorAlgorithm : public AthMonitorAlgorithm { +public: + tauMonitorAlgorithm( const std::string& name, ISvcLocator* pSvcLocator ); + virtual ~tauMonitorAlgorithm(); + virtual StatusCode initialize() override; + virtual StatusCode fillHistograms( const EventContext& ctx ) const override; +private: + Gaudi::Property<bool> m_doRandom {this,"RandomHist",false}; + std::vector<int> m_abGroups1; + std::vector<std::vector<int>> m_abGroups2; + std::map<std::string,int> m_cGroups1; + std::map<std::string,std::map<std::string,int>> m_cGroups2; + + SG::ReadHandleKey<xAOD::TauJetContainer> m_TauContainerKey; + + Gaudi::Property<float> m_etaMin {this, "etaMin", -1.}; + Gaudi::Property<float> m_etaMax {this, "etaMax", 3.0}; + + Gaudi::Property<std::string> m_kinGroupName {this, "kinGroupName", "tauMonKinGroupBA"}; + +}; +#endif