Skip to content
Snippets Groups Projects
Commit 42d825e9 authored by Tim Martin's avatar Tim Martin
Browse files

Merge branch 'TrigHLTRatesFromCool-new-interface' into '21.0'

Updated python interface for TrigHLTRatesFromCool package

See merge request !1198
parent 7596d14f
No related merge requests found
......@@ -8,3 +8,4 @@ atlas_subdir( TrigHLTRatesFromCool )
# Install files from the package:
atlas_install_scripts( bin/*.py )
atlas_install_python_modules( python/*.py )
atlas_add_test(pt_TrigHltRates SCRIPT test/pt_TrigHltRates.py)
Used to read HLT Rates from the COOL Online repository.
The rates are written by https://gitlab.cern.ch/atlas-tdaq-software/HLTRates2Cool/
The rates are not at all accurate, but approximations
This package is developed to read HLT Rates from the COOL Online repository.
The rates are written to COOL by HLTRates2Cool: https://gitlab.cern.ch/atlas-tdaq-software/HLTRates2Cool/
COOL folder information can be found at:
https://twiki.cern.ch/twiki/bin/viewauth/AtlasComputing/CoolOnlineData#Folder_TRIGGER_HLT_Chains_CONDBR
These are not accurate rates at a point, but average/approximate rates over a period.
The rates are averaged over 1 minute periods and they start to be written when ATLAS switch to physics mode (ready4physics).
......@@ -4,34 +4,58 @@
import argparse
import logging
from TrigHLTRatesFromCool import TrigHltRates
from AthenaCommon.Logging import logging
logging.getLogger().info("Importing %s",__name__)
log = logging.getLogger("read_hlt_rates.py")
from AthenaCommon.Logging import logging
logging.getLogger().info("Importing %s",__name__)
log = logging.getLogger("read_hlt_rates.py")
log.setLevel( logging.INFO )
log.info('Read Hlt Rates from COOL')
__doc__="""Retrieve HLT rates from COOL"""
parser = argparse.ArgumentParser(description = __doc__)
parser.add_argument('--ratetag',type=str,default="TestTagRateM13",help="COOL tag for rates folder")
parser.add_argument('--chaintag',type=str,default="TestTagChainM13",help="COOL tag for chains folder")
parser.add_argument('--runNumber',type=int,default=319018,help="RunNumber")
parser.add_argument('--timestamp',type=int,default=1490877280,help="Unix timestap")
parser.add_argument('--ratetag', type=str, default="TestTagRateM13", help="COOL tag for rates folder")
parser.add_argument('--chaintag', type=str, default="TestTagChainM13", help="COOL tag for chains folder")
parser.add_argument('--runNumber', type=int, default=319018, help="Run number")
parser.add_argument('--timestamp', type=int, default=1490877280, help="Unix timestap")
args=parser.parse_args()
log.info("Aquiring rates for run %s",args.runNumber)
log.info("Aquiring rates for run %s", args.runNumber)
hltrates = TrigHltRates.TrigHltRates(ratetag=args.ratetag,chaintag=args.chaintag)
hltrates = TrigHltRates.TrigHltRates(ratetag=args.ratetag, chaintag=args.chaintag)
return_code,chains,rates = hltrates.getAllRatesAtT(runno=args.runNumber,timestamp=args.timestamp)
# Get rates of all chains for all iovs
return_code, chainratedict = hltrates.getAllRates(runno=args.runNumber)
if return_code < 0:
log.warning("getAllRatesAtT error %s",return_code)
log.warning("getAllRates error %s", return_code)
else:
log.info("getAllRatesAtT for %s chains",return_code)
return_code,rates = hltrates.getRatesAtT(runno=319018,timestamp=1490877280,selected_chains=["total","grp_Calibration","recording"])
log.info("getAllRates for %s chains", return_code)
# Get rates chains that has "MU20" in it's name for all iovs
return_code, chainratedict = hltrates.getAllRates(runno=args.runNumber, chains=[".*MU20.*"])
if return_code < 0:
log.warning("getAllRates error %s", return_code)
else:
log.info("getAllRates for %s chains", return_code)
# Get rates of all chains at 4th IOV
return_code, chainratedict = hltrates.getRates(runno=args.runNumber, iov=4)
if return_code < 0:
log.warning("getAllRates error %s", return_code)
else:
log.info("getAllRates for %s chains", return_code)
# Get Rate for "grp_Cosm.*" and "grp_Cal.*" chains at a certain timestamp
iov = hltrates.getIOV(runno=args.runNumber, timestamp=args.timestamp) # Get iov corresponding to timestamp
return_code, chainratedict = hltrates.getRates(runno=args.runNumber, chains=["grp_Cosm.*","grp_Cal.*"], iov=iov)
if return_code < 0:
log.warning("getAllRates error %s", return_code)
else:
log.info("getAllRates for %s chains", return_code)
# Get Rate for "HLT.*" chains 5 minutes after ready4physics
timestamp = hltrates.getTimestamp(runno=args.runNumber, iov=0)
iov = hltrates.getIOV(runno=args.runNumber, timestamp=args.timestamp+5*60)
return_code, chainratedict = hltrates.getRates(runno=args.runNumber, chains=["HLT.*"], iov=iov)
if return_code < 0:
log.warning("getAllRatesAtT error %s",return_code)
log.warning("getAllRates error %s", return_code)
else:
log.info("getRatesAtT for selected %s chains",return_code)
return_code,chains,rates,iovs = hltrates.getAllRates(runno=319018)
return_code,rates,iovs = hltrates.getRates(runno=319018,selected_chains=["total","grp_Calibration","recording"])
return_code,rates,iovs = hltrates.getRates(runno=319018,selected_chains=["total","grp_Calibration","wrong_chain_name","recording"])
log.info("getAllRates for %s chains", return_code)
#!/usr/bin/env python
# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
from TrigHLTRatesFromCool import TrigHltRates
import unittest
class TestTrigHltRates(unittest.TestCase):
def setUp(self):
self.hltrates = TrigHltRates.TrigHltRates(ratetag="TestTagRateM13", chaintag="TestTagChainM13")
self.runno = 319018 # Run during M13
#Each test function MUST start with test, rest is not important
def testException(self):
""" Test exceptions that is raised by __get_sor_eor in case run number doesn't exist """
self.assertRaises(Exception, self.hltrates.getTimestamp(runno=400000, iov=0))
def testIOV(self):
""" Test IOV-timestamp conversions """
iov = self.hltrates.getIOV(runno=self.runno, timestamp=1490875399)
self.assertEqual(iov,-1)
iov = self.hltrates.getIOV(runno=self.runno, timestamp=1490875400)
self.assertEqual(iov,0)
iov = self.hltrates.getIOV(runno=self.runno, timestamp=1490883690)
self.assertEqual(iov,138)
iov = self.hltrates.getIOV(runno=self.runno, timestamp=1490888120)
self.assertEqual(iov,-1)
timestamp = self.hltrates.getTimestamp(runno=self.runno, iov=0)
self.assertEqual(timestamp,1490875400)
timestamp = self.hltrates.getTimestamp(runno=self.runno, iov=1)
self.assertEqual(timestamp,1490875460)
timestamp = self.hltrates.getTimestamp(runno=self.runno, iov=138)
self.assertEqual(timestamp,1490883680)
timestamp = self.hltrates.getTimestamp(runno=self.runno, iov=-1)
self.assertEqual(timestamp,-1)
timestamp = self.hltrates.getTimestamp(runno=self.runno, iov=1000)
self.assertEqual(timestamp,-1)
def testRegex(self):
""" Test if regex matching works correctly """
return_code, chainratedict = self.hltrates.getRates(runno=319018,chains=[".*rp_Cosm.*"],iov=5)
expected = ['grp_CosmicSlice', 'grp_Cosmic_Calo', 'grp_Cosmic_LArCalibration', 'grp_Cosmic_MinBias', 'grp_Cosmic_Muon', 'grp_Cosmic_TileCalibration', 'grp_Cosmic_Tracking']
result = chainratedict.keys(); result.sort()
self.assertEqual(result,expected)
def testReturnCodes(self):
""" Test if return codes are correct. From negative codes, only -2 is possible to test """
return_code, chainratedict = self.hltrates.getAllRates(runno=self.runno,chains=[".*rp_Cosm.*"])
self.assertEqual(return_code,7)
return_code, chainratedict = self.hltrates.getAllRates(runno=self.runno,chains=["HLT.*"])
self.assertEqual(return_code,2578)
return_code, chainratedict = self.hltrates.getAllRates(runno=self.runno,chains=[".*rp_Cosm.*", "HLT.*"])
self.assertEqual(return_code,2578+7)
return_code, chainratedict = self.hltrates.getRates(runno=400000,chains=[".*rp_Cosm.*"],iov=5)
self.assertEqual(return_code,-2)
return_code, chainratedict = self.hltrates.getRates(runno=self.runno,chains=["Wrong_Pattern.*"],iov=5)
self.assertEqual(return_code,0)
return_code, chainratedict = self.hltrates.getRates(runno=self.runno,iov=5)
self.assertEqual(return_code,2766)
#To run the tests:
unittest.main()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment