diff --git a/DaVinciTests/tests/options/DV_Turbo_Error.py b/DaVinciTests/tests/options/DV_Turbo_Error.py new file mode 100644 index 0000000000000000000000000000000000000000..34172814c005a098c6fab6bbb1b3abff8e7aaed3 --- /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 0000000000000000000000000000000000000000..ab3a21c415160b4a774a54d4eefba02154e9979a --- /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 0000000000000000000000000000000000000000..ed4b1421202ef632430ba020478d1b3082649b75 --- /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 0000000000000000000000000000000000000000..b6bb1b1a25102c02948d5cb6fe0d5f0cdffddd6d --- /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 0000000000000000000000000000000000000000..3bef3a9d9d7ae49596b8ea66a937b318fb91e972 --- /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 0000000000000000000000000000000000000000..cbb56aa962c830805901bdf50d89a85bd0c7565d --- /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 ec894754aa3bdf6e44ccc9929a46e46e03918426..bf2aca34a40ef2223180717a140ca392216a6369 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