From 8af5af2c1298f06a1d79a7d146a4e7ee6bb29b8b Mon Sep 17 00:00:00 2001 From: Eduardo Rodrigues <eduardo.rodrigues@cern.ch> Date: Tue, 28 Nov 2017 12:54:25 +0000 Subject: [PATCH] Merge branch 'apearce-validate-turbo-configuration' into 'master' Validate DaVinci configuration for Turbo data See merge request lhcb/DaVinci!116 (cherry picked from commit b715c5a0db6b9da16c8110630a563ee16cd5822d) 59a7a745 Validate DaVinci configuration for Turbo data. a86fdeb8 Fix typo. --- 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..c4f1130da --- /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'] = result.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