From 59a7a74539c866a6a2ebde86ce02ad4f124456c9 Mon Sep 17 00:00:00 2001 From: Alex Pearce <alex.pearce@cern.ch> Date: Thu, 16 Nov 2017 11:06:58 +0100 Subject: [PATCH] Validate DaVinci configuration for Turbo data. --- DaVinciTests/tests/options/DV_Turbo_Error.py | 9 +++++++++ .../tests/options/DV_Turbo_Implicit.py | 14 +++++++++++++ DaVinciTests/tests/options/DV_Turbo_OK.py | 8 ++++++++ .../davinci.qms/davinci_turbo_error.qmt | 19 ++++++++++++++++++ .../davinci.qms/davinci_turbo_implicit.qmt | 20 +++++++++++++++++++ .../qmtest/davinci.qms/davinci_turbo_ok.qmt | 13 ++++++++++++ Phys/DaVinci/python/DaVinci/Configuration.py | 12 +++++++++++ 7 files changed, 95 insertions(+) create mode 100644 DaVinciTests/tests/options/DV_Turbo_Error.py create mode 100755 DaVinciTests/tests/options/DV_Turbo_Implicit.py create mode 100755 DaVinciTests/tests/options/DV_Turbo_OK.py create mode 100644 DaVinciTests/tests/qmtest/davinci.qms/davinci_turbo_error.qmt create mode 100644 DaVinciTests/tests/qmtest/davinci.qms/davinci_turbo_implicit.qmt create mode 100644 DaVinciTests/tests/qmtest/davinci.qms/davinci_turbo_ok.qmt diff --git a/DaVinciTests/tests/options/DV_Turbo_Error.py b/DaVinciTests/tests/options/DV_Turbo_Error.py new file mode 100644 index 000000000..34172814c --- /dev/null +++ b/DaVinciTests/tests/options/DV_Turbo_Error.py @@ -0,0 +1,9 @@ +"""Invalid configuration for running over Turbo data.""" +from Configurables import DaVinci + +dv = DaVinci() +dv.DataType = '2016' +dv.InputType = 'MDST' +dv.Turbo = True +# The absence of this setting should cause DaVinci to throw an exception +# dv.RootInTES = '/Event/Turbo' diff --git a/DaVinciTests/tests/options/DV_Turbo_Implicit.py b/DaVinciTests/tests/options/DV_Turbo_Implicit.py new file mode 100755 index 000000000..ab3a21c41 --- /dev/null +++ b/DaVinciTests/tests/options/DV_Turbo_Implicit.py @@ -0,0 +1,14 @@ +"""Valid configuration for running over Turbo data. + +We don't set InputType to MDST explicitly, but this should be done by the +DaVinci configuration. +""" +from Configurables import DaVinci + +dv = DaVinci() +dv.DataType = '2016' +# This value should be set automatically as Turbo = True (although it's better +# to set it explicitly anyway) +# dv.InputType = 'MDST' +dv.Turbo = True +dv.RootInTES = '/Event/Turbo' diff --git a/DaVinciTests/tests/options/DV_Turbo_OK.py b/DaVinciTests/tests/options/DV_Turbo_OK.py new file mode 100755 index 000000000..ed4b14212 --- /dev/null +++ b/DaVinciTests/tests/options/DV_Turbo_OK.py @@ -0,0 +1,8 @@ +"""Valid configuration for running over Turbo data.""" +from Configurables import DaVinci + +dv = DaVinci() +dv.DataType = '2016' +dv.InputType = 'MDST' +dv.Turbo = True +dv.RootInTES = '/Event/Turbo' diff --git a/DaVinciTests/tests/qmtest/davinci.qms/davinci_turbo_error.qmt b/DaVinciTests/tests/qmtest/davinci.qms/davinci_turbo_error.qmt new file mode 100644 index 000000000..b6bb1b1a2 --- /dev/null +++ b/DaVinciTests/tests/qmtest/davinci.qms/davinci_turbo_error.qmt @@ -0,0 +1,19 @@ +<?xml version="1.0" ?> +<!DOCTYPE extension PUBLIC '-//QM/2.3/Extension//EN' 'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'> +<extension class="GaudiTest.GaudiExeTest" kind="test"> + <argument name="program"> + <text>gaudirun.py</text> + </argument> + <argument name="args"><set> + <text>../options/DV_Turbo_Error.py</text> + </set></argument> + <argument name="validator"><text> +expected = "DaVinci.Configuration.DaVinciConfigurationError: You must set DaVinci().RootInTES when DaVinci().Turbo is `True`" +if stderr.find(expected) == -1: + causes.append('missing string in stderr') + result['GaudiTest.expected_string'] = reuslt.Quote(expected) + </text></argument> + <argument name="exit_code"> + <integer>1</integer> + </argument> +</extension> diff --git a/DaVinciTests/tests/qmtest/davinci.qms/davinci_turbo_implicit.qmt b/DaVinciTests/tests/qmtest/davinci.qms/davinci_turbo_implicit.qmt new file mode 100644 index 000000000..3bef3a9d9 --- /dev/null +++ b/DaVinciTests/tests/qmtest/davinci.qms/davinci_turbo_implicit.qmt @@ -0,0 +1,20 @@ +<?xml version="1.0" ?> +<!DOCTYPE extension PUBLIC '-//QM/2.3/Extension//EN' 'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'> +<extension class="GaudiTest.GaudiExeTest" kind="test"> + <argument name="program"> + <text>gaudirun.py</text> + </argument> + <argument name="args"><set> + <text>../options/DV_Turbo_Implicit.py</text> + </set></argument> + <argument name="validator"> + <text> +findReferenceBlock(""" +# |-InputType = 'MDST' (default: 'DST') +""") + </text> + </argument> + <argument name="exit_code"> + <integer>0</integer> + </argument> +</extension> diff --git a/DaVinciTests/tests/qmtest/davinci.qms/davinci_turbo_ok.qmt b/DaVinciTests/tests/qmtest/davinci.qms/davinci_turbo_ok.qmt new file mode 100644 index 000000000..cbb56aa96 --- /dev/null +++ b/DaVinciTests/tests/qmtest/davinci.qms/davinci_turbo_ok.qmt @@ -0,0 +1,13 @@ +<?xml version="1.0" ?> +<!DOCTYPE extension PUBLIC '-//QM/2.3/Extension//EN' 'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'> +<extension class="GaudiTest.GaudiExeTest" kind="test"> + <argument name="program"> + <text>gaudirun.py</text> + </argument> + <argument name="args"><set> + <text>../options/DV_Turbo_OK.py</text> + </set></argument> + <argument name="exit_code"> + <integer>0</integer> + </argument> +</extension> diff --git a/Phys/DaVinci/python/DaVinci/Configuration.py b/Phys/DaVinci/python/DaVinci/Configuration.py index ec894754a..bf2aca34a 100644 --- a/Phys/DaVinci/python/DaVinci/Configuration.py +++ b/Phys/DaVinci/python/DaVinci/Configuration.py @@ -18,6 +18,12 @@ import GaudiKernel.ProcessJobOptions from AnalysisPython.Logger import getLogger log = getLogger ( 'DaVinci' ) + +class DaVinciConfigurationError(Exception): + """Exception type raised when DaVinci is not configured consistently.""" + pass + + class DaVinci(LHCbConfigurableUser) : __slots__ = { @@ -400,6 +406,12 @@ class DaVinci(LHCbConfigurableUser) : DstConf().setProp("SimType","Full") if self.getProp("Turbo"): + log.debug("Forcing `InputType` to `'MDST'` as `Turbo` is `True`") + self.setProp("InputType", "MDST") + if not self.getProp("RootInTES"): + raise DaVinciConfigurationError(( + "You must set DaVinci().RootInTES when DaVinci().Turbo is `True`" + )) if self.getProp("DataType") == "2016": # Enable the decoding of the persisted reconstruction objects TurboConf().RunPackedDataDecoder = True -- GitLab