From c1d845b8fab83fd04350de2de229376e1b7829e8 Mon Sep 17 00:00:00 2001 From: James Robinson <james.em.robinson@gmail.com> Date: Thu, 8 Mar 2018 17:41:14 +0100 Subject: [PATCH] Added t_tch_4f. Hjj and jjj ready for physics validation. Simplified NNLO weight syntax. Made beam-type configurable. 2016-06-17 17:34:40. (PowhegControl-00-02-19) Former-commit-id: 7dc233b9d36e64850b5b7e5c45dd678eda69fef8 --- Generators/PowhegControl/CMakeLists.txt | 11 + Generators/PowhegControl/cmt/requirements | 4 +- ...gHerwigJimmyPhotos_AUET2CT10_ZZ_example.py | 10 +- ...1010.PowhegPythia8_AU2CT10_DMGG_example.py | 16 +- ...PowhegPythia8_AU2CT10_DMS_tloop_example.py | 16 +- ...01010.PowhegPythia8_AU2CT10_DMV_example.py | 16 +- ...1010.PowhegPythia8_AU2CT10_HWj_example.py} | 16 +- ...1010.PowhegPythia8_AU2CT10_HZj_example.py} | 16 +- ...01010.PowhegPythia8_AU2CT10_Hj_example.py} | 16 +- ...1010.PowhegPythia8_AU2CT10_Hjj_example.py} | 16 +- ...010.PowhegPythia8_AU2CT10_VBF_H_example.py | 16 +- ...101010.PowhegPythia8_AU2CT10_WW_example.py | 14 +- ...101010.PowhegPythia8_AU2CT10_WZ_example.py | 14 +- ....101010.PowhegPythia8_AU2CT10_W_example.py | 16 +- ...101010.PowhegPythia8_AU2CT10_Wj_example.py | 14 +- ...01010.PowhegPythia8_AU2CT10_Wjj_example.py | 14 +- ...010.PowhegPythia8_AU2CT10_Wt_DR_example.py | 16 +- ...101010.PowhegPythia8_AU2CT10_ZZ_example.py | 14 +- ....101010.PowhegPythia8_AU2CT10_Z_example.py | 16 +- ...101010.PowhegPythia8_AU2CT10_Zj_example.py | 14 +- ...01010.PowhegPythia8_AU2CT10_Zjj_example.py | 14 +- ...101010.PowhegPythia8_AU2CT10_bb_example.py | 14 +- ...10.PowhegPythia8_AU2CT10_ggF_H_example.py} | 14 +- ...1010.PowhegPythia8_AU2CT10_ggHZ_example.py | 14 +- ...01010.PowhegPythia8_AU2CT10_jj_example.py} | 14 +- ...1010.PowhegPythia8_AU2CT10_jjj_example.py} | 16 +- ...thiaPhotosTauola_Perugia2011_tt_example.py | 18 +- ...egPythia8EvtGen_A14NNPDF23_DMGG_example.py | 16 +- ...hia8EvtGen_A14NNPDF23_DMS_tloop_example.py | 16 +- ...hegPythia8EvtGen_A14NNPDF23_DMV_example.py | 16 +- ...hegPythia8EvtGen_A14NNPDF23_HWj_example.py | 12 +- ...hegPythia8EvtGen_A14NNPDF23_HZj_example.py | 12 +- ...whegPythia8EvtGen_A14NNPDF23_Hj_example.py | 31 +- ...hegPythia8EvtGen_A14NNPDF23_Hjj_example.py | 12 +- ...gPythia8EvtGen_A14NNPDF23_VBF_H_example.py | 12 +- ...gPythia8EvtGen_A14NNPDF23_VBF_W_example.py | 12 +- ...gPythia8EvtGen_A14NNPDF23_VBF_Z_example.py | 12 +- ...thia8EvtGen_A14NNPDF23_VBF_ssWW_example.py | 12 +- ...whegPythia8EvtGen_A14NNPDF23_WW_example.py | 12 +- ...whegPythia8EvtGen_A14NNPDF23_WZ_example.py | 12 +- ...egPythia8EvtGen_A14NNPDF23_W_EW_example.py | 12 +- ...owhegPythia8EvtGen_A14NNPDF23_W_example.py | 12 +- ...whegPythia8EvtGen_A14NNPDF23_Wj_example.py | 14 +- ...hegPythia8EvtGen_A14NNPDF23_Wjj_example.py | 12 +- ...gPythia8EvtGen_A14NNPDF23_Wt_DR_example.py | 12 +- ...gPythia8EvtGen_A14NNPDF23_Wt_DS_example.py | 12 +- ...whegPythia8EvtGen_A14NNPDF23_ZZ_example.py | 12 +- ...egPythia8EvtGen_A14NNPDF23_Z_EW_example.py | 12 +- ...owhegPythia8EvtGen_A14NNPDF23_Z_example.py | 12 +- ...whegPythia8EvtGen_A14NNPDF23_Zj_example.py | 12 +- ...hegPythia8EvtGen_A14NNPDF23_Zjj_example.py | 12 +- ...whegPythia8EvtGen_A14NNPDF23_bb_example.py | 15 +- ...Pythia8EvtGen_A14NNPDF23_ggF_HZ_example.py | 12 +- ...gPythia8EvtGen_A14NNPDF23_ggF_H_example.py | 14 +- ...whegPythia8EvtGen_A14NNPDF23_jj_example.py | 12 +- ...hegPythia8EvtGen_A14NNPDF23_jjj_example.py | 15 +- ...Pythia8EvtGen_A14NNPDF23_ssWWjj_example.py | 12 +- ...gPythia8EvtGen_A14NNPDF23_t_sch_example.py | 12 +- ...thia8EvtGen_A14NNPDF23_t_tch_4f_example.py | 20 + ...hegPythia8EvtGen_A14NNPDF23_ttH_example.py | 12 +- ...hegPythia8EvtGen_A14NNPDF23_ttj_example.py | 12 +- ...thiaPhotosTauola_Perugia2011_tt_example.py | 20 +- .../python/ATLASCommonParameters.py | 57 +- .../PowhegControl/python/DecoratorFactory.py | 28 +- .../PowhegControl/python/PowhegConfig_base.py | 911 +++++++++--------- .../decorators/AnomalousCouplingDecorator.py | 31 +- .../python/decorators/BaseDecorator.py | 157 +-- .../decorators/BreitWignerWidthDecorator.py | 19 +- .../python/decorators/CKKWDecorator.py | 19 +- .../python/decorators/CKMDecorator.py | 35 +- .../python/decorators/DarkMatterDecorator.py | 25 +- .../decorators/DarkMatterPhiDecorator.py | 23 +- .../python/decorators/DibosonDecorator.py | 37 +- .../DibosonInterferenceDecorator.py | 19 +- .../decorators/DileptonMassDecorator.py | 19 +- .../decorators/EWPropertiesDecorator.py | 37 +- .../python/decorators/ExtraTestsDecorator.py | 19 +- .../python/decorators/FakeVirtualDecorator.py | 19 +- .../python/decorators/FixedScaleDecorator.py | 19 +- .../decorators/GenericScaleDecorator.py | 19 +- .../python/decorators/HeavyQuarkDecorator.py | 19 +- .../decorators/HiggsDecayModeDecorator.py | 19 +- .../HiggsDecayPropertiesDecorator.py | 27 +- .../decorators/HiggsFixedWidthDecorator.py | 19 +- .../decorators/HiggsPropertiesDecorator.py | 21 +- .../decorators/HiggsVectorBosonDecorator.py | 35 +- .../HiggsVectorBosonJetDecorator.py | 30 +- .../python/decorators/ISRFSRDecorator.py | 25 +- .../python/decorators/JacsingDecorator.py | 19 +- .../python/decorators/LeptonMassDecorator.py | 33 +- .../python/decorators/MassWindowDecorator.py | 25 +- .../python/decorators/MiNLONLLDecorator.py | 25 +- .../python/decorators/NLOEWDecorator.py | 35 +- .../decorators/NNLOReweightingDecorator.py | 36 +- .../python/decorators/OldDijDecorator.py | 19 +- .../decorators/PDFReweightingDecorator.py | 21 +- .../RadiationParametrisationDecorator.py | 21 +- .../decorators/RunningScaleDecorator.py | 22 +- .../decorators/RunningScalesDecorator.py | 19 +- .../decorators/RunningWidthDecorator.py | 22 +- .../SecondGenerationQuarkMassDecorator.py | 29 +- .../decorators/SemileptonicDecorator.py | 19 +- .../python/decorators/Sin2ThetaWDecorator.py | 19 +- .../decorators/TopDecayBranchingDecorator.py | 25 +- .../decorators/TopDecayModeDecorator.py | 19 +- .../decorators/TopPropertiesDecorator.py | 25 +- .../python/decorators/UpperBoundDecorator.py | 34 +- .../python/decorators/V2Decorator.py | 106 +- .../decorators/VBFVectorBosonDecorator.py | 108 ++- .../VectorBosonDecayModeDecorator.py | 19 +- .../decorators/VectorBosonJetJetDecorator.py | 23 +- .../python/decorators/WDecayModeDecorator.py | 19 +- .../python/decorators/WIDDecorator.py | 19 +- .../python/decorators/WMassWindowDecorator.py | 25 +- .../python/decorators/WWDecayDecorator.py | 45 +- .../python/decorators/ZMassWindowDecorator.py | 25 +- .../python/decorators/ZeroWidthDecorator.py | 19 +- .../python/processes/PowhegConfig_DMGG.py | 87 +- .../processes/PowhegConfig_DMS_tloop.py | 73 +- .../python/processes/PowhegConfig_DMV.py | 87 +- .../python/processes/PowhegConfig_HWj.py | 91 +- .../python/processes/PowhegConfig_HZj.py | 86 +- .../python/processes/PowhegConfig_Hj.py | 98 +- .../python/processes/PowhegConfig_Hjj.py | 99 +- .../python/processes/PowhegConfig_VBF_H.py | 75 +- .../python/processes/PowhegConfig_VBF_W.py | 66 +- .../python/processes/PowhegConfig_VBF_Z.py | 74 +- .../python/processes/PowhegConfig_VBF_ssWW.py | 97 +- .../python/processes/PowhegConfig_W.py | 72 +- .../python/processes/PowhegConfig_WW.py | 77 +- .../python/processes/PowhegConfig_WZ.py | 97 +- .../python/processes/PowhegConfig_W_EW.py | 101 +- .../python/processes/PowhegConfig_Wj.py | 92 +- .../python/processes/PowhegConfig_Wjj.py | 94 +- .../python/processes/PowhegConfig_Wt_DR.py | 67 +- .../python/processes/PowhegConfig_Wt_DS.py | 85 +- .../python/processes/PowhegConfig_Z.py | 72 +- .../python/processes/PowhegConfig_ZZ.py | 91 +- .../python/processes/PowhegConfig_Z_EW.py | 109 +-- .../python/processes/PowhegConfig_Zj.py | 85 +- .../python/processes/PowhegConfig_Zjj.py | 98 +- .../python/processes/PowhegConfig_bb.py | 77 +- .../python/processes/PowhegConfig_ggF_H.py | 81 +- .../python/processes/PowhegConfig_ggF_HZ.py | 61 +- .../python/processes/PowhegConfig_jj.py | 81 +- .../python/processes/PowhegConfig_jjj.py | 101 +- .../python/processes/PowhegConfig_ssWWjj.py | 91 +- .../python/processes/PowhegConfig_t_sch.py | 63 +- .../python/processes/PowhegConfig_t_tch_4f.py | 64 ++ .../python/processes/PowhegConfig_tt.py | 95 +- .../python/processes/PowhegConfig_ttH.py | 78 +- .../python/processes/PowhegConfig_ttj.py | 116 +-- .../python/processes/__init__.py | 1 + .../python/strategies/AfterburnerMadSpin.py | 277 ++++++ .../AfterburnerMeanEventWeightCalculator.py | 27 + .../strategies/AfterburnerNNLOReweighting.py | 469 +++++---- .../python/strategies/AfterburnerPhotos.py | 19 +- .../strategies/AfterburnerReweighting.py | 222 +++-- .../python/strategies/GenerateSingleCore.py | 13 +- .../python/strategies/GenerateV1MultiCore.py | 35 +- .../python/strategies/GenerateV2MultiCore.py | 91 +- .../python/strategies/__init__.py | 2 + .../python/utility/FileParser.py | 78 +- .../python/utility/IntegrationGridTester.py | 176 ++-- .../python/utility/LHEHandler.py | 68 -- .../PowhegControl/python/utility/LHEUtils.py | 165 ++++ .../python/utility/NonBlockingStreamReader.py | 67 +- .../python/utility/ProcessHandling.py | 168 ++-- .../python/utility/RepeatingTimer.py | 40 +- .../PowhegControl/python/utility/__init__.py | 2 +- .../share/PowhegControl_t_tch_4f_Common.py | 6 + 171 files changed, 4520 insertions(+), 3816 deletions(-) create mode 100644 Generators/PowhegControl/CMakeLists.txt rename Generators/PowhegControl/examples/MC12_examples/{MC12.101010.PowhegPythia8_AU2CT10_HWJ_example.py => MC12.101010.PowhegPythia8_AU2CT10_HWj_example.py} (57%) rename Generators/PowhegControl/examples/MC12_examples/{MC12.101010.PowhegPythia8_AU2CT10_HZJ_example.py => MC12.101010.PowhegPythia8_AU2CT10_HZj_example.py} (57%) rename Generators/PowhegControl/examples/MC12_examples/{MC12.101010.PowhegPythia8_AU2CT10_HJ_example.py => MC12.101010.PowhegPythia8_AU2CT10_Hj_example.py} (57%) rename Generators/PowhegControl/examples/MC12_examples/{MC12.101010.PowhegPythia8_AU2CT10_HJJ_example.py => MC12.101010.PowhegPythia8_AU2CT10_Hjj_example.py} (57%) rename Generators/PowhegControl/examples/MC12_examples/{MC12.101010.PowhegPythia8_AU2CT10_ggH_quark_mass_effects_example.py => MC12.101010.PowhegPythia8_AU2CT10_ggF_H_example.py} (58%) rename Generators/PowhegControl/examples/MC12_examples/{MC12.101010.PowhegPythia8_AU2CT10_Dijet_example.py => MC12.101010.PowhegPythia8_AU2CT10_jj_example.py} (59%) rename Generators/PowhegControl/examples/MC12_examples/{MC12.101010.PowhegPythia8_AU2CT10_trijet_example.py => MC12.101010.PowhegPythia8_AU2CT10_jjj_example.py} (60%) create mode 100644 Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_t_tch_4f_example.py create mode 100644 Generators/PowhegControl/python/processes/PowhegConfig_t_tch_4f.py create mode 100644 Generators/PowhegControl/python/strategies/AfterburnerMadSpin.py create mode 100644 Generators/PowhegControl/python/strategies/AfterburnerMeanEventWeightCalculator.py delete mode 100644 Generators/PowhegControl/python/utility/LHEHandler.py create mode 100644 Generators/PowhegControl/python/utility/LHEUtils.py create mode 100644 Generators/PowhegControl/share/PowhegControl_t_tch_4f_Common.py diff --git a/Generators/PowhegControl/CMakeLists.txt b/Generators/PowhegControl/CMakeLists.txt new file mode 100644 index 0000000000000..eb94633ca6d61 --- /dev/null +++ b/Generators/PowhegControl/CMakeLists.txt @@ -0,0 +1,11 @@ +################################################################################ +# Package: PowhegControl +################################################################################ + +# Declare the package name: +atlas_subdir( PowhegControl ) + +# Install files from the package: +atlas_install_python_modules( python/*.py python/decorators python/processes python/strategies python/utility ) +atlas_install_joboptions( share/*.py ) + diff --git a/Generators/PowhegControl/cmt/requirements b/Generators/PowhegControl/cmt/requirements index 57957139d3553..3f57301835445 100644 --- a/Generators/PowhegControl/cmt/requirements +++ b/Generators/PowhegControl/cmt/requirements @@ -1,6 +1,8 @@ package PowhegControl -author Stephen Bieniek <stephen.paul.bieniek@cern.ch> +author Stephen Bieniek <stephen.paul.bieniek@cern.ch> +author Daniel Hayden <daniel.hayden@cern.ch> +author James Robinson <james.robinson@cern.ch> branches share python diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegHerwigJimmyPhotos_AUET2CT10_ZZ_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegHerwigJimmyPhotos_AUET2CT10_ZZ_example.py index c9b19478fb252..4aed412eb82a3 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegHerwigJimmyPhotos_AUET2CT10_ZZ_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegHerwigJimmyPhotos_AUET2CT10_ZZ_example.py @@ -3,7 +3,7 @@ #-------------------------------------------------------------- # Powheg ZZ setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_ZZ_Common.py') +include("PowhegControl/PowhegControl_ZZ_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- @@ -16,8 +16,8 @@ include("MC12JobOptions/Jimmy_Photos.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Herwig ZZ production with AU2 CT10 tune' -evgenConfig.keywords = [ 'SM', 'diboson', 'ZZ' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Herwig', 'Jimmy' ] +evgenConfig.description = "POWHEG+Herwig ZZ production with AU2 CT10 tune" +evgenConfig.keywords = [ "SM", "diboson", "ZZ" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Herwig", "Jimmy" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_DMGG_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_DMGG_example.py index 7561c0d692d23..7b28450b968cc 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_DMGG_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_DMGG_example.py @@ -3,23 +3,23 @@ #-------------------------------------------------------------- # Powheg DMGG setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_DMGG_Common.py') +include("PowhegControl/PowhegControl_DMGG_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with AU2 CT10 #-------------------------------------------------------------- include("MC12JobOptions/PowhegPythia8_AU2_CT10_Common.py") -include('MC12JobOptions/Pythia8_Powheg.py') +include("MC12JobOptions/Pythia8_Powheg.py") # id:all = name antiName spinType chargeType colType m0 mWidth mMin mMax tau0 -genSeq.Pythia8.Commands += [ '1000022:all = X Xbar 2 0 0 100 0.0 0.0 0.0 0.0', - '1000022:isVisible = false' ] +genSeq.Pythia8.Commands += [ "1000022:all = X Xbar 2 0 0 100 0.0 0.0 0.0 0.0", + "1000022:isVisible = false" ] #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 DMGG production with AU2 CT10 tune' -evgenConfig.keywords = [ 'BSM', 'WIMP', 'invisible' ] -evgenConfig.contact = [ 'james.robinson@cern.ch', 'caterina.doglioni@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 DMGG production with AU2 CT10 tune" +evgenConfig.keywords = [ "BSM", "WIMP", "invisible" ] +evgenConfig.contact = [ "james.robinson@cern.ch", "caterina.doglioni@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_DMS_tloop_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_DMS_tloop_example.py index 941dc6b57eb08..9d5ad36780e40 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_DMS_tloop_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_DMS_tloop_example.py @@ -3,23 +3,23 @@ #-------------------------------------------------------------- # Powheg DMV setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_DMS_tloop_Common.py') +include("PowhegControl/PowhegControl_DMS_tloop_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with AU2 CT10 #-------------------------------------------------------------- include("MC12JobOptions/PowhegPythia8_AU2_CT10_Common.py") -include('MC12JobOptions/Pythia8_Powheg.py') +include("MC12JobOptions/Pythia8_Powheg.py") # id:all = name antiName spinType chargeType colType m0 mWidth mMin mMax tau0 -genSeq.Pythia8.Commands += [ '1000022:all = X Xbar 2 0 0 100 0.0 0.0 0.0 0.0', - '1000022:isVisible = false' ] +genSeq.Pythia8.Commands += [ "1000022:all = X Xbar 2 0 0 100 0.0 0.0 0.0 0.0", + "1000022:isVisible = false" ] #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 DMS t-loop production with AU2 CT10 tune' -evgenConfig.keywords = [ 'BSM', 'WIMP', 'invisible' ] -evgenConfig.contact = [ 'james.robinson@cern.ch', 'caterina.doglioni@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 DMS t-loop production with AU2 CT10 tune" +evgenConfig.keywords = [ "BSM", "WIMP", "invisible" ] +evgenConfig.contact = [ "james.robinson@cern.ch", "caterina.doglioni@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_DMV_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_DMV_example.py index b89c41723175d..ad4d8577e9cf2 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_DMV_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_DMV_example.py @@ -3,23 +3,23 @@ #-------------------------------------------------------------- # Powheg DMV setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_DMV_Common.py') +include("PowhegControl/PowhegControl_DMV_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with AU2 CT10 #-------------------------------------------------------------- include("MC12JobOptions/PowhegPythia8_AU2_CT10_Common.py") -include('MC12JobOptions/Pythia8_Powheg.py') +include("MC12JobOptions/Pythia8_Powheg.py") # id:all = name antiName spinType chargeType colType m0 mWidth mMin mMax tau0 -genSeq.Pythia8.Commands += [ '1000022:all = X Xbar 2 0 0 100 0.0 0.0 0.0 0.0', - '1000022:isVisible = false' ] +genSeq.Pythia8.Commands += [ "1000022:all = X Xbar 2 0 0 100 0.0 0.0 0.0 0.0", + "1000022:isVisible = false" ] #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 DMV production with AU2 CT10 tune' -evgenConfig.keywords = [ 'BSM', 'WIMP', 'invisible' ] -evgenConfig.contact = [ 'james.robinson@cern.ch', 'caterina.doglioni@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 DMV production with AU2 CT10 tune" +evgenConfig.keywords = [ "BSM", "WIMP", "invisible" ] +evgenConfig.contact = [ "james.robinson@cern.ch", "caterina.doglioni@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_HWJ_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_HWj_example.py similarity index 57% rename from Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_HWJ_example.py rename to Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_HWj_example.py index 90f25a7f389f3..72c0a007660a4 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_HWJ_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_HWj_example.py @@ -3,20 +3,20 @@ #-------------------------------------------------------------- # Powheg HWJ setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_HWJ_Common.py') +include("PowhegControl/PowhegControl_HWj_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with main31 and CTEQ6L1 #-------------------------------------------------------------- -include('MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py') -include('MC12JobOptions/Pythia8_Powheg_Main31.py') -topAlg.Pythia8.UserModes += [ 'Main31:NFinal = 3' ] +include("MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py") +include("MC12JobOptions/Pythia8_Powheg_Main31.py") +topAlg.Pythia8.UserModes += [ "Main31:NFinal = 3" ] #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 H+W+jet production with AU2 CT10 tune' -evgenConfig.keywords = [ 'Higgs', 'W', 'jet' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 H+W+jet production with AU2 CT10 tune" +evgenConfig.keywords = [ "Higgs", "W", "jet" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_HZJ_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_HZj_example.py similarity index 57% rename from Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_HZJ_example.py rename to Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_HZj_example.py index f3b5044a8c387..c7fa961702b0d 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_HZJ_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_HZj_example.py @@ -3,20 +3,20 @@ #-------------------------------------------------------------- # Powheg HZJ setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_HZJ_Common.py') +include("PowhegControl/PowhegControl_HZj_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with main31 and CTEQ6L1 #-------------------------------------------------------------- -include('MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py') -include('MC12JobOptions/Pythia8_Powheg_Main31.py') -topAlg.Pythia8.UserModes += [ 'Main31:NFinal = 3' ] +include("MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py") +include("MC12JobOptions/Pythia8_Powheg_Main31.py") +topAlg.Pythia8.UserModes += [ "Main31:NFinal = 3" ] #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 H+Z+jet production with AU2 CT10 tune' -evgenConfig.keywords = [ 'Higgs', 'Z', 'jet' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 H+Z+jet production with AU2 CT10 tune" +evgenConfig.keywords = [ "Higgs", "Z", "jet" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_HJ_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Hj_example.py similarity index 57% rename from Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_HJ_example.py rename to Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Hj_example.py index 47b7d764286d3..29fe9832351b8 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_HJ_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Hj_example.py @@ -3,20 +3,20 @@ #-------------------------------------------------------------- # Powheg HJ setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_HJ_Common.py') +include("PowhegControl/PowhegControl_Hj_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with main31 and CTEQ6L1 #-------------------------------------------------------------- -include('MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py') -include('MC12JobOptions/Pythia8_Powheg_Main31.py') -topAlg.Pythia8.UserModes += [ 'Main31:NFinal = 2' ] +include("MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py") +include("MC12JobOptions/Pythia8_Powheg_Main31.py") +topAlg.Pythia8.UserModes += [ "Main31:NFinal = 2" ] #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 H+jet production with AU2 CT10 tune' -evgenConfig.keywords = [ 'Higgs', 'jet' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 H+jet production with AU2 CT10 tune" +evgenConfig.keywords = [ "Higgs", "jet" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_HJJ_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Hjj_example.py similarity index 57% rename from Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_HJJ_example.py rename to Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Hjj_example.py index c8ea20d23ebf3..29706d96ecf4e 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_HJJ_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Hjj_example.py @@ -3,20 +3,20 @@ #-------------------------------------------------------------- # Powheg HJJ setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_HJJ_Common.py') +include("PowhegControl/PowhegControl_Hjj_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with main31 and CTEQ6L1 #-------------------------------------------------------------- -include('MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py') -include('MC12JobOptions/Pythia8_Powheg_Main31.py') -topAlg.Pythia8.UserModes += [ 'Main31:NFinal = 3' ] +include("MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py") +include("MC12JobOptions/Pythia8_Powheg_Main31.py") +topAlg.Pythia8.UserModes += [ "Main31:NFinal = 3" ] #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 H+dijet production with AU2 CT10 tune' -evgenConfig.keywords = [ 'Higgs', 'dijet' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 H+dijet production with AU2 CT10 tune" +evgenConfig.keywords = [ "Higgs", "dijet" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_VBF_H_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_VBF_H_example.py index bb8bab7d61f2f..5b19302187bc4 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_VBF_H_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_VBF_H_example.py @@ -3,20 +3,20 @@ #-------------------------------------------------------------- # Powheg VBF_H setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_VBF_H_Common.py') +include("PowhegControl/PowhegControl_VBF_H_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with main31 and CTEQ6L1 #-------------------------------------------------------------- -include('MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py') -include('MC12JobOptions/Pythia8_Powheg_Main31.py') -topAlg.Pythia8.UserModes += [ 'Main31:NFinal = 3' ] +include("MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py") +include("MC12JobOptions/Pythia8_Powheg_Main31.py") +topAlg.Pythia8.UserModes += [ "Main31:NFinal = 3" ] #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 VBF_H production with AU2 CT10 tune' -evgenConfig.keywords = [ 'Higgs', 'VBF' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 VBF_H production with AU2 CT10 tune" +evgenConfig.keywords = [ "Higgs", "VBF" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_WW_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_WW_example.py index 8cc84de883f12..7d5a9a417505e 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_WW_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_WW_example.py @@ -3,19 +3,19 @@ #-------------------------------------------------------------- # Powheg WW setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_WW_Common.py') +include("PowhegControl/PowhegControl_WW_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with main31 and CTEQ6L1 #-------------------------------------------------------------- -include('MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py') -include('MC12JobOptions/Pythia8_Powheg_Main31.py') +include("MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py") +include("MC12JobOptions/Pythia8_Powheg_Main31.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 WW production with AU2 CT10 tune' -evgenConfig.keywords = [ 'SM', 'diboson', 'WW' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 WW production with AU2 CT10 tune" +evgenConfig.keywords = [ "SM", "diboson", "WW" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_WZ_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_WZ_example.py index afdf558885746..f40f431e73e1d 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_WZ_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_WZ_example.py @@ -3,19 +3,19 @@ #-------------------------------------------------------------- # Powheg WZ setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_WZ_Common.py') +include("PowhegControl/PowhegControl_WZ_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with main31 and CTEQ6L1 #-------------------------------------------------------------- -include('MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py') -include('MC12JobOptions/Pythia8_Powheg_Main31.py') +include("MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py") +include("MC12JobOptions/Pythia8_Powheg_Main31.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 WZ production with AU2 CT10 tune' -evgenConfig.keywords = [ 'SM', 'diboson', 'WZ' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 WZ production with AU2 CT10 tune" +evgenConfig.keywords = [ "SM", "diboson", "WZ" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_W_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_W_example.py index 266fdc1349b09..d0877af711f7e 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_W_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_W_example.py @@ -3,20 +3,20 @@ #-------------------------------------------------------------- # Powheg W setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_W_Common.py') +include("PowhegControl/PowhegControl_W_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with main31 and CTEQ6L1 #-------------------------------------------------------------- -include('MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py') -include('MC12JobOptions/Pythia8_Powheg_Main31.py') -topAlg.Pythia8.UserModes += [ 'Main31:NFinal = 1' ] +include("MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py") +include("MC12JobOptions/Pythia8_Powheg_Main31.py") +topAlg.Pythia8.UserModes += [ "Main31:NFinal = 1" ] #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 W^{+} production with AU2 CT10 tune' -evgenConfig.keywords = [ 'SM', 'W' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 W^{+} production with AU2 CT10 tune" +evgenConfig.keywords = [ "SM", "W" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Wj_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Wj_example.py index 7f4110ac417c5..a90ad341ce3a0 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Wj_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Wj_example.py @@ -3,19 +3,19 @@ #-------------------------------------------------------------- # Powheg Wj setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_Wj_Common.py') +include("PowhegControl/PowhegControl_Wj_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with main31 and CTEQ6L1 #-------------------------------------------------------------- -include('MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py') -include('MC12JobOptions/Pythia8_Powheg_Main31.py') +include("MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py") +include("MC12JobOptions/Pythia8_Powheg_Main31.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 W+j production with AU2 CT10 tune' -evgenConfig.keywords = [ 'SM', 'W', 'jet' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 W+j production with AU2 CT10 tune" +evgenConfig.keywords = [ "SM", "W", "jet" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Wjj_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Wjj_example.py index 649597c5d51ee..0c3dabec24334 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Wjj_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Wjj_example.py @@ -3,19 +3,19 @@ #-------------------------------------------------------------- # Powheg Wj setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_Wjj_Common.py') +include("PowhegControl/PowhegControl_Wjj_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with main31 and CTEQ6L1 #-------------------------------------------------------------- -include('MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py') -include('MC12JobOptions/Pythia8_Powheg_Main31.py') +include("MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py") +include("MC12JobOptions/Pythia8_Powheg_Main31.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 W+jj production with AU2 CT10 tune' -evgenConfig.keywords = [ 'SM', 'W', 'jet' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 W+jj production with AU2 CT10 tune" +evgenConfig.keywords = [ "SM", "W", "jet" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Wt_DR_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Wt_DR_example.py index 078500a14004b..b144ff172f476 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Wt_DR_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Wt_DR_example.py @@ -3,20 +3,20 @@ #-------------------------------------------------------------- # Powheg Wt with diagram removal setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_Wt_DR_Common.py') +include("PowhegControl/PowhegControl_Wt_DR_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with main31 and CTEQ6L1 #-------------------------------------------------------------- -include('MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py') -include('MC12JobOptions/Pythia8_Powheg_Main31.py') -topAlg.Pythia8.UserModes += [ 'Main31:NFinal = 2' ] +include("MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py") +include("MC12JobOptions/Pythia8_Powheg_Main31.py") +topAlg.Pythia8.UserModes += [ "Main31:NFinal = 2" ] #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 W+t production with AU2 CT10 tune' -evgenConfig.keywords = [ 'W', 'top', 'Wt' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 W+t production with AU2 CT10 tune" +evgenConfig.keywords = [ "W", "top", "Wt" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_ZZ_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_ZZ_example.py index 1cb7a090dc81b..e56f3a43b7acf 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_ZZ_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_ZZ_example.py @@ -3,19 +3,19 @@ #-------------------------------------------------------------- # Powheg ZZ setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_ZZ_Common.py') +include("PowhegControl/PowhegControl_ZZ_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with main31 and CTEQ6L1 #-------------------------------------------------------------- -include('MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py') -include('MC12JobOptions/Pythia8_Powheg_Main31.py') +include("MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py") +include("MC12JobOptions/Pythia8_Powheg_Main31.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 ZZ production with AU2 CT10 tune' -evgenConfig.keywords = [ 'SM', 'diboson', 'ZZ' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 ZZ production with AU2 CT10 tune" +evgenConfig.keywords = [ "SM", "diboson", "ZZ" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Z_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Z_example.py index 15dd99cf839c2..6d99feef2a0b6 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Z_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Z_example.py @@ -3,20 +3,20 @@ #-------------------------------------------------------------- # Powheg Z setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_Z_Common.py') +include("PowhegControl/PowhegControl_Z_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with main31 and CTEQ6L1 #-------------------------------------------------------------- -include('MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py') -include('MC12JobOptions/Pythia8_Powheg_Main31.py') -topAlg.Pythia8.UserModes += [ 'Main31:NFinal = 1' ] +include("MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py") +include("MC12JobOptions/Pythia8_Powheg_Main31.py") +topAlg.Pythia8.UserModes += [ "Main31:NFinal = 1" ] #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 Z production with AU2 CT10 tune' -evgenConfig.keywords = [ 'SM', 'Z' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 Z production with AU2 CT10 tune" +evgenConfig.keywords = [ "SM", "Z" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Zj_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Zj_example.py index 162c096918bcb..08a9baa3f0505 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Zj_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Zj_example.py @@ -3,19 +3,19 @@ #-------------------------------------------------------------- # Powheg Zj setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_Zj_Common.py') +include("PowhegControl/PowhegControl_Zj_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with main31 and CTEQ6L1 #-------------------------------------------------------------- -include('MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py') -include('MC12JobOptions/Pythia8_Powheg_Main31.py') +include("MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py") +include("MC12JobOptions/Pythia8_Powheg_Main31.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 Zj production with AU2 CT10 tune' -evgenConfig.keywords = [ 'SM', 'Z', 'jet' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 Zj production with AU2 CT10 tune" +evgenConfig.keywords = [ "SM", "Z", "jet" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Zjj_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Zjj_example.py index 4e89a991535c3..5418dfe4cb86d 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Zjj_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Zjj_example.py @@ -3,19 +3,19 @@ #-------------------------------------------------------------- # Powheg Zj setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_Zjj_Common.py') +include("PowhegControl/PowhegControl_Zjj_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with main31 and CTEQ6L1 #-------------------------------------------------------------- -include('MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py') -include('MC12JobOptions/Pythia8_Powheg_Main31.py') +include("MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py") +include("MC12JobOptions/Pythia8_Powheg_Main31.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 Z+jj production with AU2 CT10 tune' -evgenConfig.keywords = [ 'SM', 'Z', 'jet' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 Z+jj production with AU2 CT10 tune" +evgenConfig.keywords = [ "SM", "Z", "jet" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_bb_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_bb_example.py index b12ebf00b4b2c..50107a297a81a 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_bb_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_bb_example.py @@ -3,20 +3,20 @@ #-------------------------------------------------------------- # Powheg bb setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_bb_Common.py') +include("PowhegControl/PowhegControl_bb_Common.py") PowhegConfig.PDF = [ 10800, 10801, 10802 ] PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with main31 and CTEQ6L1 #-------------------------------------------------------------- -include('MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py') -include('MC12JobOptions/Pythia8_Powheg.py') +include("MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py") +include("MC12JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 bb production with AU2 CT10 tune' -evgenConfig.keywords = [ 'SM', 'QCD', '2jet' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 bb production with AU2 CT10 tune" +evgenConfig.keywords = [ "SM", "QCD", "2jet" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_ggH_quark_mass_effects_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_ggF_H_example.py similarity index 58% rename from Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_ggH_quark_mass_effects_example.py rename to Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_ggF_H_example.py index 5615c8c89f57f..19900ab4ed7bb 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_ggH_quark_mass_effects_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_ggF_H_example.py @@ -3,19 +3,19 @@ #-------------------------------------------------------------- # Powheg ggH setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_ggH_quark_mass_effects_Common.py') +include("PowhegControl/PowhegControl_ggF_H_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with main31 and CTEQ6L1 #-------------------------------------------------------------- -include('MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py') -include('MC12JobOptions/Pythia8_Powheg_Main31.py') +include("MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py") +include("MC12JobOptions/Pythia8_Powheg_Main31.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 ggH_quark_mass_effects production with AU2 CT10 tune' -evgenConfig.keywords = [ 'Higgs' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 ggH_quark_mass_effects production with AU2 CT10 tune" +evgenConfig.keywords = [ "Higgs" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_ggHZ_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_ggHZ_example.py index 771271730aac5..a6456cf9720d3 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_ggHZ_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_ggHZ_example.py @@ -3,19 +3,19 @@ #-------------------------------------------------------------- # Powheg ggHZ setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_ggHZ_Common.py') +include("PowhegControl/PowhegControl_ggHZ_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with main31 and CTEQ6L1 #-------------------------------------------------------------- -include('MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py') -include('MC12JobOptions/Pythia8_Powheg_Main31.py') +include("MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py") +include("MC12JobOptions/Pythia8_Powheg_Main31.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 ggHZ production with AU2 CT10 tune' -evgenConfig.keywords = [ 'Higgs', 'Z', 'ZHiggs' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 ggHZ production with AU2 CT10 tune" +evgenConfig.keywords = [ "Higgs", "Z", "ZHiggs" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Dijet_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_jj_example.py similarity index 59% rename from Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Dijet_example.py rename to Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_jj_example.py index fc12537df8732..0493b95b26e94 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_Dijet_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_jj_example.py @@ -3,19 +3,19 @@ #-------------------------------------------------------------- # Powheg Dijet setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_Dijet_Common.py') +include("PowhegControl/PowhegControl_jj_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with main31 and CTEQ6L1 #-------------------------------------------------------------- -include('MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py') -include('MC12JobOptions/Pythia8_Powheg_Main31.py') +include("MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py") +include("MC12JobOptions/Pythia8_Powheg_Main31.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 dijet production with AU2 CT10 tune' -evgenConfig.keywords = [ 'SM', 'QCD', 'dijet', 'jets' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 dijet production with AU2 CT10 tune" +evgenConfig.keywords = [ "SM", "QCD", "dijet", "jets" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_trijet_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_jjj_example.py similarity index 60% rename from Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_trijet_example.py rename to Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_jjj_example.py index 860beaf9ac3a0..ffe69c462ecaf 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_trijet_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythia8_AU2CT10_jjj_example.py @@ -3,21 +3,21 @@ #-------------------------------------------------------------- # Powheg trijet setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_trijet_Common.py') +include("PowhegControl/PowhegControl_jjj_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with main31 and CTEQ6L1 #-------------------------------------------------------------- -include('MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py') -include('MC12JobOptions/Pythia8_Powheg_Main31.py') -topAlg.Pythia8.UserModes += [ 'Main31:NFinal = 3' ] +include("MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py") +include("MC12JobOptions/Pythia8_Powheg_Main31.py") +topAlg.Pythia8.UserModes += [ "Main31:NFinal = 3" ] #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 trijet production with AU2 CT10 tune' -evgenConfig.keywords = [ 'SM', 'QCD', '3jet', 'jets' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia8' ] +evgenConfig.description = "POWHEG+Pythia8 trijet production with AU2 CT10 tune" +evgenConfig.keywords = [ "SM", "QCD", "3jet", "jets" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia8" ] evgenConfig.weighting = 0 # needed to avoid failure with high weights if using Born suppression diff --git a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythiaPhotosTauola_Perugia2011_tt_example.py b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythiaPhotosTauola_Perugia2011_tt_example.py index fa7420c255bb7..0dfa46ed3e116 100644 --- a/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythiaPhotosTauola_Perugia2011_tt_example.py +++ b/Generators/PowhegControl/examples/MC12_examples/MC12.101010.PowhegPythiaPhotosTauola_Perugia2011_tt_example.py @@ -3,25 +3,25 @@ #-------------------------------------------------------------- # Powheg tt setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_tt_Common.py') +include("PowhegControl/PowhegControl_tt_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia6 (Perugia2011) showering #-------------------------------------------------------------- -include('MC12JobOptions/PowhegPythia_Perugia2011C_Common.py') -include('MC12JobOptions/Pythia_Tauola.py') -include('MC12JobOptions/Pythia_Photos.py') +include("MC12JobOptions/PowhegPythia_Perugia2011C_Common.py") +include("MC12JobOptions/Pythia_Tauola.py") +include("MC12JobOptions/Pythia_Photos.py") #-------------------------------------------------------------- # Event filter #-------------------------------------------------------------- -include('MC12JobOptions/TTbarWToLeptonFilter.py') +include("MC12JobOptions/TTbarWToLeptonFilter.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia6 ttbar production with Perugia 2011c tune' -evgenConfig.keywords = [ 'top', 'ttbar' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] -evgenConfig.generators += [ 'Powheg', 'Pythia' ] +evgenConfig.description = "POWHEG+Pythia6 ttbar production with Perugia 2011c tune" +evgenConfig.keywords = [ "top", "ttbar" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] +evgenConfig.generators += [ "Powheg", "Pythia" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_DMGG_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_DMGG_example.py index bce5d046c430d..d666122b7ad42 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_DMGG_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_DMGG_example.py @@ -3,22 +3,22 @@ #-------------------------------------------------------------- # Powheg DMGG setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_DMGG_Common.py') +include("PowhegControl/PowhegControl_DMGG_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") # id:all = name antiName spinType chargeType colType m0 mWidth mMin mMax tau0 -genSeq.Pythia8.Commands += [ '1000022:all = X Xbar 2 0 0 {0} 0.0 0.0 0.0 0.0'.format(PowhegConfig.DM_mass), - '1000022:isVisible = false' ] +genSeq.Pythia8.Commands += [ "1000022:all = X Xbar 2 0 0 {0} 0.0 0.0 0.0 0.0".format(PowhegConfig.DM_mass), + "1000022:isVisible = false" ] #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 DMGG production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'BSM', 'WIMP', 'invisible' ] -evgenConfig.contact = [ 'james.robinson@cern.ch', 'caterina.doglioni@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 DMGG production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "BSM", "WIMP", "invisible" ] +evgenConfig.contact = [ "james.robinson@cern.ch", "caterina.doglioni@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_DMS_tloop_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_DMS_tloop_example.py index 0ce7b4d9b496e..ff4e716e3177c 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_DMS_tloop_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_DMS_tloop_example.py @@ -3,22 +3,22 @@ #-------------------------------------------------------------- # Powheg DMS_tloop setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_DMS_tloop_Common.py') +include("PowhegControl/PowhegControl_DMS_tloop_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") # id:all = name antiName spinType chargeType colType m0 mWidth mMin mMax tau0 -genSeq.Pythia8.Commands += [ '1000022:all = X Xbar 2 0 0 {0} 0.0 0.0 0.0 0.0'.format(PowhegConfig.DM_mass), - '1000022:isVisible = false' ] +genSeq.Pythia8.Commands += [ "1000022:all = X Xbar 2 0 0 {0} 0.0 0.0 0.0 0.0".format(PowhegConfig.DM_mass), + "1000022:isVisible = false" ] #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 DMS t-loop production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'BSM', 'WIMP', 'invisible' ] -evgenConfig.contact = [ 'james.robinson@cern.ch', 'caterina.doglioni@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 DMS t-loop production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "BSM", "WIMP", "invisible" ] +evgenConfig.contact = [ "james.robinson@cern.ch", "caterina.doglioni@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_DMV_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_DMV_example.py index 532eb374e3fc6..b0f103aebf6b6 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_DMV_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_DMV_example.py @@ -3,22 +3,22 @@ #-------------------------------------------------------------- # Powheg DMV setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_DMV_Common.py') +include("PowhegControl/PowhegControl_DMV_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") # id:all = name antiName spinType chargeType colType m0 mWidth mMin mMax tau0 -genSeq.Pythia8.Commands += [ '1000022:all = X Xbar 2 0 0 {0} 0.0 0.0 0.0 0.0'.format(PowhegConfig.DM_mass), - '1000022:isVisible = false' ] +genSeq.Pythia8.Commands += [ "1000022:all = X Xbar 2 0 0 {0} 0.0 0.0 0.0 0.0".format(PowhegConfig.DM_mass), + "1000022:isVisible = false" ] #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 DMV production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'BSM', 'WIMP', 'invisible' ] -evgenConfig.contact = [ 'james.robinson@cern.ch', 'caterina.doglioni@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 DMV production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "BSM", "WIMP", "invisible" ] +evgenConfig.contact = [ "james.robinson@cern.ch", "caterina.doglioni@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_HWj_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_HWj_example.py index 0dda5aa198232..ad50a7ac9926b 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_HWj_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_HWj_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg HWj setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_HWj_Common.py') +include("PowhegControl/PowhegControl_HWj_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 Higgs+W+jet production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'Higgs', 'SMHiggs', 'W', 'WHiggs', '1jet' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 Higgs+W+jet production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "Higgs", "SMHiggs", "W", "WHiggs", "1jet" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_HZj_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_HZj_example.py index 4af604d590620..1552309460046 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_HZj_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_HZj_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg HZj setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_HZj_Common.py') +include("PowhegControl/PowhegControl_HZj_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 H+Z+jet production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'Higgs', 'SMHiggs', 'Z', 'ZHiggs', '1jet' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 H+Z+jet production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "Higgs", "SMHiggs", "Z", "ZHiggs", "1jet" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Hj_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Hj_example.py index 8da2234ff7c2e..bb0444a0ee926 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Hj_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Hj_example.py @@ -3,28 +3,29 @@ #-------------------------------------------------------------- # Powheg Hj setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_Hj_Common.py') +include("PowhegControl/PowhegControl_Hj_Common.py") # # To construct three additional event weights with user-defined names -# PowhegConfig.bmass_in_minlo = [ 0, 0, 1 ] -# PowhegConfig.quarkmasseffects = [ 1, 0, 1 ] -# PowhegConfig.define_weight_group( group_name='quark_mass_variation', weight_names=['mtmb','mtinf','mtmb-bminlo'] ) -# # To combine the user-defined weights with NNLOPS -# PowhegConfig.NNLO_reweighting_inputs = { 'nn-mtinf':'H1250_CM13_CT10_APX0_11.top', 'nn-mtmb':'H1250_CM13_CT10_APX2_22.top' } -# PowhegConfig.NNLO_output_weights = { 'nnlops-mtmb':"combine 'nn-mtmb' and 'mtmb'",\ -# 'nnlops-mtinf':"combine 'nn-mtinf' and 'mtinf'",\ -# 'nnlops-mtmb-bminlo':"combines 'nn-mtmb' and 'mtmb-bminlo'" -# } +PowhegConfig.define_event_weight_group( group_name="quark_mass_variation", parameters_to_vary=["bmass_in_minlo","quarkmasseffects"] ) +PowhegConfig.add_weight_to_group( group_name="quark_mass_variation", weight_name="mtmb", parameter_values=[0,1] ) +PowhegConfig.add_weight_to_group( group_name="quark_mass_variation", weight_name="mtinf", parameter_values=[0,0] ) +PowhegConfig.add_weight_to_group( group_name="quark_mass_variation", weight_name="mtmb-bminlo", parameter_values=[1,1] ) +# To combine the user-defined weights with NNLOPS +PowhegConfig.NNLO_reweighting_inputs = { "nn-mtinf":"H1250_CM13_CT10_APX0_11.top", "nn-mtmb":"H1250_CM13_CT10_APX2_22.top" } +PowhegConfig.NNLO_output_weights = { "nnlops-mtmb":"combine "nn-mtmb" and "mtmb"",\ + "nnlops-mtinf":"combine "nn-mtinf" and "mtinf"",\ + "nnlops-mtmb-bminlo":"combines "nn-mtmb" and "mtmb-bminlo"" + } PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 tune and NNPDF 2.3 #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 H+jet production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'Higgs', 'jets' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 H+jet production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "Higgs", "jets" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Hjj_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Hjj_example.py index f78a6938a698a..6d921719713af 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Hjj_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Hjj_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg Hjj setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_Hjj_Common.py') +include("PowhegControl/PowhegControl_Hjj_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 H+jet+jet production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'Higgs', 'SMHiggs', '2jet', 'jets' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 H+jet+jet production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "Higgs", "SMHiggs", "2jet", "jets" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_VBF_H_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_VBF_H_example.py index 7a8768d962179..79af161ecd9d9 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_VBF_H_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_VBF_H_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg VBF_H setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_VBF_H_Common.py') +include("PowhegControl/PowhegControl_VBF_H_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 VBF_H production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'Higgs', 'VBF' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 VBF_H production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "Higgs", "VBF" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_VBF_W_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_VBF_W_example.py index 554fd65ac0ec1..21fe61fd436c9 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_VBF_W_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_VBF_W_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg VBF W setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_VBF_W_Common.py') +include("PowhegControl/PowhegControl_VBF_W_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 VBF W production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'SM', 'VBF', 'W' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 VBF W production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "SM", "VBF", "W" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_VBF_Z_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_VBF_Z_example.py index 5fa0d9d40cdd5..0da1f52937770 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_VBF_Z_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_VBF_Z_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg VBF Z setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_VBF_Z_Common.py') +include("PowhegControl/PowhegControl_VBF_Z_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 VBF Z production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'SM', 'VBF', 'Z' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 VBF Z production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "SM", "VBF", "Z" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_VBF_ssWW_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_VBF_ssWW_example.py index 26fb02be242f6..8d9312e1724fb 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_VBF_ssWW_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_VBF_ssWW_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg VBF_ssWW setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_VBF_ssWW_Common.py') +include("PowhegControl/PowhegControl_VBF_ssWW_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 VBF same-sign WW production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'SM', 'diboson', 'WW', 'VBF' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 VBF same-sign WW production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "SM", "diboson", "WW", "VBF" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_WW_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_WW_example.py index 4ba5d88401d54..4060f539f6132 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_WW_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_WW_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg WW setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_WW_Common.py') +include("PowhegControl/PowhegControl_WW_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 WW production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'SM', 'diboson', 'WW' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 WW production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "SM", "diboson", "WW" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_WZ_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_WZ_example.py index bb7ee8e34eaa9..27a446a594243 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_WZ_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_WZ_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg WZ setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_WZ_Common.py') +include("PowhegControl/PowhegControl_WZ_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 WZ production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'SM', 'diboson', 'W', 'Z' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 WZ production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "SM", "diboson", "W", "Z" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_W_EW_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_W_EW_example.py index 8580b2f33cac9..53d391aa17dd7 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_W_EW_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_W_EW_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg W_EW setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_W_EW_Common.py') +include("PowhegControl/PowhegControl_W_EW_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 W production plus EW effects with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'SM', 'W' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 W production plus EW effects with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "SM", "W" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_W_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_W_example.py index 3e4f84ec2cea3..1c2e437dad5bf 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_W_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_W_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg W setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_W_Common.py') +include("PowhegControl/PowhegControl_W_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 W production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'SM', 'W' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 W production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "SM", "W" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Wj_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Wj_example.py index d5538b71f7510..5d24a5fece122 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Wj_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Wj_example.py @@ -3,19 +3,19 @@ #-------------------------------------------------------------- # Powheg Wj setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_Wj_Common.py') -# PowhegConfig.NNLO_reweighting_inputs = { 'DYNNLO':'Wp_CM8_MMHT14NNLO_11.top' } +include("PowhegControl/PowhegControl_Wj_Common.py") +PowhegConfig.NNLO_reweighting_inputs = { "DYNNLO":"Wp_CM8_MMHT14NNLO_11.top" } PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 W+j production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'SM', 'W', '1jet' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 W+j production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "SM", "W", "1jet" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Wjj_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Wjj_example.py index c22a9c5a7b246..2b236428ac9a9 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Wjj_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Wjj_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg Wj setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_Wjj_Common.py') +include("PowhegControl/PowhegControl_Wjj_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 W+jj production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'SM', 'W', '2jet' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 W+jj production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "SM", "W", "2jet" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Wt_DR_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Wt_DR_example.py index 30a21e9cc942b..7f675ecc5de7b 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Wt_DR_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Wt_DR_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg Wt_DR setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_Wt_DR_Common.py') +include("PowhegControl/PowhegControl_Wt_DR_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 W+t production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'SM', 'W', 'top' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 W+t production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "SM", "W", "top" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Wt_DS_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Wt_DS_example.py index dd5ce312fe181..2f6654420eb8e 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Wt_DS_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Wt_DS_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg Wt_DS setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_Wt_DS_Common.py') +include("PowhegControl/PowhegControl_Wt_DS_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 W+t production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'SM', 'W', 'top' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 W+t production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "SM", "W", "top" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ZZ_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ZZ_example.py index a5fd5d1c52541..37b3829828bc7 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ZZ_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ZZ_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg ZZ setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_ZZ_Common.py') +include("PowhegControl/PowhegControl_ZZ_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 ZZ production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'SM', 'diboson', 'ZZ' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 ZZ production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "SM", "diboson", "ZZ" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Z_EW_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Z_EW_example.py index c318700d42574..466dea666f6db 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Z_EW_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Z_EW_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg Z_EW setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_Z_EW_Common.py') +include("PowhegControl/PowhegControl_Z_EW_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 Z production plus EW effects with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'SM', 'Z' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 Z production plus EW effects with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "SM", "Z" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Z_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Z_example.py index e1674d0ddeb82..a312deab60b09 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Z_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Z_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg Z setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_Z_Common.py') +include("PowhegControl/PowhegControl_Z_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 Z production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'SM', 'Z' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 Z production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "SM", "Z" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Zj_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Zj_example.py index 10eb6028a8a7b..4cfc5584e17aa 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Zj_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Zj_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg Zj setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_Zj_Common.py') +include("PowhegControl/PowhegControl_Zj_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 Z+j production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'SM', 'Z', '1jet' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 Z+j production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "SM", "Z", "1jet" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Zjj_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Zjj_example.py index 61fdf6c8e99a9..2582a81b73441 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Zjj_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_Zjj_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg Zj setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_Zjj_Common.py') +include("PowhegControl/PowhegControl_Zjj_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 Z+jj production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'SM', 'Z', '2jet' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 Z+jj production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "SM", "Z", "2jet" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_bb_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_bb_example.py index 180dedbb4cffb..1e1004b613bd0 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_bb_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_bb_example.py @@ -3,18 +3,21 @@ #-------------------------------------------------------------- # Powheg bb setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_bb_Common.py') +include("PowhegControl/PowhegControl_bb_Common.py") +PowhegConfig.PDF = range(10800,10853) +PowhegConfig.mu_F = [ 1.0, 0.5, 0.5, 1.0, 1.0, 2.0, 2.0 ] +PowhegConfig.mu_R = [ 1.0, 0.5, 1.0, 0.5, 2.0, 1.0, 2.0 ] PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 bb production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'SM', 'QCD', '2jet', 'bottom' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 bb production with A14 NNPDF2.3 tune. Additional weights for 52 CT10 PDF uncertainties and 7 scale variations." +evgenConfig.keywords = [ "SM", "QCD", "2jet", "bottom" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ggF_HZ_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ggF_HZ_example.py index 342e19eb45f85..7cca3b328b0a0 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ggF_HZ_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ggF_HZ_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg ggF_HZ setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_ggF_HZ_Common.py') +include("PowhegControl/PowhegControl_ggF_HZ_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 gluon-fusion Higgs+Z production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'Higgs', 'SMHiggs', 'ZHiggs' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 gluon-fusion Higgs+Z production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "Higgs", "SMHiggs", "ZHiggs" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ggF_H_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ggF_H_example.py index e1ff5f3f5f32f..bd7ec68d5b4e3 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ggF_H_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ggF_H_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg ggF_H setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_ggF_H_Common.py') +include("PowhegControl/PowhegControl_ggF_H_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- -# Pythia8 showering with the A14 NNPDF2.3 tune' +# Pythia8 showering with the A14 NNPDF2.3 tune" #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 gluon-fusion Higgs production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'Higgs', 'SMHiggs' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 gluon-fusion Higgs production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "Higgs", "SMHiggs" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_jj_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_jj_example.py index 102aed51b404b..116833e2cc826 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_jj_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_jj_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg jet-jet setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_jj_Common.py') +include("PowhegControl/PowhegControl_jj_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 jet-jet production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'SM', 'QCD', 'jets', '2jet' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 jet-jet production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "SM", "QCD", "jets", "2jet" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_jjj_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_jjj_example.py index 95030dd8c87ac..09a8a387f0ff4 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_jjj_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_jjj_example.py @@ -3,18 +3,21 @@ #-------------------------------------------------------------- # Powheg jet-jet-jet setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_jjj_Common.py') +include("PowhegControl/PowhegControl_jjj_Common.py") +# # Add a test of the bornsuppfact mean event weight behaviour +# PowhegConfig.bornktmin = 50.0 +# PowhegConfig.bornsuppfact = 500 PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 tune and NNPDF 2.3 #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 jet-jet-jet production with AU2 CT10 tune' -evgenConfig.keywords = [ 'SM', 'QCD', 'jets', '3jet' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 jet-jet-jet production with AU2 CT10 tune" +evgenConfig.keywords = [ "SM", "QCD", "jets", "3jet" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ssWWjj_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ssWWjj_example.py index adecd13ebea17..e74d492fbbe9c 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ssWWjj_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ssWWjj_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg ssWWjj setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_ssWWjj_Common.py') +include("PowhegControl/PowhegControl_ssWWjj_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF 2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 same-sign WW+2jet production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'SM', 'diboson', 'WW', '2jet' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 same-sign WW+2jet production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "SM", "diboson", "WW", "2jet" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_t_sch_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_t_sch_example.py index 3f393ec175744..d9e7567b05d1a 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_t_sch_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_t_sch_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg s-channel single top setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_t_sch_Common.py') +include("PowhegControl/PowhegControl_t_sch_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF 2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 s-channel single top production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'SM', 'singleTop', 'sChannel' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 s-channel single top production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "SM", "singleTop", "sChannel" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_t_tch_4f_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_t_tch_4f_example.py new file mode 100644 index 0000000000000..e6cc80c579635 --- /dev/null +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_t_tch_4f_example.py @@ -0,0 +1,20 @@ +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + +#-------------------------------------------------------------------------------- +# Powheg t-channel 4-flavour scheme single top setup starting from ATLAS defaults +#-------------------------------------------------------------------------------- +include("PowhegControl/PowhegControl_t_tch_4f_Common.py") +PowhegConfig.generate() + +#-------------------------------------------------------------- +# Pythia8 showering with the A14 NNPDF 2.3 tune +#-------------------------------------------------------------- +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") + +#-------------------------------------------------------------- +# EVGEN configuration +#-------------------------------------------------------------- +evgenConfig.description = "POWHEG+Pythia8 t-channel 4-flavour scheme single top production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "SM", "singleTop", "tChannel" ] +evgenConfig.contact = [ "riccardo.di.sipio@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ttH_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ttH_example.py index 413bc585c6bad..68ffe3a550538 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ttH_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ttH_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg ttH setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_ttH_Common.py') +include("PowhegControl/PowhegControl_ttH_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 NNPDF 2.3 tune #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 ttH production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'SM', 'top', 'Higgs' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 ttH production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "SM", "top", "Higgs" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ttj_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ttj_example.py index 2bd242107bc5a..93e515be06b8d 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ttj_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythia8EvtGen_A14NNPDF23_ttj_example.py @@ -3,18 +3,18 @@ #-------------------------------------------------------------- # Powheg ttj setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_ttj_Common.py') +include("PowhegControl/PowhegControl_ttj_Common.py") PowhegConfig.generate() #-------------------------------------------------------------- # Pythia8 showering with the A14 tune and NNPDF 2.3 #-------------------------------------------------------------- -include('MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') -include('MC15JobOptions/Pythia8_Powheg.py') +include("MC15JobOptions/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +include("MC15JobOptions/Pythia8_Powheg.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia8 ttj production with A14 NNPDF2.3 tune' -evgenConfig.keywords = [ 'SM', 'top', '1jet' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia8 ttj production with A14 NNPDF2.3 tune" +evgenConfig.keywords = [ "SM", "top", "1jet" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythiaPhotosTauola_Perugia2011_tt_example.py b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythiaPhotosTauola_Perugia2011_tt_example.py index 16789b7fa978b..14e8cda6f6616 100644 --- a/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythiaPhotosTauola_Perugia2011_tt_example.py +++ b/Generators/PowhegControl/examples/MC15_examples/MC15.101010.PowhegPythiaPhotosTauola_Perugia2011_tt_example.py @@ -3,22 +3,22 @@ #-------------------------------------------------------------- # Powheg tt setup starting from ATLAS defaults #-------------------------------------------------------------- -include('PowhegControl/PowhegControl_tt_Common.py') -PowhegConfig.PDF = range(10800,10853) -PowhegConfig.mu_F = [ 1.0, 0.5, 0.5, 1.0, 1.0, 2.0, 2.0 ] -PowhegConfig.mu_R = [ 1.0, 0.5, 1.0, 0.5, 2.0, 1.0, 2.0 ] +include("PowhegControl/PowhegControl_tt_Common.py") +PowhegConfig.define_event_weight_group( group_name="hdamp_variation", parameters_to_vary=["hdamp","PDF"] ) +PowhegConfig.add_weight_to_group( group_name="hdamp_variation", weight_name="hdamp_2mtop", parameter_values=[345.0,260000] ) +PowhegConfig.add_weight_to_group( group_name="hdamp_variation", weight_name="hdamp_mtop_MMHT2014", parameter_values=[172.5,25200] ) PowhegConfig.generate() #-------------------------------------------------------------- # Pythia6 showering with the Perugia2011 tune #-------------------------------------------------------------- -include('MC15JobOptions/PowhegPythia_Perugia2011C_Common.py') -include('MC15JobOptions/Pythia_Tauola.py') -include('MC15JobOptions/Pythia_Photos.py') +include("MC15JobOptions/PowhegPythia_Perugia2011C_Common.py") +include("MC15JobOptions/Pythia_Tauola.py") +include("MC15JobOptions/Pythia_Photos.py") #-------------------------------------------------------------- # EVGEN configuration #-------------------------------------------------------------- -evgenConfig.description = 'POWHEG+Pythia6 ttbar production with Perugia 2011c tune. Additional weights for 52 CT10 PDF uncertainties and 7 scale variations.' -evgenConfig.keywords = [ 'SM', 'top' ] -evgenConfig.contact = [ 'james.robinson@cern.ch' ] +evgenConfig.description = "POWHEG+Pythia6 ttbar production with Perugia 2011c tune. Additional weights for 2 hdamp variations." +evgenConfig.keywords = [ "SM", "top" ] +evgenConfig.contact = [ "james.robinson@cern.ch" ] diff --git a/Generators/PowhegControl/python/ATLASCommonParameters.py b/Generators/PowhegControl/python/ATLASCommonParameters.py index 1a44b3567599c..793fe8c176fae 100644 --- a/Generators/PowhegControl/python/ATLASCommonParameters.py +++ b/Generators/PowhegControl/python/ATLASCommonParameters.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl ATLASCommonParameters +# @PowhegControl ATLASCommonParameters # Standard Model parameters for Powheg # # Authors: James Robinson <james.robinson@cern.ch> @@ -10,43 +10,44 @@ #! /usr/bin/env python # Particle masses -mass_e = 0.00051 -mass_mu = 0.1057 -mass_tau = 1.777 -mass_d = 0.32 -mass_u = 0.32 -mass_s = 0.5 -mass_c = 1.55 -mass_b = 4.95 -mass_g = 0.75 -mass_t = 172.5 -mass_W = 80.399 -mass_Z = 91.1876 -mass_H = 125 +mass_e = 0.00051 +mass_mu = 0.1057 +mass_tau = 1.777 +mass_d = 0.32 +mass_u = 0.32 +mass_s = 0.5 +mass_c = 1.55 +mass_b = 4.95 +mass_g = 0.75 +mass_t = 172.5 +mass_W = 80.399 +mass_Z = 91.1876 +mass_H = 125.09 # Particle widths -width_t = 1.32 -width_W = 2.085 -width_Z = 2.4952 -width_H = 0.00407 +width_t = 1.32 +width_W = 2.085 +width_Z = 2.4952 +width_H = 0.00407 # Branching ratios W_lepton_BR = 0.1082 W_hadron_BR = 0.338 # CKM matrix -CKM_Vud = 0.97428 -CKM_Vus = 0.2253 -CKM_Vub = 0.00347 -CKM_Vcd = 0.2252 -CKM_Vcs = 0.97345 -CKM_Vcb = 0.041 -CKM_Vtd = 0.00862 -CKM_Vts = 0.0403 -CKM_Vtb = 0.999152 +CKM_Vud = 0.97428 +CKM_Vus = 0.2253 +CKM_Vub = 0.00347 +CKM_Vcd = 0.2252 +CKM_Vcs = 0.97345 +CKM_Vcb = 0.041 +CKM_Vtd = 0.00862 +CKM_Vts = 0.0403 +CKM_Vtb = 0.999152 # Others sin2thW_eff = 0.23113 -alphaem = 1.0/127.934 +alphaem = 0.00781653039 # 1/127.934 +alphaqcd = 0.1185 sin2cabibbo = 0.051 G_F = 0.00001166397 diff --git a/Generators/PowhegControl/python/DecoratorFactory.py b/Generators/PowhegControl/python/DecoratorFactory.py index d6962687ccc27..2dc2db99a6b6a 100644 --- a/Generators/PowhegControl/python/DecoratorFactory.py +++ b/Generators/PowhegControl/python/DecoratorFactory.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegDecorators +# @PowhegControl PowhegDecorators # Powheg runcard decorators # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,14 +8,18 @@ #! /usr/bin/env python import decorators -def decorate( powheg_controller, decorator, **kwargs ) : - ## Initialise correct decorator for Powheg configurable - decorator_name_to_class_name = dict([(cls.name, name) for name, cls in decorators.__dict__.items() if isinstance(cls, type)]) - try : - powheg_controller.logger.debug( 'Applying decorator: {0}'.format(decorator) ) - getattr(decorators,decorator_name_to_class_name[decorator])( powheg_controller, **kwargs ) - except KeyError : - powheg_controller.logger.info( 'Known decorators are: {0}'.format(sorted(decorator_name_to_class_name.keys())) ) - raise KeyError( 'Unknown decorator: {0}'.format(decorator) ) - except TypeError : - raise TypeError( 'Decorator: {0} needs additional arguments'.format(decorator) ) + +# Initialise correct decorator for Powheg configurable +# @param powheg_process Powheg process +# @param decorator decorator name +# @param kwargs arguments to pass to the decorator +def decorate(powheg_process, decorator, **kwargs): + decorator_name_to_class_name = dict([(cls.name, name) for name, cls in decorators.__dict__.items() if isinstance(cls, type)]) + try: + powheg_process.logger.debug("Applying decorator: {}.".format(decorator)) + getattr(decorators, decorator_name_to_class_name[decorator])(powheg_process, **kwargs) + except KeyError: + powheg_process.logger.info("Known decorators are: {}.".format(sorted(decorator_name_to_class_name.keys()))) + raise KeyError("Unknown decorator: {}.".format(decorator)) + except TypeError: + raise TypeError("Decorator: {} needs additional arguments.".format(decorator)) diff --git a/Generators/PowhegControl/python/PowhegConfig_base.py b/Generators/PowhegControl/python/PowhegConfig_base.py index 1d92ba04ec473..f09a4b8850a4e 100644 --- a/Generators/PowhegControl/python/PowhegConfig_base.py +++ b/Generators/PowhegControl/python/PowhegConfig_base.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_base +# @PowhegControl PowhegConfig_base # PowhegControl base class for all Powheg processes # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,442 +8,485 @@ # Stephen Bieniek <stephen.paul.bieniek@cern.ch> #! /usr/bin/env python -import collections, glob, math, os, subprocess, time +import collections +import glob +import math +import os +import subprocess +import time import strategies from AthenaCommon import Logging from DecoratorFactory import decorate -from utility import IntegrationGridTester, LHEHandler, RepeatingTimer +from utility import FileParser, IntegrationGridTester, LHEUtils, RepeatingTimer -## Base class for configurable objects in the jobOptions +# Base class for configurable objects in the jobOptions # # All subprocesses inherit from this class -class PowhegConfig_base(object) : - ## Current directory - __base_directory = os.environ['PWD'] - ## Path to Powheg installation - __powheg_directory = os.environ['POWHEGPATH'] - - ## Setup athena-compatible logger - __logger = Logging.logging.getLogger('PowhegControl') - - ## Number of subjobs to run in manyseeds mode -- reset by ATHENA_PROC_NUMBER if present - __n_cores = 1 - - ## This must be defined by each derived class - don't change it in the jobOptions! - _powheg_executable = __powheg_directory - - ## Switch to determine which version of Powheg this process belongs to - _powheg_version_type = 1 - - - ## Constructor - # @param runArgs Generate_tf run arguments - # @param opts athena run options - # @param indicator that this is a leading-order process - def __init__( self, runArgs=None, opts=None, LO_process=False ) : - # Allow processes to indicate that they are leading order - self.__is_leading_order = LO_process - - ## Dictionary of named groups of event weights - self.__event_weight_groups = collections.OrderedDict() - self.__enable_reweighting = False - - # This needs to be set so that Generate_trf finds an appropriate file format for showering - self.__output_events_file_name = 'PowhegOTF._1.events' - self.__output_tarball_name = None - - # Set up lists of parameters and decorators - self.__fixed_parameters = [] - self.__configurable_parameters = {} - self.__phantom_parameters = {} - self.__run_card_decorators = [] - self.configurable_to_parameters = collections.defaultdict(list) - - # Add universal functionality - self.add_parameter_set( 'base' ) - - # Initialise values from runArgs - if runArgs == None : - self.logger.warning( 'No run arguments found! Using defaults.' ) - else : - # Read values from runArgs - if hasattr(runArgs,'ecmEnergy') : - self.beam_energy = 0.5 * runArgs.ecmEnergy - if hasattr(runArgs,'maxEvents') and runArgs.maxEvents > 0 : - self.nEvents = int( 1.1 * runArgs.maxEvents + 0.5 ) - if hasattr(runArgs,'randomSeed') : - self.random_seed = runArgs.randomSeed - if hasattr(runArgs,'outputTXTFile') : - for tarball_suffix in [ x for x in ['.tar.gz', '.tgz'] if x in runArgs.outputTXTFile ] : - self.__output_tarball_name = runArgs.outputTXTFile - self.__output_events_file_name = self.output_tarball_name.split(tarball_suffix)[0]+'.events' - # Set inputGeneratorFile to match output events file; otherwise Generate_tf check will fail - runArgs.inputGeneratorFile = self.output_events_file_name - - # Enable parallel mode if AthenaMP mode is enabled - self.__n_cores = int( os.environ.pop('ATHENA_PROC_NUMBER',1) ) - if self.cores > 1 : - self.logger.info( 'This job is running with an athenaMP-like whole-node setup, requesting {} cores'.format( self.cores ) ) - self.manyseeds = 1 - # Try to modify the transform opts to suppress athenaMP mode - if hasattr(opts,'nprocs') : - self.logger.info( 'Re-configuring to keep athena running serially while parallelising Powheg generation.' ) - opts.nprocs = 0 - else : - self.logger.warning( 'No "nprocs" option provided!') - - - ## Run normal event generation - # @param external_run_card Use a user-provided run card - # @param run_card_only Only generate the run card - def generate( self, external_run_card=False, run_card_only=False ) : - if not external_run_card : - self.__generate_run_card() - if not run_card_only : - self.__generate_events() - return - - - ## Initialise runcard with generic options - def __generate_run_card(self) : - # Check that event generation is correctly set up - if (self.bornsuppfact > 0.0) and (self.bornktmin <= 0.0) : - self.logger.warning( 'These settings: bornsuppfact = {} and bornktmin = {} cannot be used to generate events!'.format(self.bornsuppfact,self.bornktmin) ) - self.logger.warning( 'Only fixed-order distributions can be produced with these settings!' ) - - # Scale-down number of events produced in each run if running in multicore mode - if self.cores > 1 : - self.logger.info( 'Preparing to parallelise: running with {} jobs'.format( self.cores ) ) - self.nEvents_unscaled = int(self.nEvents) - self.nEvents = int( math.ceil( float(self.nEvents_unscaled) / self.cores ) ) - self.ncall1 = int( math.ceil( float(self.ncall1) / self.cores ) ) - self.ncall2 = int( math.ceil( float(self.ncall2) / self.cores ) ) - self.nubound = int( math.ceil( float(self.nubound) / self.cores ) ) - self.logger.info( 'Scaling number of events per job from {} down to {}'.format(self.nEvents_unscaled, self.nEvents) ) - - # Finalise registered decorators - for run_card_decorator in self.run_card_decorators : - if hasattr( run_card_decorator, 'finalise' ) : run_card_decorator.finalise() - - # Print list of configurable parameters for users - self.logger.info( '** User configurable parameters for this process **' ) - self.logger.info( ': Option name : ATLAS default : Current : Description' ) - for (powheg_parameter,configurable_list) in sorted( self.configurable_parameters.items()+self.phantom_parameters.items(), key=lambda x: x[1][0].lower() ) : - self.logger.info( ': {0:<15} : {1:>13} : {2:>9} : {3}'.format( configurable_list[0], configurable_list[1], getattr(self, configurable_list[0]), configurable_list[2] ) ) - self.configurable_to_parameters[configurable_list[0]].append(powheg_parameter) - - # Add configurable parameters to fixed list - [ self.fix_parameter( non_configurable_name=configurable_list[0], default=configurable_list[1], desc=configurable_list[2] ) for configurable_list in self.configurable_parameters.values() ] - - # Write out final runcard - self.logger.info( 'Writing Powheg runcard to {}'.format( self.run_card_path ) ) - with open( self.run_card_path, 'w' ) as f : - for non_configurable_list in sorted( self.fixed_parameters, key=lambda x: x[0].lower() ) : - name, value, default, desc = non_configurable_list - if 'lhrwgt' in name : value = '\'{}\''.format( value ) # lhrwgt parameters need to be in quotes - # Set starting value to first in list when multiple values are provided - if isinstance(value,list) : - if name in sum( [ self.configurable_to_parameters[x] for x in ['PDF','mu_R','mu_F'] ], [] ) : self.__enable_reweighting = True - value = value[0] - f.write( '{0:<30}! [ATLAS default: {1}] {2}\n'.format( '{} {}'.format(name,value), default, desc ) ) - # Print warnings for specific parameters - if name == 'bornsuppfact' and value > 0 : - self.logger.warning( 'Born-level suppression is enabled: using this in conjunction with J-slicing may give problems.' ) - - # Print final preparation message - self.logger.info( 'Using executable: {}'.format( self._powheg_executable ) ) - return - - - ## Run normal event generation - def __generate_events(self) : - # Initialise timer - time_start = time.time() - self.logger.info( 'Starting Powheg LHEF event generation at {}'.format( time.ctime( time_start ) ) ) - - # Setup heartbeat thread - heartbeat = RepeatingTimer( 600., lambda: self.__emit_heartbeat( time.time() - time_start ) ) - heartbeat.setName( 'heartbeat thread' ) - heartbeat.daemon = True # Allow program to exit if this is the only live thread - heartbeat.start() - - # Remove any existing .lhe files to avoid repeated events - for LHE_file in glob.glob('*.lhe')+glob.glob('*.ev*ts') : - self.logger.warning( 'Removing existing LHE file: {}'.format(LHE_file) ) - os.remove( LHE_file ) - - # Run appropriate Powheg process and display generation output until finished - if not os.path.isfile( self._powheg_executable ) : - raise OSError( 'Powheg executable {} not found!'.format( self._powheg_executable ) ) - self.__run_generation_strategy() - - # Print timing information - generation_end = time.time() - elapsed_time = generation_end - time_start - self.logger.info( 'Running nominal Powheg took {0} for {1} events => {2:6.4f} Hz'.format( RepeatingTimer.human_readable_time_interval(elapsed_time), self.nEvents, self.nEvents / elapsed_time ) ) - - # Concatenate output events if running in multicore mode - if self.cores > 1 : - self.logger.info( 'Concatenating output LHE files: expecting {}'.format( self.cores ) ) - LHEHandler(self.logger).merge( 'pwgevents.lhe', sorted( glob.glob('pwgevents*.lhe') ) ) - subprocess.call( 'rm pwgevents-*.lhe 2> /dev/null', shell=True ) - # Unscale nEvents in case this is needed by afterburners - subprocess.call( 'sed -i "s/numevts.*/numevts {}/g" powheg*.input'.format(self.nEvents_unscaled), shell=True ) - - # Check for required output file - if not os.path.isfile('pwgevents.lhe') : - self.logger.warning( 'No output LHEF file found! Probably because the Powheg process was killed before finishing.' ) - raise RuntimeError( 'No output LHEF file produced by Powheg. Terminating job.' ) - - # Run Powheg afterburners - self.__run_afterburners() - elapsed_time = time.time() - generation_end - self.logger.info( 'Running Powheg afterburners took {}'.format( RepeatingTimer.human_readable_time_interval(elapsed_time) ) ) - - # Move output to correctly named file - try : - os.rename( 'pwgevents.lhe', self.output_events_file_name ) - self.logger.info( 'Moved pwgevents.lhe to {}'.format(self.output_events_file_name) ) - except OSError : - self.logger.warning( 'No output LHEF file found! Probably because the Powheg process was killed before finishing.' ) - raise RuntimeError( 'No output LHEF file produced by Powheg. Terminating job.' ) - - # Tar events if LHE output is requested - if self.output_tarball_name is not None : - self.logger.info( 'Tar-ing output events into {}'.format(self.output_tarball_name) ) - [ self.logger.info(line) for line in subprocess.check_output( [ 'tar', 'cvzf', self.output_tarball_name, self.output_events_file_name ], stderr=subprocess.STDOUT ).splitlines() ] - - # Print finalisation message - IntegrationGridTester.output_results( self.logger ) - self.logger.info( 'Finished at {}'.format( time.asctime() ) ) - - # Kill heartbeat thread - heartbeat.cancel() - return - - - ## Run external Powheg process - def __run_generation_strategy(self) : - # Initialise reweighting - if self.enable_reweighting : - strategies.initialise_reweighting( self ) - - # Run single core - if self.cores == 1 : - strategies.generate_single_core( self ) - - # Run multicore - else : - # Run v1-style multicore (only needs one step) - if self._powheg_version_type == 1 : - strategies.generate_v1_multi_core( self ) - # Run v2-style multicore (needs four steps) - else : - strategies.generate_v2_multi_core( self ) - return - - - ## Run external Powheg process - def __run_afterburners(self) : - # Run scale/PDF/arbitrary reweighting if requested - if hasattr( self, '_PHOTOS_executable' ) and self.use_photos == 1 : - strategies.afterburner_PHOTOS( self ) - # Run scale/PDF/arbitrary reweighting if requested - if self.enable_reweighting : - strategies.afterburner_reweighting( self ) - # Run NNLOPS if requested - if hasattr( self, 'NNLO_reweighting_inputs' ) and len(self.NNLO_reweighting_inputs) > 0 : - strategies.afterburner_NNLO_reweighting( self ) - return - - - ## Register configurable parameter: exposed to the user and written to the run card - # @param configurable_name Configurable parameter name exposed to the user - # @param value Value of the parameter - # @param desc Description for the run card - # @param parameter Name used in the run card if different - def add_parameter( self, configurable_name, value, desc='', parameter=None ) : - setattr( self, configurable_name, value ) # add new attribute - powheg_parameter = parameter if parameter is not None else configurable_name - self.configurable_parameters[powheg_parameter] = [configurable_name, '-', desc] - return - - - ## Register configurable parameter: exposed to the user but not written to the run card - # @param configurable_name Configurable parameter name exposed to the user - # @param value Value of the parameter - # @param desc Description for the run card - def add_phantom( self, configurable_name, value, desc='' ) : - setattr( self, configurable_name, value ) # add new attribute - self.phantom_parameters[configurable_name] = [configurable_name, '-', desc] - return - - - ## Register a non-configurable parameter: not exposed to the user but written to the run card - # @param non_configurable_name Parameter name - # @param value Value of the parameter - # @param desc Description for the run card - def fix_parameter( self, non_configurable_name, value=None, desc='', default='-' ) : - # Get previously set value if not overwriting - if value is None : value = getattr( self, non_configurable_name ) - # Remove it from the configurable list if it was there - for powheg_parameter, configurable_list in self.configurable_parameters.items() : - # Retrieve Powheg parameter name and description if there is a match - if non_configurable_name == configurable_list[0] : - non_configurable_name, default, desc = powheg_parameter, configurable_list[1], configurable_list[2] - self.configurable_parameters.pop(powheg_parameter) - break - self.fixed_parameters.append( [non_configurable_name, value, default, desc] ) - return - - - ## Alias to PowhegDecorators.decorate - # @param parameter_set Name of a set of parameter to add to this configurable - def add_parameter_set( self, parameter_set, **kwargs ) : - return decorate( self, parameter_set, **kwargs ) - - - ## Add a new named group of event weights - # @param group_name Name of the group of weights - # @param parameter_set Names of the parameters to vary - def define_event_weight_group( self, group_name, parameters_to_vary ) : - self.logger.info( 'Defining new weight group "{}" which alters {} parameters'.format( group_name, len(parameters_to_vary) ) ) - for parameter_name in parameters_to_vary : - self.logger.info( '... {}'.format( parameter_name ) ) - self.event_weight_groups[group_name] = collections.OrderedDict() - self.event_weight_groups[group_name]['parameter_names'] = parameters_to_vary - self.__enable_reweighting = True - return - - - ## Add a new event weight - # @param group_name Name of the group of weights that this weight belongs to - # @param weight_name Name of this event weight - # @param parameter_values Values of the parameters - def add_weight_to_group( self, group_name, weight_name, parameter_values ) : - assert( len(parameter_values) == len( self.event_weight_groups[group_name]['parameter_names'] ) ), 'Expected {} parameter values but only {} were provided!'.format( len( self.event_weight_groups[group_name]['parameter_names'] ), len(parameter_values) ) - self.event_weight_groups[group_name][weight_name] = [] - for parameter_name, value in zip( self.event_weight_groups[group_name]['parameter_names'], parameter_values ) : - self.event_weight_groups[group_name][weight_name].append( (parameter_name, value) ) - return - - - ## Output a heartbeat message - # @param duration Time interval in seconds between output messages - def __emit_heartbeat(self, duration) : - message = 'Heartbeat: Powheg generation has been running for {} in total'.format( RepeatingTimer.human_readable_time_interval(duration) ) - self.logger.info( message ) - with open( '{}/eventLoopHeartBeat.txt'.format( self.__base_directory ), 'w' ) as f : f.write( message ) - return - - - ## Write default values to string before allowing users to change them - def populate_default_strings( self ) : - # Configurable parameters - for configurable_list in self.configurable_parameters.values() : # [configurable_name, default, desc] - configurable_list[1] = getattr( self, configurable_list[0] ) - # Phantom parameters - for configurable_list in self.phantom_parameters.values() : # [configurable_name, default, desc] - configurable_list[1] = getattr( self, configurable_list[0] ) - # Fixed parameters - for non_configurable_list in self.fixed_parameters : #[non_configurable_name, value, default, desc] - non_configurable_list[2] = non_configurable_list[1] - return - - - ## Get base directory - @property - def base_directory(self) : - return self.__base_directory - - - ## Get dictionary of configurable parameters: visible to user and written to runcard - @property - def configurable_parameters(self) : - return self.__configurable_parameters - - - ## Get number of cores - @property - def cores(self) : - return self.__n_cores - - - ## Get whether reweighting needs to be enabled - @property - def enable_reweighting(self) : - return self.__enable_reweighting - - - ## Get ordered dictionary of event weight groups - @property - def event_weight_groups(self) : - return self.__event_weight_groups - - - ## Get dictionary of non-configurable parameters: not visible to user but written to runcard - @property - def fixed_parameters(self) : - return self.__fixed_parameters - - - ## Get whether this is a leading-order process - @property - def is_LO(self) : - return self.__is_leading_order - - - ## Get handle to logger - @property - def logger(self) : - return self.__logger - - - ## Get output file name - @property - def output_events_file_name(self) : - return self.__output_events_file_name - - - ## Get output tarball name - @property - def output_tarball_name(self) : - return self.__output_tarball_name - - - ## Get dictionary of phantom parameters: visible to user but not written to runcard - @property - def phantom_parameters(self) : - return self.__phantom_parameters - - - ## Get Powheg directory - @property - def powheg_directory(self) : - return self.__powheg_directory - - - ## Get list of enabled run card decorators - @property - def run_card_decorators(self) : - return self.__run_card_decorators - - - ## Get full path to runcard - @property - def run_card_path(self) : - return '{}/powheg.input'.format( self.base_directory ) - - - ## Deprecated function - use generate() instead - def generateRunCard(self) : - self.logger.warning( 'The function generateRunCard() is deprecated as of 2015-02-19' ) - self.logger.warning( 'Please use generate() instead of generateRunCard() and generateEvents()' ) - return self.__generate_run_card() - - - ## Deprecated function - use generate() instead - def generateEvents(self) : - self.logger.warning( 'The function generateEvents() is deprecated as of 2015-02-19' ) - self.logger.warning( 'Please use generate() instead of generateRunCard() and generateEvents()' ) - return self.__generate_events() +class PowhegConfig_base(object): + # Setup athena-compatible logger + __logger = Logging.logging.getLogger("PowhegControl") + + # Switch to determine whether new attributes can be added + __attributes_frozen = False + + # Constructor + # @param runArgs Generate_tf run arguments + # @param opts athena run options + # @param indicator that this is a leading-order process + def __init__(self, runArgs=None, opts=None, LO_process=False): + # Current directory + self.__base_directory = os.environ["PWD"] + + # Path to Powheg installation + self.__powheg_directory = os.environ["POWHEGPATH"] + + # This must be defined by each derived class - don't change it in the jobOptions! + self._powheg_executable = self.__powheg_directory + + # Switch to determine which version of Powheg this process belongs to + self._powheg_version_type = 1 + + # Allow processes to indicate that they are leading order + self.__is_leading_order = LO_process + + # Number of subjobs to run in manyseeds mode -- reset by ATHENA_PROC_NUMBER if present + self.__n_cores = 1 + + # Dictionary of named groups of event weights + self.__event_weight_groups = collections.OrderedDict() + + # Switch to enable/disable reweighting + self.__enable_reweighting = False + self.__enable_NNLO_reweighting = False + + # Name of Powheg output LHE events. + self.__powheg_LHE_output = "pwgevents.lhe" + # Name of output LHE events. Needed by Generate_tf for showering. + self.__output_events_file_name = "PowhegOTF._1.events" + # Name of output LHE events after tar-ing. Needed by Generate_tf for showering. + self.__output_tarball_name = None + + # List of parameters which are fixed (not user-configurable) + self.__fixed_parameters = [] + # List of parameters which are user-configurable + self.__configurable_parameters = {} + # List of parameters which are user-configurable but are not written directly to the runcard + self.__phantom_parameters = {} + # List of decorators attached to this process + self.__run_card_decorators = [] + + # Reverse look-up table from user-exposed name to Powheg parameter name + self.configurable_to_parameters = collections.defaultdict(list) + + # Reverse look-up table from weight description to weight ID + self.weight_description_to_ID = collections.defaultdict(list) + + # Add universal functionality + self.add_parameter_set("base") + + # Initialise values from runArgs + if runArgs is None: + self.logger.warning("No run arguments found! Using defaults.") + else: + # Read values from runArgs + if hasattr(runArgs, "ecmEnergy"): + self.beam_energy = 0.5 * runArgs.ecmEnergy + if hasattr(runArgs, "maxEvents") and runArgs.maxEvents > 0: + self.nEvents = int(1.1 * runArgs.maxEvents + 0.5) + if hasattr(runArgs, "randomSeed"): + self.random_seed = runArgs.randomSeed + if hasattr(runArgs, "outputTXTFile"): + for tarball_suffix in [x for x in [".tar.gz", ".tgz"] if x in runArgs.outputTXTFile]: + self.__output_tarball_name = runArgs.outputTXTFile + self.__output_events_file_name = self.output_tarball_name.split(tarball_suffix)[0] + ".events" + # Set inputGeneratorFile to match output events file; otherwise Generate_tf check will fail + runArgs.inputGeneratorFile = self.output_events_file_name + + # Enable parallel mode if AthenaMP mode is enabled + self.__n_cores = int(os.environ.pop("ATHENA_PROC_NUMBER", 1)) + if self.cores > 1: + self.logger.info("This job is running with an athenaMP-like whole-node setup, requesting {} cores".format(self.cores)) + self.manyseeds, self.nEvents_unscaled = 1, 0 + # Try to modify the transform opts to suppress athenaMP mode + if hasattr(opts, "nprocs"): + self.logger.info("Re-configuring to keep athena running serially while parallelising Powheg generation.") + opts.nprocs = 0 + else: + self.logger.warning("No 'nprocs' option provided!") + + # Override default attribute setting to stop users setting non-existent attributes + # @param key Attribute name + # @param value Value to set this to + def __setattr__(self, key, value): + if self.__attributes_frozen and not hasattr(self, key): + # raise AttributeError( "This Powheg process has no option '{}'".format( key ) ) + self.logger.warning("This Powheg process has no option '{}'".format(key)) + time.sleep(300) + object.__setattr__(self, key, value) + + # Run normal event generation + # @param external_run_card Use a user-provided run card + # @param run_card_only Only generate the run card + def generate(self, external_run_card=False, run_card_only=False): + if not external_run_card: + self.__generate_run_card() + if not run_card_only: + self.__generate_events() + return + + # Initialise runcard with generic options + def __generate_run_card(self): + # Check that event generation is correctly set up + if (self.bornsuppfact > 0.0) and (self.bornktmin <= 0.0): + self.logger.warning("These settings: bornsuppfact = {} and bornktmin = {} cannot be used to generate events!".format(self.bornsuppfact, self.bornktmin)) + self.logger.warning("Only fixed-order distributions can be produced with these settings!") + + # Scale-down number of events produced in each run if running in multicore mode + if self.cores > 1: + self.logger.info("Preparing to parallelise: running with {} jobs".format(self.cores)) + self.nEvents_unscaled = int(self.nEvents) + self.nEvents = int(math.ceil(float(self.nEvents_unscaled) / self.cores)) + self.ncall1 = int(math.ceil(float(self.ncall1) / self.cores)) + self.ncall2 = int(math.ceil(float(self.ncall2) / self.cores)) + self.nubound = int(math.ceil(float(self.nubound) / self.cores)) + self.logger.info("Scaling number of events per job from {} down to {}".format(self.nEvents_unscaled, self.nEvents)) + + # Finalise registered decorators + for run_card_decorator in self.run_card_decorators: + if hasattr(run_card_decorator, "finalise"): + run_card_decorator.finalise() + + # Print list of configurable parameters for users + self.logger.info("** User configurable parameters for this process **") + self.logger.info(": Option name : ATLAS default : Current : Description") + for (powheg_parameter, configurable_list) in sorted(self.configurable_parameters.items() + self.phantom_parameters.items(), key=lambda x: x[1][0].lower()): + self.logger.info(": {:<15} : {:>15} : {:>15} : {}".format(configurable_list[0], configurable_list[1], getattr(self, configurable_list[0]), configurable_list[2])) + self.configurable_to_parameters[configurable_list[0]].append(powheg_parameter) + + # Add configurable parameters to fixed list + for configurable_list in self.configurable_parameters.values(): + self.fix_parameter(non_configurable_name=configurable_list[0], default=configurable_list[1], desc=configurable_list[2]) + + # Write out final runcard + self.logger.info("Writing Powheg runcard to {}".format(self.run_card_path)) + with open(self.run_card_path, "w") as f: + for non_configurable_list in sorted(self.fixed_parameters, key=lambda x: x[0].lower()): + name, value, default, desc = non_configurable_list + if "lhrwgt" in name: + value = "'{}'".format(value) # lhrwgt parameters need to be in quotes + # Set starting value to first in list when multiple values are provided + if isinstance(value, list): + if name in sum([self.configurable_to_parameters[x] for x in ["PDF", "mu_R", "mu_F"]], []): + self.__enable_reweighting = True + self.logger.debug("Reweighting enabled") + value = value[0] + f.write("{:<30}! [ATLAS default: {}] {}\n".format("{} {}".format(name, value), default, desc)) + # Print warnings for specific parameters + if name == "bornsuppfact" and value > 0: + self.logger.warning("Born-level suppression is enabled: using this in conjunction with J-slicing may give problems.") + + # Check for NNLO reweighting + if hasattr(self, "NNLO_reweighting_inputs") and len(self.NNLO_reweighting_inputs) > 0: + self.__enable_reweighting = True + self.__enable_NNLO_reweighting = True + self.logger.debug("NNLO reweighting enabled") + + # Print final preparation message + self.logger.info("Using executable: {}".format(self._powheg_executable)) + return + + # Run normal event generation + def __generate_events(self): + # Initialise timer + time_start = time.time() + self.logger.info("Starting Powheg LHEF event generation at {}".format(time.ctime(time_start))) + + # Setup heartbeat thread + heartbeat = RepeatingTimer(600., lambda: self.__emit_heartbeat(time.time() - time_start)) + heartbeat.setName("heartbeat thread") + heartbeat.daemon = True # Allow program to exit if this is the only live thread + heartbeat.start() + + # Remove any existing .lhe files to avoid repeated events + for LHE_file in glob.glob("*.lhe") + glob.glob("*.ev*ts"): + self.logger.warning("Removing existing LHE file: {}".format(LHE_file)) + os.remove(LHE_file) + + # Run appropriate Powheg process and display generation output until finished + if not os.path.isfile(self._powheg_executable): + raise OSError("Powheg executable {} not found!".format(self._powheg_executable)) + self.__run_generation_strategy() + + # Print timing information + generation_end = time.time() + elapsed_time = generation_end - time_start + self.logger.info("Running nominal Powheg took {} for {} events => {:6.4f} Hz".format(RepeatingTimer.human_readable_time_interval(elapsed_time), self.nEvents, self.nEvents / elapsed_time)) + + # Concatenate output events if running in multicore mode + if self.cores > 1: + self.logger.info("Concatenating output LHE files: expecting {}".format(self.cores)) + LHEUtils.merge("pwgevents*.lhe", self.powheg_LHE_output) + subprocess.call("rm pwgevents-*.lhe 2> /dev/null", shell=True) + # Unscale nEvents in case this is needed by afterburners + FileParser("powheg*.input").text_replace("numevts .*", "numevts {}".format(self.nEvents_unscaled)) + + # Check for required output file + if not os.path.isfile(self.powheg_LHE_output): + self.logger.warning("No output LHEF file found! Probably because the Powheg process was killed before finishing.") + raise RuntimeError("No output LHEF file produced by Powheg. Terminating job.") + + # Run Powheg afterburners + self.__run_afterburners() + elapsed_time = time.time() - generation_end + self.logger.info("Running Powheg afterburners took {}".format(RepeatingTimer.human_readable_time_interval(elapsed_time))) + + # Move output to correctly named file + try: + os.rename(self.powheg_LHE_output, self.output_events_file_name) + self.logger.info("Moved {} to {}".format(self.powheg_LHE_output, self.output_events_file_name)) + except OSError: + self.logger.warning("No output LHEF file found! Probably because the Powheg process was killed before finishing.") + raise RuntimeError("No output LHEF file produced by Powheg. Terminating job.") + + # Tar events if LHE output is requested + if self.output_tarball_name is not None: + self.logger.info("Tar-ing output events into {}".format(self.output_tarball_name)) + for line in subprocess.check_output(["tar", "cvzf", self.output_tarball_name, self.output_events_file_name], stderr=subprocess.STDOUT).splitlines(): + self.logger.info(line) + + # Print finalisation message + IntegrationGridTester.output_results(self.logger) + self.logger.info("Finished at {}".format(time.asctime())) + + # Kill heartbeat thread + heartbeat.cancel() + return + + # Run external Powheg process + def __run_generation_strategy(self): + # Initialise reweighting + if self.enable_reweighting: + strategies.initialise_reweighting(self) + + # Run single core + if self.cores == 1: + strategies.generate_single_core(self) + + # Run multicore + else: + # Run v1-style multicore (only needs one step) + if self._powheg_version_type == 1: + strategies.generate_v1_multi_core(self) + # Run v2-style multicore (needs four steps) + else: + strategies.generate_v2_multi_core(self) + return + + # Run external Powheg process + def __run_afterburners(self): + # Run event weight calculator if bornsupfact was enabled + if self.bornsuppfact > 0.0 and self.bornktmin > 0.0: + strategies.afterburner_mean_event_weight_calculator(self.powheg_LHE_output) + + # Run MadSpin afterburner if requested + if hasattr(self, "_MadSpin_executable"): + strategies.afterburner_MadSpin(self) + + # Run PHOTOS afterburner if requested + if hasattr(self, "_PHOTOS_executable") and self.use_photos == 1: + strategies.afterburner_PHOTOS(self) + + # Run scale/PDF/arbitrary reweighting if requested + if self.enable_reweighting: + strategies.afterburner_reweighting(self) + + # Run NNLO reweighting if requested + if self.enable_NNLO_reweighting: + strategies.afterburner_NNLO_reweighting(self) + + return + + # Register configurable parameter: exposed to the user and written to the run card + # @param configurable_name Configurable parameter name exposed to the user + # @param value Value of the parameter + # @param desc Description for the run card + # @param parameter Name used in the run card if different + def add_parameter(self, configurable_name, value, desc="", parameter=None): + setattr(self, configurable_name, value) # add new attribute + powheg_parameter = parameter if parameter is not None else configurable_name + self.configurable_parameters[powheg_parameter] = [configurable_name, "-", desc] + return + + # Register configurable parameter: exposed to the user but not written to the run card + # @param configurable_name Configurable parameter name exposed to the user + # @param value Value of the parameter + # @param desc Description for the run card + def add_phantom(self, configurable_name, value, desc=""): + setattr(self, configurable_name, value) # add new attribute + self.phantom_parameters[configurable_name] = [configurable_name, "-", desc] + return + + # Register a non-configurable parameter: not exposed to the user but written to the run card + # @param non_configurable_name Parameter name + # @param value Value of the parameter + # @param desc Description for the run card + def fix_parameter(self, non_configurable_name, value=None, desc="", default="-"): + # Get previously set value if not overwriting + if value is None: + value = getattr(self, non_configurable_name) + # Remove it from the configurable list if it was there + for powheg_parameter, configurable_list in self.configurable_parameters.items(): + # Retrieve Powheg parameter name and description if there is a match + if non_configurable_name == configurable_list[0]: + non_configurable_name, default, desc = powheg_parameter, configurable_list[1], configurable_list[2] + self.configurable_parameters.pop(powheg_parameter) + break + self.fixed_parameters.append([non_configurable_name, value, default, desc]) + return + + # Alias to PowhegDecorators.decorate + # @param parameter_set Name of a set of parameter to add to this configurable + def add_parameter_set(self, parameter_set, **kwargs): + return decorate(self, parameter_set, **kwargs) + + # Add a new named group of event weights + # @param group_name Name of the group of weights + # @param parameters_to_vary Names of the parameters to vary + def define_event_weight_group(self, group_name, parameters_to_vary): + self.logger.info("Defining new weight group '{}' which alters {} parameters".format(group_name, len(parameters_to_vary))) + for parameter_name in parameters_to_vary: + self.logger.info("... {}".format(parameter_name)) + self.event_weight_groups[group_name] = collections.OrderedDict() + self.event_weight_groups[group_name]["parameter_names"] = parameters_to_vary + self.__enable_reweighting = True + self.logger.debug("Reweighting enabled") + return + + # Add a new event weight + # @param group_name Name of the group of weights that this weight belongs to + # @param weight_name Name of this event weight + # @param parameter_values Values of the parameters + def add_weight_to_group(self, group_name, weight_name, parameter_values): + assert(len(parameter_values) == len(self.event_weight_groups[group_name]["parameter_names"])), "Expected {} parameter values but only {} were provided!".format(len(self.event_weight_groups[group_name]["parameter_names"]), len(parameter_values)) + self.event_weight_groups[group_name][weight_name] = [] + for parameter_name, value in zip(self.event_weight_groups[group_name]["parameter_names"], parameter_values): + self.event_weight_groups[group_name][weight_name].append((parameter_name, value)) + return + + # Output a heartbeat message + # @param duration Time interval in seconds between output messages + def __emit_heartbeat(self, duration): + message = "Heartbeat: Powheg generation has been running for {} in total".format(RepeatingTimer.human_readable_time_interval(duration)) + self.logger.info(message) + with open("{}/eventLoopHeartBeat.txt".format(self.__base_directory), "w") as f: + f.write(message) + return + + # Store default values before allowing user-input so that changes can be detected + def populate_default_strings(self): + # Configurable parameters: [configurable_name, default, desc] + for configurable_list in self.configurable_parameters.values(): + configurable_list[1] = getattr(self, configurable_list[0]) + # Phantom parameters: [configurable_name, default, desc] + for configurable_list in self.phantom_parameters.values(): + configurable_list[1] = getattr(self, configurable_list[0]) + # Fixed parameters: [non_configurable_name, value, default, desc] + for non_configurable_list in self.fixed_parameters: + non_configurable_list[2] = non_configurable_list[1] + # Freeze attributes at this point + self.__attributes_frozen = True + return + + # Get base directory + @property + def base_directory(self): + return self.__base_directory + + # Get dictionary of configurable parameters: visible to user and written to runcard + @property + def configurable_parameters(self): + return self.__configurable_parameters + + # Get number of cores + @property + def cores(self): + return self.__n_cores + + # Get whether reweighting needs to be enabled + @property + def enable_reweighting(self): + return self.__enable_reweighting + + # Get whether NNLO reweighting needs to be enabled + @property + def enable_NNLO_reweighting(self): + return self.__enable_NNLO_reweighting + + # Get ordered dictionary of event weight groups + @property + def event_weight_groups(self): + return self.__event_weight_groups + + # Get dictionary of non-configurable parameters: not visible to user but written to runcard + @property + def fixed_parameters(self): + return self.__fixed_parameters + + # Get whether this is a leading-order process + @property + def is_LO(self): + return self.__is_leading_order + + # Get handle to logger + @property + def logger(self): + return self.__logger + + # Get output file name + @property + def output_events_file_name(self): + return self.__output_events_file_name + + # Get output tarball name + @property + def output_tarball_name(self): + return self.__output_tarball_name + + # Get dictionary of phantom parameters: visible to user but not written to runcard + @property + def phantom_parameters(self): + return self.__phantom_parameters + + # Get Powheg directory + @property + def powheg_directory(self): + return self.__powheg_directory + + # Get output file name + @property + def powheg_LHE_output(self): + return self.__powheg_LHE_output + + # Get list of enabled run card decorators + @property + def run_card_decorators(self): + return self.__run_card_decorators + + # Get full path to runcard + @property + def run_card_path(self): + return "{}/powheg.input".format(self.base_directory) + + # Deprecated function - use generate() instead + def generateRunCard(self): + self.logger.warning("The function generateRunCard() is deprecated as of 2015-02-19") + self.logger.warning("Please use generate() instead of generateRunCard() and generateEvents()") + time.sleep(300) + return self.__generate_run_card() + + # Deprecated function - use generate() instead + def generateEvents(self): + self.logger.warning("The function generateEvents() is deprecated as of 2015-02-19") + self.logger.warning("Please use generate() instead of generateRunCard() and generateEvents()") + time.sleep(300) + return self.__generate_events() diff --git a/Generators/PowhegControl/python/decorators/AnomalousCouplingDecorator.py b/Generators/PowhegControl/python/decorators/AnomalousCouplingDecorator.py index 3f2fc0bab0f85..b96b39bd2b584 100644 --- a/Generators/PowhegControl/python/decorators/AnomalousCouplingDecorator.py +++ b/Generators/PowhegControl/python/decorators/AnomalousCouplingDecorator.py @@ -1,26 +1,27 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl AnomalousCouplingDecorator +# @PowhegControl AnomalousCouplingDecorator # Powheg runcard decorator for anomalous vector boson couplings # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class AnomalousCouplingDecorator(object) : - ## Define decorator name string - name = 'anomalous coupling' +class AnomalousCouplingDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "anomalous coupling" - self.decorated.add_parameter( 'delg1_g', 0, desc='Delta_g1(Gamma)' ) - self.decorated.add_parameter( 'delg1_z', 0, desc='Delta_g1(Z)' ) - self.decorated.add_parameter( 'delk_g', 0, desc='Delta_K(Gamma)' ) - self.decorated.add_parameter( 'delk_z', 0, desc='Delta_K(Z)' ) - self.decorated.add_parameter( 'lambda_g', 0, desc='Lambda(gamma)' ) - self.decorated.add_parameter( 'lambda_z', 0, desc='Lambda(Z)' ) - self.decorated.add_parameter( 'tevscale', -1, desc='(-1:use Powheg default) W form-factor scale, in TeV' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("delg1_g", 0, desc="Delta_g1(Gamma)") + self.decorated.add_parameter("delg1_z", 0, desc="Delta_g1(Z)") + self.decorated.add_parameter("delk_g", 0, desc="Delta_K(Gamma)") + self.decorated.add_parameter("delk_z", 0, desc="Delta_K(Z)") + self.decorated.add_parameter("lambda_g", 0, desc="Lambda(gamma)") + self.decorated.add_parameter("lambda_z", 0, desc="Lambda(Z)") + self.decorated.add_parameter("tevscale", -1, desc="(-1:use Powheg default) W form-factor scale, in TeV") diff --git a/Generators/PowhegControl/python/decorators/BaseDecorator.py b/Generators/PowhegControl/python/decorators/BaseDecorator.py index 1da980756c0cd..8426c01e69ac8 100644 --- a/Generators/PowhegControl/python/decorators/BaseDecorator.py +++ b/Generators/PowhegControl/python/decorators/BaseDecorator.py @@ -1,92 +1,93 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl BaseDecorator +# @PowhegControl BaseDecorator # Powheg runcard decorator for universal functionality # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -from .. import ATLASCommonParameters -class BaseDecorator(object) : - ## Define decorator name string - name = 'base' +class BaseDecorator(object): - def __init__( self, decorated ) : - # Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "base" - # Beam/event information - self.decorated.add_parameter( 'nEvents', 5500, desc='number of events to be generated', parameter='numevts' ) - self.decorated.fix_parameter( 'ih1', 1, desc='(1:proton) type of hadron 1' ) - self.decorated.fix_parameter( 'ih2', 1, desc='(1:proton) type of hadron 2' ) - self.decorated.add_parameter( 'beam_energy', 6500, desc='energy of beam 1 in GeV', parameter='ebeam1' ) - self.decorated.add_parameter( 'beam_energy', 6500, desc='energy of beam 2 in GeV', parameter='ebeam2' ) - # PDF information - self.decorated.add_parameter( 'PDF', 10800, desc='PDF set for hadron 1 (LHAGLUE numbering)', parameter='lhans1' ) - self.decorated.add_parameter( 'PDF', 10800, desc='PDF set for hadron 2 (LHAGLUE numbering)', parameter='lhans2' ) - self.decorated.fix_parameter( 'pdfreweight', 1, desc='(0:disabled; 1:enabled) store PDF information' ) - # Random seeds - self.decorated.add_parameter( 'manyseeds', 0, desc='(0:disabled; 1:enabled) read multiple seeds for the random number generator from pwgseeds.dat' ) - self.decorated.fix_parameter( 'rand1', 0, desc='(0:disabled; 1:enabled) user-initiated random seed (disabled for reproducibility)' ) - self.decorated.fix_parameter( 'rand2', 0, desc='(0:disabled; 1:enabled) user-initiated random seed (disabled for reproducibility)' ) - self.decorated.add_parameter( 'random_seed', 1, desc='seed for the random number generator', parameter='iseed' ) - # Scale evaluation - self.decorated.add_parameter( 'mu_F', 1.0, desc='factorization scale factor: mu_fact = mu_ref * facscfact', parameter='facscfact' ) - self.decorated.add_parameter( 'mu_R', 1.0, desc='renormalization scale factor: mu_ren = mu_ref * renscfact', parameter='renscfact' ) - # Integration parameters: - # The total number of calls is ncall2*itmx2*foldcsi*foldy*foldphi, with a typical call using 1/1400 seconds - # These are optimised in each process to ensure: - # Cross section uncertainty < 1% : to reduce, increase ncall1*itmx1 or ncall2*itmx2 - # Negative weight events < 1% : to reduce, increase fold parameters - # Upper bound failures < 1% : to reduce, increase nubound, xupbound or ncall2*itmx2 - self.decorated.add_parameter( 'itmx1', 5, desc='number of iterations for initializing the integration grid' ) - self.decorated.add_parameter( 'itmx2', 5, desc='number of iterations for computing the integral and finding upper bound' ) - self.decorated.add_parameter( 'ncall1', 10000, desc='number of calls for initializing the integration grid' ) - self.decorated.add_parameter( 'ncall2', 10000, desc='number of calls for computing the integral and finding upper bound' ) - # Allowed values for folding parameters are 1, 2, 5, 10, 25, 50 - self.decorated.add_parameter( 'foldx', 1, desc='number of folds on x (csi) integration', parameter='foldcsi' ) - self.decorated.add_parameter( 'foldy', 1, desc='number of folds on y integration' ) - self.decorated.add_parameter( 'foldphi', 1, desc='number of folds on phi integration' ) - self.decorated.fix_parameter( 'use-old-grid', 1, desc='(0:disabled; 1:enabled) use old integration grid if available' ) - # Born suppression : may be needed in presence of processes where the Born cross section vanishes in some phase-space region - self.decorated.add_parameter( 'bornktmin', -1, desc='(-1:use Powheg default) generation cut: minimum kt in underlying Born' ) - self.decorated.fix_parameter( 'bornonly', [0,1][self.decorated.is_LO], desc='(0:disabled; 1:enabled) calculate only Born-level process' ) - self.decorated.add_parameter( 'bornsuppfact', -1, desc='(-1:use Powheg default) mass parameter for Born suppression factor. If > 0 suppfact = 1' ) - self.decorated.add_parameter( 'bornzerodamp', 1, desc='(0:disabled; 1:enabled) use damping where the Born is strongly suppressed (or 0).' ) - self.decorated.add_parameter( 'hdamp', -1, desc='(-1:use Powheg default) DEPRECATED, apply damping factor for high-pt radiation: h**2/(pt2+h**2)' ) - self.decorated.add_parameter( 'hfact', -1, desc='(-1:use Powheg default) apply dumping factor for high-pt radiation: h**2/(pt2+h**2)' ) - self.decorated.add_parameter( 'ptsupp', -1, desc='(-1:use Powheg default) DEPRECATED, but some processes complain if it is missing' ) - self.decorated.add_parameter( 'withdamp', -1, desc='(-1:use Powheg default) use Born-zero damping factor.' ) - self.decorated.add_parameter( 'withnegweights', 1, desc='(0:disabled; 1:enabled) allow negative weights' ) - # Parton splitting settings - self.decorated.add_parameter( 'bottomthr', -1, desc='(-1:use Powheg default) minimum pT in GeV for generating emission off b-quarks' ) - self.decorated.add_parameter( 'bottomthrpdf', -1, desc='(-1:use Powheg default) threshold in GeV at which b-quark PDF becomes non-zero' ) - self.decorated.add_parameter( 'charmthr', -1, desc='(-1:use Powheg default) minimum pT in GeV for generating emission off c-quarks' ) - self.decorated.add_parameter( 'charmthrpdf', -1, desc='(-1:use Powheg default) threshold in GeV at which c-quark PDF becomes non-zero' ) - self.decorated.add_parameter( 'par_2gsupp', -1, desc='(-1:use Powheg default)' ) - self.decorated.add_parameter( 'par_diexp', -1, desc='(-1:use Powheg default) ISR singularity exponent (p1)' ) - self.decorated.add_parameter( 'par_dijexp', -1, desc='(-1:use Powheg default) FSR singularity exponent (p2)' ) - self.decorated.add_parameter( 'ptsqmin', -1, desc='(-1:use Powheg default) minimum pT in GeV for generating emission off light quarks' ) - # Users are asked not to change these, since their invocation is time consuming and/or may cause some conflicts with other settings. - self.decorated.fix_parameter( 'iupperisr', 1, desc='choice of ISR upper bounding functional form' ) - self.decorated.fix_parameter( 'iupperfsr', 2, desc='choice of FSR upper bounding functional form' ) - self.decorated.fix_parameter( 'smartsig', 1, desc='(0:disabled; 1:enabled) remember equal amplitudes' ) - self.decorated.fix_parameter( 'testplots', 0, desc='(0:disabled; 1:enabled) do NLO and PWHG distributions' ) - self.decorated.fix_parameter( 'testsuda', 0, desc='(0:disabled; 1:enabled) test Sudakov form factor' ) - self.decorated.fix_parameter( 'withsubtr', 1, desc='(0:disabled; 1:enabled) subtract real counterterms' ) - # Parameters of unknown use - self.decorated.add_parameter( 'flg_debug', 0, desc='(0:disabled; 1:enabled) write extra information to LHEF. Breaks PYTHIA showering.' ) - self.decorated.add_parameter( 'colltest', 1, desc='(0:disabled; 1:enabled) check collinear limits' ) - self.decorated.add_parameter( 'softtest', 1, desc='(0:disabled; 1:enabled) check soft limits' ) - self.decorated.add_parameter( 'ubsigmadetails', 1, desc='(0:disabled; 1:enabled) output calculated cross-sections' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + # Beam/event information + self.decorated.add_parameter("nEvents", 5500, desc="number of events to be generated", parameter="numevts") + self.decorated.add_parameter("beam_1_type", 1, desc="([-]1:[anti]proton; [-2]2:[anti]neutron; [-3]3:[-]pi) hadron content of beam 1", parameter="ih1") + self.decorated.add_parameter("beam_2_type", 1, desc="([-]1:[anti]proton; [-2]2:[anti]neutron; [-3]3:[-]pi) hadron content of beam 2", parameter="ih2") + self.decorated.add_parameter("beam_energy", 6500, desc="energy of beam 1 in GeV", parameter="ebeam1") + self.decorated.add_parameter("beam_energy", 6500, desc="energy of beam 2 in GeV", parameter="ebeam2") + # PDF information + self.decorated.add_parameter("PDF", 10800, desc="PDF set for hadron 1 (LHAGLUE numbering)", parameter="lhans1") + self.decorated.add_parameter("PDF", 10800, desc="PDF set for hadron 2 (LHAGLUE numbering)", parameter="lhans2") + self.decorated.fix_parameter("pdfreweight", 1, desc="(0:disabled; 1:enabled) store PDF information") + # Random seeds + self.decorated.add_parameter("manyseeds", 0, desc="(0:disabled; 1:enabled) read multiple seeds for the random number generator from pwgseeds.dat") + self.decorated.fix_parameter("rand1", 0, desc="(0:disabled; 1:enabled) user-initiated random seed (disabled for reproducibility)") + self.decorated.fix_parameter("rand2", 0, desc="(0:disabled; 1:enabled) user-initiated random seed (disabled for reproducibility)") + self.decorated.add_parameter("random_seed", 1, desc="seed for the random number generator", parameter="iseed") + # Scale evaluation + self.decorated.add_parameter("mu_F", 1.0, desc="factorization scale factor: mu_fact = mu_ref * facscfact", parameter="facscfact") + self.decorated.add_parameter("mu_R", 1.0, desc="renormalization scale factor: mu_ren = mu_ref * renscfact", parameter="renscfact") + # Integration parameters: + # The total number of calls is ncall2*itmx2*foldcsi*foldy*foldphi, with a typical call using 1/1400 seconds + # These are optimised in each process to ensure: + # Cross section uncertainty < 1% : to reduce, increase ncall1*itmx1 or ncall2*itmx2 + # Negative weight events < 1% : to reduce, increase fold parameters + # Upper bound failures < 1% : to reduce, increase nubound, xupbound or ncall2*itmx2 + self.decorated.add_parameter("itmx1", 5, desc="number of iterations for initializing the integration grid") + self.decorated.add_parameter("itmx2", 5, desc="number of iterations for computing the integral and finding upper bound") + self.decorated.add_parameter("ncall1", 10000, desc="number of calls for initializing the integration grid") + self.decorated.add_parameter("ncall2", 10000, desc="number of calls for computing the integral and finding upper bound") + # Allowed values for folding parameters are 1, 2, 5, 10, 25, 50 + self.decorated.add_parameter("foldx", 1, desc="number of folds on x (csi) integration", parameter="foldcsi") + self.decorated.add_parameter("foldy", 1, desc="number of folds on y integration") + self.decorated.add_parameter("foldphi", 1, desc="number of folds on phi integration") + self.decorated.fix_parameter("use-old-grid", 1, desc="(0:disabled; 1:enabled) use old integration grid if available") + # Born suppression : may be needed in presence of processes where the Born cross section vanishes in some phase-space region + self.decorated.add_parameter("bornktmin", -1, desc="(-1:use Powheg default) generation cut: minimum kt in underlying Born") + self.decorated.fix_parameter("bornonly", [0, 1][self.decorated.is_LO], desc="(0:disabled; 1:enabled) calculate only Born-level process") + self.decorated.add_parameter("bornsuppfact", -1, desc="(-1:use Powheg default) mass parameter for Born suppression factor. If > 0 suppfact = 1") + self.decorated.add_parameter("bornzerodamp", 1, desc="(0:disabled; 1:enabled) use damping where the Born is strongly suppressed (or 0).") + self.decorated.add_parameter("hdamp", -1, desc="(-1:use Powheg default) DEPRECATED, apply damping factor for high-pt radiation: h**2/(pt2+h**2)") + self.decorated.add_parameter("hfact", -1, desc="(-1:use Powheg default) apply dumping factor for high-pt radiation: h**2/(pt2+h**2)") + self.decorated.add_parameter("ptsupp", -1, desc="(-1:use Powheg default) DEPRECATED, but some processes complain if it is missing") + self.decorated.add_parameter("withdamp", -1, desc="(-1:use Powheg default) use Born-zero damping factor.") + self.decorated.add_parameter("withnegweights", 1, desc="(0:disabled; 1:enabled) allow negative weights") + # Parton splitting settings + self.decorated.add_parameter("bottomthr", -1, desc="(-1:use Powheg default) minimum pT in GeV for generating emission off b-quarks") + self.decorated.add_parameter("bottomthrpdf", -1, desc="(-1:use Powheg default) threshold in GeV at which b-quark PDF becomes non-zero") + self.decorated.add_parameter("charmthr", -1, desc="(-1:use Powheg default) minimum pT in GeV for generating emission off c-quarks") + self.decorated.add_parameter("charmthrpdf", -1, desc="(-1:use Powheg default) threshold in GeV at which c-quark PDF becomes non-zero") + self.decorated.add_parameter("par_2gsupp", -1, desc="(-1:use Powheg default)") + self.decorated.add_parameter("par_diexp", -1, desc="(-1:use Powheg default) ISR singularity exponent (p1)") + self.decorated.add_parameter("par_dijexp", -1, desc="(-1:use Powheg default) FSR singularity exponent (p2)") + self.decorated.add_parameter("ptsqmin", -1, desc="(-1:use Powheg default) minimum pT in GeV for generating emission off light quarks") + # Users are asked not to change these, since their invocation is time consuming and/or may cause some conflicts with other settings. + self.decorated.fix_parameter("iupperisr", 1, desc="choice of ISR upper bounding functional form") + self.decorated.fix_parameter("iupperfsr", 2, desc="choice of FSR upper bounding functional form") + self.decorated.fix_parameter("smartsig", 1, desc="(0:disabled; 1:enabled) remember equal amplitudes") + self.decorated.fix_parameter("testplots", 0, desc="(0:disabled; 1:enabled) do NLO and PWHG distributions") + self.decorated.fix_parameter("testsuda", 0, desc="(0:disabled; 1:enabled) test Sudakov form factor") + self.decorated.fix_parameter("withsubtr", 1, desc="(0:disabled; 1:enabled) subtract real counterterms") + # Parameters of unknown use + self.decorated.add_parameter("flg_debug", 0, desc="(0:disabled; 1:enabled) write extra information to LHEF. Breaks PYTHIA showering.") + self.decorated.add_parameter("colltest", 1, desc="(0:disabled; 1:enabled) check collinear limits") + self.decorated.add_parameter("softtest", 1, desc="(0:disabled; 1:enabled) check soft limits") + self.decorated.add_parameter("ubsigmadetails", 1, desc="(0:disabled; 1:enabled) output calculated cross-sections") - def finalise(self) : - # Force parameters to integer values - [ setattr( self.decorated, parameter, int( getattr(self.decorated, parameter) ) ) for parameter in ('nEvents','itmx1','itmx2','ncall1','ncall2','foldx','foldy','foldphi','random_seed') ] + def finalise(self): + # Force parameters to integer values + for parameter in ("nEvents", "itmx1", "itmx2", "ncall1", "ncall2", "foldx", "foldy", "foldphi", "random_seed"): + setattr(self.decorated, parameter, int(getattr(self.decorated, parameter))) - # Fix parameters read from Generate_tf before printing list for user - [ self.decorated.fix_parameter( parameter ) for parameter in ('beam_energy', 'manyseeds', 'random_seed' ) ] + # Fix parameters read from Generate_tf before printing list for user + for parameter in ("beam_energy", "manyseeds", "random_seed"): + self.decorated.fix_parameter(parameter) diff --git a/Generators/PowhegControl/python/decorators/BreitWignerWidthDecorator.py b/Generators/PowhegControl/python/decorators/BreitWignerWidthDecorator.py index 876b530350e01..dbbf93f01f44c 100644 --- a/Generators/PowhegControl/python/decorators/BreitWignerWidthDecorator.py +++ b/Generators/PowhegControl/python/decorators/BreitWignerWidthDecorator.py @@ -1,20 +1,21 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl BreitWignerWidthDecorator +# @PowhegControl BreitWignerWidthDecorator # Powheg runcard decorator for Higgs+jets properties # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class BreitWignerWidthDecorator(object) : - ## Define decorator name string - name = 'Breit-Wigner width' +class BreitWignerWidthDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "Breit-Wigner width" - self.decorated.add_parameter( 'bwcutoff', 15, desc='Mass window is hmass +/- bwcutoff * hwidth' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("bwcutoff", 15, desc="Mass window is hmass +/- bwcutoff * hwidth") diff --git a/Generators/PowhegControl/python/decorators/CKKWDecorator.py b/Generators/PowhegControl/python/decorators/CKKWDecorator.py index b8fb3af8106b6..837527e0d523d 100644 --- a/Generators/PowhegControl/python/decorators/CKKWDecorator.py +++ b/Generators/PowhegControl/python/decorators/CKKWDecorator.py @@ -1,20 +1,21 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl CKKWDecorator +# @PowhegControl CKKWDecorator # Powheg runcard decorator for CKKW scalup # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class CKKWDecorator(object) : - ## Define decorator name string - name = 'CKKW' +class CKKWDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "CKKW" - self.decorated.add_parameter( 'ckkwscalup', 1, desc='(0:use Powheg scalup; 1:CKKW scalup [compute scalup scale for subsequent shower using the smallest kt in the final state])' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("ckkwscalup", 1, desc="(0:use Powheg scalup; 1:CKKW scalup [compute scalup scale for subsequent shower using the smallest kt in the final state])") diff --git a/Generators/PowhegControl/python/decorators/CKMDecorator.py b/Generators/PowhegControl/python/decorators/CKMDecorator.py index e5f1b14cb8530..7aa9c11f40fec 100644 --- a/Generators/PowhegControl/python/decorators/CKMDecorator.py +++ b/Generators/PowhegControl/python/decorators/CKMDecorator.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl CKMDecorator +# @PowhegControl CKMDecorator # Powheg runcard decorator for CKM matrix # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,22 +8,23 @@ #! /usr/bin/env python from .. import ATLASCommonParameters -class CKMDecorator(object) : - ## Define decorator name string - name = 'CKM' +class CKMDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "CKM" - self.decorated.add_parameter( 'CKM_Vud', ATLASCommonParameters.CKM_Vud, desc='CKM element: Vud' ) - self.decorated.add_parameter( 'CKM_Vus', ATLASCommonParameters.CKM_Vus, desc='CKM element: Vus' ) - self.decorated.add_parameter( 'CKM_Vub', ATLASCommonParameters.CKM_Vub, desc='CKM element: Vub' ) - self.decorated.add_parameter( 'CKM_Vcd', ATLASCommonParameters.CKM_Vcd, desc='CKM element: Vcd' ) - self.decorated.add_parameter( 'CKM_Vcs', ATLASCommonParameters.CKM_Vcs, desc='CKM element: Vcs' ) - self.decorated.add_parameter( 'CKM_Vcb', ATLASCommonParameters.CKM_Vcb, desc='CKM element: Vcb' ) - self.decorated.add_parameter( 'CKM_Vtd', ATLASCommonParameters.CKM_Vtd, desc='CKM element: Vtd' ) - self.decorated.add_parameter( 'CKM_Vts', ATLASCommonParameters.CKM_Vts, desc='CKM element: Vts' ) - self.decorated.add_parameter( 'CKM_Vtb', ATLASCommonParameters.CKM_Vtb, desc='CKM element: Vtb' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("CKM_Vud", ATLASCommonParameters.CKM_Vud, desc="CKM element: Vud") + self.decorated.add_parameter("CKM_Vus", ATLASCommonParameters.CKM_Vus, desc="CKM element: Vus") + self.decorated.add_parameter("CKM_Vub", ATLASCommonParameters.CKM_Vub, desc="CKM element: Vub") + self.decorated.add_parameter("CKM_Vcd", ATLASCommonParameters.CKM_Vcd, desc="CKM element: Vcd") + self.decorated.add_parameter("CKM_Vcs", ATLASCommonParameters.CKM_Vcs, desc="CKM element: Vcs") + self.decorated.add_parameter("CKM_Vcb", ATLASCommonParameters.CKM_Vcb, desc="CKM element: Vcb") + self.decorated.add_parameter("CKM_Vtd", ATLASCommonParameters.CKM_Vtd, desc="CKM element: Vtd") + self.decorated.add_parameter("CKM_Vts", ATLASCommonParameters.CKM_Vts, desc="CKM element: Vts") + self.decorated.add_parameter("CKM_Vtb", ATLASCommonParameters.CKM_Vtb, desc="CKM element: Vtb") diff --git a/Generators/PowhegControl/python/decorators/DarkMatterDecorator.py b/Generators/PowhegControl/python/decorators/DarkMatterDecorator.py index 028d162e108a1..a85f62cc9605f 100644 --- a/Generators/PowhegControl/python/decorators/DarkMatterDecorator.py +++ b/Generators/PowhegControl/python/decorators/DarkMatterDecorator.py @@ -1,23 +1,24 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl DarkMatterDecorator +# @PowhegControl DarkMatterDecorator # Powheg runcard decorator for dark matter settings # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class DarkMatterDecorator(object) : - ## Define decorator name string - name = 'dark matter' +class DarkMatterDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "dark matter" - self.decorated.add_parameter( 'DM_mass', 10, desc='DM-candidate mass', parameter='DMmass' ) - self.decorated.add_parameter( 'gDM', 1.0, desc='X-Xbar-med coupling', parameter='DMgDM' ) - self.decorated.add_parameter( 'gSM', 1.0, desc='q-q-med coupling', parameter='DMgSM' ) - self.decorated.add_parameter( 'idDM', 1000022, desc='PDG ID of DM particles' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("DM_mass", 10, desc="DM-candidate mass", parameter="DMmass") + self.decorated.add_parameter("gDM", 1.0, desc="X-Xbar-med coupling", parameter="DMgDM") + self.decorated.add_parameter("gSM", 1.0, desc="q-q-med coupling", parameter="DMgSM") + self.decorated.add_parameter("idDM", 1000022, desc="PDG ID of DM particles") diff --git a/Generators/PowhegControl/python/decorators/DarkMatterPhiDecorator.py b/Generators/PowhegControl/python/decorators/DarkMatterPhiDecorator.py index 511eb2a23dde7..db20c754814ea 100644 --- a/Generators/PowhegControl/python/decorators/DarkMatterPhiDecorator.py +++ b/Generators/PowhegControl/python/decorators/DarkMatterPhiDecorator.py @@ -1,22 +1,23 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl DarkMatterPhiDecorator +# @PowhegControl DarkMatterPhiDecorator # Powheg runcard decorator for non-vector dark matter # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class DarkMatterPhiDecorator(object) : - ## Define decorator name string - name = 'dark matter phi' +class DarkMatterPhiDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "dark matter phi" - self.decorated.add_parameter( 'decaymode', -1, desc='[DMS] 1:S-mediated; 2:PS-mediated fermionic DM; -1,-2 for full theory (mediator mass and width needed); [DMGG] 1:GG-mediated fermionic DM; -1:full theory (mediator mass and width needed)' ) - self.decorated.add_parameter( 'phi_mass', 100, desc='mediator mass', parameter='DMphimass' ) - self.decorated.add_parameter( 'phi_width', 42.494, desc='mediator width', parameter='DMphiwidth' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("decaymode", -1, desc="[DMS] 1:S-mediated; 2:PS-mediated fermionic DM; -1,-2 for full theory (mediator mass and width needed); [DMGG] 1:GG-mediated fermionic DM; -1:full theory (mediator mass and width needed)") + self.decorated.add_parameter("phi_mass", 100, desc="mediator mass", parameter="DMphimass") + self.decorated.add_parameter("phi_width", 42.494, desc="mediator width", parameter="DMphiwidth") diff --git a/Generators/PowhegControl/python/decorators/DibosonDecorator.py b/Generators/PowhegControl/python/decorators/DibosonDecorator.py index 2f389b002cb8d..936324d9ff3b5 100644 --- a/Generators/PowhegControl/python/decorators/DibosonDecorator.py +++ b/Generators/PowhegControl/python/decorators/DibosonDecorator.py @@ -1,32 +1,33 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl DibosonDecorator +# @PowhegControl DibosonDecorator # Powheg runcard decorator for diboson settings # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class DibosonDecorator(object) : - ## Define decorator name string - name = 'diboson' +class DibosonDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "diboson" - self.decorated.allowed_decay_modes = [] + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated - self.decorated.add_phantom( 'decay_mode', None, desc='Diboson decay mode' ) - self.decorated.add_parameter( 'dronly', 0, desc='(0:disabled; 1:enabled) include only double resonant diagrams' ) + self.decorated.allowed_decay_modes = [] + self.decorated.add_phantom("decay_mode", None, desc="Diboson decay mode") + self.decorated.add_parameter("dronly", 0, desc="(0:disabled; 1:enabled) include only double resonant diagrams") - def finalise( self ) : - # __decay_mode = self.decorated.pop('decay_mode') - if self.decorated.decay_mode not in self.decorated.allowed_decay_modes : - self.decorated.logger.warning( 'Decay mode {0} not recognised!'.format( self.decorated.decay_mode) ) - ## Add entry for each decay mode - for decay_mode in self.decorated.allowed_decay_modes : - self.decorated.fix_parameter( decay_mode, [-1,1][decay_mode==self.decorated.decay_mode], default='user-configured', desc='(1:enabled; -1:disabled) Diboson decay mode, ' ) + # Convert decay mode into list of Powheg parameter options + def finalise(self): + # Check that decay mode is in the allowed list + if self.decorated.decay_mode not in self.decorated.allowed_decay_modes: + self.decorated.logger.warning("Decay mode {} not recognised!".format(self.decorated.decay_mode)) + # Add entry for each decay mode + for decay_mode in self.decorated.allowed_decay_modes: + self.decorated.fix_parameter(decay_mode, [-1, 1][decay_mode == self.decorated.decay_mode], default="user-configured", desc="(1:enabled; -1:disabled) Diboson decay mode, ") diff --git a/Generators/PowhegControl/python/decorators/DibosonInterferenceDecorator.py b/Generators/PowhegControl/python/decorators/DibosonInterferenceDecorator.py index 63058f024cc99..76a8be92b9216 100644 --- a/Generators/PowhegControl/python/decorators/DibosonInterferenceDecorator.py +++ b/Generators/PowhegControl/python/decorators/DibosonInterferenceDecorator.py @@ -1,20 +1,21 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl DibosonInterferenceDecorator +# @PowhegControl DibosonInterferenceDecorator # Powheg runcard decorator for diboson interference # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class DibosonInterferenceDecorator(object) : - ## Define decorator name string - name = 'diboson interference' +class DibosonInterferenceDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "diboson interference" - self.decorated.add_parameter( 'withinterference', 1, desc='(0:disabled; 1:enabled) include interference for like flavour charged leptons' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("withinterference", 1, desc="(0:disabled; 1:enabled) include interference for like flavour charged leptons") diff --git a/Generators/PowhegControl/python/decorators/DileptonMassDecorator.py b/Generators/PowhegControl/python/decorators/DileptonMassDecorator.py index 0b9d1539a8ff6..018847731be21 100644 --- a/Generators/PowhegControl/python/decorators/DileptonMassDecorator.py +++ b/Generators/PowhegControl/python/decorators/DileptonMassDecorator.py @@ -1,20 +1,21 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl DileptonMassDecorator +# @PowhegControl DileptonMassDecorator # Powheg runcard decorator for diboson interference # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class DileptonMassDecorator(object) : - ## Define decorator name string - name = 'dilepton mass' +class DileptonMassDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "dilepton mass" - self.decorated.add_parameter( 'mllmin', 4, desc='Minimum invariant mass of lepton pairs from Z decay' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("mllmin", 4, desc="Minimum invariant mass of lepton pairs from decay") diff --git a/Generators/PowhegControl/python/decorators/EWPropertiesDecorator.py b/Generators/PowhegControl/python/decorators/EWPropertiesDecorator.py index 33deab8c1e178..77b660c7c3f6a 100644 --- a/Generators/PowhegControl/python/decorators/EWPropertiesDecorator.py +++ b/Generators/PowhegControl/python/decorators/EWPropertiesDecorator.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl EWPropertiesDecorator +# @PowhegControl EWPropertiesDecorator # Powheg runcard decorator for electroweak properties # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,23 +8,24 @@ #! /usr/bin/env python from .. import ATLASCommonParameters -class EWPropertiesDecorator(object) : - ## Define decorator name string - name = 'electroweak properties' +class EWPropertiesDecorator(object): - def __init__( self, decorated, boson ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "electroweak properties" - self.decorated.add_parameter( 'alphaem', ATLASCommonParameters.alphaem, desc='EM coupling' ) - self.decorated.add_parameter( 'alphaem_inv', 1.0/float(ATLASCommonParameters.alphaem), desc='EM coupling' ) - if boson == 'w' : - self.decorated.add_parameter( 'mass_W', ATLASCommonParameters.mass_W, desc='mass of W boson in GeV', parameter='wmass' ) - self.decorated.add_parameter( 'width_W', ATLASCommonParameters.width_W, desc='W width', parameter='wwidth' ) - elif boson == 'W' : - self.decorated.add_parameter( 'mass_W', ATLASCommonParameters.mass_W, desc='W mass in GeV', parameter='Wmass' ) - self.decorated.add_parameter( 'width_W', ATLASCommonParameters.width_W, desc='W width in GeV', parameter='Wwidth' ) - self.decorated.add_parameter( 'mass_Z', ATLASCommonParameters.mass_Z, desc='Z mass in GeV', parameter='Zmass' ) - self.decorated.add_parameter( 'width_Z', ATLASCommonParameters.width_Z, desc='Z width in GeV', parameter='Zwidth' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated, boson): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + if boson == "w": + self.decorated.add_parameter("alphaem_inv", 1.0 / float(ATLASCommonParameters.alphaem), desc="EM coupling reciprocal") + self.decorated.add_parameter("mass_W", ATLASCommonParameters.mass_W, desc="mass of W boson in GeV", parameter="wmass") + self.decorated.add_parameter("width_W", ATLASCommonParameters.width_W, desc="W width", parameter="wwidth") + elif boson == "W": + self.decorated.add_parameter("alphaem", ATLASCommonParameters.alphaem, desc="EM coupling") + self.decorated.add_parameter("mass_W", ATLASCommonParameters.mass_W, desc="W mass in GeV", parameter="Wmass") + self.decorated.add_parameter("width_W", ATLASCommonParameters.width_W, desc="W width in GeV", parameter="Wwidth") + self.decorated.add_parameter("mass_Z", ATLASCommonParameters.mass_Z, desc="Z mass in GeV", parameter="Zmass") + self.decorated.add_parameter("width_Z", ATLASCommonParameters.width_Z, desc="Z width in GeV", parameter="Zwidth") diff --git a/Generators/PowhegControl/python/decorators/ExtraTestsDecorator.py b/Generators/PowhegControl/python/decorators/ExtraTestsDecorator.py index 45c3edaab126d..2c325a839b232 100644 --- a/Generators/PowhegControl/python/decorators/ExtraTestsDecorator.py +++ b/Generators/PowhegControl/python/decorators/ExtraTestsDecorator.py @@ -1,20 +1,21 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl ExtraTestsDecorator +# @PowhegControl ExtraTestsDecorator # Powheg runcard decorator for skipextratests parameter # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class ExtraTestsDecorator(object) : - ## Define decorator name string - name = 'extra tests' +class ExtraTestsDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "extra tests" - self.decorated.add_parameter( 'skipextratests', -1, desc='(-1:use Powheg default)' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("skipextratests", -1, desc="(-1:use Powheg default)") diff --git a/Generators/PowhegControl/python/decorators/FakeVirtualDecorator.py b/Generators/PowhegControl/python/decorators/FakeVirtualDecorator.py index 22bfd264cd77e..305383a347480 100644 --- a/Generators/PowhegControl/python/decorators/FakeVirtualDecorator.py +++ b/Generators/PowhegControl/python/decorators/FakeVirtualDecorator.py @@ -1,20 +1,21 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl FakeVirtualDecorator +# @PowhegControl FakeVirtualDecorator # Powheg runcard decorator for faking virtual contributions # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class FakeVirtualDecorator(object) : - ## Define decorator name string - name = 'fake virtual' +class FakeVirtualDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "fake virtual" - self.decorated.add_parameter( 'fakevirt', 0, desc='(0:disabled; 1:enabled) use Born for virtuals - DO NOT USE when generating events.' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("fakevirt", 0, desc="(0:disabled; 1:enabled) use Born for virtuals - DO NOT USE when generating events.") diff --git a/Generators/PowhegControl/python/decorators/FixedScaleDecorator.py b/Generators/PowhegControl/python/decorators/FixedScaleDecorator.py index 4a5e60d833620..fdd75d2fe28cc 100644 --- a/Generators/PowhegControl/python/decorators/FixedScaleDecorator.py +++ b/Generators/PowhegControl/python/decorators/FixedScaleDecorator.py @@ -1,20 +1,21 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl FixedScaleDecorator +# @PowhegControl FixedScaleDecorator # Powheg runcard decorator for fixed scale # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class FixedScaleDecorator(object) : - ## Define decorator name string - name = 'fixed scale' +class FixedScaleDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "fixed scale" - self.decorated.add_parameter( 'fixedscale', -1, desc='(-1:use Powheg default) use reference renormalisation and factorisation scales' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("fixedscale", -1, desc="(-1:use Powheg default) use reference renormalisation and factorisation scales") diff --git a/Generators/PowhegControl/python/decorators/GenericScaleDecorator.py b/Generators/PowhegControl/python/decorators/GenericScaleDecorator.py index 8ee47219f465a..9ea36c4266672 100644 --- a/Generators/PowhegControl/python/decorators/GenericScaleDecorator.py +++ b/Generators/PowhegControl/python/decorators/GenericScaleDecorator.py @@ -1,21 +1,22 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl GenericScaleDecorator +# @PowhegControl GenericScaleDecorator # Powheg runcard decorator for universal NLO functionality # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class GenericScaleDecorator(object) : - ## Define decorator name string - name = 'generic scale' +class GenericScaleDecorator(object): + + # Define decorator name string + name = "generic scale" - def __init__( self, decorated ) : # Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated - self.decorated.add_parameter( 'btlscalect', -1, desc='(-1:Powheg default; 0:disabled; 1:enabled) use the scales of the underlying-Born configuration for the subtraction terms' ) - self.decorated.add_parameter( 'btlscalereal', -1, desc='(-1:Powheg default; 0:disabled; 1:enabled) compute scales that depend on the real kinematics' ) + self.decorated.add_parameter("btlscalect", -1, desc="(-1:Powheg default; 0:disabled; 1:enabled) use the scales of the underlying-Born configuration for the subtraction terms") + self.decorated.add_parameter("btlscalereal", -1, desc="(-1:Powheg default; 0:disabled; 1:enabled) compute scales that depend on the real kinematics") diff --git a/Generators/PowhegControl/python/decorators/HeavyQuarkDecorator.py b/Generators/PowhegControl/python/decorators/HeavyQuarkDecorator.py index 833168aee6978..118530ceced60 100644 --- a/Generators/PowhegControl/python/decorators/HeavyQuarkDecorator.py +++ b/Generators/PowhegControl/python/decorators/HeavyQuarkDecorator.py @@ -1,20 +1,21 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl HeavyQuarkDecorator +# @PowhegControl HeavyQuarkDecorator # Powheg runcard decorator for heavy quarks # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class HeavyQuarkDecorator(object) : - ## Define decorator name string - name = 'heavy quark' +class HeavyQuarkDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "heavy quark" - self.decorated.add_parameter( 'quark_mass', -1, desc='mass of heavy quark in GeV', parameter='qmass' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("quark_mass", -1, desc="mass of heavy quark in GeV", parameter="qmass") diff --git a/Generators/PowhegControl/python/decorators/HiggsDecayModeDecorator.py b/Generators/PowhegControl/python/decorators/HiggsDecayModeDecorator.py index 4f77970614e2b..b7d4c2a24d0f0 100644 --- a/Generators/PowhegControl/python/decorators/HiggsDecayModeDecorator.py +++ b/Generators/PowhegControl/python/decorators/HiggsDecayModeDecorator.py @@ -1,20 +1,21 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl HiggsDecayModeDecorator +# @PowhegControl HiggsDecayModeDecorator # Powheg runcard decorator for Higgs decay mode # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class HiggsDecayModeDecorator(object) : - ## Define decorator name string - name = 'Higgs decay mode' +class HiggsDecayModeDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "Higgs decay mode" - self.decorated.add_parameter( 'hdecaymode', 0, desc='(-1:no decay; 0:all; 1-6:dd, uu etc.; 7-9:e+e-, etc.; 10:WW; 11:ZZ; 12:gammagamma) Higgs boson decay' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("hdecaymode", 0, desc="(-1:no decay; 0:all; 1-6:dd, uu etc.; 7-9:e+e-, etc.; 10:WW; 11:ZZ; 12:gammagamma) Higgs boson decay") diff --git a/Generators/PowhegControl/python/decorators/HiggsDecayPropertiesDecorator.py b/Generators/PowhegControl/python/decorators/HiggsDecayPropertiesDecorator.py index de940faa2a544..2f2d0a32e0c49 100644 --- a/Generators/PowhegControl/python/decorators/HiggsDecayPropertiesDecorator.py +++ b/Generators/PowhegControl/python/decorators/HiggsDecayPropertiesDecorator.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl HiggsDecayPropertiesDecorator +# @PowhegControl HiggsDecayPropertiesDecorator # Powheg runcard decorator for Higgs decay properties # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,18 +8,19 @@ #! /usr/bin/env python from .. import ATLASCommonParameters -class HiggsDecayPropertiesDecorator(object) : - ## Define decorator name string - name = 'Higgs decay properties' +class HiggsDecayPropertiesDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "Higgs decay properties" - self.decorated.add_parameter( 'hdecaywidth', 0, desc='(0:use hwidth; 1:read total decay width from HDECAY sm.br2 file)' ) - self.decorated.add_parameter( 'mass_b', ATLASCommonParameters.mass_b, desc='bottom quark mass (loops disabled if <= 0)', parameter='bottommass' ) - self.decorated.add_parameter( 'mass_c', ATLASCommonParameters.mass_c, desc='charm quark mass (loops enabled if <= 0)', parameter='charmmass' ) - self.decorated.add_parameter( 'masswindow', 10.0, desc='number of widths around hmass in the BW for an off-shell Higgs boson' ) - self.decorated.add_parameter( 'nnlo', -1, desc='(-1:use Powheg default) enable NNLO rescaling' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("hdecaywidth", 0, desc="(0:use hwidth; 1:read total decay width from HDECAY sm.br2 file)") + self.decorated.add_parameter("mass_b", ATLASCommonParameters.mass_b, desc="bottom quark mass (loops disabled if <= 0)", parameter="bottommass") + self.decorated.add_parameter("mass_c", ATLASCommonParameters.mass_c, desc="charm quark mass (loops enabled if <= 0)", parameter="charmmass") + self.decorated.add_parameter("masswindow", 10.0, desc="number of widths around hmass in the BW for an off-shell Higgs boson") + self.decorated.add_parameter("nnlo", -1, desc="(-1:use Powheg default) enable NNLO rescaling") diff --git a/Generators/PowhegControl/python/decorators/HiggsFixedWidthDecorator.py b/Generators/PowhegControl/python/decorators/HiggsFixedWidthDecorator.py index 125dfd611281f..eeaa3ab3b8753 100644 --- a/Generators/PowhegControl/python/decorators/HiggsFixedWidthDecorator.py +++ b/Generators/PowhegControl/python/decorators/HiggsFixedWidthDecorator.py @@ -1,20 +1,21 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl HiggsFixedWidthDecorator +# @PowhegControl HiggsFixedWidthDecorator # Powheg runcard decorator for fixed/running Higgs width parameter # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class HiggsFixedWidthDecorator(object) : - ## Define decorator name string - name = 'Higgs fixed width' +class HiggsFixedWidthDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "Higgs fixed width" - self.decorated.add_parameter( 'higgsfixedwidth', 0, desc='(0:running width; 1:fixed width in Breit-Wigner)' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("higgsfixedwidth", 0, desc="(0:running width; 1:fixed width in Breit-Wigner)") diff --git a/Generators/PowhegControl/python/decorators/HiggsPropertiesDecorator.py b/Generators/PowhegControl/python/decorators/HiggsPropertiesDecorator.py index ce3399ce96758..47cff2cca58b0 100644 --- a/Generators/PowhegControl/python/decorators/HiggsPropertiesDecorator.py +++ b/Generators/PowhegControl/python/decorators/HiggsPropertiesDecorator.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl HiggsPropertiesDecorator +# @PowhegControl HiggsPropertiesDecorator # Powheg runcard decorator for Higgs mass/width # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,15 +8,16 @@ #! /usr/bin/env python from .. import ATLASCommonParameters -class HiggsPropertiesDecorator(object) : - ## Define decorator name string - name = 'Higgs properties' +class HiggsPropertiesDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "Higgs properties" - self.decorated.add_parameter( 'mass_H', ATLASCommonParameters.mass_H, desc='mass of Higgs boson in GeV', parameter='hmass' ) - self.decorated.add_parameter( 'width_H', ATLASCommonParameters.width_H, desc='width of Higgs boson in GeV', parameter='hwidth' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("mass_H", ATLASCommonParameters.mass_H, desc="mass of Higgs boson in GeV", parameter="hmass") + self.decorated.add_parameter("width_H", ATLASCommonParameters.width_H, desc="width of Higgs boson in GeV", parameter="hwidth") diff --git a/Generators/PowhegControl/python/decorators/HiggsVectorBosonDecorator.py b/Generators/PowhegControl/python/decorators/HiggsVectorBosonDecorator.py index c89727d67d29a..588261bc79781 100644 --- a/Generators/PowhegControl/python/decorators/HiggsVectorBosonDecorator.py +++ b/Generators/PowhegControl/python/decorators/HiggsVectorBosonDecorator.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl HiggsVectorBosonDecorator +# @PowhegControl HiggsVectorBosonDecorator # Powheg runcard decorator for Higgs+vector boson processes # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,22 +8,23 @@ #! /usr/bin/env python from .. import ATLASCommonParameters -class HiggsVectorBosonDecorator(object) : - ## Define decorator name string - name = 'Higgs + vector boson' +class HiggsVectorBosonDecorator(object): - def __init__( self, decorated, boson='' ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "Higgs + vector boson" - self.decorated.add_parameter( 'kappa_ghb', 1.0, desc='multiplicative kappa-factor of the Higgs-bottom coupling. ONLY USED FOR REWEIGHTING.' ) - self.decorated.add_parameter( 'kappa_ght', 1.0, desc='multiplicative kappa-factor of the Higgs-top coupling. ONLY USED FOR REWEIGHTING.' ) - if boson == 'W' : - self.decorated.add_parameter( 'kappa_ghw', 1.0, desc='multiplicative kappa-factor of the Higgs-W coupling. ONLY USED FOR REWEIGHTING.' ) - elif boson == 'Z' : - self.decorated.add_parameter( 'kappa_ghz', 1.0, desc='multiplicative kappa-factor of the Higgs-Z coupling. ONLY USED FOR REWEIGHTING.' ) - self.decorated.add_parameter( 'mass_b', ATLASCommonParameters.mass_b, desc='b-quark mass', parameter='bmass' ) - self.decorated.add_parameter( 'mass_H_low', 10., desc='M_H > mass low', parameter='min_h_mass' ) - self.decorated.add_parameter( 'mass_H_high', 1000., desc='M_H < mass high', parameter='max_h_mass' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated, boson=""): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("kappa_ghb", 1.0, desc="multiplicative kappa-factor of the Higgs-bottom coupling. ONLY USED FOR REWEIGHTING.") + self.decorated.add_parameter("kappa_ght", 1.0, desc="multiplicative kappa-factor of the Higgs-top coupling. ONLY USED FOR REWEIGHTING.") + if boson == "W": + self.decorated.add_parameter("kappa_ghw", 1.0, desc="multiplicative kappa-factor of the Higgs-W coupling. ONLY USED FOR REWEIGHTING.") + elif boson == "Z": + self.decorated.add_parameter("kappa_ghz", 1.0, desc="multiplicative kappa-factor of the Higgs-Z coupling. ONLY USED FOR REWEIGHTING.") + self.decorated.add_parameter("mass_b", ATLASCommonParameters.mass_b, desc="b-quark mass", parameter="bmass") + self.decorated.add_parameter("mass_H_low", 10., desc="M_H > mass low", parameter="min_h_mass") + self.decorated.add_parameter("mass_H_high", 1000., desc="M_H < mass high", parameter="max_h_mass") diff --git a/Generators/PowhegControl/python/decorators/HiggsVectorBosonJetDecorator.py b/Generators/PowhegControl/python/decorators/HiggsVectorBosonJetDecorator.py index 9ea55e8efe48e..a8ed8e6eccc67 100644 --- a/Generators/PowhegControl/python/decorators/HiggsVectorBosonJetDecorator.py +++ b/Generators/PowhegControl/python/decorators/HiggsVectorBosonJetDecorator.py @@ -1,26 +1,26 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl HiggsVectorBosonJetDecorator +# @PowhegControl HiggsVectorBosonJetDecorator # Powheg runcard decorator for H+V+jet # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -from .. import ATLASCommonParameters -class HiggsVectorBosonJetDecorator(object) : - ## Define decorator name string - name = 'Higgs + vector boson + jet' +class HiggsVectorBosonJetDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "Higgs + vector boson + jet" - self.decorated.add_parameter( 'bornsuppfactV', -1, desc='(-1:Powheg default)' ) - self.decorated.add_parameter( 'ptVhigh', -1, desc='(-1:Powheg default)' ) - self.decorated.add_parameter( 'ptVlow', -1, desc='(-1:Powheg default)' ) - self.decorated.add_parameter( 'use_massive_b', 1, desc='(0:disabled; 1:enabled) enable bottom quark loops', parameter='massivebottom' ) - self.decorated.add_parameter( 'use_massive_t', 1, desc='(0:disabled; 1:enabled) enable top quark loops', parameter='massivetop' ) - self.decorated.add_parameter( 'Vstep', -1, desc='(-1:Powheg default)' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("bornsuppfactV", -1, desc="(-1:Powheg default)") + self.decorated.add_parameter("ptVhigh", -1, desc="(-1:Powheg default)") + self.decorated.add_parameter("ptVlow", -1, desc="(-1:Powheg default)") + self.decorated.add_parameter("use_massive_b", 1, desc="(0:disabled; 1:enabled) enable bottom quark loops", parameter="massivebottom") + self.decorated.add_parameter("use_massive_t", 1, desc="(0:disabled; 1:enabled) enable top quark loops", parameter="massivetop") + self.decorated.add_parameter("Vstep", -1, desc="(-1:Powheg default)") diff --git a/Generators/PowhegControl/python/decorators/ISRFSRDecorator.py b/Generators/PowhegControl/python/decorators/ISRFSRDecorator.py index 589734fff64ac..b724044c5e4a2 100644 --- a/Generators/PowhegControl/python/decorators/ISRFSRDecorator.py +++ b/Generators/PowhegControl/python/decorators/ISRFSRDecorator.py @@ -1,23 +1,24 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl ISRFSRDecorator +# @PowhegControl ISRFSRDecorator # Powheg runcard decorator for ISR/FSR parameters # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class ISRFSRDecorator(object) : - ## Define decorator name string - name = 'ISR/FSR' +class ISRFSRDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "ISR/FSR" - self.decorated.add_parameter( 'par_fsrtinycsi', -1, desc='(-1:use Powheg default)' ) - self.decorated.add_parameter( 'par_fsrtinyy', -1, desc='(-1:use Powheg default)' ) - self.decorated.add_parameter( 'par_isrtinycsi', -1, desc='(-1:use Powheg default)' ) - self.decorated.add_parameter( 'par_isrtinyy', -1, desc='(-1:use Powheg default)' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("par_fsrtinycsi", -1, desc="(-1:use Powheg default)") + self.decorated.add_parameter("par_fsrtinyy", -1, desc="(-1:use Powheg default)") + self.decorated.add_parameter("par_isrtinycsi", -1, desc="(-1:use Powheg default)") + self.decorated.add_parameter("par_isrtinyy", -1, desc="(-1:use Powheg default)") diff --git a/Generators/PowhegControl/python/decorators/JacsingDecorator.py b/Generators/PowhegControl/python/decorators/JacsingDecorator.py index ef58a7c203ba3..de760ae1c529a 100644 --- a/Generators/PowhegControl/python/decorators/JacsingDecorator.py +++ b/Generators/PowhegControl/python/decorators/JacsingDecorator.py @@ -1,20 +1,21 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl JacsingDecorator +# @PowhegControl JacsingDecorator # Powheg runcard decorator for jacsing parameter # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class JacsingDecorator(object) : - ## Define decorator name string - name = 'jacsing' +class JacsingDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "jacsing" - self.decorated.add_parameter( 'jacsing', -1, desc='(-1:use Powheg default)' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("jacsing", -1, desc="(-1:use Powheg default)") diff --git a/Generators/PowhegControl/python/decorators/LeptonMassDecorator.py b/Generators/PowhegControl/python/decorators/LeptonMassDecorator.py index b5acaa882af81..fa8d32428155e 100644 --- a/Generators/PowhegControl/python/decorators/LeptonMassDecorator.py +++ b/Generators/PowhegControl/python/decorators/LeptonMassDecorator.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl LeptonMassDecorator +# @PowhegControl LeptonMassDecorator # Powheg runcard decorator for lepton masses # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,21 +8,22 @@ #! /usr/bin/env python from .. import ATLASCommonParameters -class LeptonMassDecorator(object) : - ## Define decorator name string - name = 'lepton mass' +class LeptonMassDecorator(object): - def __init__( self, decorated, prefix ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "lepton mass" - if prefix == 'lhfm' or 'lhfm' in prefix : - self.decorated.add_parameter( 'mass_e', ATLASCommonParameters.mass_e, desc='mass of electron in GeV', parameter='lhfm/emass' ) - self.decorated.add_parameter( 'mass_mu', ATLASCommonParameters.mass_mu, desc='mass of mu in GeV', parameter='lhfm/mumass' ) - self.decorated.add_parameter( 'mass_tau', ATLASCommonParameters.mass_tau, desc='mass of tau in GeV', parameter='lhfm/taumass' ) - if prefix == 'tdec' or 'tdec' in prefix : - self.decorated.add_parameter( 'mass_e', ATLASCommonParameters.mass_e, desc='mass of electron in GeV', parameter='tdec/emass' ) - self.decorated.add_parameter( 'mass_mu', ATLASCommonParameters.mass_mu, desc='mass of mu in GeV', parameter='tdec/mumass' ) - self.decorated.add_parameter( 'mass_tau', ATLASCommonParameters.mass_tau, desc='mass of tau in GeV', parameter='tdec/taumass' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated, prefix): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + if "lhfm" in prefix: + self.decorated.add_parameter("mass_e", ATLASCommonParameters.mass_e, desc="mass of electron in GeV", parameter="lhfm/emass") + self.decorated.add_parameter("mass_mu", ATLASCommonParameters.mass_mu, desc="mass of mu in GeV", parameter="lhfm/mumass") + self.decorated.add_parameter("mass_tau", ATLASCommonParameters.mass_tau, desc="mass of tau in GeV", parameter="lhfm/taumass") + if "tdec" in prefix: + self.decorated.add_parameter("mass_e", ATLASCommonParameters.mass_e, desc="mass of electron in GeV", parameter="tdec/emass") + self.decorated.add_parameter("mass_mu", ATLASCommonParameters.mass_mu, desc="mass of mu in GeV", parameter="tdec/mumass") + self.decorated.add_parameter("mass_tau", ATLASCommonParameters.mass_tau, desc="mass of tau in GeV", parameter="tdec/taumass") diff --git a/Generators/PowhegControl/python/decorators/MassWindowDecorator.py b/Generators/PowhegControl/python/decorators/MassWindowDecorator.py index 7703f94bab630..5d3cf3d508617 100644 --- a/Generators/PowhegControl/python/decorators/MassWindowDecorator.py +++ b/Generators/PowhegControl/python/decorators/MassWindowDecorator.py @@ -1,23 +1,24 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl MassWindowDecorator +# @PowhegControl MassWindowDecorator # Powheg runcard decorator for mass window restriction # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class MassWindowDecorator(object) : - ## Define decorator name string - name = 'mass window' +class MassWindowDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "mass window" - self.decorated.add_parameter( 'mass_low', -1, desc='(-1:use Powheg default) If set then require M_object > mass_low; otherwise allow internal Powheg computation.' ) - self.decorated.add_parameter( 'mass_high', -1, desc='(-1:use Powheg default) If set then require M_object < mass_high; otherwise allow internal Powheg computation.' ) - self.decorated.add_parameter( 'masswindow_low', -1, desc='DEPRECATED use mass_low instead' ) - self.decorated.add_parameter( 'masswindow_high', -1, desc='DEPRECATED use mass_high instead' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("mass_low", -1, desc="(-1:use Powheg default) If set then require M_object > mass_low; otherwise allow internal Powheg computation.") + self.decorated.add_parameter("mass_high", -1, desc="(-1:use Powheg default) If set then require M_object < mass_high; otherwise allow internal Powheg computation.") + self.decorated.add_parameter("masswindow_low", -1, desc="DEPRECATED use mass_low instead") + self.decorated.add_parameter("masswindow_high", -1, desc="DEPRECATED use mass_high instead") diff --git a/Generators/PowhegControl/python/decorators/MiNLONLLDecorator.py b/Generators/PowhegControl/python/decorators/MiNLONLLDecorator.py index 1177fd1fec3bf..4a9ae7195f3a9 100644 --- a/Generators/PowhegControl/python/decorators/MiNLONLLDecorator.py +++ b/Generators/PowhegControl/python/decorators/MiNLONLLDecorator.py @@ -1,23 +1,24 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl MiNLONLLDecorator +# @PowhegControl MiNLONLLDecorator # Powheg runcard decorator for MiNLO NNLL settings # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class MiNLONLLDecorator(object) : - ## Define decorator name string - name = 'MiNLO NNLL' +class MiNLONLLDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "MiNLO NNLL" - self.decorated.add_parameter( 'factsc2min', 2.0, desc='value at which the factorization scale is frozen (needed with MiNLO)' ) - self.decorated.add_parameter( 'frensc2min', 2.0, desc='value at which the renormalisation scale is frozen (needed with MiNLO)' ) - self.decorated.add_parameter( 'minlo_nnll', 1, desc='(0:disabled; 1:enabled) enable MiNLO NNLL' ) - self.decorated.add_parameter( 'sudscalevar', 1, desc='(0:disabled; 1:enabled) scale variation also in Sudakov form factors in MiNLO' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("factsc2min", 2.0, desc="value at which the factorization scale is frozen (needed with MiNLO)") + self.decorated.add_parameter("frensc2min", 2.0, desc="value at which the renormalisation scale is frozen (needed with MiNLO)") + self.decorated.add_parameter("minlo_nnll", 1, desc="(0:disabled; 1:enabled) enable MiNLO NNLL") + self.decorated.add_parameter("sudscalevar", 1, desc="(0:disabled; 1:enabled) scale variation also in Sudakov form factors in MiNLO") diff --git a/Generators/PowhegControl/python/decorators/NLOEWDecorator.py b/Generators/PowhegControl/python/decorators/NLOEWDecorator.py index 0f8299c5d5c37..72be2ca3a9ea1 100644 --- a/Generators/PowhegControl/python/decorators/NLOEWDecorator.py +++ b/Generators/PowhegControl/python/decorators/NLOEWDecorator.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl NLOEWDecorator +# @PowhegControl NLOEWDecorator # Powheg runcard decorator for NLO EW processes # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,22 +8,23 @@ #! /usr/bin/env python from .. import ATLASCommonParameters -class NLOEWDecorator(object) : - ## Define decorator name string - name = 'NLO EW' +class NLOEWDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "NLO EW" - self.decorated.add_parameter( 'G_F', ATLASCommonParameters.G_F, desc='Fermi constant', parameter='gmu' ) - self.decorated.add_parameter( 'lepaslight', -1, desc='(-1:Powheg default)' ) - self.decorated.add_parameter( 'mass_H', ATLASCommonParameters.mass_H, desc='mass of Higgs in GeV', parameter='Hmass' ) - self.decorated.add_parameter( 'mass_t', ATLASCommonParameters.mass_t, desc='t mass', parameter='Tmass' ) - self.decorated.add_parameter( 'new_damp', -1, desc='(-1:Powheg default)' ) - self.decorated.add_parameter( 'no_ew', 0, desc='(0:with; 1:without) NLO EW corrections' ) - self.decorated.add_parameter( 'no_strong', 0, desc='(0:with; 1:without) NLO QCD corrections' ) - self.decorated.add_parameter( 'scheme', 1, desc='(0:Alpha(0); 1:G_mu) choice for EW NLO scheme' ) - self.decorated.add_parameter( 'use_photos', 1, desc='(0:disabled; 1:enabled) use PHOTOS for photon radiation' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("G_F", ATLASCommonParameters.G_F, desc="Fermi constant", parameter="gmu") + self.decorated.add_parameter("lepaslight", -1, desc="(-1:Powheg default)") + self.decorated.add_parameter("mass_H", ATLASCommonParameters.mass_H, desc="mass of Higgs in GeV", parameter="Hmass") + self.decorated.add_parameter("mass_t", ATLASCommonParameters.mass_t, desc="t mass", parameter="Tmass") + self.decorated.add_parameter("new_damp", -1, desc="(-1:Powheg default)") + self.decorated.add_parameter("no_ew", 0, desc="(0:with; 1:without) NLO EW corrections") + self.decorated.add_parameter("no_strong", 0, desc="(0:with; 1:without) NLO QCD corrections") + self.decorated.add_parameter("scheme", 1, desc="(0:Alpha(0); 1:G_mu) choice for EW NLO scheme") + self.decorated.add_parameter("use_photos", 1, desc="(0:disabled; 1:enabled) use PHOTOS for photon radiation") diff --git a/Generators/PowhegControl/python/decorators/NNLOReweightingDecorator.py b/Generators/PowhegControl/python/decorators/NNLOReweightingDecorator.py index a161f8ae7f39b..6e131c81b3e47 100644 --- a/Generators/PowhegControl/python/decorators/NNLOReweightingDecorator.py +++ b/Generators/PowhegControl/python/decorators/NNLOReweightingDecorator.py @@ -1,30 +1,32 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl NNLOReweightingDecorator +# @PowhegControl NNLOReweightingDecorator # Powheg runcard decorator for NNLO reweighting # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class NNLOReweightingDecorator(object) : - ## Define decorator name string - name = 'NNLO reweighting' - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated +class NNLOReweightingDecorator(object): - self.decorated.add_phantom( 'NNLO_reweighting_inputs', {}, desc='dictionary of labels => (pre-existing) HNNLO output' ) - self.decorated.add_phantom( 'NNLO_output_weights', {}, desc='dictionary of weight ID string => weight calculation in NNLOPS format' ) + # Define decorator name string + name = "NNLO reweighting" + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated - def finalise( self ) : - # Check NNLO reweighting inputs - if not isinstance( self.decorated.NNLO_reweighting_inputs, dict ) : - self.decorated.logger.fatal( 'NNLO_reweighting_inputs does not appear to be a valid label => file dictionary!' ) + self.decorated.add_phantom("NNLO_reweighting_inputs", {}, desc="dictionary of labels => (pre-existing) HNNLO output") + self.decorated.add_phantom("NNLO_output_weights", {}, desc="dictionary of weight ID string => weight calculation in NNLOPS format") - # Check NNLO weight outputs - if not isinstance( self.decorated.NNLO_output_weights, dict ) : - self.decorated.logger.fatal( 'NNLO_output_weights does not appear to be a valid ID string => calculation string!' ) + # Check that NNLO reweighting arguments are dictionaries + def finalise(self): + # Check NNLO reweighting inputs + if not isinstance(self.decorated.NNLO_reweighting_inputs, dict): + self.decorated.logger.fatal("NNLO_reweighting_inputs does not appear to be a valid label => file dictionary!") + + # Check NNLO weight outputs + if not isinstance(self.decorated.NNLO_output_weights, dict): + self.decorated.logger.fatal("NNLO_output_weights does not appear to be a valid ID string => calculation string!") diff --git a/Generators/PowhegControl/python/decorators/OldDijDecorator.py b/Generators/PowhegControl/python/decorators/OldDijDecorator.py index 75c0ad7c0a732..b6654c9f647ca 100644 --- a/Generators/PowhegControl/python/decorators/OldDijDecorator.py +++ b/Generators/PowhegControl/python/decorators/OldDijDecorator.py @@ -1,20 +1,21 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl ExtraTestsDecorator +# @PowhegControl ExtraTestsDecorator # Powheg runcard decorator for olddij parameter # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class OldDijDecorator(object) : - ## Define decorator name string - name = 'old Dij' +class OldDijDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "old Dij" - self.decorated.add_parameter( 'olddij', -1, desc='(-1:use Powheg default)' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("olddij", -1, desc="(-1:use Powheg default)") diff --git a/Generators/PowhegControl/python/decorators/PDFReweightingDecorator.py b/Generators/PowhegControl/python/decorators/PDFReweightingDecorator.py index c25e61469bb91..3b8d0753762e0 100644 --- a/Generators/PowhegControl/python/decorators/PDFReweightingDecorator.py +++ b/Generators/PowhegControl/python/decorators/PDFReweightingDecorator.py @@ -1,21 +1,22 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PDFReweightingDecorator +# @PowhegControl PDFReweightingDecorator # Powheg runcard decorator for PDF reweighting # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class PDFReweightingDecorator(object) : - ## Define decorator name string - name = 'PDF reweighting' +class PDFReweightingDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "PDF reweighting" - self.decorated.fix_parameter( 'compute_rwgt', 0, desc='(0:nominal; 1:compute reweighting factor)' ) - self.decorated.fix_parameter( 'storeinfo_rwgt', 0, desc='(0:disabled; 1:enabled) enable new-style PDF information' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.fix_parameter("compute_rwgt", 0, desc="(0:nominal; 1:compute reweighting factor)") + self.decorated.fix_parameter("storeinfo_rwgt", 0, desc="(0:disabled; 1:enabled) enable new-style PDF information") diff --git a/Generators/PowhegControl/python/decorators/RadiationParametrisationDecorator.py b/Generators/PowhegControl/python/decorators/RadiationParametrisationDecorator.py index 23dc45a0fe03c..c76e10f11b688 100644 --- a/Generators/PowhegControl/python/decorators/RadiationParametrisationDecorator.py +++ b/Generators/PowhegControl/python/decorators/RadiationParametrisationDecorator.py @@ -1,21 +1,22 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl RadiationParametrisationDecorator +# @PowhegControl RadiationParametrisationDecorator # Powheg runcard decorator for ISR/FSR phase space parameters # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class RadiationParametrisationDecorator(object) : - ## Define decorator name string - name = 'radiation parametrisation' +class RadiationParametrisationDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "radiation parametrisation" - self.decorated.add_parameter( 'fullphsp', -1, desc='(-1:use Powheg default) enable ISR/FSR phase space parametrization' ) - self.decorated.add_parameter( 'raisingscales', -1, desc='(-1:use Powheg default)' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("fullphsp", -1, desc="(-1:use Powheg default) enable ISR/FSR phase space parametrization") + self.decorated.add_parameter("raisingscales", -1, desc="(-1:use Powheg default)") diff --git a/Generators/PowhegControl/python/decorators/RunningScaleDecorator.py b/Generators/PowhegControl/python/decorators/RunningScaleDecorator.py index 81884091c2ba3..44d2e9678a94c 100644 --- a/Generators/PowhegControl/python/decorators/RunningScaleDecorator.py +++ b/Generators/PowhegControl/python/decorators/RunningScaleDecorator.py @@ -1,21 +1,23 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl RunningScaleDecorator +# @PowhegControl RunningScaleDecorator # Powheg runcard decorator for running scale # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class RunningScaleDecorator(object) : - ## Define decorator name string - name = 'running scale' +class RunningScaleDecorator(object): - def __init__( self, decorated, description=None ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated - if description is None : description = 'Choice for mu_R and mu_F in Bbar integration.' + # Define decorator name string + name = "running scale" - self.decorated.add_parameter( 'runningscale', 1, desc=description ) + # Attach decorations to Powheg configurable + def __init__(self, decorated, description=None): + decorated.run_card_decorators.append(self) + self.decorated = decorated + if description is None: + description = "Choice for mu_R and mu_F in Bbar integration." + + self.decorated.add_parameter("runningscale", 1, desc=description) diff --git a/Generators/PowhegControl/python/decorators/RunningScalesDecorator.py b/Generators/PowhegControl/python/decorators/RunningScalesDecorator.py index 6d2ed2ef66263..433a368cdc27d 100644 --- a/Generators/PowhegControl/python/decorators/RunningScalesDecorator.py +++ b/Generators/PowhegControl/python/decorators/RunningScalesDecorator.py @@ -1,20 +1,21 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl RunningScalesDecorator +# @PowhegControl RunningScalesDecorator # Powheg runcard decorator for running scales # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class RunningScalesDecorator(object) : - ## Define decorator name string - name = 'running scales' +class RunningScalesDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "running scales" - self.decorated.add_parameter( 'runningscales', 0, desc='(0:use fixed factorisation/renormalisation scale; 1:use running scale)' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("runningscales", 0, desc="(0:use fixed factorisation/renormalisation scale; 1:use running scale)") diff --git a/Generators/PowhegControl/python/decorators/RunningWidthDecorator.py b/Generators/PowhegControl/python/decorators/RunningWidthDecorator.py index 2c4d572be03a5..9fe2bb5afc478 100644 --- a/Generators/PowhegControl/python/decorators/RunningWidthDecorator.py +++ b/Generators/PowhegControl/python/decorators/RunningWidthDecorator.py @@ -1,20 +1,22 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl RunningWidthDecorator +# @PowhegControl RunningWidthDecorator # Powheg runcard decorator for running width # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class RunningWidthDecorator(object) : - ## Define decorator name string - name = 'running width' - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated +class RunningWidthDecorator(object): - self.decorated.add_parameter( 'runningwidth', 0, desc='(0:disabled; 1:enabled) use running width' ) - self.decorated.add_parameter( 'running_width', 0, desc='(0:disabled; 1:enabled) use running width' ) + # Define decorator name string + name = "running width" + + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("runningwidth", 0, desc="(0:disabled; 1:enabled) use running width") + self.decorated.add_parameter("running_width", 0, desc="(0:disabled; 1:enabled) use running width") diff --git a/Generators/PowhegControl/python/decorators/SecondGenerationQuarkMassDecorator.py b/Generators/PowhegControl/python/decorators/SecondGenerationQuarkMassDecorator.py index 8ab9f3c5f7b75..88961eadf4449 100644 --- a/Generators/PowhegControl/python/decorators/SecondGenerationQuarkMassDecorator.py +++ b/Generators/PowhegControl/python/decorators/SecondGenerationQuarkMassDecorator.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl SecondGenerationQuarkMassDecorator +# @PowhegControl SecondGenerationQuarkMassDecorator # Powheg runcard decorator for second generation quark masses # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,19 +8,20 @@ #! /usr/bin/env python from .. import ATLASCommonParameters -class SecondGenerationQuarkMassDecorator(object) : - ## Define decorator name string - name = 'second generation quark mass' +class SecondGenerationQuarkMassDecorator(object): - def __init__( self, decorated, prefix ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "second generation quark mass" - if prefix == 'lhfm' : - self.decorated.add_parameter( 'mass_b', ATLASCommonParameters.mass_b, desc='b-quark mass in GeV', parameter='lhfm/bmass' ) - self.decorated.add_parameter( 'mass_c', ATLASCommonParameters.mass_c, desc='c-quark mass in GeV', parameter='lhfm/cmass' ) - elif prefix == 'lhe' : - self.decorated.add_parameter( 'mass_b', ATLASCommonParameters.mass_b, desc='set b-quark mass in GeV for momentum reshuffling', parameter='bmass_lhe' ) - self.decorated.add_parameter( 'mass_c', ATLASCommonParameters.mass_c, desc='set c-quark mass in GeV for momentum reshuffling', parameter='cmass_lhe' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated, prefix): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + if "lhfm" in prefix: + self.decorated.add_parameter("mass_b", ATLASCommonParameters.mass_b, desc="b-quark mass in GeV", parameter="lhfm/bmass") + self.decorated.add_parameter("mass_c", ATLASCommonParameters.mass_c, desc="c-quark mass in GeV", parameter="lhfm/cmass") + if "lhe" in prefix: + self.decorated.add_parameter("mass_b", ATLASCommonParameters.mass_b, desc="set b-quark mass in GeV for momentum reshuffling", parameter="bmass_lhe") + self.decorated.add_parameter("mass_c", ATLASCommonParameters.mass_c, desc="set c-quark mass in GeV for momentum reshuffling", parameter="cmass_lhe") diff --git a/Generators/PowhegControl/python/decorators/SemileptonicDecorator.py b/Generators/PowhegControl/python/decorators/SemileptonicDecorator.py index 8363b801469e9..521c842e00536 100644 --- a/Generators/PowhegControl/python/decorators/SemileptonicDecorator.py +++ b/Generators/PowhegControl/python/decorators/SemileptonicDecorator.py @@ -1,20 +1,21 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl SemileptonicDecorator +# @PowhegControl SemileptonicDecorator # Powheg runcard decorator for semileptonic decays # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class SemileptonicDecorator(object) : - ## Define decorator name string - name = 'semileptonic' +class SemileptonicDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "semileptonic" - self.decorated.add_parameter( 'semileptonic', -1, desc='(-1:use Powheg default) only accept semileptonic decays' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("semileptonic", -1, desc="(-1:use Powheg default) only accept semileptonic decays") diff --git a/Generators/PowhegControl/python/decorators/Sin2ThetaWDecorator.py b/Generators/PowhegControl/python/decorators/Sin2ThetaWDecorator.py index b5816999ea2de..03a27aeb87878 100644 --- a/Generators/PowhegControl/python/decorators/Sin2ThetaWDecorator.py +++ b/Generators/PowhegControl/python/decorators/Sin2ThetaWDecorator.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl Sin2ThetaWDecorator +# @PowhegControl Sin2ThetaWDecorator # Powheg runcard decorator for sin(theta_W)**2 parameter # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,14 +8,15 @@ #! /usr/bin/env python from .. import ATLASCommonParameters -class Sin2ThetaWDecorator(object) : - ## Define decorator name string - name = 'sin**2 theta W' +class Sin2ThetaWDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "sin**2 theta W" - self.decorated.add_parameter( 'sthw2', ATLASCommonParameters.sin2thW_eff, desc='sin**2 theta w' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("sthw2", ATLASCommonParameters.sin2thW_eff, desc="sin**2 theta w") diff --git a/Generators/PowhegControl/python/decorators/TopDecayBranchingDecorator.py b/Generators/PowhegControl/python/decorators/TopDecayBranchingDecorator.py index 911807a2fc1e9..f344362505cd1 100644 --- a/Generators/PowhegControl/python/decorators/TopDecayBranchingDecorator.py +++ b/Generators/PowhegControl/python/decorators/TopDecayBranchingDecorator.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl TopDecayLeptonDecorator +# @PowhegControl TopDecayLeptonDecorator # Powheg runcard decorator for top decay parameters # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,17 +8,18 @@ #! /usr/bin/env python from .. import ATLASCommonParameters -class TopDecayBranchingDecorator(object) : - ## Define decorator name string - name = 'top decay branching' +class TopDecayBranchingDecorator(object): - def __init__( self, decorated, prefix='' ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "top decay branching" - if prefix == 'tdec' : - self.decorated.add_parameter( 'elbranching', ATLASCommonParameters.W_lepton_BR, desc='W electronic branching fraction', parameter='tdec/elbranching' ) - else : - self.decorated.add_parameter( 'elbranching', ATLASCommonParameters.W_lepton_BR, desc='W electronic branching fraction' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated, prefix=""): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + if prefix == "tdec": + self.decorated.add_parameter("elbranching", ATLASCommonParameters.W_lepton_BR, desc="W electronic branching fraction", parameter="tdec/elbranching") + else: + self.decorated.add_parameter("elbranching", ATLASCommonParameters.W_lepton_BR, desc="W electronic branching fraction") diff --git a/Generators/PowhegControl/python/decorators/TopDecayModeDecorator.py b/Generators/PowhegControl/python/decorators/TopDecayModeDecorator.py index a17c625b05d59..0d3a846d0c4d7 100644 --- a/Generators/PowhegControl/python/decorators/TopDecayModeDecorator.py +++ b/Generators/PowhegControl/python/decorators/TopDecayModeDecorator.py @@ -1,20 +1,21 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl TopDecayModeDecorator +# @PowhegControl TopDecayModeDecorator # Powheg runcard decorator for top decay parameter # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class TopDecayModeDecorator(object) : - ## Define decorator name string - name = 'top decay mode' +class TopDecayModeDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "top decay mode" - self.decorated.add_parameter( 'topdecaymode', 0, desc='5 digits indicating the maximum number of (e,mu,tau,u,c) allowed in decays' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("topdecaymode", 0, desc="5 digits indicating the maximum number of (e,mu,tau,u,c) allowed in decays") diff --git a/Generators/PowhegControl/python/decorators/TopPropertiesDecorator.py b/Generators/PowhegControl/python/decorators/TopPropertiesDecorator.py index 774a9df67bd71..896faad0ec522 100644 --- a/Generators/PowhegControl/python/decorators/TopPropertiesDecorator.py +++ b/Generators/PowhegControl/python/decorators/TopPropertiesDecorator.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl TopPropertiesDecorator +# @PowhegControl TopPropertiesDecorator # Powheg runcard decorator for top properties # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,17 +8,18 @@ #! /usr/bin/env python from .. import ATLASCommonParameters -class TopPropertiesDecorator(object) : - ## Define decorator name string - name = 'top properties' +class TopPropertiesDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "top properties" - self.decorated.add_parameter( 'tmass', ATLASCommonParameters.mass_t, desc='mass of top quark in GeV' ) - self.decorated.add_parameter( 'topmass', ATLASCommonParameters.mass_t, desc='mass of top quark in GeV' ) - self.decorated.add_parameter( 'topwidth', ATLASCommonParameters.width_t, desc='top width' ) - self.decorated.add_parameter( 'ttype', 1, desc='(1:t; -1:tbar)' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("mass_t", ATLASCommonParameters.mass_t, desc="mass of top quark in GeV", parameter="tmass") + self.decorated.add_parameter("mass_t", ATLASCommonParameters.mass_t, desc="mass of top quark in GeV", parameter="topmass") + self.decorated.add_parameter("width_t", ATLASCommonParameters.width_t, desc="top width", parameter="topwidth") + self.decorated.add_parameter("ttype", 1, desc="(1:t; -1:tbar)") diff --git a/Generators/PowhegControl/python/decorators/UpperBoundDecorator.py b/Generators/PowhegControl/python/decorators/UpperBoundDecorator.py index a3de61ca2e887..19423842844fe 100644 --- a/Generators/PowhegControl/python/decorators/UpperBoundDecorator.py +++ b/Generators/PowhegControl/python/decorators/UpperBoundDecorator.py @@ -1,29 +1,31 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl UpperBoundDecorator +# @PowhegControl UpperBoundDecorator # Powheg runcard decorator for upper bound parameters # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class UpperBoundDecorator(object) : - ## Define decorator name string - name = 'upper bound' +class UpperBoundDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "upper bound" - self.decorated.add_parameter( 'ixmax', 1, desc='number of intervals (<= 10) in x (csi) grid to compute upper bounds', parameter='icsimax' ) - self.decorated.add_parameter( 'iymax', 1, desc='number of intervals (<= 10) in y grid to compute upper bounds' ) - self.decorated.add_parameter( 'nubound', 10000, desc='number of calls to setup upper bounds for radiation' ) - self.decorated.add_parameter( 'radregion', -1, desc='(-1:all regions) only generate radiation in the selected singular region' ) - self.decorated.fix_parameter( 'use-old-ubound', 1, desc='(0:disabled; 1:enabled) read norm of upper bounding function from pwgubound.dat, if present' ) - self.decorated.add_parameter( 'xupbound', 2, desc='increase upper bound for radiation generation by this factor' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("ixmax", 1, desc="number of intervals (<= 10) in x (csi) grid to compute upper bounds", parameter="icsimax") + self.decorated.add_parameter("iymax", 1, desc="number of intervals (<= 10) in y grid to compute upper bounds") + self.decorated.add_parameter("nubound", 10000, desc="number of calls to setup upper bounds for radiation") + self.decorated.add_parameter("radregion", -1, desc="(-1:all regions) only generate radiation in the selected singular region") + self.decorated.fix_parameter("use-old-ubound", 1, desc="(0:disabled; 1:enabled) read norm of upper bounding function from pwgubound.dat, if present") + self.decorated.add_parameter("xupbound", 2, desc="increase upper bound for radiation generation by this factor") - def finalise(self) : # Force parameters to integer values - [ setattr( self.decorated, parameter, int( getattr(self.decorated, parameter) ) ) for parameter in ('ixmax','iymax','nubound','xupbound') ] + def finalise(self): + for parameter in ("ixmax", "iymax", "nubound", "xupbound"): + setattr(self.decorated, parameter, int(getattr(self.decorated, parameter))) diff --git a/Generators/PowhegControl/python/decorators/V2Decorator.py b/Generators/PowhegControl/python/decorators/V2Decorator.py index a50dd62101651..4f527e448d98b 100644 --- a/Generators/PowhegControl/python/decorators/V2Decorator.py +++ b/Generators/PowhegControl/python/decorators/V2Decorator.py @@ -1,58 +1,62 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl V2Decorator +# @PowhegControl V2Decorator # Powheg runcard decorator for version 2.0 # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python - -class V2Decorator(object) : - - ## Define decorator name string - name = 'v2' - - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated - self.decorated._powheg_version_type = 2 - - self.decorated.add_parameter( 'btildeborn', -1, desc='(-1:use Powheg default)' ) - self.decorated.add_parameter( 'btildecoll', -1, desc='(-1:use Powheg default)' ) - self.decorated.add_parameter( 'btildereal', -1, desc='(-1:use Powheg default) for fixed order: distinguish real terms from Born/virtual/subtraction' ) - self.decorated.add_parameter( 'btildevirt', -1, desc='(-1:use Powheg default)' ) - self.decorated.add_parameter( 'check_bad_st2', -1, desc='(-1:Powheg default)' ) - self.decorated.add_parameter( 'doublefsr', 0, desc='(0:disabled; 1:enabled) reduce observable spikes by suppressing FSR emissions harder than the emitter.' ) - self.decorated.add_parameter( 'evenmaxrat', 1, desc='(0:disabled; 1:enabled) speed up upper-bound calculation by taking maximum of identical processes.' ) - self.decorated.add_parameter( 'fastbtlbound', 1, desc='(0:disabled; 1:enabled) use fast btilde bound.' ) - self.decorated.add_parameter( 'fixedgrid', -1, desc='(-1:use Powheg default)' ) - self.decorated.add_parameter( 'fullrwgt', -1, desc='(-1:use Powheg default) experimental! Must ONLY be used for processes with no Born-level parton radiation.' ) - self.decorated.add_parameter( 'fullrwgtmode', -1, desc='(-1:use Powheg default)' ) - self.decorated.add_parameter( 'itmx1rm', -1, desc='(-1:use Powheg default) number of iterations for initializing the integration grid for the remnant.' ) - self.decorated.add_parameter( 'itmx2rm', -1, desc='(-1:use Powheg default) number of iterations for computing the integral and finding upper bound for the remnant.' ) - self.decorated.fix_parameter( 'lhrwgt_descr', 'nominal', desc='weight description.' ) - self.decorated.fix_parameter( 'lhrwgt_group_combine', 'none', desc='reweighting combination method.' ) - self.decorated.fix_parameter( 'lhrwgt_group_name', 'nominal', desc='group description.' ) - self.decorated.fix_parameter( 'lhrwgt_id', 0, desc='weight ID.' ) - self.decorated.fix_parameter( 'LOevents', [0,1][self.decorated.is_LO], desc='(0:disabled; 1:enabled) produce LOPS events (scalup=ptj); in this case bornonly should also be enabled.' ) - self.decorated.add_parameter( 'minlo', 1, desc='(0:disabled; 1:enabled) use MiNLO.' ) # if minlo is set for unsupported processes, Powheg will crash with an 'st_bornorder' error - self.decorated.add_parameter( 'ncall1rm', -1, desc='(-1:use Powheg default) number of calls for initializing the integration grid for the remant.' ) - self.decorated.add_parameter( 'ncall2rm', -1, desc='(-1:use Powheg default) number of calls for computing the integral and finding upper bound for the remnant.' ) - self.decorated.fix_parameter( 'ncallfrominput', -1, desc='(-1:disabled) read ncall parameters from input.' ) - self.decorated.add_parameter( 'noevents', -1, desc='(-1:use Powheg default)' ) - self.decorated.add_parameter( 'novirtual', -1, desc='(-1:use Powheg default)' ) - self.decorated.add_parameter( 'parallelstage', -1, desc='(-1:disabled) 1...4, which stage to perform in parallel.' ) - self.decorated.add_parameter( 'stage2init', -1, desc='(-1:use Powheg default)' ) - self.decorated.add_parameter( 'storemintupb', 1, desc='(0:disabled; 1:enabled) cache cross sections to speed up construction of upper bounding envelope.' ) - self.decorated.fix_parameter( 'xgriditeration', 1, desc='iteration level for the calculation of the importance sampling grid (only relevant wehn parallelstage=1).' ) - - - def finalise( self ) : - ## Set up parallelisation parameters if in multicore mode - if self.decorated.cores > 1 : - if self.decorated.ncall1rm != -1 : self.decorated.ncall1rm = int( math.ceil( float(self.decorated.ncall1rm) / self.decorated.cores ) ) - self.decorated.parallelstage = 1 - - ## Fix integration parameters before printing list for user - [ self.decorated.fix_parameter( parameter ) for parameter in ['parallelstage'] ] +import math + + +class V2Decorator(object): + + # Define decorator name string + name = "v2" + + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + self.decorated._powheg_version_type = 2 + + self.decorated.add_parameter("btildeborn", -1, desc="(-1:use Powheg default)") + self.decorated.add_parameter("btildecoll", -1, desc="(-1:use Powheg default)") + self.decorated.add_parameter("btildereal", -1, desc="(-1:use Powheg default) for fixed order: distinguish real terms from Born/virtual/subtraction") + self.decorated.add_parameter("btildevirt", -1, desc="(-1:use Powheg default)") + self.decorated.add_parameter("check_bad_st2", -1, desc="(-1:Powheg default)") + self.decorated.add_parameter("doublefsr", 0, desc="(0:disabled; 1:enabled) reduce observable spikes by suppressing FSR emissions harder than the emitter.") + self.decorated.add_parameter("evenmaxrat", 1, desc="(0:disabled; 1:enabled) speed up upper-bound calculation by taking maximum of identical processes.") + self.decorated.add_parameter("fastbtlbound", 1, desc="(0:disabled; 1:enabled) use fast btilde bound.") + self.decorated.add_parameter("fixedgrid", -1, desc="(-1:use Powheg default)") + self.decorated.add_parameter("fullrwgt", -1, desc="(-1:use Powheg default) experimental! Must ONLY be used for processes with no Born-level parton radiation.") + self.decorated.add_parameter("fullrwgtmode", -1, desc="(-1:use Powheg default)") + self.decorated.add_parameter("itmx1rm", -1, desc="(-1:use Powheg default) number of iterations for initializing the integration grid for the remnant.") + self.decorated.add_parameter("itmx2rm", -1, desc="(-1:use Powheg default) number of iterations for computing the integral and finding upper bound for the remnant.") + self.decorated.fix_parameter("lhrwgt_descr", "nominal", desc="weight description.") + self.decorated.fix_parameter("lhrwgt_group_combine", "none", desc="reweighting combination method.") + self.decorated.fix_parameter("lhrwgt_group_name", "nominal", desc="group description.") + self.decorated.fix_parameter("lhrwgt_id", 0, desc="weight ID.") + self.decorated.fix_parameter("LOevents", [0, 1][self.decorated.is_LO], desc="(0:disabled; 1:enabled) produce LOPS events (scalup=ptj); in this case bornonly should also be enabled.") + self.decorated.add_parameter("minlo", -1, desc="(0:disabled; 1:enabled) use MiNLO.") # if minlo is set for unsupported processes, Powheg will crash with an "st_bornorder" error + self.decorated.add_parameter("ncall1rm", -1, desc="(-1:use Powheg default) number of calls for initializing the integration grid for the remant.") + self.decorated.add_parameter("ncall2rm", -1, desc="(-1:use Powheg default) number of calls for computing the integral and finding upper bound for the remnant.") + self.decorated.fix_parameter("ncallfrominput", -1, desc="(-1:disabled) read ncall parameters from input.") + self.decorated.add_parameter("noevents", -1, desc="(-1:use Powheg default)") + self.decorated.add_parameter("novirtual", -1, desc="(-1:use Powheg default)") + self.decorated.add_parameter("parallelstage", -1, desc="(-1:disabled) 1...4, which stage to perform in parallel.") + self.decorated.add_parameter("stage2init", -1, desc="(-1:use Powheg default)") + self.decorated.add_parameter("storemintupb", 1, desc="(0:disabled; 1:enabled) cache cross sections to speed up construction of upper bounding envelope.") + self.decorated.fix_parameter("xgriditeration", 1, desc="iteration level for the calculation of the importance sampling grid (only relevant wehn parallelstage=1).") + + # Prepare for multicore parallelisation and fix parallelstage parameter + def finalise(self): + # Set up parallelisation parameters if in multicore mode + if self.decorated.cores > 1: + if self.decorated.ncall1rm != -1: + self.decorated.ncall1rm = int(math.ceil(float(self.decorated.ncall1rm) / self.decorated.cores)) + self.decorated.parallelstage = 1 + + # Fix parallelstage parameters before printing list for user + for parameter in ["parallelstage"]: + self.decorated.fix_parameter(parameter) diff --git a/Generators/PowhegControl/python/decorators/VBFVectorBosonDecorator.py b/Generators/PowhegControl/python/decorators/VBFVectorBosonDecorator.py index 04d15bc1789cb..60daba54d6f3f 100644 --- a/Generators/PowhegControl/python/decorators/VBFVectorBosonDecorator.py +++ b/Generators/PowhegControl/python/decorators/VBFVectorBosonDecorator.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl VBFVectorBosonDecorator +# @PowhegControl VBFVectorBosonDecorator # Powheg runcard decorator for VBF vector boson processes # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,60 +8,62 @@ #! /usr/bin/env python from .. import ATLASCommonParameters -class VBFVectorBosonDecorator(object) : - ## Define decorator name string - name = 'VBF vector boson decay' +class VBFVectorBosonDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "VBF vector boson decay" - # For additional run card - self.decorated.allowed_decay_modes = [] - self.decorated.add_phantom( 'decay_mode', None, desc='Vector boson decay mode' ) - self.decorated.add_phantom( 'mass_H', ATLASCommonParameters.mass_H, desc='mass of Higgs boson in GeV' ) - self.decorated.add_phantom( 'width_H', ATLASCommonParameters.width_H, desc='width of Higgs boson in GeV' ) - self.decorated.add_phantom( 'mass_t', ATLASCommonParameters.mass_t, desc='mass of top quark in GeV' ) - self.decorated.add_phantom( 'mass_tau', ATLASCommonParameters.mass_tau, desc='mass of tau in GeV' ) - self.decorated.add_phantom( 'mass_b', ATLASCommonParameters.mass_b, desc='mass of bottom quark in GeV' ) - self.decorated.add_phantom( 'mass_c', ATLASCommonParameters.mass_c, desc='mass of charm quark in GeV' ) - self.decorated.add_phantom( 'gfermi', ATLASCommonParameters.G_F, desc='Fermi constant' ) - self.decorated.add_phantom( 'alphaem_inv', 1.0/float(ATLASCommonParameters.alphaem), desc='EM coupling' ) - self.decorated.add_phantom( 'sthw2', ATLASCommonParameters.sin2thW_eff, desc='sin**2 theta w' ) - self.decorated.add_phantom( 'mass_W', ATLASCommonParameters.mass_W, desc='mass of W-boson in GeV' ) - self.decorated.add_phantom( 'mass_Z', ATLASCommonParameters.mass_Z, desc='mass of Z-boson in GeV' ) - # Normal decorations - self.decorated.add_parameter( 'mll_gencut', 20., desc='(minimum 15) cut on the invariant dilepton mass in GeV. Needed to avoid singularities from virtual photon decays to two massless leptons' ) - self.decorated.fix_parameter( 'Phasespace', 1, desc='(1:standard phasespace; 2:use separate unweighted events as input' ) - self.decorated.add_parameter( 'ptj_gencut', 20, desc='Generation cut on the jets pT in the phase space generator. Should be used when bornsuppfact is set to 0' ) - self.decorated.add_parameter( 'ptsuppfact', -1, desc='(-1:use Powheg default) Born pT suppression factor' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + # For additional run card + self.decorated.allowed_decay_modes = [] + self.decorated.add_phantom("decay_mode", None, desc="Vector boson decay mode") + self.decorated.add_phantom("mass_H", ATLASCommonParameters.mass_H, desc="mass of Higgs boson in GeV") + self.decorated.add_phantom("width_H", ATLASCommonParameters.width_H, desc="width of Higgs boson in GeV") + self.decorated.add_phantom("mass_t", ATLASCommonParameters.mass_t, desc="mass of top quark in GeV") + self.decorated.add_phantom("mass_tau", ATLASCommonParameters.mass_tau, desc="mass of tau in GeV") + self.decorated.add_phantom("mass_b", ATLASCommonParameters.mass_b, desc="mass of bottom quark in GeV") + self.decorated.add_phantom("mass_c", ATLASCommonParameters.mass_c, desc="mass of charm quark in GeV") + self.decorated.add_phantom("gfermi", ATLASCommonParameters.G_F, desc="Fermi constant") + self.decorated.add_phantom("alphaem_inv", 1.0 / float(ATLASCommonParameters.alphaem), desc="EM coupling") + self.decorated.add_phantom("sthw2", ATLASCommonParameters.sin2thW_eff, desc="sin**2 theta w") + self.decorated.add_phantom("mass_W", ATLASCommonParameters.mass_W, desc="mass of W-boson in GeV") + self.decorated.add_phantom("mass_Z", ATLASCommonParameters.mass_Z, desc="mass of Z-boson in GeV") + # Normal decorations + self.decorated.add_parameter("mll_gencut", 20., desc="(minimum 15) cut on the invariant dilepton mass in GeV. Needed to avoid singularities from virtual photon decays to two massless leptons") + self.decorated.fix_parameter("Phasespace", 1, desc="(1:standard phasespace; 2:use separate unweighted events as input") + self.decorated.add_parameter("ptj_gencut", 20, desc="Generation cut on the jets pT in the phase space generator. Should be used when bornsuppfact is set to 0") + self.decorated.add_parameter("ptsuppfact", -1, desc="(-1:use Powheg default) Born pT suppression factor") - def finalise( self ) : - VBF_runcard_entries = [] - # Convert allowed decay mode into PROC_ID/DECAYMODE - if self.decorated.decay_mode not in self.decorated.allowed_decay_modes : - self.decorated.logger.warning( 'Decay mode {0} not recognised!'.format( self.decorated.decay_mode ) ) - vector_boson_type = self.decorated.decay_mode[0] if self.decorated.decay_mode[0] != 'W' else self.decorated.decay_mode[0:2] - vector_boson_decay = self.decorated.decay_mode.replace(vector_boson_type,'').replace('v','').replace('ee','e').replace('mumu','mu') - # Add runcard entries - VBF_runcard_entries.append(( 'PROC_ID', { 'Z':120, 'Wp':130, 'Wm':140 }[vector_boson_type], vector_boson_type.replace('p','+').replace('m','-') )) - VBF_runcard_entries.append(( 'DECAYMODE', { 'e':11, 'mu':13 }[vector_boson_decay], vector_boson_decay )) - VBF_runcard_entries.append(( 'HMASS', self.decorated.mass_H, self.decorated.phantom_parameters['mass_H'][2] )) - VBF_runcard_entries.append(( 'HWIDTH', self.decorated.width_H, self.decorated.phantom_parameters['width_H'][2] )) - VBF_runcard_entries.append(( 'EWSCHEME', 4, 'Explicitly specify all EW parameters' )) - VBF_runcard_entries.append(( 'ANOM_CPL', 0, 'Disable anomalous couplings as these are not supported by the authors' )) - VBF_runcard_entries.append(( 'TOPMASS', self.decorated.mass_t, self.decorated.phantom_parameters['mass_t'][2] )) - VBF_runcard_entries.append(( 'TAU_MASS', self.decorated.mass_tau, self.decorated.phantom_parameters['mass_tau'][2] )) - VBF_runcard_entries.append(( 'BOTTOMMASS', self.decorated.mass_b, self.decorated.phantom_parameters['mass_b'][2] )) - VBF_runcard_entries.append(( 'CHARMMASS', self.decorated.mass_c, self.decorated.phantom_parameters['mass_c'][2] )) - VBF_runcard_entries.append(( 'FERMI_CONST', self.decorated.gfermi, self.decorated.phantom_parameters['gfermi'][2] )) - VBF_runcard_entries.append(( 'INVALFA', self.decorated.alphaem_inv, self.decorated.phantom_parameters['alphaem_inv'][2] )) - VBF_runcard_entries.append(( 'SIN2W', self.decorated.sthw2, self.decorated.phantom_parameters['sthw2'][2] )) - VBF_runcard_entries.append(( 'WMASS', self.decorated.mass_W, self.decorated.phantom_parameters['mass_W'][2] )) - VBF_runcard_entries.append(( 'ZMASS', self.decorated.mass_Z, self.decorated.phantom_parameters['mass_Z'][2] )) - # Write special VBF runcard - with open( 'vbfnlo.input', 'w' ) as f : - [ f.write( '{0:<15} {1:<15} ! {2}\n'.format(*runcard_entry) ) for runcard_entry in VBF_runcard_entries ] + # Write out VBFNLO runcard + def finalise(self): + VBF_runcard_entries = [] + # Convert allowed decay mode into PROC_ID/DECAYMODE + if self.decorated.decay_mode not in self.decorated.allowed_decay_modes: + self.decorated.logger.warning("Decay mode {} not recognised!".format(self.decorated.decay_mode)) + vector_boson_type = self.decorated.decay_mode[0] if self.decorated.decay_mode[0] != "W" else self.decorated.decay_mode[0:2] + vector_boson_decay = self.decorated.decay_mode.replace(vector_boson_type, "").replace("v", "").replace("ee", "e").replace("mumu", "mu") + # Add runcard entries + VBF_runcard_entries.append(("PROC_ID", {"Z": 120, "Wp": 130, "Wm": 140}[vector_boson_type], vector_boson_type.replace("p", "+").replace("m", "-"))) + VBF_runcard_entries.append(("DECAYMODE", {"e": 11, "mu": 13}[vector_boson_decay], vector_boson_decay)) + VBF_runcard_entries.append(("HMASS", self.decorated.mass_H, self.decorated.phantom_parameters["mass_H"][2])) + VBF_runcard_entries.append(("HWIDTH", self.decorated.width_H, self.decorated.phantom_parameters["width_H"][2])) + VBF_runcard_entries.append(("EWSCHEME", 4, "Explicitly specify all EW parameters")) + VBF_runcard_entries.append(("ANOM_CPL", 0, "Disable anomalous couplings as these are not supported by the authors")) + VBF_runcard_entries.append(("TOPMASS", self.decorated.mass_t, self.decorated.phantom_parameters["mass_t"][2])) + VBF_runcard_entries.append(("TAU_MASS", self.decorated.mass_tau, self.decorated.phantom_parameters["mass_tau"][2])) + VBF_runcard_entries.append(("BOTTOMMASS", self.decorated.mass_b, self.decorated.phantom_parameters["mass_b"][2])) + VBF_runcard_entries.append(("CHARMMASS", self.decorated.mass_c, self.decorated.phantom_parameters["mass_c"][2])) + VBF_runcard_entries.append(("FERMI_CONST", self.decorated.gfermi, self.decorated.phantom_parameters["gfermi"][2])) + VBF_runcard_entries.append(("INVALFA", self.decorated.alphaem_inv, self.decorated.phantom_parameters["alphaem_inv"][2])) + VBF_runcard_entries.append(("SIN2W", self.decorated.sthw2, self.decorated.phantom_parameters["sthw2"][2])) + VBF_runcard_entries.append(("WMASS", self.decorated.mass_W, self.decorated.phantom_parameters["mass_W"][2])) + VBF_runcard_entries.append(("ZMASS", self.decorated.mass_Z, self.decorated.phantom_parameters["mass_Z"][2])) + # Write special VBF runcard + with open("vbfnlo.input", "w") as f: + for runcard_entry in VBF_runcard_entries: + f.write("{:<15} {:<15} ! {}\n".format(*runcard_entry)) diff --git a/Generators/PowhegControl/python/decorators/VectorBosonDecayModeDecorator.py b/Generators/PowhegControl/python/decorators/VectorBosonDecayModeDecorator.py index ee3977fc0dd3a..07af81129a685 100644 --- a/Generators/PowhegControl/python/decorators/VectorBosonDecayModeDecorator.py +++ b/Generators/PowhegControl/python/decorators/VectorBosonDecayModeDecorator.py @@ -1,20 +1,21 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl VectorBosonDecayModeDecorator +# @PowhegControl VectorBosonDecayModeDecorator # Powheg runcard decorator for vector boson decays # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class VectorBosonDecayModeDecorator(object) : - ## Define decorator name string - name = 'vector boson decay mode' +class VectorBosonDecayModeDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "vector boson decay mode" - self.decorated.add_parameter( 'vdecaymode', 1, desc='(1:e, 2:mu, 3: tau). (DM 1:V-mediated fermionic DM; 2:A-mediated fermionic DM;-1, -2 for full theory)' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("vdecaymode", 1, desc="(1:e, 2:mu, 3: tau). (DM 1:V-mediated fermionic DM; 2:A-mediated fermionic DM;-1, -2 for full theory)") diff --git a/Generators/PowhegControl/python/decorators/VectorBosonJetJetDecorator.py b/Generators/PowhegControl/python/decorators/VectorBosonJetJetDecorator.py index ff4038f4a922f..9679fd3f30054 100644 --- a/Generators/PowhegControl/python/decorators/VectorBosonJetJetDecorator.py +++ b/Generators/PowhegControl/python/decorators/VectorBosonJetJetDecorator.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl VectorBosonJetJetDecorator +# @PowhegControl VectorBosonJetJetDecorator # Powheg runcard decorator for vector boson plus two jets processes # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,16 +8,17 @@ #! /usr/bin/env python from .. import ATLASCommonParameters -class VectorBosonJetJetDecorator(object) : - ## Define decorator name string - name = 'Vector boson + two jets' +class VectorBosonJetJetDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "Vector boson + two jets" - self.decorated.add_parameter( 'ptborncut', -1, desc='(-1:Powheg default)' ) - self.decorated.add_parameter( 'zfixedwidth', -1, desc='(-1:Powheg default)' ) - self.decorated.add_parameter( 'zmass', ATLASCommonParameters.mass_Z, desc='Z mass in GeV' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("ptborncut", -1, desc="(-1:Powheg default)") + self.decorated.add_parameter("zfixedwidth", -1, desc="(-1:Powheg default)") + self.decorated.add_parameter("zmass", ATLASCommonParameters.mass_Z, desc="Z mass in GeV") diff --git a/Generators/PowhegControl/python/decorators/WDecayModeDecorator.py b/Generators/PowhegControl/python/decorators/WDecayModeDecorator.py index 2485db676ac97..20ac983065fdd 100644 --- a/Generators/PowhegControl/python/decorators/WDecayModeDecorator.py +++ b/Generators/PowhegControl/python/decorators/WDecayModeDecorator.py @@ -1,20 +1,21 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl WDecayModeDecorator +# @PowhegControl WDecayModeDecorator # Powheg runcard decorator for W decay mode # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class WDecayModeDecorator(object) : - ## Define decorator name string - name = 'W decay mode' +class WDecayModeDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "W decay mode" - self.decorated.add_parameter( 'wdecaymode', 11111, desc='5 digits indicating the maximum number of (e,mu,tau,u,c) allowed in decays' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("wdecaymode", 11111, desc="5 digits indicating the maximum number of (e,mu,tau,u,c) allowed in decays") diff --git a/Generators/PowhegControl/python/decorators/WIDDecorator.py b/Generators/PowhegControl/python/decorators/WIDDecorator.py index 78e4112486efc..b713def1d5c08 100644 --- a/Generators/PowhegControl/python/decorators/WIDDecorator.py +++ b/Generators/PowhegControl/python/decorators/WIDDecorator.py @@ -1,20 +1,21 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl WIDDecorator +# @PowhegControl WIDDecorator # Powheg runcard decorator for W-boson ID # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class WIDDecorator(object) : - ## Define decorator name string - name = 'W ID' +class WIDDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "W ID" - self.decorated.add_parameter( 'idvecbos', 24, desc='PDG ID for vector boson to be produced' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("idvecbos", 24, desc="PDG ID for vector boson to be produced") diff --git a/Generators/PowhegControl/python/decorators/WMassWindowDecorator.py b/Generators/PowhegControl/python/decorators/WMassWindowDecorator.py index 01c807a7f63ea..80a0cc6771ce1 100644 --- a/Generators/PowhegControl/python/decorators/WMassWindowDecorator.py +++ b/Generators/PowhegControl/python/decorators/WMassWindowDecorator.py @@ -1,23 +1,24 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl WMassWindowDecorator +# @PowhegControl WMassWindowDecorator # Powheg runcard decorator for W-mass window # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class WMassWindowDecorator(object) : - ## Define decorator name string - name = 'W mass window' +class WMassWindowDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "W mass window" - self.decorated.add_parameter( 'mass_W_low', 1.0, desc='M_W > mass low', parameter='min_w_mass' ) - self.decorated.add_parameter( 'mass_W_high', 14000.0, desc='M_W < mass high', parameter='max_w_mass' ) - self.decorated.add_parameter( 'mass_W_low', 1.0, desc='M_W > mass low', parameter='min_W_mass' ) - self.decorated.add_parameter( 'mass_W_high', 14000.0, desc='M_W < mass high', parameter='max_W_mass') + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("mass_W_low", 1.0, desc="M_W > mass low", parameter="min_w_mass") + self.decorated.add_parameter("mass_W_high", 14000.0, desc="M_W < mass high", parameter="max_w_mass") + self.decorated.add_parameter("mass_W_low", 1.0, desc="M_W > mass low", parameter="min_W_mass") + self.decorated.add_parameter("mass_W_high", 14000.0, desc="M_W < mass high", parameter="max_W_mass") diff --git a/Generators/PowhegControl/python/decorators/WWDecayDecorator.py b/Generators/PowhegControl/python/decorators/WWDecayDecorator.py index a659e21decd8f..1bfb3d03ed672 100644 --- a/Generators/PowhegControl/python/decorators/WWDecayDecorator.py +++ b/Generators/PowhegControl/python/decorators/WWDecayDecorator.py @@ -1,36 +1,37 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl WWDecayDecorator +# @PowhegControl WWDecayDecorator # Powheg runcard decorator for WW decays # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class WWDecayDecorator(object) : - ## Define decorator name string - name = 'WW decay' +class WWDecayDecorator(object): - def __init__( self, decorated, boson ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "WW decay" - self.decorated.allowed_decay_modes = [] - self.decorated.add_phantom( 'decay_mode', None, desc='WW decay mode' ) - self.boson = boson + # Attach decorations to Powheg configurable + def __init__(self, decorated, boson): + decorated.run_card_decorators.append(self) + self.decorated = decorated + self.decorated.allowed_decay_modes = [] + self.decorated.add_phantom("decay_mode", None, desc="WW decay mode") + self.boson = boson - def finalise( self ) : - # Calculate appropriate decay mode numbers - __decay_code_lookup = { 'e':-11, 'mu':-13, 'tau':-15, 'emu':-113, 'l':-135 } - if self.decorated.decay_mode not in self.decorated.allowed_decay_modes : - self.decorated.logger.warning( 'Decay mode {0} not recognised!'.format( self.decorated.decay_mode ) ) - __W_sign = [-1,+1][ 'WpWp' in self.decorated.decay_mode ] - __vdecaymodeW1, __vdecaymodeW2 = self.decorated.decay_mode.replace('WpWp','').replace('WmWm','').split('v')[:-1] - __vdecaymodeW1 = __decay_code_lookup[__vdecaymodeW1] * __W_sign - __vdecaymodeW2 = __decay_code_lookup[__vdecaymodeW2] * __W_sign + # Convert decay mode into appropriate Powheg parameters + def finalise(self): + # Calculate appropriate decay mode numbers + __decay_code_lookup = {"e": -11, "mu": -13, "tau": -15, "emu": -113, "l": -135} + if self.decorated.decay_mode not in self.decorated.allowed_decay_modes: + self.decorated.logger.warning("Decay mode {0} not recognised!".format(self.decorated.decay_mode)) + __W_sign = [-1, +1]["WpWp" in self.decorated.decay_mode] + __vdecaymodeW1, __vdecaymodeW2 = self.decorated.decay_mode.replace("WpWp", "").replace("WmWm", "").split("v")[:-1] + __vdecaymodeW1 = __decay_code_lookup[__vdecaymodeW1] * __W_sign + __vdecaymodeW2 = __decay_code_lookup[__vdecaymodeW2] * __W_sign - self.decorated.fix_parameter( 'vdecaymode{0}1'.format(self.boson), __vdecaymodeW1, '(default process-dependent) First W decay mode' ) - self.decorated.fix_parameter( 'vdecaymode{0}2'.format(self.boson), __vdecaymodeW2, '(default process-dependent) Second W decay mode' ) + self.decorated.fix_parameter("vdecaymode{}1".format(self.boson), __vdecaymodeW1, "(default process-dependent) First W decay mode") + self.decorated.fix_parameter("vdecaymode{}2".format(self.boson), __vdecaymodeW2, "(default process-dependent) Second W decay mode") diff --git a/Generators/PowhegControl/python/decorators/ZMassWindowDecorator.py b/Generators/PowhegControl/python/decorators/ZMassWindowDecorator.py index d49378dc15d45..388b668ae3776 100644 --- a/Generators/PowhegControl/python/decorators/ZMassWindowDecorator.py +++ b/Generators/PowhegControl/python/decorators/ZMassWindowDecorator.py @@ -1,23 +1,24 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl ZMassWindowDecorator +# @PowhegControl ZMassWindowDecorator # Powheg runcard decorator for Z-mass window # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class ZMassWindowDecorator(object) : - ## Define decorator name string - name = 'Z mass window' +class ZMassWindowDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "Z mass window" - self.decorated.add_parameter( 'mass_Z_low', 1.0, desc='M_Z > mass low', parameter='min_z_mass' ) - self.decorated.add_parameter( 'mass_Z_high', 14000.0, desc='M_Z < mass high', parameter='max_z_mass' ) - self.decorated.add_parameter( 'mass_Z_low', 1.0, desc='M_Z > mass low', parameter='min_Z_mass' ) - self.decorated.add_parameter( 'mass_Z_high', 14000.0, desc='M_Z < mass high', parameter='max_Z_mass') + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("mass_Z_low", 1.0, desc="M_Z > mass low", parameter="min_z_mass") + self.decorated.add_parameter("mass_Z_high", 14000.0, desc="M_Z < mass high", parameter="max_z_mass") + self.decorated.add_parameter("mass_Z_low", 1.0, desc="M_Z > mass low", parameter="min_Z_mass") + self.decorated.add_parameter("mass_Z_high", 14000.0, desc="M_Z < mass high", parameter="max_Z_mass") diff --git a/Generators/PowhegControl/python/decorators/ZeroWidthDecorator.py b/Generators/PowhegControl/python/decorators/ZeroWidthDecorator.py index 9d07a6eea6e8d..c7dbd501d6894 100644 --- a/Generators/PowhegControl/python/decorators/ZeroWidthDecorator.py +++ b/Generators/PowhegControl/python/decorators/ZeroWidthDecorator.py @@ -1,20 +1,21 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl ZeroWidthDecorator +# @PowhegControl ZeroWidthDecorator # Powheg runcard decorator for zero width parameter # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -class ZeroWidthDecorator(object) : - ## Define decorator name string - name = 'zero width' +class ZeroWidthDecorator(object): - def __init__( self, decorated ) : - ## Attach decorations to Powheg configurable - decorated.run_card_decorators.append( self ) - self.decorated = decorated + # Define decorator name string + name = "zero width" - self.decorated.add_parameter( 'zerowidth', 0, desc='(0:disabled; 1:enabled) use on-shell quarks/bosons only' ) + # Attach decorations to Powheg configurable + def __init__(self, decorated): + decorated.run_card_decorators.append(self) + self.decorated = decorated + + self.decorated.add_parameter("zerowidth", 0, desc="(0:disabled; 1:enabled) use on-shell quarks/bosons only") diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_DMGG.py b/Generators/PowhegControl/python/processes/PowhegConfig_DMGG.py index 1e8ea841ccda8..753bc79ba9c7e 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_DMGG.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_DMGG.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_DMGG +# @PowhegControl PowhegConfig_DMGG # Powheg configuration for DMGG subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,47 +8,48 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -## Default Powheg configuration for DMGG generation +# Default Powheg configuration for DMGG generation # # Create a full configurable with all available Powheg options -class PowhegConfig_DMGG(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_DMGG, self).__init__( runArgs, opts ) - self._powheg_executable += '/DMGG/pwhg_main' - - ## Add process specific options - self.add_parameter( 'Lambda', 100, desc='UV scale', parameter='DMLambda' ) - self.add_parameter( 'nloformfact', 1, desc='(0:disabled; 1:enabled) include Higgs-specific corrections into GGS and GGP form factor' ) - - ## Decorate with generic option sets - self.add_parameter_set( 'CKKW' ) - self.add_parameter_set( 'dark matter' ) - self.add_parameter_set( 'dark matter phi' ) - self.add_parameter_set( 'extra tests' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'mass window' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'running scale', description='(0:2mX fixed; 1:pTj; 2:XXbar invmass; 3:Ht/2)' ) - self.add_parameter_set( 'running width' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - - ## Set optimised integration parameters - self.ncall1 = 800000 - self.itmx1 = 10 - self.ncall2 = 100000 - self.nubound = 100000 - self.foldx = 2 - self.foldy = 2 - self.foldphi = 1 - - ## Override defaults - self.bornktmin = 100.0 - self.doublefsr = 1 - self.minlo = -1 - self.runningscale = 3 - - self.populate_default_strings() +class PowhegConfig_DMGG(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_DMGG, self).__init__(runArgs, opts) + self._powheg_executable += "/DMGG/pwhg_main" + + # Add process specific options + self.add_parameter("Lambda", 100, desc="UV scale", parameter="DMLambda") + self.add_parameter("nloformfact", 1, desc="(0:disabled; 1:enabled) include Higgs-specific corrections into GGS and GGP form factor") + + # Decorate with generic option sets + self.add_parameter_set("CKKW") + self.add_parameter_set("dark matter") + self.add_parameter_set("dark matter phi") + self.add_parameter_set("extra tests") + self.add_parameter_set("generic scale") + self.add_parameter_set("mass window") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("running scale", description="(0:2mX fixed; 1:pTj; 2:XXbar invmass; 3:Ht/2)") + self.add_parameter_set("running width") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + + # Set optimised integration parameters + self.ncall1 = 800000 + self.itmx1 = 10 + self.ncall2 = 100000 + self.nubound = 100000 + self.foldx = 2 + self.foldy = 2 + self.foldphi = 1 + + # Override defaults + self.bornktmin = 100.0 + self.doublefsr = 1 + self.runningscale = 3 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_DMS_tloop.py b/Generators/PowhegControl/python/processes/PowhegConfig_DMS_tloop.py index b531d79b58477..ce618288b6bec 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_DMS_tloop.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_DMS_tloop.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_DMS_tloop +# @PowhegControl PowhegConfig_DMS_tloop # Powheg configuration for DMS_tloop subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,40 +8,41 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -## Default Powheg configuration for DMS_tloop generation +# Default Powheg configuration for DMS_tloop generation # # Create a full configurable with all available Powheg options -class PowhegConfig_DMS_tloop(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_DMS_tloop, self).__init__( runArgs, opts, LO_process=True ) - self._powheg_executable += '/DMS_tloop/pwhg_main' - - ## Decorate with generic option sets - self.add_parameter_set( 'CKKW' ) - self.add_parameter_set( 'dark matter' ) - self.add_parameter_set( 'dark matter phi' ) - self.add_parameter_set( 'mass window' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'running scale', description='(0:2mX fixed; 1:pTj; 2:XXbar invmass; 3:Ht/2)' ) - self.add_parameter_set( 'running width' ) - self.add_parameter_set( 'top properties' ) - self.add_parameter_set( 'v2' ) - - ## Set optimised integration parameters - self.ncall1 = 250000 - self.ncall2 = 1000000 - self.nubound = 100000 - self.xupbound = 2 - self.foldx = 1 - self.foldy = 1 - self.foldphi = 1 - - ## Override defaults - self.bornktmin = 100.0 - self.doublefsr = 1 - self.minlo = -1 - self.runningscale = 3 - - self.populate_default_strings() +class PowhegConfig_DMS_tloop(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_DMS_tloop, self).__init__(runArgs, opts, LO_process=True) + self._powheg_executable += "/DMS_tloop/pwhg_main" + + # Decorate with generic option sets + self.add_parameter_set("CKKW") + self.add_parameter_set("dark matter") + self.add_parameter_set("dark matter phi") + self.add_parameter_set("mass window") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("running scale", description="(0:2mX fixed; 1:pTj; 2:XXbar invmass; 3:Ht/2)") + self.add_parameter_set("running width") + self.add_parameter_set("top properties") + self.add_parameter_set("v2") + + # Set optimised integration parameters + self.ncall1 = 250000 + self.ncall2 = 1000000 + self.nubound = 100000 + self.xupbound = 2 + self.foldx = 1 + self.foldy = 1 + self.foldphi = 1 + + # Override defaults + self.bornktmin = 100.0 + self.doublefsr = 1 + self.runningscale = 3 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_DMV.py b/Generators/PowhegControl/python/processes/PowhegConfig_DMV.py index a01a318bfd84b..14a593377aad0 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_DMV.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_DMV.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_DMV +# @PowhegControl PowhegConfig_DMV # Powheg configuration for DMV subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,47 +8,48 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -## Default Powheg configuration for DMV generation +# Default Powheg configuration for DMV generation # # Create a full configurable with all available Powheg options -class PowhegConfig_DMV(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_DMV, self).__init__( runArgs, opts ) - self._powheg_executable += '/DMV/pwhg_main' - - ## Add process specific options - self.add_parameter( 'V_mass', 100, desc='mediator mass', parameter='DMVmass' ) - self.add_parameter( 'V_width', 42.494, desc='mediator width', parameter='DMVwidth' ) - - ## Decorate with generic option sets - self.add_parameter_set( 'dark matter' ) - self.add_parameter_set( 'extra tests' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'mass window' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'running scale', description='(0:2mX fixed; 1:pTj; 2:XXbar invmass; 3:Ht/2)' ) - self.add_parameter_set( 'running width' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - self.add_parameter_set( 'vector boson decay mode' ) - - ## Set optimised integration parameters - self.ncall1 = 40000 - self.ncall2 = 80000 - self.nubound = 80000 - self.xupbound = 4 - self.foldx = 2 - self.foldy = 2 - self.foldphi = 2 - - ## Override defaults - self.bornktmin = 100.0 - self.doublefsr = 1 - self.vdecaymode = -1 - self.runningscale = 3 - self.minlo = -1 - - self.populate_default_strings() +class PowhegConfig_DMV(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_DMV, self).__init__(runArgs, opts) + self._powheg_executable += "/DMV/pwhg_main" + + # Add process specific options + self.add_parameter("V_mass", 100, desc="mediator mass", parameter="DMVmass") + self.add_parameter("V_width", 42.494, desc="mediator width", parameter="DMVwidth") + + # Decorate with generic option sets + self.add_parameter_set("dark matter") + self.add_parameter_set("extra tests") + self.add_parameter_set("generic scale") + self.add_parameter_set("mass window") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("running scale", description="(0:2mX fixed; 1:pTj; 2:XXbar invmass; 3:Ht/2)") + self.add_parameter_set("running width") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + self.add_parameter_set("vector boson decay mode") + + # Set optimised integration parameters + self.ncall1 = 40000 + self.ncall2 = 80000 + self.nubound = 80000 + self.xupbound = 4 + self.foldx = 2 + self.foldy = 2 + self.foldphi = 2 + + # Override defaults + self.bornktmin = 100.0 + self.doublefsr = 1 + self.vdecaymode = -1 + self.runningscale = 3 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_HWj.py b/Generators/PowhegControl/python/processes/PowhegConfig_HWj.py index e3579390af8f9..3bf52afa05fd5 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_HWj.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_HWj.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_HWj +# @PowhegControl PowhegConfig_HWj # Powheg configuration for HWj subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,48 +8,51 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -## Default Powheg configuration for HWj generation +# Default Powheg configuration for HWj generation # # Create a full configurable with all available Powheg options -class PowhegConfig_HWj(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_HWj, self).__init__( runArgs, opts ) - self._powheg_executable += '/HWJ/pwhg_main' - - ## Add process specific options - self.add_parameter( 'bornsuppfactW', -1, desc='(-1:Powheg default)' ) - - ## Decorate with generic option sets - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'Higgs + vector boson', boson='W' ) - self.add_parameter_set( 'Higgs + vector boson + jet' ) - self.add_parameter_set( 'Higgs properties' ) - self.add_parameter_set( 'MiNLO NNLL' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'running scales' ) - self.add_parameter_set( 'top properties' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'vector boson decay mode' ) - self.add_parameter_set( 'v2' ) - self.add_parameter_set( 'W ID' ) - self.add_parameter_set( 'W mass window' ) - - ## Set optimised integration parameters - self.itmx1 = 2 - self.ncall1 = 70000 - self.ncall2 = 70000 - self.nubound = 150000 - self.xupbound = 20 - self.foldx = 10 - self.foldy = 5 - self.foldphi = 5 - - ## Override defaults - self.doublefsr = 1 - self.mass_W_low = 2.5 - self.mass_W_high = 2.0 * self.beam_energy - - self.populate_default_strings() +class PowhegConfig_HWj(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_HWj, self).__init__(runArgs, opts) + self._powheg_executable += "/HWJ/pwhg_main" + + # Add process specific options + self.add_parameter("bornsuppfactW", -1, desc="(-1:Powheg default)") + + # Decorate with generic option sets + self.add_parameter_set("generic scale") + self.add_parameter_set("Higgs + vector boson", boson="W") + self.add_parameter_set("Higgs + vector boson + jet") + self.add_parameter_set("Higgs properties") + self.add_parameter_set("MiNLO NNLL") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("running scales") + self.add_parameter_set("top properties") + self.add_parameter_set("upper bound") + self.add_parameter_set("vector boson decay mode") + self.add_parameter_set("v2") + self.add_parameter_set("W ID") + self.add_parameter_set("W mass window") + + # Set optimised integration parameters + self.itmx1 = 2 + self.ncall1 = 70000 + self.ncall2 = 70000 + self.nubound = 150000 + self.xupbound = 20 + self.foldx = 10 + self.foldy = 5 + self.foldphi = 5 + + # Override defaults + self.doublefsr = 1 + self.mass_W_low = 2.5 + self.mass_W_high = 2.0 * self.beam_energy + self.minlo = 1 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_HZj.py b/Generators/PowhegControl/python/processes/PowhegConfig_HZj.py index 4ada4da02c1c4..2dc34ab23468b 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_HZj.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_HZj.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_HZj +# @PowhegControl PowhegConfig_HZj # Powheg configuration for HZj subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,46 +8,48 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -## Default Powheg configuration for HZj generation +# Default Powheg configuration for HZj generation # # Create a full configurable with all available Powheg options -class PowhegConfig_HZj(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_HZj, self).__init__( runArgs, opts ) - self._powheg_executable += '/HZJ/pwhg_main' - - ## Decorate with generic option sets - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'Higgs + vector boson', boson='Z' ) - self.add_parameter_set( 'Higgs + vector boson + jet' ) - self.add_parameter_set( 'Higgs properties' ) - self.add_parameter_set( 'MiNLO NNLL' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'running scales' ) - self.add_parameter_set( 'top properties' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - self.add_parameter_set( 'vector boson decay mode' ) - self.add_parameter_set( 'Z mass window' ) - - ## Set optimised integration parameters - self.itmx1 = 8 - self.itmx2 = 5 - self.ncall1 = 60000 - self.ncall2 = 60000 - self.nubound = 300000 - self.xupbound = 4 - self.foldx = 10 - self.foldy = 5 - self.foldphi = 5 - - - ## Override defaults - self.doublefsr = 1 - self.mass_Z_low = 10.0 - self.mass_Z_high = 2.0 * self.beam_energy - - self.populate_default_strings() +class PowhegConfig_HZj(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_HZj, self).__init__(runArgs, opts) + self._powheg_executable += "/HZJ/pwhg_main" + + # Decorate with generic option sets + self.add_parameter_set("generic scale") + self.add_parameter_set("Higgs + vector boson", boson="Z") + self.add_parameter_set("Higgs + vector boson + jet") + self.add_parameter_set("Higgs properties") + self.add_parameter_set("MiNLO NNLL") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("running scales") + self.add_parameter_set("top properties") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + self.add_parameter_set("vector boson decay mode") + self.add_parameter_set("Z mass window") + + # Set optimised integration parameters + self.itmx1 = 8 + self.itmx2 = 5 + self.ncall1 = 60000 + self.ncall2 = 60000 + self.nubound = 300000 + self.xupbound = 4 + self.foldx = 10 + self.foldy = 5 + self.foldphi = 5 + + # Override defaults + self.doublefsr = 1 + self.mass_Z_low = 10.0 + self.mass_Z_high = 2.0 * self.beam_energy + self.minlo = 1 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_Hj.py b/Generators/PowhegControl/python/processes/PowhegConfig_Hj.py index 07d31daf9022b..68e551e87e5c4 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_Hj.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_Hj.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_Hj +# @PowhegControl PowhegConfig_Hj # Powheg configuration for Hj subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,52 +8,54 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -## Default Powheg configuration for Hj generation +# Default Powheg configuration for Hj generation # # Create a full configurable with all available Powheg options -class PowhegConfig_Hj(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_Hj, self).__init__( runArgs, opts ) - self._powheg_executable += '/HJ/pwhg_main' - - ## Add process specific options - self.add_parameter( 'bmass_in_minlo', 0, desc='(0:disabled; 1:enabled) use non-zero b-mass in MiNLO' ) - self.add_parameter( 'quarkmasseffects', 1, desc='(0:disabled; 1:enabled) quark mass effects' ) - - ## Decorate with generic option sets - self.add_parameter_set( 'Breit-Wigner width' ) - self.add_parameter_set( 'CKKW' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'Higgs decay properties' ) - self.add_parameter_set( 'Higgs fixed width' ) - self.add_parameter_set( 'Higgs properties' ) - self.add_parameter_set( 'MiNLO NNLL' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'NNLO reweighting' ) - self.add_parameter_set( 'radiation parametrisation' ) - self.add_parameter_set( 'running scales' ) - self.add_parameter_set( 'top properties' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - - - ## Set optimised integration parameters - self.ncall1 = 150000 - self.ncall1rm = 150000 - self.ncall2 = 150000 - self.nubound = 100000 - self.xupbound = 2 - self.foldx = 5 - self.foldy = 5 - self.foldphi = 2 - - ## Override defaults - self.bornktmin = 0.26 - self.bornzerodamp = 1 - self.par_diexp = 2 - self.par_dijexp = 2 - - self.populate_default_strings() +class PowhegConfig_Hj(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_Hj, self).__init__(runArgs, opts) + self._powheg_executable += "/HJ/pwhg_main" + + # Add process specific options + self.add_parameter("bmass_in_minlo", 0, desc="(0:disabled; 1:enabled) use non-zero b-mass in MiNLO") + self.add_parameter("quarkmasseffects", 1, desc="(0:disabled; 1:enabled) quark mass effects") + + # Decorate with generic option sets + self.add_parameter_set("Breit-Wigner width") + self.add_parameter_set("CKKW") + self.add_parameter_set("generic scale") + self.add_parameter_set("Higgs decay properties") + self.add_parameter_set("Higgs fixed width") + self.add_parameter_set("Higgs properties") + self.add_parameter_set("MiNLO NNLL") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("NNLO reweighting") + self.add_parameter_set("radiation parametrisation") + self.add_parameter_set("running scales") + self.add_parameter_set("top properties") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + + # Set optimised integration parameters + self.ncall1 = 150000 + self.ncall1rm = 150000 + self.ncall2 = 150000 + self.nubound = 100000 + self.xupbound = 2 + self.foldx = 5 + self.foldy = 5 + self.foldphi = 2 + + # Override defaults + self.bornktmin = 0.26 + self.bornzerodamp = 1 + self.minlo = 1 + self.par_diexp = 2 + self.par_dijexp = 2 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_Hjj.py b/Generators/PowhegControl/python/processes/PowhegConfig_Hjj.py index 0458b4505af1c..7924349d19c7e 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_Hjj.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_Hjj.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_Hjj +# @PowhegControl PowhegConfig_Hjj # Powheg configuration for Hjj subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,49 +8,58 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -## Default Powheg configuration for Hjj generation +# Default Powheg configuration for Hjj generation # # Create a full configurable with all available Powheg options -class PowhegConfig_Hjj(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_Hjj, self).__init__( runArgs, opts ) - self._powheg_executable += '/HJJ/pwhg_main' - - ## Logger warnings for unvalidated process - self.logger.warning( 'Integration parameters have not been validated - see https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/PowhegForATLAS#Changing_POWHEG_BOX_integration' ) - - ## Add process specific options - self.add_parameter( 'polecheck', -1, desc='(-1:Powheg default)' ) - - ## Decorate with generic option sets - self.add_parameter_set( 'Breit-Wigner width' ) - self.add_parameter_set( 'CKKW' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'Higgs fixed width' ) - self.add_parameter_set( 'Higgs properties' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'radiation parametrisation' ) - self.add_parameter_set( 'running scales' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - - ## Set optimised integration parameters - self.itmx1 = 15 - self.itmx2 = 15 - self.ncall1 = 15000000 - self.ncall2 = 800000 - self.nubound = 400000 - self.foldx = 10 - self.foldy = 10 - self.foldphi = 5 - - ## Override defaults - self.bornktmin = 0.26 - self.bornzerodamp = 1 - self.par_diexp = 2 - self.par_dijexp = 2 - - self.populate_default_strings() +class PowhegConfig_Hjj(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_Hjj, self).__init__(runArgs, opts) + self._powheg_executable += "/HJJ/pwhg_main" + + # Logger warnings for unvalidated process + self.logger.warning("Integration parameters have not been validated - see https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/PowhegForATLAS#Changing_POWHEG_BOX_integration") + + # Add process specific options + self.add_parameter("polecheck", -1, desc="(-1:Powheg default)") + + # Decorate with generic option sets + self.add_parameter_set("Breit-Wigner width") + self.add_parameter_set("CKKW") + self.add_parameter_set("generic scale") + self.add_parameter_set("Higgs fixed width") + self.add_parameter_set("Higgs properties") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("radiation parametrisation") + self.add_parameter_set("running scales") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + + # Set optimised integration parameters + self.itmx1 = 2 + self.itmx2 = 2 + self.ncall1 = 40000 + self.ncall2 = 400000 + self.nubound = 600000 + self.xupbound = 4 + self.foldx = 5 + self.foldy = 5 + self.foldphi = 5 + + # NB. These settings give the following output + # Cross-section test : 0.00% PASSED + # Neg. weight test : 5.41% FAILED + # Upper bound test : 0.55% PASSED + + # Override defaults + self.bornktmin = 0.26 + self.bornzerodamp = 1 + self.minlo = 1 + self.par_diexp = 2 + self.par_dijexp = 2 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_VBF_H.py b/Generators/PowhegControl/python/processes/PowhegConfig_VBF_H.py index 4f214e1127173..9239358cc26fd 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_VBF_H.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_VBF_H.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_VBF_H +# @PowhegControl PowhegConfig_VBF_H # Powheg configuration for VBF_H subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -9,41 +9,42 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -## Default Powheg configuration for VBF_H generation +# Default Powheg configuration for VBF_H generation # # Create a full configurable with all available Powheg options -class PowhegConfig_VBF_H(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_VBF_H, self).__init__( runArgs, opts ) - self._powheg_executable += '/VBF_H/pwhg_main' - - ## Add process specific options - self.add_parameter( 'complexpolescheme', -1, desc='(0:SM)' ) - - ## Decorate with generic option sets - self.add_parameter_set( 'extra tests' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'Higgs decay mode' ) - self.add_parameter_set( 'Higgs fixed width' ) - self.add_parameter_set( 'Higgs properties' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - - ## Set optimised integration parameters - self.ncall1 = 20000 - self.ncall2 = 300000 - self.nubound = 300000 - self.xupbound = 4 - self.foldx = 2 - self.foldy = 2 - self.foldphi = 5 - - ## Override defaults - self.minlo = -1 - self.withdamp = 1 - - self.populate_default_strings() +class PowhegConfig_VBF_H(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_VBF_H, self).__init__(runArgs, opts) + self._powheg_executable += "/VBF_H/pwhg_main" + + # Add process specific options + self.add_parameter("complexpolescheme", -1, desc="(0:SM)") + + # Decorate with generic option sets + self.add_parameter_set("extra tests") + self.add_parameter_set("generic scale") + self.add_parameter_set("Higgs decay mode") + self.add_parameter_set("Higgs fixed width") + self.add_parameter_set("Higgs properties") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + + # Set optimised integration parameters + self.ncall1 = 20000 + self.ncall2 = 300000 + self.nubound = 300000 + self.xupbound = 4 + self.foldx = 2 + self.foldy = 2 + self.foldphi = 5 + + # Override defaults + self.withdamp = 1 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_VBF_W.py b/Generators/PowhegControl/python/processes/PowhegConfig_VBF_W.py index bc6a2566c3b28..2358178b34b25 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_VBF_W.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_VBF_W.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_VBF_W +# @PowhegControl PowhegConfig_VBF_W # Powheg configuration for VBF W subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,36 +8,38 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -## Default Powheg configuration for VBF W generation +# Default Powheg configuration for VBF W generation # # Create a full configurable with all available Powheg options -class PowhegConfig_VBF_W(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_VBF_W, self).__init__( runArgs, opts ) - self._powheg_executable += '/VBF_W-Z/pwhg_main' - - ## Decorate with generic option sets - self.add_parameter_set( 'fake virtual' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'VBF vector boson decay' ) - - ## Set optimised integration parameters - self.itmx1 = 4 - self.itmx2 = 5 - self.ncall1 = 800000 - self.ncall2 = 6000000 - self.nubound = 5000000 - self.xupbound = 6 - self.foldx = 2 - self.foldy = 2 - self.foldphi = 2 - - ## Override defaults - self.allowed_decay_modes = [ 'Wpev', 'Wmev', 'Wmmuv','Wmmuv' ] - self.decay_mode = 'Wpev' - self.withdamp = 1 - - self.populate_default_strings() +class PowhegConfig_VBF_W(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_VBF_W, self).__init__(runArgs, opts) + self._powheg_executable += "/VBF_W-Z/pwhg_main" + + # Decorate with generic option sets + self.add_parameter_set("fake virtual") + self.add_parameter_set("generic scale") + self.add_parameter_set("upper bound") + self.add_parameter_set("VBF vector boson decay") + + # Set optimised integration parameters + self.itmx1 = 4 + self.itmx2 = 5 + self.ncall1 = 800000 + self.ncall2 = 6000000 + self.nubound = 5000000 + self.xupbound = 6 + self.foldx = 2 + self.foldy = 2 + self.foldphi = 2 + + # Override defaults + self.allowed_decay_modes = ["Wpev", "Wmev", "Wmmuv", "Wmmuv"] + self.decay_mode = "Wpev" + self.withdamp = 1 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_VBF_Z.py b/Generators/PowhegControl/python/processes/PowhegConfig_VBF_Z.py index 26e22796f179a..f320f60c68740 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_VBF_Z.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_VBF_Z.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_VBF_Z +# @PowhegControl PowhegConfig_VBF_Z # Powheg configuration for VBF Z subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,40 +8,42 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -## Default Powheg configuration for VBF Z generation +# Default Powheg configuration for VBF Z generation # # Create a full configurable with all available Powheg options -class PowhegConfig_VBF_Z(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_VBF_Z, self).__init__( runArgs, opts ) - self._powheg_executable += '/VBF_W-Z/pwhg_main' - - ## Logger warnings for unvalidated process - self.logger.warning( 'Integration parameters have not been validated - see https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/PowhegForATLAS#Changing_POWHEG_BOX_integration' ) - - ## Decorate with generic option sets - self.add_parameter_set( 'fake virtual' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'VBF vector boson decay' ) - - ## Set optimised integration parameters - self.itmx1 = 4 - self.itmx2 = 5 - self.ncall1 = 65000000 - self.ncall2 = 150000000 - self.nubound = 10000000 - self.xupbound = 6 - self.foldx = 25 - self.foldy = 25 - self.foldphi = 25 - - ## Override defaults - self.allowed_decay_modes = [ 'Zee', 'Zmumu' ] - self.decay_mode = 'Zee' - self.mll_gencut = 60 - self.withdamp = 1 - - self.populate_default_strings() +class PowhegConfig_VBF_Z(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_VBF_Z, self).__init__(runArgs, opts) + self._powheg_executable += "/VBF_W-Z/pwhg_main" + + # Logger warnings for unvalidated process + self.logger.warning("Integration parameters have not been validated - see https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/PowhegForATLAS#Changing_POWHEG_BOX_integration") + + # Decorate with generic option sets + self.add_parameter_set("fake virtual") + self.add_parameter_set("generic scale") + self.add_parameter_set("upper bound") + self.add_parameter_set("VBF vector boson decay") + + # Set optimised integration parameters + self.itmx1 = 4 + self.itmx2 = 5 + self.ncall1 = 65000000 + self.ncall2 = 150000000 + self.nubound = 10000000 + self.xupbound = 6 + self.foldx = 25 + self.foldy = 25 + self.foldphi = 25 + + # Override defaults + self.allowed_decay_modes = ["Zee", "Zmumu"] + self.decay_mode = "Zee" + self.mll_gencut = 60 + self.withdamp = 1 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_VBF_ssWW.py b/Generators/PowhegControl/python/processes/PowhegConfig_VBF_ssWW.py index cba0cd7d6a149..416ce295f8680 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_VBF_ssWW.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_VBF_ssWW.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_VBF_ssWW +# @PowhegControl PowhegConfig_VBF_ssWW # Powheg configuration for VBF_ssWW subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,52 +8,53 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -## Default Powheg configuration for VBF_ssWW generation +# Default Powheg configuration for VBF_ssWW generation # # Create a full configurable with all available Powheg options -class PowhegConfig_VBF_ssWW(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_VBF_ssWW, self).__init__( runArgs, opts ) - self._powheg_executable += '/vbf_wp_wp/pwhg_main' - - ## Logger warnings for unvalidated process - self.logger.warning( 'Integration parameters have not been validated - see https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/PowhegForATLAS#Changing_POWHEG_BOX_integration' ) - - ## Decorate with generic option sets - self.add_parameter_set( 'fake virtual' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'running scales' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - self.add_parameter_set( 'WW decay', boson='w' ) - self.add_parameter_set( 'zero width' ) - - ## Set optimised integration parameters - self.itmx1 = 3 - self.itmx2 = 6 - self.ncall1 = 800000 - self.ncall2 = 800000 - self.nubound = 500000 - self.foldx = 2 - self.foldy = 2 - self.foldphi = 2 - - ## Override defaults - self.allowed_decay_modes = [ 'WpWpevev', 'WpWpevmuv', 'WpWpevtauv', 'WpWpevemuv', 'WpWpevlv',\ - 'WmWmevev', 'WmWmevmuv', 'WmWmevtauv', 'WmWmevemuv', 'WmWmevlv',\ - 'WpWpmuvmuv', 'WpWpmuvtauv', 'WpWpmuvemuv', 'WpWpmuvlv',\ - 'WmWmmuvmuv', 'WmWmmuvtauv', 'WmWmmuvemuv', 'WmWmmuvlv',\ - 'WpWptauvtauv', 'WpWptauvemuv', 'WpWptauvlv',\ - 'WmWmtauvtauv', 'WmWmtauvemuv', 'WmWmtauvlv',\ - 'WpWpemuvemuv', 'WpWpemuvlv',\ - 'WmWmemuvemuv', 'WmWmemuvlv',\ - 'WpWplvlv', 'WmWmlvlv' ] - self.decay_mode = 'WpWplvlv' - self.minlo = -1 - self.withdamp = 1 - - self.populate_default_strings() +class PowhegConfig_VBF_ssWW(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_VBF_ssWW, self).__init__(runArgs, opts) + self._powheg_executable += "/vbf_wp_wp/pwhg_main" + + # Logger warnings for unvalidated process + self.logger.warning("Integration parameters have not been validated - see https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/PowhegForATLAS#Changing_POWHEG_BOX_integration") + + # Decorate with generic option sets + self.add_parameter_set("fake virtual") + self.add_parameter_set("generic scale") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("running scales") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + self.add_parameter_set("WW decay", boson="w") + self.add_parameter_set("zero width") + + # Set optimised integration parameters + self.itmx1 = 3 + self.itmx2 = 6 + self.ncall1 = 800000 + self.ncall2 = 800000 + self.nubound = 500000 + self.foldx = 2 + self.foldy = 2 + self.foldphi = 2 + + # Override defaults + self.allowed_decay_modes = ["WpWpevev", "WpWpevmuv", "WpWpevtauv", "WpWpevemuv", "WpWpevlv", + "WmWmevev", "WmWmevmuv", "WmWmevtauv", "WmWmevemuv", "WmWmevlv", + "WpWpmuvmuv", "WpWpmuvtauv", "WpWpmuvemuv", "WpWpmuvlv", + "WmWmmuvmuv", "WmWmmuvtauv", "WmWmmuvemuv", "WmWmmuvlv", + "WpWptauvtauv", "WpWptauvemuv", "WpWptauvlv", + "WmWmtauvtauv", "WmWmtauvemuv", "WmWmtauvlv", + "WpWpemuvemuv", "WpWpemuvlv", + "WmWmemuvemuv", "WmWmemuvlv", + "WpWplvlv", "WmWmlvlv"] + self.decay_mode = "WpWplvlv" + self.withdamp = 1 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_W.py b/Generators/PowhegControl/python/processes/PowhegConfig_W.py index a4ac457cf465f..f56e9917c0266 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_W.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_W.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_W +# @PowhegControl PowhegConfig_W # Powheg configuration for W subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -10,39 +10,41 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -## Default Powheg configuration for W generation +# Default Powheg configuration for W generation # # Create a full configurable with all available Powheg options -class PowhegConfig_W(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_W, self).__init__( runArgs, opts ) - self._powheg_executable += '/W/pwhg_main' - - ## Decorate with generic option sets - self.add_parameter_set( 'CKM' ) - self.add_parameter_set( 'electroweak properties', boson='W' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'mass window' ) - self.add_parameter_set( 'running scale' ) - self.add_parameter_set( 'running width' ) - self.add_parameter_set( 'second generation quark mass', prefix='lhe' ) - self.add_parameter_set( 'sin**2 theta W' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'vector boson decay mode' ) - self.add_parameter_set( 'W ID' ) - - ## Set optimised integration parameters - self.ncall1 = 120000 - self.ncall2 = 250000 - self.nubound = 20000 - - ## Override defaults - self.mass_low = 2.5 - self.mass_high = 2.0 * self.beam_energy - self.withdamp = 1 - self.withsubtr = 1 - self.withnegweights = 1 - - self.populate_default_strings() +class PowhegConfig_W(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_W, self).__init__(runArgs, opts) + self._powheg_executable += "/W/pwhg_main" + + # Decorate with generic option sets + self.add_parameter_set("CKM") + self.add_parameter_set("electroweak properties", boson="W") + self.add_parameter_set("generic scale") + self.add_parameter_set("mass window") + self.add_parameter_set("running scale") + self.add_parameter_set("running width") + self.add_parameter_set("second generation quark mass", prefix="lhe") + self.add_parameter_set("sin**2 theta W") + self.add_parameter_set("upper bound") + self.add_parameter_set("vector boson decay mode") + self.add_parameter_set("W ID") + + # Set optimised integration parameters + self.ncall1 = 120000 + self.ncall2 = 250000 + self.nubound = 20000 + + # Override defaults + self.mass_low = 2.5 + self.mass_high = 2.0 * self.beam_energy + self.withdamp = 1 + self.withsubtr = 1 + self.withnegweights = 1 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_WW.py b/Generators/PowhegControl/python/processes/PowhegConfig_WW.py index 5c3ef9c36795b..698fffedad246 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_WW.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_WW.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_WW +# @PowhegControl PowhegConfig_WW # Powheg configuration for WW subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -10,42 +10,43 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -## Default Powheg configuration for WW generation +# Default Powheg configuration for WW generation # # Create a full configurable with all available Powheg options -class PowhegConfig_WW(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_WW, self).__init__( runArgs, opts ) - self._powheg_executable += '/WW/pwhg_main' - - ## Decorate with generic option sets - self.add_parameter_set( 'anomalous coupling' ) - self.add_parameter_set( 'diboson' ) - self.add_parameter_set( 'extra tests' ) - self.add_parameter_set( 'fixed scale' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'running width' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - self.add_parameter_set( 'zero width' ) - - ## Set optimised integration parameters - self.ncall1 = 40000 - self.ncall2 = 40000 - self.nubound = 60000 - self.itmx1 = 3 - - ## Override defaults - # See https://docs.google.com/spreadsheets/d/1Aa7FwB74ppHbXles5LyHrKGlvUFi5PxbZC-Mrc3Lz90 for meanings - self.allowed_decay_modes = [ 'WpWmevev', 'WpWmmuvmuv', 'WpWmtauvtauv', 'WpWmevmuv', 'WpWmmuvev',\ - 'WpWmevtauv', 'WpWmtauvev', 'WpWmmuvtauv', 'WpWmtauvmuv', 'WWevmuv',\ - 'WWmuvtauv', 'WWevtauv', 'WWlvlv', 'WWqqqq', 'WWlvqq' ] - self.decay_mode = 'WWlvlv' - self.minlo = -1 - self.withdamp = 1 - - self.populate_default_strings() +class PowhegConfig_WW(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_WW, self).__init__(runArgs, opts) + self._powheg_executable += "/WW/pwhg_main" + + # Decorate with generic option sets + self.add_parameter_set("anomalous coupling") + self.add_parameter_set("diboson") + self.add_parameter_set("extra tests") + self.add_parameter_set("fixed scale") + self.add_parameter_set("generic scale") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("running width") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + self.add_parameter_set("zero width") + + # Set optimised integration parameters + self.ncall1 = 40000 + self.ncall2 = 40000 + self.nubound = 60000 + self.itmx1 = 3 + + # Override defaults + # See https://docs.google.com/spreadsheets/d/1Aa7FwB74ppHbXles5LyHrKGlvUFi5PxbZC-Mrc3Lz90 for meanings + self.allowed_decay_modes = ["WpWmevev", "WpWmmuvmuv", "WpWmtauvtauv", "WpWmevmuv", "WpWmmuvev", + "WpWmevtauv", "WpWmtauvev", "WpWmmuvtauv", "WpWmtauvmuv", "WWevmuv", + "WWmuvtauv", "WWevtauv", "WWlvlv", "WWqqqq", "WWlvqq"] + self.decay_mode = "WWlvlv" + self.withdamp = 1 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_WZ.py b/Generators/PowhegControl/python/processes/PowhegConfig_WZ.py index c321d09d8f976..4dfd1e718b2eb 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_WZ.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_WZ.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_WZ +# @PowhegControl PowhegConfig_WZ # Powheg configuration for WZ subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -10,52 +10,53 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -## Default Powheg configuration for WZ generation +# Default Powheg configuration for WZ generation # # Create a full configurable with all available Powheg options -class PowhegConfig_WZ(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_WZ, self).__init__( runArgs, opts ) - self._powheg_executable += '/WZ/pwhg_main' - - ## Add process specific options - self.add_parameter( 'diagCKM', 0, desc='(default 0) 0:normal CKM; 1:diagonal CKM' ) - - ## Decorate with generic option sets - self.add_parameter_set( 'anomalous coupling' ) - self.add_parameter_set( 'diboson' ) - self.add_parameter_set( 'diboson interference' ) - self.add_parameter_set( 'dilepton mass' ) - self.add_parameter_set( 'extra tests' ) - self.add_parameter_set( 'fixed scale' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'running width' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - self.add_parameter_set( 'zero width' ) - - ## Set optimised integration parameters - self.ncall1 = 30000 - self.ncall2 = 150000 - self.nubound = 300000 - self.itmx2 = 12 - self.xupbound = 10 - - ## Override defaults - # See https://docs.google.com/spreadsheets/d/1Aa7FwB74ppHbXles5LyHrKGlvUFi5PxbZC-Mrc3Lz90 for meanings - self.allowed_decay_modes = [ 'WZevee', 'WZmuvmumu', 'WZtauvtautau', 'WpZevee', 'WmZevee',\ - 'WpZmuvmumu', 'WmZmuvmumu', 'WpZtauvtautau', 'WmZtauvtautau', 'WZevmumu', \ - 'WpZevmumu', 'WmZevmumu', 'WZmuvee', 'WpZmuvee', 'WmZmuvee',\ - 'WZevtautau', 'WpZevtautau', 'WmZevtautau', 'WZmuvtautau', 'WpZmuvtautau',\ - 'WmZmuvtautau', 'WZtauvee', 'WpZtauvee', 'WmZtauvee', 'WZtauvmumu',\ - 'WpZtauvmumu', 'WmZtauvmumu', 'WZlvqq', 'WZqqll', 'WZlvll',\ - 'WZlvvv', 'WZqqvv', 'WZqqqq' ] - self.decay_mode = 'WZlvll' - self.minlo = -1 - self.withdamp = 1 - - self.populate_default_strings() +class PowhegConfig_WZ(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_WZ, self).__init__(runArgs, opts) + self._powheg_executable += "/WZ/pwhg_main" + + # Add process specific options + self.add_parameter("diagCKM", 0, desc="(default 0) 0:normal CKM; 1:diagonal CKM") + + # Decorate with generic option sets + self.add_parameter_set("anomalous coupling") + self.add_parameter_set("diboson") + self.add_parameter_set("diboson interference") + self.add_parameter_set("dilepton mass") + self.add_parameter_set("extra tests") + self.add_parameter_set("fixed scale") + self.add_parameter_set("generic scale") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("running width") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + self.add_parameter_set("zero width") + + # Set optimised integration parameters + self.ncall1 = 30000 + self.ncall2 = 150000 + self.nubound = 300000 + self.itmx2 = 12 + self.xupbound = 10 + + # Override defaults + # See https://docs.google.com/spreadsheets/d/1Aa7FwB74ppHbXles5LyHrKGlvUFi5PxbZC-Mrc3Lz90 for meanings + self.allowed_decay_modes = ["WZevee", "WZmuvmumu", "WZtauvtautau", "WpZevee", "WmZevee", + "WpZmuvmumu", "WmZmuvmumu", "WpZtauvtautau", "WmZtauvtautau", "WZevmumu", + "WpZevmumu", "WmZevmumu", "WZmuvee", "WpZmuvee", "WmZmuvee", + "WZevtautau", "WpZevtautau", "WmZevtautau", "WZmuvtautau", "WpZmuvtautau", + "WmZmuvtautau", "WZtauvee", "WpZtauvee", "WmZtauvee", "WZtauvmumu", + "WpZtauvmumu", "WmZtauvmumu", "WZlvqq", "WZqqll", "WZlvll", + "WZlvvv", "WZqqvv", "WZqqqq"] + self.decay_mode = "WZlvll" + self.withdamp = 1 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_W_EW.py b/Generators/PowhegControl/python/processes/PowhegConfig_W_EW.py index 38d695694363c..5e52de2770e7b 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_W_EW.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_W_EW.py @@ -1,62 +1,61 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_W_EW +# @PowhegControl PowhegConfig_W_EW # Powheg configuration for W_EW subprocess # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -from .. import ATLASCommonParameters -## Default Powheg configuration for W_EW generation +# Default Powheg configuration for W_EW generation # # Create a full configurable with all available Powheg options -class PowhegConfig_W_EW(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_W_EW, self).__init__( runArgs, opts ) - self._powheg_executable += '/W_ew-BMNNP/pwhg_main' - self._PHOTOS_executable = self.powheg_directory + '/W_ew-BMNNP/main-PHOTOS-lhef' - - ## Add process specific options - self.add_parameter( 'kt2minqed', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'phsp_Wm', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'phsp_Ww', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'theta_damp', -1, desc='(-1:Powheg default)' ) - - ## Decorate with generic option sets - self.add_parameter_set( 'CKM' ) - self.add_parameter_set( 'electroweak properties', boson='W' ) - self.add_parameter_set( 'extra tests' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'mass window' ) - self.add_parameter_set( 'NLO EW' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'running scale' ) - self.add_parameter_set( 'second generation quark mass', prefix='lhe' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - self.add_parameter_set( 'vector boson decay mode' ) - self.add_parameter_set( 'W ID' ) - - ## Set optimised integration parameters - self.ncall1 = 1000 - self.ncall2 = 10000 - self.nubound = 10000 - self.foldx = 2 - self.foldy = 2 - - ## Override defaults - self.idvecbos = -24 - self.minlo = -1 - self.vdecaymode = 11 - self.mass_low = 2.5 - self.mass_high = 2.0 * self.beam_energy - # self.scheme = 1 - self.withdamp = 1 - self.withnegweights = 1 - - self.populate_default_strings() +class PowhegConfig_W_EW(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_W_EW, self).__init__(runArgs, opts) + self._powheg_executable += "/W_ew-BMNNP/pwhg_main" + self._PHOTOS_executable = self.powheg_directory + "/W_ew-BMNNP/main-PHOTOS-lhef" + + # Add process specific options + self.add_parameter("kt2minqed", -1, desc="(-1:Powheg default)") + self.add_parameter("phsp_Wm", -1, desc="(-1:Powheg default)") + self.add_parameter("phsp_Ww", -1, desc="(-1:Powheg default)") + self.add_parameter("theta_damp", -1, desc="(-1:Powheg default)") + + # Decorate with generic option sets + self.add_parameter_set("CKM") + self.add_parameter_set("electroweak properties", boson="W") + self.add_parameter_set("extra tests") + self.add_parameter_set("generic scale") + self.add_parameter_set("mass window") + self.add_parameter_set("NLO EW") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("running scale") + self.add_parameter_set("second generation quark mass", prefix="lhe") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + self.add_parameter_set("vector boson decay mode") + self.add_parameter_set("W ID") + + # Set optimised integration parameters + self.ncall1 = 1000 + self.ncall2 = 10000 + self.nubound = 10000 + self.foldx = 2 + self.foldy = 2 + + # Override defaults + self.idvecbos = -24 + self.vdecaymode = 11 + self.mass_low = 2.5 + self.mass_high = 2.0 * self.beam_energy + self.withdamp = 1 + self.withnegweights = 1 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_Wj.py b/Generators/PowhegControl/python/processes/PowhegConfig_Wj.py index e489c138fcdf9..a66005e0b8812 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_Wj.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_Wj.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_Wj +# @PowhegControl PowhegConfig_Wj # Powheg configuration for Wj subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -10,49 +10,51 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -## Default Powheg configuration for Wj generation +# Default Powheg configuration for Wj generation # # Create a full configurable with all available Powheg options -class PowhegConfig_Wj(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_Wj, self).__init__( runArgs, opts ) - self._powheg_executable += '/Wj/pwhg_main' - - ## Decorate with generic option sets - self.add_parameter_set( 'CKM' ) - self.add_parameter_set( 'electroweak properties', boson='W' ) - self.add_parameter_set( 'extra tests' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'ISR/FSR' ) - self.add_parameter_set( 'lepton mass', prefix='lhfm' ) - self.add_parameter_set( 'MiNLO NNLL' ) - self.add_parameter_set( 'NNLO reweighting' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'running scales' ) - self.add_parameter_set( 'sin**2 theta W' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - self.add_parameter_set( 'vector boson decay mode' ) - self.add_parameter_set( 'W ID' ) - self.add_parameter_set( 'W mass window' ) - - - ## Set optimised integration parameters - self.ncall1 = 30000 - self.ncall2 = 80000 - self.nubound = 60000 - self.xupbound = 6 - self.foldx = 5 - self.foldy = 5 - self.foldphi = 5 - - ## Override defaults - self.bornktmin = 5.0 - self.mass_W_low = 2.5 - self.mass_W_high = 2.0 * self.beam_energy - self.withdamp = 1 - - self.populate_default_strings() +class PowhegConfig_Wj(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_Wj, self).__init__(runArgs, opts) + self._powheg_executable += "/Wj/pwhg_main" + + # Decorate with generic option sets + self.add_parameter_set("CKM") + self.add_parameter_set("electroweak properties", boson="W") + self.add_parameter_set("extra tests") + self.add_parameter_set("generic scale") + self.add_parameter_set("ISR/FSR") + self.add_parameter_set("lepton mass", prefix="lhfm") + self.add_parameter_set("MiNLO NNLL") + self.add_parameter_set("NNLO reweighting") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("running scales") + self.add_parameter_set("sin**2 theta W") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + self.add_parameter_set("vector boson decay mode") + self.add_parameter_set("W ID") + self.add_parameter_set("W mass window") + + # Set optimised integration parameters + self.ncall1 = 30000 + self.ncall2 = 80000 + self.nubound = 60000 + self.xupbound = 6 + self.foldx = 5 + self.foldy = 5 + self.foldphi = 5 + + # Override defaults + self.bornktmin = 5.0 + self.mass_W_low = 2.5 + self.mass_W_high = 2.0 * self.beam_energy + self.minlo = 1 + self.withdamp = 1 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_Wjj.py b/Generators/PowhegControl/python/processes/PowhegConfig_Wjj.py index 1791fe90c804f..1280b4c40689f 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_Wjj.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_Wjj.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_Wjj +# @PowhegControl PowhegConfig_Wjj # Powheg configuration for Wjj subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,51 +8,53 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -from .. import ATLASCommonParameters -## Default Powheg configuration for Wjj generation +# Default Powheg configuration for Wjj generation # # Create a full configurable with all available Powheg options -class PowhegConfig_Wjj(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_Wjj, self).__init__( runArgs, opts ) - self._powheg_executable += '/W2jet/pwhg_main' - - ## Logger warnings for unvalidated process - self.logger.warning( 'Integration parameters have not been validated - see https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/PowhegForATLAS#Changing_POWHEG_BOX_integration' ) - - ## Add process specific options - self.add_parameter( 'vdecaymodeW', -11, desc='(-11:e+; -13:mu+; 11:e-; 13:mu-). PDG ID of W decay' ) - - ## Decorate with generic option sets - self.add_parameter_set( 'Breit-Wigner width' ) - self.add_parameter_set( 'dilepton mass' ) - self.add_parameter_set( 'electroweak properties', boson='w' ) - self.add_parameter_set( 'extra tests' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'radiation parametrisation' ) - self.add_parameter_set( 'running scales' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - self.add_parameter_set( 'Vector boson + two jets' ) - - ## Set optimised integration parameters - self.itmx1 = 4 - self.itmx2 = 4 - self.ncall1 = 15000000 - self.ncall2 = 30000000 - self.nubound = 10000000 - self.xupbound = 5 - self.foldx = 25 - self.foldy = 25 - self.foldphi = 25 - - ## Override defaults - self.bornktmin = 10.0 - self.withdamp = 1 - - self.populate_default_strings() +class PowhegConfig_Wjj(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_Wjj, self).__init__(runArgs, opts) + self._powheg_executable += "/W2jet/pwhg_main" + + # Logger warnings for unvalidated process + self.logger.warning("Integration parameters have not been validated - see https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/PowhegForATLAS#Changing_POWHEG_BOX_integration") + + # Add process specific options + self.add_parameter("vdecaymodeW", -11, desc="(-11:e+; -13:mu+; 11:e-; 13:mu-). PDG ID of W decay") + + # Decorate with generic option sets + self.add_parameter_set("Breit-Wigner width") + self.add_parameter_set("dilepton mass") + self.add_parameter_set("electroweak properties", boson="w") + self.add_parameter_set("extra tests") + self.add_parameter_set("generic scale") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("radiation parametrisation") + self.add_parameter_set("running scales") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + self.add_parameter_set("Vector boson + two jets") + + # Set optimised integration parameters + self.itmx1 = 4 + self.itmx2 = 4 + self.ncall1 = 15000000 + self.ncall2 = 30000000 + self.nubound = 10000000 + self.xupbound = 5 + self.foldx = 25 + self.foldy = 25 + self.foldphi = 25 + + # Override defaults + self.bornktmin = 10.0 + self.minlo = 1 + self.withdamp = 1 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_Wt_DR.py b/Generators/PowhegControl/python/processes/PowhegConfig_Wt_DR.py index dd7ac7f437ea3..5740dd7e16643 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_Wt_DR.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_Wt_DR.py @@ -1,44 +1,45 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_Wt_DR +# @PowhegControl PowhegConfig_Wt_DR # Powheg configuration for Wt_DR subprocess # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -from .. import ATLASCommonParameters -## Default Powheg configuration for Wt_DR generation +# Default Powheg configuration for Wt_DR generation # # Create a full configurable with all available Powheg options -class PowhegConfig_Wt_DR(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_Wt_DR, self).__init__( runArgs, opts ) - self._powheg_executable += '/ST_wtch_DR/pwhg_main' - - ## Decorate with generic option sets - self.add_parameter_set( 'CKM' ) - self.add_parameter_set( 'electroweak properties', boson='w' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'lepton mass', prefix=['lhfm','tdec'] ) - self.add_parameter_set( 'second generation quark mass', prefix='lhfm' ) - self.add_parameter_set( 'sin**2 theta W' ) - self.add_parameter_set( 'top decay mode' ) - self.add_parameter_set( 'top decay branching', prefix='tdec' ) - self.add_parameter_set( 'top properties' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'W decay mode' ) - - ## Set optimised integration parameters - self.ncall1 = 50000 - self.ncall2 = 50000 - self.nubound = 50000 - - ## Override defaults - self.topdecaymode = 11111 - self.withdamp = 0 - - self.populate_default_strings() +class PowhegConfig_Wt_DR(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_Wt_DR, self).__init__(runArgs, opts) + self._powheg_executable += "/ST_wtch_DR/pwhg_main" + + # Decorate with generic option sets + self.add_parameter_set("CKM") + self.add_parameter_set("electroweak properties", boson="w") + self.add_parameter_set("generic scale") + self.add_parameter_set("lepton mass", prefix=["lhfm", "tdec"]) + self.add_parameter_set("second generation quark mass", prefix="lhfm") + self.add_parameter_set("sin**2 theta W") + self.add_parameter_set("top decay mode") + self.add_parameter_set("top decay branching", prefix="tdec") + self.add_parameter_set("top properties") + self.add_parameter_set("upper bound") + self.add_parameter_set("W decay mode") + + # Set optimised integration parameters + self.ncall1 = 50000 + self.ncall2 = 50000 + self.nubound = 50000 + + # Override defaults + self.topdecaymode = 11111 + self.withdamp = 0 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_Wt_DS.py b/Generators/PowhegControl/python/processes/PowhegConfig_Wt_DS.py index dc7449b9ff545..b335d96715ed8 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_Wt_DS.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_Wt_DS.py @@ -1,53 +1,54 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_Wt_DS +# @PowhegControl PowhegConfig_Wt_DS # Powheg configuration for Wt_DS subprocess # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -from .. import ATLASCommonParameters -## Default Powheg configuration for Wt_DS generation +# Default Powheg configuration for Wt_DS generation # # Create a full configurable with all available Powheg options -class PowhegConfig_Wt_DS(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_Wt_DS, self).__init__( runArgs, opts ) - self._powheg_executable += '/ST_wtch_DS/pwhg_main' - - ## Add process specific options - self.add_parameter( 'nwidthcutoff', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'withfluxfactor', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'withthetacut', -1, desc='(-1:Powheg default)' ) - - ## Decorate with generic option sets - self.add_parameter_set( 'CKM' ) - self.add_parameter_set( 'electroweak properties', boson='w' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'lepton mass', prefix=['lhfm','tdec'] ) - self.add_parameter_set( 'second generation quark mass', prefix='lhfm' ) - self.add_parameter_set( 'sin**2 theta W' ) - self.add_parameter_set( 'top decay mode' ) - self.add_parameter_set( 'top decay branching', prefix='tdec' ) - self.add_parameter_set( 'top properties' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'W decay mode' ) - - ## Set optimised integration parameters - self.ncall1 = 40000 - self.ncall2 = 200000 - self.nubound = 200000 - self.xupbound = 4 - self.foldx = 5 - self.foldy = 2 - self.foldphi = 2 - - ## Override defaults - self.topdecaymode = 11111 - self.withdamp = 0 - - self.populate_default_strings() +class PowhegConfig_Wt_DS(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_Wt_DS, self).__init__(runArgs, opts) + self._powheg_executable += "/ST_wtch_DS/pwhg_main" + + # Add process specific options + self.add_parameter("nwidthcutoff", -1, desc="(-1:Powheg default)") + self.add_parameter("withfluxfactor", -1, desc="(-1:Powheg default)") + self.add_parameter("withthetacut", -1, desc="(-1:Powheg default)") + + # Decorate with generic option sets + self.add_parameter_set("CKM") + self.add_parameter_set("electroweak properties", boson="w") + self.add_parameter_set("generic scale") + self.add_parameter_set("lepton mass", prefix=["lhfm", "tdec"]) + self.add_parameter_set("second generation quark mass", prefix="lhfm") + self.add_parameter_set("sin**2 theta W") + self.add_parameter_set("top decay mode") + self.add_parameter_set("top decay branching", prefix="tdec") + self.add_parameter_set("top properties") + self.add_parameter_set("upper bound") + self.add_parameter_set("W decay mode") + + # Set optimised integration parameters + self.ncall1 = 40000 + self.ncall2 = 200000 + self.nubound = 200000 + self.xupbound = 4 + self.foldx = 5 + self.foldy = 2 + self.foldphi = 2 + + # Override defaults + self.topdecaymode = 11111 + self.withdamp = 0 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_Z.py b/Generators/PowhegControl/python/processes/PowhegConfig_Z.py index dafe9fe35069d..366e8052a381e 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_Z.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_Z.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_Z +# @PowhegControl PowhegConfig_Z # Powheg configuration for Z subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -10,39 +10,41 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -## Default Powheg configuration for Z generation +# Default Powheg configuration for Z generation # # Create a full configurable with all available Powheg options -class PowhegConfig_Z(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_Z, self).__init__( runArgs, opts ) - self._powheg_executable += '/Z/pwhg_main' - - ## Decorate with generic option sets - self.add_parameter_set( 'electroweak properties', boson='W' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'mass window' ) - self.add_parameter_set( 'running scale' ) - self.add_parameter_set( 'running width' ) - self.add_parameter_set( 'second generation quark mass', prefix='lhe' ) - self.add_parameter_set( 'sin**2 theta W' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'vector boson decay mode' ) - - ## Set optimised integration parameters - self.ncall1 = 120000 - self.ncall2 = 250000 - self.nubound = 20000 - self.foldx = 2 - self.foldy = 2 - self.foldphi = 2 - - ## Override defaults - self.withsubtr = 1 - self.withnegweights = 1 - self.mass_low = 60.0 - self.mass_high = 2.0 * self.beam_energy - - self.populate_default_strings() +class PowhegConfig_Z(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_Z, self).__init__(runArgs, opts) + self._powheg_executable += "/Z/pwhg_main" + + # Decorate with generic option sets + self.add_parameter_set("electroweak properties", boson="W") + self.add_parameter_set("generic scale") + self.add_parameter_set("mass window") + self.add_parameter_set("running scale") + self.add_parameter_set("running width") + self.add_parameter_set("second generation quark mass", prefix="lhe") + self.add_parameter_set("sin**2 theta W") + self.add_parameter_set("upper bound") + self.add_parameter_set("vector boson decay mode") + + # Set optimised integration parameters + self.ncall1 = 120000 + self.ncall2 = 250000 + self.nubound = 20000 + self.foldx = 2 + self.foldy = 2 + self.foldphi = 2 + + # Override defaults + self.withsubtr = 1 + self.withnegweights = 1 + self.mass_low = 60.0 + self.mass_high = 2.0 * self.beam_energy + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_ZZ.py b/Generators/PowhegControl/python/processes/PowhegConfig_ZZ.py index 5a54448bb2067..05155f657c8d0 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_ZZ.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_ZZ.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_ZZ +# @PowhegControl PowhegConfig_ZZ # Powheg configuration for ZZ subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -10,49 +10,50 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -## Default Powheg configuration for ZZ generation +# Default Powheg configuration for ZZ generation # # Create a full configurable with all available Powheg options -class PowhegConfig_ZZ(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_ZZ, self).__init__( runArgs, opts ) - self._powheg_executable += '/ZZ/pwhg_main' - - ## Add process specific options - self.add_parameter( 'cutallpairs', -1, desc='(-1:Powheg-default)' ) - - ## Decorate with generic option sets - self.add_parameter_set( 'diboson' ) - self.add_parameter_set( 'diboson interference' ) - self.add_parameter_set( 'dilepton mass' ) - self.add_parameter_set( 'fixed scale' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'running width' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - self.add_parameter_set( 'zero width' ) - - ## Set optimised integration parameters - self.ncall1 = 50000 - self.ncall2 = 50000 - self.nubound = 200000 - self.xupbound = 10 - self.itmx1 = 5 - self.itmx2 = 14 - self.foldx = 2 - self.foldy = 2 - - ## Override defaults - # See https://docs.google.com/spreadsheets/d/1Aa7FwB74ppHbXles5LyHrKGlvUFi5PxbZC-Mrc3Lz90 for meanings - self.allowed_decay_modes = [ 'ZZllll', 'ZZqqll', 'ZZqqqq', 'ZZvvvv', 'ZZvvll',\ - 'ZZvvqq', 'ZZeeee', 'ZZmumumumu', 'ZZtautautautau', 'ZZmumuee',\ - 'ZZeetautau', 'ZZtautaumumu', 'ZZvvee', 'ZZvvmumu', 'ZZvvtautau' ] - self.decay_mode = 'ZZllll' - self.minlo = -1 - self.withdamp = 1 - - self.populate_default_strings() +class PowhegConfig_ZZ(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_ZZ, self).__init__(runArgs, opts) + self._powheg_executable += "/ZZ/pwhg_main" + + # Add process specific options + self.add_parameter("cutallpairs", -1, desc="(-1:Powheg-default)") + + # Decorate with generic option sets + self.add_parameter_set("diboson") + self.add_parameter_set("diboson interference") + self.add_parameter_set("dilepton mass") + self.add_parameter_set("fixed scale") + self.add_parameter_set("generic scale") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("running width") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + self.add_parameter_set("zero width") + + # Set optimised integration parameters + self.ncall1 = 50000 + self.ncall2 = 50000 + self.nubound = 200000 + self.xupbound = 10 + self.itmx1 = 5 + self.itmx2 = 14 + self.foldx = 2 + self.foldy = 2 + + # Override defaults + # See https://docs.google.com/spreadsheets/d/1Aa7FwB74ppHbXles5LyHrKGlvUFi5PxbZC-Mrc3Lz90 for meanings + self.allowed_decay_modes = ["ZZllll", "ZZqqll", "ZZqqqq", "ZZvvvv", "ZZvvll", + "ZZvvqq", "ZZeeee", "ZZmumumumu", "ZZtautautautau", "ZZmumuee", + "ZZeetautau", "ZZtautaumumu", "ZZvvee", "ZZvvmumu", "ZZvvtautau"] + self.decay_mode = "ZZllll" + self.withdamp = 1 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_Z_EW.py b/Generators/PowhegControl/python/processes/PowhegConfig_Z_EW.py index acb898a222f93..c220b8fde1569 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_Z_EW.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_Z_EW.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_Z_EW +# @PowhegControl PowhegConfig_Z_EW # Powheg configuration for Z_EW subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -9,64 +9,65 @@ from ..PowhegConfig_base import PowhegConfig_base from .. import ATLASCommonParameters -## Default Powheg configuration for Z generation +# Default Powheg configuration for Z generation # # Create a full configurable with all available Powheg options -class PowhegConfig_Z_EW(PowhegConfig_base) : +class PowhegConfig_Z_EW(PowhegConfig_base): - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_Z_EW, self).__init__( runArgs, opts ) - self._powheg_executable += '/Z_ew-BMNNPV/pwhg_main' - self._PHOTOS_executable = self.powheg_directory + '/Z_ew-BMNNPV/main-PHOTOS-lhef' + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_Z_EW, self).__init__(runArgs, opts) + self._powheg_executable += "/Z_ew-BMNNPV/pwhg_main" + self._PHOTOS_executable = self.powheg_directory + "/Z_ew-BMNNPV/main-PHOTOS-lhef" - ## Add process specific options - self.add_parameter( 'alphaem_z', ATLASCommonParameters.alphaem, desc='alphaem' ) - self.add_parameter( 'complexmasses', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'iftopinloop', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'ktmaxqed', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'mass_b', ATLASCommonParameters.mass_b, desc='b mass', parameter='Bmass' ) - self.add_parameter( 'mass_c', ATLASCommonParameters.mass_c, desc='c mass', parameter='Cmass' ) - self.add_parameter( 'mass_d', ATLASCommonParameters.mass_d, desc='d mass', parameter='Dmass' ) - self.add_parameter( 'mass_e', ATLASCommonParameters.mass_e, desc='electron mass', parameter='Elmass' ) - self.add_parameter( 'mass_mu', ATLASCommonParameters.mass_mu, desc='muon mass', parameter='Mumass' ) - self.add_parameter( 'mass_s', ATLASCommonParameters.mass_s, desc='s mass', parameter='Smass' ) - self.add_parameter( 'mass_tau', ATLASCommonParameters.mass_tau, desc='tau mass', parameter='Taumass' ) - self.add_parameter( 'mass_u', ATLASCommonParameters.mass_u, desc='u mass', parameter='Umass' ) - self.add_parameter( 'photoninduced', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'phsp_Zm', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'phsp_Zw', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'width_H', ATLASCommonParameters.width_H, desc='width of Higgs in GeV', parameter='Hwidth' ) + # Add process specific options + self.add_parameter("alphaem_z", ATLASCommonParameters.alphaem, desc="alphaem") + self.add_parameter("complexmasses", -1, desc="(-1:Powheg default)") + self.add_parameter("iftopinloop", -1, desc="(-1:Powheg default)") + self.add_parameter("ktmaxqed", -1, desc="(-1:Powheg default)") + self.add_parameter("mass_b", ATLASCommonParameters.mass_b, desc="b mass", parameter="Bmass") + self.add_parameter("mass_c", ATLASCommonParameters.mass_c, desc="c mass", parameter="Cmass") + self.add_parameter("mass_d", ATLASCommonParameters.mass_d, desc="d mass", parameter="Dmass") + self.add_parameter("mass_e", ATLASCommonParameters.mass_e, desc="electron mass", parameter="Elmass") + self.add_parameter("mass_mu", ATLASCommonParameters.mass_mu, desc="muon mass", parameter="Mumass") + self.add_parameter("mass_s", ATLASCommonParameters.mass_s, desc="s mass", parameter="Smass") + self.add_parameter("mass_tau", ATLASCommonParameters.mass_tau, desc="tau mass", parameter="Taumass") + self.add_parameter("mass_u", ATLASCommonParameters.mass_u, desc="u mass", parameter="Umass") + self.add_parameter("photoninduced", -1, desc="(-1:Powheg default)") + self.add_parameter("phsp_Zm", -1, desc="(-1:Powheg default)") + self.add_parameter("phsp_Zw", -1, desc="(-1:Powheg default)") + self.add_parameter("width_H", ATLASCommonParameters.width_H, desc="width of Higgs in GeV", parameter="Hwidth") - ## Decorate with generic option sets - self.add_parameter_set( 'electroweak properties', boson='W' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'mass window' ) - self.add_parameter_set( 'MiNLO NNLL' ) - self.add_parameter_set( 'NLO EW' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'radiation parametrisation' ) - self.add_parameter_set( 'running scale' ) - self.add_parameter_set( 'running scales' ) - self.add_parameter_set( 'second generation quark mass', prefix='lhe' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - self.add_parameter_set( 'vector boson decay mode' ) + # Decorate with generic option sets + self.add_parameter_set("electroweak properties", boson="W", coupling="alphaem") + self.add_parameter_set("generic scale") + self.add_parameter_set("mass window") + self.add_parameter_set("MiNLO NNLL") + self.add_parameter_set("NLO EW") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("radiation parametrisation") + self.add_parameter_set("running scale") + self.add_parameter_set("running scales") + self.add_parameter_set("second generation quark mass", prefix="lhe") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + self.add_parameter_set("vector boson decay mode") - ## Set optimised integration parameters - self.ncall1 = 1000 - self.ncall2 = 10000 - self.nubound = 20000 - self.foldx = 2 - self.foldy = 2 - self.foldphi = 1 + # Set optimised integration parameters + self.ncall1 = 1000 + self.ncall2 = 10000 + self.nubound = 20000 + self.foldx = 2 + self.foldy = 2 + self.foldphi = 1 - ## Override defaults - self.mass_low = 60.0 - self.mass_high = 2.0 * self.beam_energy - self.minlo = -1 - self.vdecaymode = 11 - self.withnegweights = 1 + # Override defaults + self.mass_low = 60.0 + self.mass_high = 2.0 * self.beam_energy + self.vdecaymode = 11 + self.withnegweights = 1 - self.populate_default_strings() + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_Zj.py b/Generators/PowhegControl/python/processes/PowhegConfig_Zj.py index 2604577ef8e03..9df473d6f319b 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_Zj.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_Zj.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_Zj +# @PowhegControl PowhegConfig_Zj # Powheg configuration for Zj subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -10,45 +10,48 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -## Default Powheg configuration for Zj generation +# Default Powheg configuration for Zj generation # # Create a full configurable with all available Powheg options -class PowhegConfig_Zj(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_Zj, self).__init__( runArgs, opts ) - self._powheg_executable += '/Zj/pwhg_main' - - ## Decorate with generic option sets - self.add_parameter_set( 'electroweak properties', boson='W' ) - self.add_parameter_set( 'extra tests' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'ISR/FSR' ) - self.add_parameter_set( 'lepton mass', prefix='lhfm' ) - self.add_parameter_set( 'MiNLO NNLL' ) - self.add_parameter_set( 'NNLO reweighting' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'running scales' ) - self.add_parameter_set( 'sin**2 theta W' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - self.add_parameter_set( 'vector boson decay mode' ) - self.add_parameter_set( 'Z mass window' ) - - ## Set optimised integration parameters - self.ncall1 = 30000 - self.ncall2 = 350000 - self.nubound = 3000000 - self.xupbound = 20 - self.foldx = 5 - self.foldy = 5 - self.foldphi = 5 - - ## Override defaults - self.bornktmin = 5.0 - self.mass_Z_low = 60.0 - self.mass_Z_high = 2.0 * self.beam_energy - - self.populate_default_strings() +class PowhegConfig_Zj(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_Zj, self).__init__(runArgs, opts) + self._powheg_executable += "/Zj/pwhg_main" + + # Decorate with generic option sets + self.add_parameter_set("electroweak properties", boson="W") + self.add_parameter_set("extra tests") + self.add_parameter_set("generic scale") + self.add_parameter_set("ISR/FSR") + self.add_parameter_set("lepton mass", prefix="lhfm") + self.add_parameter_set("MiNLO NNLL") + self.add_parameter_set("NNLO reweighting") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("running scales") + self.add_parameter_set("sin**2 theta W") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + self.add_parameter_set("vector boson decay mode") + self.add_parameter_set("Z mass window") + + # Set optimised integration parameters + self.ncall1 = 30000 + self.ncall2 = 350000 + self.nubound = 3000000 + self.xupbound = 20 + self.foldx = 10 + self.foldy = 5 + self.foldphi = 5 + + # Override defaults + self.bornktmin = 5.0 + self.mass_Z_low = 60.0 + self.mass_Z_high = 2.0 * self.beam_energy + self.minlo = 1 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_Zjj.py b/Generators/PowhegControl/python/processes/PowhegConfig_Zjj.py index d1aab1864da61..00b05970d4ed0 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_Zjj.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_Zjj.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_Zjj +# @PowhegControl PowhegConfig_Zjj # Powheg configuration for Zjj subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,53 +8,55 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -from .. import ATLASCommonParameters -## Default Powheg configuration for Zjj generation +# Default Powheg configuration for Zjj generation # # Create a full configurable with all available Powheg options -class PowhegConfig_Zjj(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_Zjj, self).__init__( runArgs, opts ) - self._powheg_executable += '/Z2jet/pwhg_main' - - ## Logger warnings for unvalidated process - self.logger.warning( 'Integration parameters have not been validated - see https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/PowhegForATLAS#Changing_POWHEG_BOX_integration' ) - - ## Add process specific options - self.add_parameter( 'mllmax', 2.0*self.beam_energy, desc='Maximum invariant mass of lepton pairs from Z decay' ) - self.add_parameter( 'vdecaymodeZ', 11, desc='(11:e-; 13:mu-). PDG ID of first Z decay product (must be positive)' ) - - ## Decorate with generic option sets - self.add_parameter_set( 'Breit-Wigner width' ) - self.add_parameter_set( 'dilepton mass' ) - self.add_parameter_set( 'electroweak properties', boson='w' ) - self.add_parameter_set( 'fake virtual' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting') - self.add_parameter_set( 'radiation parametrisation' ) - self.add_parameter_set( 'running scales' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - self.add_parameter_set( 'Vector boson + two jets' ) - - ## Set optimised integration parameters - self.itmx1 = 5 - self.itmx2 = 5 - self.ncall1 = 8000000 - self.ncall2 = 12000000 - self.nubound = 32000000 - self.xupbound = 4 - self.foldx = 25 - self.foldy = 25 - self.foldphi = 25 - - ## Override defaults - self.bornktmin = 10.0 - self.mllmin = 60.0 - self.withdamp = 1 - - self.populate_default_strings() +class PowhegConfig_Zjj(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_Zjj, self).__init__(runArgs, opts) + self._powheg_executable += "/Z2jet/pwhg_main" + + # Logger warnings for unvalidated process + self.logger.warning("Integration parameters have not been validated - see https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/PowhegForATLAS#Changing_POWHEG_BOX_integration") + + # Add process specific options + self.add_parameter("mllmax", 2.0 * self.beam_energy, desc="Maximum invariant mass of lepton pairs from Z decay") + self.add_parameter("vdecaymodeZ", 11, desc="(11:e-; 13:mu-). PDG ID of first Z decay product (must be positive)") + + # Decorate with generic option sets + self.add_parameter_set("Breit-Wigner width") + self.add_parameter_set("dilepton mass") + self.add_parameter_set("electroweak properties", boson="w") + self.add_parameter_set("fake virtual") + self.add_parameter_set("generic scale") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("radiation parametrisation") + self.add_parameter_set("running scales") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + self.add_parameter_set("Vector boson + two jets") + + # Set optimised integration parameters + self.itmx1 = 5 + self.itmx2 = 5 + self.ncall1 = 8000000 + self.ncall2 = 12000000 + self.nubound = 32000000 + self.xupbound = 4 + self.foldx = 25 + self.foldy = 25 + self.foldphi = 25 + + # Override defaults + self.bornktmin = 10.0 + self.minlo = 1 + self.mllmin = 60.0 + self.withdamp = 1 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_bb.py b/Generators/PowhegControl/python/processes/PowhegConfig_bb.py index 8b600754e8ae9..c52662f43c23f 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_bb.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_bb.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_bb +# @PowhegControl PowhegConfig_bb # Powheg configuration for bb subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -11,42 +11,43 @@ from ..PowhegConfig_base import PowhegConfig_base from .. import ATLASCommonParameters -## Default Powheg configuration for bb generation +# Default Powheg configuration for bb generation # # Create a full configurable with all available Powheg options -class PowhegConfig_bb(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_bb, self).__init__( runArgs, opts ) - self._powheg_executable += '/hvq/pwhg_main' - - ## Decorate with generic option sets - self.add_parameter_set( 'extra tests' ) - self.add_parameter_set( 'fixed scale' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'heavy quark' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'second generation quark mass', prefix='lhe' ) - self.add_parameter_set( 'top decay mode' ) - self.add_parameter_set( 'top properties' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - - ## Set optimised integration parameters - self.ncall1 = 10000 - self.ncall2 = 20000 - self.nubound = 60000 - self.xupbound = 6 - self.foldx = 5 - self.foldy = 5 - self.foldphi = 2 - - ## Override defaults - self.bornktmin = 5.0 - self.minlo = -1 - self.quark_mass = ATLASCommonParameters.mass_b - self.topdecaymode = 0 - - self.populate_default_strings() +class PowhegConfig_bb(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_bb, self).__init__(runArgs, opts) + self._powheg_executable += "/hvq/pwhg_main" + + # Decorate with generic option sets + self.add_parameter_set("extra tests") + self.add_parameter_set("fixed scale") + self.add_parameter_set("generic scale") + self.add_parameter_set("heavy quark") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("second generation quark mass", prefix="lhe") + self.add_parameter_set("top decay mode") + self.add_parameter_set("top properties") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + + # Set optimised integration parameters + self.ncall1 = 10000 + self.ncall2 = 20000 + self.nubound = 60000 + self.xupbound = 6 + self.foldx = 5 + self.foldy = 5 + self.foldphi = 2 + + # Override defaults + self.bornktmin = 5.0 + self.quark_mass = ATLASCommonParameters.mass_b + self.topdecaymode = 0 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_ggF_H.py b/Generators/PowhegControl/python/processes/PowhegConfig_ggF_H.py index 3c12b262f45b7..ba464ecd4179e 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_ggF_H.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_ggF_H.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_ggF_H +# @PowhegControl PowhegConfig_ggF_H # Powheg configuration for ggF_H subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -11,44 +11,45 @@ from ..PowhegConfig_base import PowhegConfig_base from .. import ATLASCommonParameters -## Default Powheg configuration for ggF_H generation +# Default Powheg configuration for ggF_H generation # # Create a full configurable with all available Powheg options -class PowhegConfig_ggF_H(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_ggF_H, self).__init__( runArgs, opts ) - self._powheg_executable += '/gg_H_quark-mass-effects/pwhg_main' - - ## Add process specific options - self.add_parameter( 'bwshape', 1, desc='Functional form of Breit-Wigner used to distribute Higgs virtuality. 1:running width; 2:hwidth' ) - self.add_parameter( 'ew', 1, desc='(0:disabled; 1:enabled) EW corrections' ) - self.add_parameter( 'gfermi', ATLASCommonParameters.G_F, desc='Fermi constant' ) - self.add_parameter( 'massren', 0, desc='(0 = OS, 1 = MSBAR, 2 = DRBAR)' ) - self.add_parameter( 'model', 0, desc='(0 = SM)' ) - - ## Decorate with generic option sets - self.add_parameter_set( 'extra tests' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'Higgs decay mode' ) - self.add_parameter_set( 'Higgs decay properties' ) - self.add_parameter_set( 'Higgs properties' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'running scale', description='(0:scales equal to the Higgs pole mass; 1:scales equal to the Higgs virtuality)' ) - self.add_parameter_set( 'top properties' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - self.add_parameter_set( 'zero width' ) - - ## Set optimised integration parameters - self.ncall1 = 50000 - self.ncall2 = 100000 - self.nubound = 50000 - - ## Override defaults - self.hfact = 104.16 - self.minlo = -1 - - self.populate_default_strings() +class PowhegConfig_ggF_H(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_ggF_H, self).__init__(runArgs, opts) + self._powheg_executable += "/gg_H_quark-mass-effects/pwhg_main" + + # Add process specific options + self.add_parameter("bwshape", 1, desc="Functional form of Breit-Wigner used to distribute Higgs virtuality. 1:running width; 2:hwidth") + self.add_parameter("ew", 1, desc="(0:disabled; 1:enabled) EW corrections") + self.add_parameter("gfermi", ATLASCommonParameters.G_F, desc="Fermi constant") + self.add_parameter("massren", 0, desc="(0 = OS, 1 = MSBAR, 2 = DRBAR)") + self.add_parameter("model", 0, desc="(0 = SM)") + + # Decorate with generic option sets + self.add_parameter_set("extra tests") + self.add_parameter_set("generic scale") + self.add_parameter_set("Higgs decay mode") + self.add_parameter_set("Higgs decay properties") + self.add_parameter_set("Higgs properties") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("running scale", description="(0:scales equal to the Higgs pole mass; 1:scales equal to the Higgs virtuality)") + self.add_parameter_set("top properties") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + self.add_parameter_set("zero width") + + # Set optimised integration parameters + self.ncall1 = 50000 + self.ncall2 = 100000 + self.nubound = 50000 + + # Override defaults + self.hfact = 104.16 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_ggF_HZ.py b/Generators/PowhegControl/python/processes/PowhegConfig_ggF_HZ.py index 8f6c66fae3d0b..4c58fd8d2ab60 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_ggF_HZ.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_ggF_HZ.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_ggF_HZ +# @PowhegControl PowhegConfig_ggF_HZ # Powheg configuration for ggF_HZ subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -10,35 +10,34 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -## Default Powheg configuration for ggF_HZ generation +# Default Powheg configuration for ggF_HZ generation # # Create a full configurable with all available Powheg options -class PowhegConfig_ggF_HZ(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None, LO_process=True ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_ggF_HZ, self).__init__( runArgs, opts ) - self._powheg_executable += '/ggHZ/pwhg_main' - - ## Decorate with generic option sets - self.add_parameter_set( 'Higgs + vector boson', boson='Z' ) - self.add_parameter_set( 'Higgs fixed width' ) - self.add_parameter_set( 'Higgs properties' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'running scales' ) - self.add_parameter_set( 'top properties' ) - self.add_parameter_set( 'v2' ) - self.add_parameter_set( 'vector boson decay mode' ) - self.add_parameter_set( 'Z mass window' ) - - ## Set optimised integration parameters - self.ncall1 = 25000 - self.ncall2 = 60000 - self.nubound = 60000 - self.xupbound = 6 - self.itmx1 = 1 - - ## Override defaults - self.minlo = -1 - - self.populate_default_strings() +class PowhegConfig_ggF_HZ(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None, LO_process=True): + super(PowhegConfig_ggF_HZ, self).__init__(runArgs, opts) + self._powheg_executable += "/ggHZ/pwhg_main" + + # Decorate with generic option sets + self.add_parameter_set("Higgs + vector boson", boson="Z") + self.add_parameter_set("Higgs fixed width") + self.add_parameter_set("Higgs properties") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("running scales") + self.add_parameter_set("top properties") + self.add_parameter_set("v2") + self.add_parameter_set("vector boson decay mode") + self.add_parameter_set("Z mass window") + + # Set optimised integration parameters + self.ncall1 = 25000 + self.ncall2 = 60000 + self.nubound = 60000 + self.xupbound = 6 + self.itmx1 = 1 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_jj.py b/Generators/PowhegControl/python/processes/PowhegConfig_jj.py index a4932c5094557..3d1290420f9d2 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_jj.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_jj.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_jj + # @PowhegControl PowhegConfig_jj # Powheg configuration for jj subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -10,44 +10,45 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -## Default Powheg configuration for jj generation +# Default Powheg configuration for jj generation # # Create a full configurable with all available Powheg options -class PowhegConfig_jj(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_jj, self).__init__( runArgs, opts ) - self._powheg_executable += '/Dijet/pwhg_main' - - ## Decorate with generic option sets - self.add_parameter_set( 'extra tests' ) - self.add_parameter_set( 'fixed scale' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'jacsing' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - - ## Set optimised integration parameters - self.itmx1 = 8 - self.itmx2 = 10 - self.ncall1 = 80000 - self.ncall2 = 40000 - self.nubound = 500000 - self.xupbound = 10 - self.foldx = 10 - self.foldy = 10 - self.foldphi = 5 - - ## Override defaults - self.bornktmin = 5.0 - self.minlo = -1 - ## Fix problem with spikes in final observables: from Paolo Nason (private communication) - self.doublefsr = 1 - self.par_2gsupp = 5 - self.par_diexp = 4 - self.par_dijexp = 4 - - self.populate_default_strings() +class PowhegConfig_jj(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_jj, self).__init__(runArgs, opts) + self._powheg_executable += "/Dijet/pwhg_main" + + # Decorate with generic option sets + self.add_parameter_set("extra tests") + self.add_parameter_set("fixed scale") + self.add_parameter_set("generic scale") + self.add_parameter_set("jacsing") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + + # Set optimised integration parameters + self.itmx1 = 8 + self.itmx2 = 10 + self.ncall1 = 80000 + self.ncall2 = 40000 + self.nubound = 500000 + self.xupbound = 10 + self.foldx = 10 + self.foldy = 10 + self.foldphi = 5 + + # Override defaults + self.bornktmin = 5.0 + # Fix problem with spikes in final observables: from Paolo Nason (private communication) + self.doublefsr = 1 + self.par_2gsupp = 5 + self.par_diexp = 4 + self.par_dijexp = 4 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_jjj.py b/Generators/PowhegControl/python/processes/PowhegConfig_jjj.py index b195b176df50f..b8e62cd5e108e 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_jjj.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_jjj.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_jjj +# @PowhegControl PowhegConfig_jjj # Powheg configuration for jjj subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -10,50 +10,59 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -## Default Powheg configuration for jjj generation +# Default Powheg configuration for jjj generation # # Create a full configurable with all available Powheg options -class PowhegConfig_jjj(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_jjj, self).__init__( runArgs, opts ) - self._powheg_executable += '/trijet/pwhg_main' - - ## Logger warnings for unvalidated process - self.logger.warning( 'Integration parameters have not been validated - see https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/PowhegForATLAS#Changing_POWHEG_BOX_integration' ) - - ## Add process specific options - self.add_parameter( 'brpar_diexp', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'brpar_dijexp', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'HWJsudakov', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'ktmerging', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'rapsuppfact', -1, desc='(-1:Powheg default)' ) - - ## Decorate with generic option sets - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'radiation parametrisation' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - - ## Set optimised integration parameters - self.itmx1 = 20 - self.itmx2 = 20 - self.ncall1 = 10000000 - self.ncall1rm = 30000000 - self.ncall2 = 10000000 - self.nubound = 10000000 - self.xupbound = 4 - self.foldx = 25 - self.foldy = 25 - self.foldphi = 25 - - ## Override defaults - self.bornktmin = 1.0 - self.bornsuppfact = 800.0 - self.doublefsr = 1 - self.withdamp = 1 - - self.populate_default_strings() +class PowhegConfig_jjj(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_jjj, self).__init__(runArgs, opts) + self._powheg_executable += "/trijet/pwhg_main" + + # Logger warnings for unvalidated process + self.logger.warning("Integration parameters have not been validated - see https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/PowhegForATLAS#Changing_POWHEG_BOX_integration") + + # Add process specific options + self.add_parameter("brpar_diexp", -1, desc="(-1:Powheg default)") + self.add_parameter("brpar_dijexp", -1, desc="(-1:Powheg default)") + self.add_parameter("HWJsudakov", -1, desc="(-1:Powheg default)") + self.add_parameter("ktmerging", -1, desc="(-1:Powheg default)") + self.add_parameter("rapsuppfact", -1, desc="(-1:Powheg default)") + + # Decorate with generic option sets + self.add_parameter_set("extra tests") + self.add_parameter_set("generic scale") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("radiation parametrisation") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + + # Set optimised integration parameters + self.itmx1 = 2 + self.itmx2 = 10 + self.ncall1 = 500000 + self.ncall1rm = 1000000 + self.ncall2 = 1000000 + self.nubound = 1500000 + self.xupbound = 4 + self.foldx = 5 + self.foldy = 5 + self.foldphi = 2 + + # NB. These settings give the following output + # Cross-section test : 0.00% PASSED + # Neg. weight test : 13.40% FAILED + # Upper bound test : 0.45% PASSED + + # Override defaults + self.bornktmin = 1.0 + self.bornsuppfact = 800.0 + self.doublefsr = 1 + self.minlo = 1 + self.withdamp = 1 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_ssWWjj.py b/Generators/PowhegControl/python/processes/PowhegConfig_ssWWjj.py index 91a91cda6b46a..5f21565ba0f29 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_ssWWjj.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_ssWWjj.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_ssWWjj +# @PowhegControl PowhegConfig_ssWWjj # Powheg configuration for WW subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,57 +8,58 @@ #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -## Default Powheg configuration for WW generation +# Default Powheg configuration for WW generation # # Create a full configurable with all available Powheg options -class PowhegConfig_ssWWjj(PowhegConfig_base) : +class PowhegConfig_ssWWjj(PowhegConfig_base): - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_ssWWjj, self).__init__( runArgs, opts ) - self._powheg_executable += '/Wp_Wp_J_J/pwhg_main' + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_ssWWjj, self).__init__(runArgs, opts) + self._powheg_executable += "/Wp_Wp_J_J/pwhg_main" - ## Logger warnings for unvalidated process - self.logger.warning( 'Integration parameters have not been validated - see https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/PowhegForATLAS#Changing_POWHEG_BOX_integration' ) + # Logger warnings for unvalidated process + self.logger.warning("Integration parameters have not been validated - see https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/PowhegForATLAS#Changing_POWHEG_BOX_integration") - ## Add process specific options - self.add_parameter( 'smincuts', -1, desc='(-1:Powheg-default)' ) + # Add process specific options + self.add_parameter("smincuts", -1, desc="(-1:Powheg-default)") - ## Decorate with generic option sets - self.add_parameter_set( 'fake virtual' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'running scales' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - self.add_parameter_set( 'WW decay', boson='W' ) - self.add_parameter_set( 'zero width' ) + # Decorate with generic option sets + self.add_parameter_set("fake virtual") + self.add_parameter_set("generic scale") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("running scales") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + self.add_parameter_set("WW decay", boson="W") + self.add_parameter_set("zero width") - ## Set optimised integration parameters - self.itmx1 = 5 - self.itmx2 = 5 - self.ncall1 = 10000000 - self.ncall2 = 1000000 - self.nubound = 1000000 - self.foldx = 25 - self.foldy = 25 - self.foldphi = 25 + # Set optimised integration parameters + self.itmx1 = 5 + self.itmx2 = 5 + self.ncall1 = 10000000 + self.ncall2 = 1000000 + self.nubound = 1000000 + self.foldx = 25 + self.foldy = 25 + self.foldphi = 25 - ## Override defaults - self.withdamp = 0 + # Override defaults + self.withdamp = 0 - ## Override defaults - self.allowed_decay_modes = [ 'WpWpevev', 'WpWpevmuv', 'WpWpevtauv', 'WpWpevemuv', 'WpWpevlv',\ - 'WmWmevev', 'WmWmevmuv', 'WmWmevtauv', 'WmWmevemuv', 'WmWmevlv',\ - 'WpWpmuvmuv', 'WpWpmuvtauv', 'WpWpmuvemuv', 'WpWpmuvlv',\ - 'WmWmmuvmuv', 'WmWmmuvtauv', 'WmWmmuvemuv', 'WmWmmuvlv',\ - 'WpWptauvtauv', 'WpWptauvemuv', 'WpWptauvlv',\ - 'WmWmtauvtauv', 'WmWmtauvemuv', 'WmWmtauvlv',\ - 'WpWpemuvemuv', 'WpWpemuvlv',\ - 'WmWmemuvemuv', 'WmWmemuvlv',\ - 'WpWplvlv', 'WmWmlvlv' ] - self.decay_mode = 'WpWplvlv' - self.minlo = -1 + # Override defaults + self.allowed_decay_modes = ["WpWpevev", "WpWpevmuv", "WpWpevtauv", "WpWpevemuv", "WpWpevlv", + "WmWmevev", "WmWmevmuv", "WmWmevtauv", "WmWmevemuv", "WmWmevlv", + "WpWpmuvmuv", "WpWpmuvtauv", "WpWpmuvemuv", "WpWpmuvlv", + "WmWmmuvmuv", "WmWmmuvtauv", "WmWmmuvemuv", "WmWmmuvlv", + "WpWptauvtauv", "WpWptauvemuv", "WpWptauvlv", + "WmWmtauvtauv", "WmWmtauvemuv", "WmWmtauvlv", + "WpWpemuvemuv", "WpWpemuvlv", + "WmWmemuvemuv", "WmWmemuvlv", + "WpWplvlv", "WmWmlvlv"] + self.decay_mode = "WpWplvlv" - self.populate_default_strings() + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_t_sch.py b/Generators/PowhegControl/python/processes/PowhegConfig_t_sch.py index 7c699cdb92082..df0c948026de9 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_t_sch.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_t_sch.py @@ -1,42 +1,43 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_t_sch +# @PowhegControl PowhegConfig_t_sch # Powheg configuration for t_sch subprocess # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -from .. import ATLASCommonParameters -## Default Powheg configuration for t_sch generation +# Default Powheg configuration for t_sch generation # # Create a full configurable with all available Powheg options -class PowhegConfig_t_sch(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_t_sch, self).__init__( runArgs, opts ) - self._powheg_executable += '/ST_sch/pwhg_main' - - ## Decorate with generic option sets - self.add_parameter_set( 'CKM' ) - self.add_parameter_set( 'electroweak properties', boson='w' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'lepton mass', prefix='tdec' ) - self.add_parameter_set( 'sin**2 theta W' ) - self.add_parameter_set( 'top decay branching', prefix='tdec' ) - self.add_parameter_set( 'top decay mode' ) - self.add_parameter_set( 'top properties' ) - self.add_parameter_set( 'upper bound' ) - - ## Set optimised integration parameters - self.ncall1 = 50000 - self.ncall2 = 50000 - self.nubound = 50000 - - ## Override defaults - self.topdecaymode = 11111 - self.withdamp = 1 - - self.populate_default_strings() +class PowhegConfig_t_sch(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_t_sch, self).__init__(runArgs, opts) + self._powheg_executable += "/ST_sch/pwhg_main" + + # Decorate with generic option sets + self.add_parameter_set("CKM") + self.add_parameter_set("electroweak properties", boson="w") + self.add_parameter_set("generic scale") + self.add_parameter_set("lepton mass", prefix="tdec") + self.add_parameter_set("sin**2 theta W") + self.add_parameter_set("top decay branching", prefix="tdec") + self.add_parameter_set("top decay mode") + self.add_parameter_set("top properties") + self.add_parameter_set("upper bound") + + # Set optimised integration parameters + self.ncall1 = 50000 + self.ncall2 = 50000 + self.nubound = 50000 + + # Override defaults + self.topdecaymode = 11111 + self.withdamp = 1 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_t_tch_4f.py b/Generators/PowhegControl/python/processes/PowhegConfig_t_tch_4f.py new file mode 100644 index 0000000000000..dfdae22c69df3 --- /dev/null +++ b/Generators/PowhegControl/python/processes/PowhegConfig_t_tch_4f.py @@ -0,0 +1,64 @@ +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + +# @PowhegControl PowhegConfig_t_tch_4f +# Powheg configuration for t_tch_4f subprocess +# +# Authors: Riccardo Di Sipio <disipio@cern.ch> +# James Robinson <james.robinson@cern.ch> + +#! /usr/bin/env python +import os +from ..PowhegConfig_base import PowhegConfig_base +from .. import ATLASCommonParameters + +# Default Powheg configuration for t_tch_4f generation +# +# Create a full configurable with all available Powheg options +class PowhegConfig_t_tch_4f(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_t_tch_4f, self).__init__(runArgs, opts) + self._powheg_executable += "/ST_tch_4f/pwhg_main" + self._MadSpin_executable = os.environ["MADPATH"] + "/MadSpin/madspin" + + # Add process specific options + self.add_parameter("mass_b", ATLASCommonParameters.mass_b, desc="b quark mass in t decay", parameter="bmass") + + # Add phantom parameters used by the MadSpin runcard + self.add_phantom("alphaqcd", ATLASCommonParameters.alphaqcd, desc="Strong coupling") + self.add_phantom("mass_H", ATLASCommonParameters.mass_H, desc="Higgs mass") + self.add_phantom("G_F", ATLASCommonParameters.G_F, desc="Fermi coupling") + self.add_phantom("W_hadron_BR", ATLASCommonParameters.W_hadron_BR, desc="W branching ratio to hadrons") + self.add_phantom("W_lepton_BR", ATLASCommonParameters.W_lepton_BR, desc="W branching ratio to leptons") + self.add_phantom("width_H", ATLASCommonParameters.width_H, desc="Higgs width") + + # Decorate with generic option sets + self.add_parameter_set("CKM") + self.add_parameter_set("electroweak properties", boson="w") + self.add_parameter_set("generic scale") + self.add_parameter_set("lepton mass", prefix="tdec") + self.add_parameter_set("sin**2 theta W") + self.add_parameter_set("top decay branching", prefix="tdec") + self.add_parameter_set("top decay mode") + self.add_parameter_set("top properties") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("extra tests") + + # Set optimised integration parameters + self.ncall2 = 250000 + self.nubound = 200000 + self.xupbound = 2 + self.foldx = 10 + self.foldy = 10 + self.foldphi = 5 + + # Override defaults + self.topdecaymode = 00000 # use MadSpin to decay the tops + self.withdamp = 1 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_tt.py b/Generators/PowhegControl/python/processes/PowhegConfig_tt.py index f88d259aed28d..15818e72f8039 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_tt.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_tt.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_tt +# @PowhegControl PowhegConfig_tt # Powheg configuration for tt subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -11,51 +11,52 @@ from ..PowhegConfig_base import PowhegConfig_base from .. import ATLASCommonParameters -## Default Powheg configuration for tt generation +# Default Powheg configuration for tt generation # # Create a full configurable with all available Powheg options -class PowhegConfig_tt(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_tt, self).__init__( runArgs, opts ) - self._powheg_executable += '/hvq/pwhg_main' - - ## Add process specific options - self.add_parameter( 'mass_b', ATLASCommonParameters.mass_b, desc='b quark mass in t decay', parameter='tdec/bmass' ) - self.add_parameter( 'mass_c', ATLASCommonParameters.mass_c, desc='c quark mass', parameter='tdec/cmass' ) - self.add_parameter( 'mass_d', ATLASCommonParameters.mass_d, desc='d quark mass', parameter='tdec/dmass' ) - self.add_parameter( 'sin2cabibbo', ATLASCommonParameters.sin2cabibbo, desc='sine of Cabibbo angle squared', parameter='tdec/sin2cabibbo' ) - self.add_parameter( 'mass_s', ATLASCommonParameters.mass_s, desc='s quark mass', parameter='tdec/smass' ) - self.add_parameter( 'width_t', ATLASCommonParameters.width_t, desc='top width', parameter='tdec/twidth' ) - self.add_parameter( 'mass_u', ATLASCommonParameters.mass_u, desc='u quark mass', parameter='tdec/umass' ) - self.add_parameter( 'mass_W', ATLASCommonParameters.mass_W, desc='W mass for top decay', parameter='tdec/wmass' ) - self.add_parameter( 'width_W', ATLASCommonParameters.width_W, desc='W width', parameter='tdec/wwidth' ) - - ## Decorate with generic option sets - self.add_parameter_set( 'extra tests' ) - self.add_parameter_set( 'lepton mass', prefix='tdec' ) - self.add_parameter_set( 'top decay branching', prefix='tdec' ) - self.add_parameter_set( 'fixed scale' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'heavy quark' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'second generation quark mass', prefix='lhe' ) - self.add_parameter_set( 'semileptonic' ) - self.add_parameter_set( 'top decay mode' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - - ## Set optimised integration parameters - self.ncall1 = 10000 - self.ncall2 = 100000 - self.nubound = 100000 - self.xupbound = 2 - - ## Override defaults - self.minlo = -1 - self.quark_mass = ATLASCommonParameters.mass_t - self.topdecaymode = 22222 - - self.populate_default_strings() +class PowhegConfig_tt(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_tt, self).__init__(runArgs, opts) + self._powheg_executable += "/hvq/pwhg_main" + + # Add process specific options + self.add_parameter("mass_b", ATLASCommonParameters.mass_b, desc="b quark mass in t decay", parameter="tdec/bmass") + self.add_parameter("mass_c", ATLASCommonParameters.mass_c, desc="c quark mass", parameter="tdec/cmass") + self.add_parameter("mass_d", ATLASCommonParameters.mass_d, desc="d quark mass", parameter="tdec/dmass") + self.add_parameter("sin2cabibbo", ATLASCommonParameters.sin2cabibbo, desc="sine of Cabibbo angle squared", parameter="tdec/sin2cabibbo") + self.add_parameter("mass_s", ATLASCommonParameters.mass_s, desc="s quark mass", parameter="tdec/smass") + self.add_parameter("width_t", ATLASCommonParameters.width_t, desc="top width", parameter="tdec/twidth") + self.add_parameter("mass_u", ATLASCommonParameters.mass_u, desc="u quark mass", parameter="tdec/umass") + self.add_parameter("mass_W", ATLASCommonParameters.mass_W, desc="W mass for top decay", parameter="tdec/wmass") + self.add_parameter("width_W", ATLASCommonParameters.width_W, desc="W width", parameter="tdec/wwidth") + + # Decorate with generic option sets + self.add_parameter_set("extra tests") + self.add_parameter_set("lepton mass", prefix="tdec") + self.add_parameter_set("top decay branching", prefix="tdec") + self.add_parameter_set("fixed scale") + self.add_parameter_set("generic scale") + self.add_parameter_set("heavy quark") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("second generation quark mass", prefix="lhe") + self.add_parameter_set("semileptonic") + self.add_parameter_set("top decay mode") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + + # Set optimised integration parameters + self.ncall1 = 10000 + self.ncall2 = 100000 + self.nubound = 100000 + self.xupbound = 2 + + # Override defaults + self.quark_mass = ATLASCommonParameters.mass_t + self.topdecaymode = 22222 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_ttH.py b/Generators/PowhegControl/python/processes/PowhegConfig_ttH.py index df0e1b1d208e9..cebc31435b727 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_ttH.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_ttH.py @@ -1,50 +1,50 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_ttH +# @PowhegControl PowhegConfig_ttH # Powheg configuration for ttH subprocess # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python from ..PowhegConfig_base import PowhegConfig_base -from .. import ATLASCommonParameters -## Default Powheg configuration for ttH generation +# Default Powheg configuration for ttH generation # # Create a full configurable with all available Powheg options -class PowhegConfig_ttH(PowhegConfig_base) : - - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_ttH, self).__init__( runArgs, opts ) - self._powheg_executable += '/ttH/pwhg_main' - - ## Add process specific options - self.add_parameter( 'delta_mttmin', 0, desc='if non-zero, use generation cut on m_tt' ) - - ## Decorate with generic option sets - self.add_parameter_set( 'extra tests' ) - self.add_parameter_set( 'fake virtual' ) - self.add_parameter_set( 'generic scale' ) - self.add_parameter_set( 'Higgs decay mode' ) - self.add_parameter_set( 'Higgs properties' ) - self.add_parameter_set( 'old Dij' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'running scales' ) - self.add_parameter_set( 'semileptonic' ) - self.add_parameter_set( 'top decay branching' ) - self.add_parameter_set( 'top decay mode' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'v2' ) - self.add_parameter_set( 'zero width' ) - - ## Set optimised integration parameters - self.ncall1 = 10000 - self.ncall2 = 10000 - self.nubound = 20000 - - ## Override defaults - self.minlo = -1 - self.topdecaymode = 22222 - - self.populate_default_strings() +class PowhegConfig_ttH(PowhegConfig_base): + + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_ttH, self).__init__(runArgs, opts) + self._powheg_executable += "/ttH/pwhg_main" + + # Add process specific options + self.add_parameter("delta_mttmin", 0, desc="if non-zero, use generation cut on m_tt") + + # Decorate with generic option sets + self.add_parameter_set("extra tests") + self.add_parameter_set("fake virtual") + self.add_parameter_set("generic scale") + self.add_parameter_set("Higgs decay mode") + self.add_parameter_set("Higgs properties") + self.add_parameter_set("old Dij") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("running scales") + self.add_parameter_set("semileptonic") + self.add_parameter_set("top decay branching") + self.add_parameter_set("top decay mode") + self.add_parameter_set("upper bound") + self.add_parameter_set("v2") + self.add_parameter_set("zero width") + + # Set optimised integration parameters + self.ncall1 = 10000 + self.ncall2 = 10000 + self.nubound = 20000 + + # Override defaults + self.topdecaymode = 22222 + + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/PowhegConfig_ttj.py b/Generators/PowhegControl/python/processes/PowhegConfig_ttj.py index 4e255b6f52b09..5bb1a8f31340d 100644 --- a/Generators/PowhegControl/python/processes/PowhegConfig_ttj.py +++ b/Generators/PowhegControl/python/processes/PowhegConfig_ttj.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl PowhegConfig_ttj +# @PowhegControl PowhegConfig_ttj # Powheg configuration for ttj subprocess # # Authors: James Robinson <james.robinson@cern.ch> @@ -9,68 +9,70 @@ from ..PowhegConfig_base import PowhegConfig_base from .. import ATLASCommonParameters -## Default Powheg configuration for ttj generation +# Default Powheg configuration for ttj generation # # Create a full configurable with all available Powheg options -class PowhegConfig_ttj(PowhegConfig_base) : +class PowhegConfig_ttj(PowhegConfig_base): - def __init__( self, runArgs=None, opts=None ) : - ## Constructor: set process-dependent executable path here - super(PowhegConfig_ttj, self).__init__( runArgs, opts ) - self._powheg_executable += '/ttJ/pwhg_main' + # Constructor: set process-dependent executable path here + # @param runArgs athena run arguments + # @param opts athena run options + def __init__(self, runArgs=None, opts=None): + super(PowhegConfig_ttj, self).__init__(runArgs, opts) + self._powheg_executable += "/ttJ/pwhg_main" - ## Logger warnings for unvalidated process - self.logger.warning( 'Integration parameters have not been validated - see https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/PowhegForATLAS#Changing_POWHEG_BOX_integration' ) + # Logger warnings for unvalidated process + self.logger.warning("Integration parameters have not been validated - see https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/PowhegForATLAS#Changing_POWHEG_BOX_integration") - ## Add process specific options - self.add_parameter( 'bcut', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'collremnsamp', -1, desc='(-1:Powheg default)', parameter='collremnsamp"' ) - self.add_parameter( 'ffltest', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'ggproc', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'gqbproc', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'largecorrfact', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'psgen', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'ptmin_jet', 25, desc='jet min pt in GeV for use in analysis code (not relevant here)' ) - self.add_parameter( 'qgproc', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'qqbproc', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'qqpproc', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'qqproc', -1, desc='(-1:Powheg default)' ) - self.add_parameter( 'R_jet', 0.4, desc='jet radius for use in internal Powheg analysis code (not relevant here)' ) - self.add_parameter( 'topwidth', ATLASCommonParameters.width_t, desc='top width' ) - self.add_parameter( 'use_OLP_interface', -1, desc='(-1:Powheg default)', parameter='use-OLP-interface' ) + # Add process specific options + self.add_parameter("bcut", -1, desc="(-1:Powheg default)") + self.add_parameter("collremnsamp", -1, desc="(-1:Powheg default)", parameter='collremnsamp"') + self.add_parameter("ffltest", -1, desc="(-1:Powheg default)") + self.add_parameter("ggproc", -1, desc="(-1:Powheg default)") + self.add_parameter("gqbproc", -1, desc="(-1:Powheg default)") + self.add_parameter("largecorrfact", -1, desc="(-1:Powheg default)") + self.add_parameter("psgen", -1, desc="(-1:Powheg default)") + self.add_parameter("ptmin_jet", 25, desc="jet min pt in GeV for use in analysis code (not relevant here)") + self.add_parameter("qgproc", -1, desc="(-1:Powheg default)") + self.add_parameter("qqbproc", -1, desc="(-1:Powheg default)") + self.add_parameter("qqpproc", -1, desc="(-1:Powheg default)") + self.add_parameter("qqproc", -1, desc="(-1:Powheg default)") + self.add_parameter("R_jet", 0.4, desc="jet radius for use in internal Powheg analysis code (not relevant here)") + self.add_parameter("topwidth", ATLASCommonParameters.width_t, desc="top width") + self.add_parameter("use_OLP_interface", -1, desc="(-1:Powheg default)", parameter="use-OLP-interface") - ## Decorate with generic option sets - self.add_parameter_set( 'CKM' ) - self.add_parameter_set( 'electroweak properties', boson='W' ) - self.add_parameter_set( 'ISR/FSR' ) - self.add_parameter_set( 'jacsing' ) - self.add_parameter_set( 'lepton mass', prefix='lhfm' ) - self.add_parameter_set( 'mass window' ) - self.add_parameter_set( 'PDF reweighting' ) - self.add_parameter_set( 'running scale' ) - self.add_parameter_set( 'second generation quark mass', prefix='lhfm' ) - self.add_parameter_set( 'semileptonic' ) - self.add_parameter_set( 'sin**2 theta W' ) - self.add_parameter_set( 'top decay branching' ) - self.add_parameter_set( 'top decay mode' ) - self.add_parameter_set( 'upper bound' ) - self.add_parameter_set( 'zero width' ) + # Decorate with generic option sets + self.add_parameter_set("CKM") + self.add_parameter_set("electroweak properties", boson="W") + self.add_parameter_set("ISR/FSR") + self.add_parameter_set("jacsing") + self.add_parameter_set("lepton mass", prefix="lhfm") + self.add_parameter_set("mass window") + self.add_parameter_set("PDF reweighting") + self.add_parameter_set("running scale") + self.add_parameter_set("second generation quark mass", prefix="lhfm") + self.add_parameter_set("semileptonic") + self.add_parameter_set("sin**2 theta W") + self.add_parameter_set("top decay branching") + self.add_parameter_set("top decay mode") + self.add_parameter_set("upper bound") + self.add_parameter_set("zero width") - ## Set optimised integration parameters - self.itmx1 = 15 - self.itmx2 = 20 - self.ncall1 = 20000000 - self.ncall2 = 50000000 - self.nubound = 50000000 - self.foldx = 25 - self.foldy = 25 - self.foldphi = 25 + # Set optimised integration parameters + self.itmx1 = 15 + self.itmx2 = 20 + self.ncall1 = 20000000 + self.ncall2 = 50000000 + self.nubound = 50000000 + self.foldx = 25 + self.foldy = 25 + self.foldphi = 25 - ## Override defaults - self.bornktmin = 5.0 - self.bornsuppfact = 100.0 - self.minlo = -1 - self.quark_mass = ATLASCommonParameters.mass_t - self.topdecaymode = 22222 + # Override defaults + self.bornktmin = 5.0 + self.bornsuppfact = 100.0 + self.minlo = -1 + self.quark_mass = ATLASCommonParameters.mass_t + self.topdecaymode = 22222 - self.populate_default_strings() + self.populate_default_strings() diff --git a/Generators/PowhegControl/python/processes/__init__.py b/Generators/PowhegControl/python/processes/__init__.py index acee1ad3e2ddf..94064f5a4d557 100644 --- a/Generators/PowhegControl/python/processes/__init__.py +++ b/Generators/PowhegControl/python/processes/__init__.py @@ -14,6 +14,7 @@ from PowhegConfig_jj import * from PowhegConfig_jjj import * from PowhegConfig_ssWWjj import * from PowhegConfig_t_sch import * +from PowhegConfig_t_tch_4f import * from PowhegConfig_tt import * from PowhegConfig_ttH import * from PowhegConfig_ttj import * diff --git a/Generators/PowhegControl/python/strategies/AfterburnerMadSpin.py b/Generators/PowhegControl/python/strategies/AfterburnerMadSpin.py new file mode 100644 index 0000000000000..7d1137594c801 --- /dev/null +++ b/Generators/PowhegControl/python/strategies/AfterburnerMadSpin.py @@ -0,0 +1,277 @@ +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + +# @PowhegControl AfterburnerMadSpin +# Apply MadSpin afterburner to pre-generated Powheg events +# +# Authors: James Robinson <james.robinson@cern.ch> + +#! /usr/bin/env python +from AthenaCommon.Logging import logging +import glob +import os +import shutil +import subprocess +from ..utility import LHEUtils, ProcessHandling + +# Initialise logging handler +logger = logging.getLogger("PowhegControl") + +# Run madspin as an afterburner to existing events + + +def afterburner_MadSpin(configurator): + afterburner = AfterburnerMadSpin(configurator.powheg_LHE_output) + afterburner.construct_MadSpin_inputs(configurator) + afterburner.run_MadSpin_executable(configurator._MadSpin_executable) + afterburner.prepare_MadSpin_outputs() + + +# Handler for reweighting functions +class AfterburnerMadSpin(object): + + def __init__(self, input_LHE_events): + logger.info("Running MadSpin afterburner") + self._input_LHE_events = input_LHE_events + + def construct_MadSpin_inputs(self, configurator): + logger.info("Constructing MadSpin runcard header") + + # Find insertion point for MadSpin + opening_string = LHEUtils.get_opening_string(self._input_LHE_events) + closing_string = LHEUtils.get_closing_string(self._input_LHE_events) + if opening_string.find("<header>") != -1: + pre_header = opening_string[: opening_string.find("<header>")] + post_header = opening_string[opening_string.find("<header>") + 8: opening_string.find("</header>") + 9] + else: + pre_header = opening_string[: opening_string.find("<init>")] + post_header = "</header>\n" + opening_string[opening_string.find("<init>") + 6: opening_string.find("</init>") + 7] + + # Write events to LHE file with MadSpin information + with open("madspin_LHE_input.lhe", "wb") as f_madspin_LHE: + f_madspin_LHE.write(pre_header) + f_madspin_LHE.write("<header>\n") + f_madspin_LHE.write("<mgversion>\n") + f_madspin_LHE.write("{}\n".format(os.environ["MADPATH"].split("/")[-1].split("v")[-1].split("_p")[0].replace("_", "."))) + f_madspin_LHE.write("</mgversion>\n") + f_madspin_LHE.write("<mg5proccard>\n") + f_madspin_LHE.write("set group_subprocesses Auto\n") + f_madspin_LHE.write("set ignore_six_quark_processes False\n") + f_madspin_LHE.write("set loop_optimized_output True\n") + f_madspin_LHE.write("set gauge unitary\n") + f_madspin_LHE.write("set complex_mass_scheme False\n") + f_madspin_LHE.write("import model loop_sm-ckm\n") + f_madspin_LHE.write("define p = g u c d s u~ c~ d~ s~\n") + f_madspin_LHE.write("define j = g u c d s u~ c~ d~ s~\n") + f_madspin_LHE.write("define l+ = e+ mu+ ta+\n") + f_madspin_LHE.write("define l- = e- mu- ta-\n") + f_madspin_LHE.write("define vl = ve vm vt\n") + f_madspin_LHE.write("define vl~ = ve~ vm~ vt~\n") + f_madspin_LHE.write("generate p p > t b~ j $$ w+ w- [QCD]\n") + f_madspin_LHE.write("output tchan\n") + f_madspin_LHE.write("</mg5proccard>\n") + f_madspin_LHE.write("<mgruncard>\n") + f_madspin_LHE.write("{} = nevents\n".format(LHEUtils.event_counter(self._input_LHE_events))) + f_madspin_LHE.write("1 = lpp1 ! beam 1 type (0 = no PDF)\n") + f_madspin_LHE.write("1 = lpp2 ! beam 2 type (0 = no PDF)\n") + f_madspin_LHE.write("{} = ebeam1 ! beam 1 energy in GeV\n".format(configurator.beam_energy)) + f_madspin_LHE.write("{} = ebeam2 ! beam 2 energy in GeV\n".format(configurator.beam_energy)) + f_madspin_LHE.write("15 = bwcutoff\n") + f_madspin_LHE.write("</mgruncard>\n") + f_madspin_LHE.write("<slha>\n") + f_madspin_LHE.write("######################################################################\n") + f_madspin_LHE.write("## PARAM_CARD AUTOMATICALY GENERATED BY MG5 ####\n") + f_madspin_LHE.write("######################################################################\n") + f_madspin_LHE.write("###################################\n") + f_madspin_LHE.write("## INFORMATION FOR LOOP\n") + f_madspin_LHE.write("###################################\n") + f_madspin_LHE.write("BLOCK LOOP #\n") + f_madspin_LHE.write(" 1 {:e} # mu_r\n".format(configurator.mass_Z)) + f_madspin_LHE.write("###################################\n") + f_madspin_LHE.write("## INFORMATION FOR MASS\n") + f_madspin_LHE.write("###################################\n") + f_madspin_LHE.write("BLOCK MASS #\n") + f_madspin_LHE.write(" 5 {:e} # mb\n".format(configurator.mass_b)) + f_madspin_LHE.write(" 6 {:e} # mt\n".format(configurator.mass_t)) + f_madspin_LHE.write(" 15 {:e} # mta\n".format(configurator.mass_tau)) + f_madspin_LHE.write(" 23 {:e} # mz\n".format(configurator.mass_Z)) + f_madspin_LHE.write(" 25 {:e} # mh\n".format(configurator.mass_H)) + f_madspin_LHE.write(" 1 0.000000e+00 # d : 0.0\n") + f_madspin_LHE.write(" 2 0.000000e+00 # u : 0.0\n") + f_madspin_LHE.write(" 3 0.000000e+00 # s : 0.0\n") + f_madspin_LHE.write(" 4 0.000000e+00 # c : 0.0\n") + f_madspin_LHE.write(" 11 0.000000e+00 # e- : 0.0\n") + f_madspin_LHE.write(" 12 0.000000e+00 # ve : 0.0\n") + f_madspin_LHE.write(" 13 0.000000e+00 # mu- : 0.0\n") + f_madspin_LHE.write(" 14 0.000000e+00 # vm : 0.0\n") + f_madspin_LHE.write(" 16 0.000000e+00 # vt : 0.0\n") + f_madspin_LHE.write(" 21 0.000000e+00 # g : 0.0\n") + f_madspin_LHE.write(" 22 0.000000e+00 # a : 0.0\n") + f_madspin_LHE.write(" 24 {:e} # w+\n".format(configurator.mass_W)) + f_madspin_LHE.write(" 82 0.000000e+00 # gh : 0.0\n") + f_madspin_LHE.write("###################################\n") + f_madspin_LHE.write("## INFORMATION FOR SMINPUTS\n") + f_madspin_LHE.write("###################################\n") + f_madspin_LHE.write("BLOCK SMINPUTS #\n") + f_madspin_LHE.write(" 1 {:e} # aewm1\n".format(configurator.alphaem_inv)) + f_madspin_LHE.write(" 2 {:e} # gf\n".format(configurator.G_F)) + f_madspin_LHE.write(" 3 {:e} # as\n".format(configurator.alphaqcd)) + f_madspin_LHE.write("###################################\n") + f_madspin_LHE.write("## INFORMATION FOR YUKAWA\n") + f_madspin_LHE.write("###################################\n") + f_madspin_LHE.write("BLOCK YUKAWA #\n") + f_madspin_LHE.write(" 5 {:e} # ymb\n".format(configurator.mass_b)) + f_madspin_LHE.write(" 6 {:e} # ymt\n".format(configurator.mass_t)) + f_madspin_LHE.write(" 15 {:e} # ymtau\n".format(configurator.mass_tau)) + f_madspin_LHE.write("###################################\n") + f_madspin_LHE.write("## INFORMATION FOR QNUMBERS 82\n") + f_madspin_LHE.write("###################################\n") + f_madspin_LHE.write("BLOCK QNUMBERS 82 # gh\n") + f_madspin_LHE.write(" 1 0 # 3 times electric charge\n") + f_madspin_LHE.write(" 2 1 # number of spin states (2s+1)\n") + f_madspin_LHE.write(" 3 8 # colour rep (1: singlet, 3: triplet, 8: octet)\n") + f_madspin_LHE.write(" 4 1 # particle/antiparticle distinction (0=own anti)\n") + f_madspin_LHE.write("#\n") + f_madspin_LHE.write("#*************************\n") + f_madspin_LHE.write("# Decay widths *\n") + f_madspin_LHE.write("#*************************\n") + f_madspin_LHE.write("#\n") + f_madspin_LHE.write("# PDG Width\n") + f_madspin_LHE.write("DECAY 1 0.000000e+00\n") + f_madspin_LHE.write("#\n") + f_madspin_LHE.write("# PDG Width\n") + f_madspin_LHE.write("DECAY 2 0.000000e+00\n") + f_madspin_LHE.write("#\n") + f_madspin_LHE.write("# PDG Width\n") + f_madspin_LHE.write("DECAY 3 0.000000e+00\n") + f_madspin_LHE.write("#\n") + f_madspin_LHE.write("# PDG Width\n") + f_madspin_LHE.write("DECAY 4 0.000000e+00\n") + f_madspin_LHE.write("#\n") + f_madspin_LHE.write("# PDG Width\n") + f_madspin_LHE.write("DECAY 5 0.000000e+00\n") + f_madspin_LHE.write("#\n") + f_madspin_LHE.write("# PDG Width\n") + f_madspin_LHE.write("DECAY 6 {:e}\n".format(configurator.width_t)) + f_madspin_LHE.write("# BR NDA ID1 ID2 ...\n") + f_madspin_LHE.write(" 1.000000e+00 2 5 24 # 1.32\n") + f_madspin_LHE.write("DECAY -6 {:e}\n".format(configurator.width_t)) + f_madspin_LHE.write("# BR NDA ID1 ID2 ...\n") + f_madspin_LHE.write(" 1.000000e+00 2 -5 -24 # 1.32\n") + f_madspin_LHE.write("#\n") + f_madspin_LHE.write("# PDG Width\n") + f_madspin_LHE.write("DECAY 11 0.000000e+00\n") + f_madspin_LHE.write("#\n") + f_madspin_LHE.write("# PDG Width\n") + f_madspin_LHE.write("DECAY 12 0.000000e+00\n") + f_madspin_LHE.write("#\n") + f_madspin_LHE.write("# PDG Width\n") + f_madspin_LHE.write("DECAY 13 0.000000e+00\n") + f_madspin_LHE.write("#\n") + f_madspin_LHE.write("# PDG Width\n") + f_madspin_LHE.write("DECAY 14 0.000000e+00\n") + f_madspin_LHE.write("#\n") + f_madspin_LHE.write("# PDG Width\n") + f_madspin_LHE.write("DECAY 15 0.000000e+00\n") + f_madspin_LHE.write("#\n") + f_madspin_LHE.write("# PDG Width\n") + f_madspin_LHE.write("DECAY 16 0.000000e+00\n") + f_madspin_LHE.write("#\n") + f_madspin_LHE.write("# PDG Width\n") + f_madspin_LHE.write("DECAY 21 0.000000e+00\n") + f_madspin_LHE.write("#\n") + f_madspin_LHE.write("# PDG Width\n") + f_madspin_LHE.write("DECAY 22 0.000000e+00\n") + f_madspin_LHE.write("#\n") + f_madspin_LHE.write("# PDG Width\n") + f_madspin_LHE.write("DECAY 23 {:e}\n".format(configurator.width_Z)) + f_madspin_LHE.write("#\n") + f_madspin_LHE.write("# PDG Width\n") + f_madspin_LHE.write("DECAY -24 {:e}\n".format(configurator.width_W)) + f_madspin_LHE.write("# BR NDA ID1 ID2 ...\n") + # Scale BRs down so that sum is 1.0 + W_BR_sum = 2 * configurator.W_hadron_BR + 3 * configurator.W_lepton_BR + f_madspin_LHE.write(" {:e} 2 1 -2\n".format(configurator.W_hadron_BR / W_BR_sum)) + f_madspin_LHE.write(" {:e} 2 3 -4\n".format(configurator.W_hadron_BR / W_BR_sum)) + f_madspin_LHE.write(" {:e} 2 11 -12\n".format(configurator.W_lepton_BR / W_BR_sum)) + f_madspin_LHE.write(" {:e} 2 13 -14\n".format(configurator.W_lepton_BR / W_BR_sum)) + f_madspin_LHE.write(" {:e} 2 15 -16\n".format(configurator.W_lepton_BR / W_BR_sum)) + f_madspin_LHE.write("DECAY 24 {}\n".format(configurator.width_W)) + f_madspin_LHE.write("# BR NDA ID1 ID2 ...\n") + f_madspin_LHE.write(" {:e} 2 -1 2\n".format(configurator.W_hadron_BR / W_BR_sum)) + f_madspin_LHE.write(" {:e} 2 -3 4\n".format(configurator.W_hadron_BR / W_BR_sum)) + f_madspin_LHE.write(" {:e} 2 -11 12\n".format(configurator.W_lepton_BR / W_BR_sum)) + f_madspin_LHE.write(" {:e} 2 -13 14\n".format(configurator.W_lepton_BR / W_BR_sum)) + f_madspin_LHE.write(" {:e} 2 -15 16\n".format(configurator.W_lepton_BR / W_BR_sum)) + f_madspin_LHE.write("#\n") + f_madspin_LHE.write("#\n") + f_madspin_LHE.write("# PDG Width\n") + f_madspin_LHE.write("DECAY 25 {:e}\n".format(configurator.width_H)) + f_madspin_LHE.write("#\n") + f_madspin_LHE.write("# PDG Width\n") + f_madspin_LHE.write("DECAY 82 0.000000e+00\n") + f_madspin_LHE.write("</slha>\n") + f_madspin_LHE.write(post_header) + for event in LHEUtils.event_iterator(self._input_LHE_events): + f_madspin_LHE.write(event) + f_madspin_LHE.write(closing_string) + + # Rename LHE files + shutil.move(self._input_LHE_events, "{}.undecayed".format(self._input_LHE_events)) + shutil.move("madspin_LHE_input.lhe", self._input_LHE_events) + + # Write MadSpin runcard + with open("madspin_runcard.txt", "wb") as f_madspin_runcard: + f_madspin_runcard.write("import {}\n".format(self._input_LHE_events)) + f_madspin_runcard.write("decay t > w+ b, w+ > l+ vl\n") + f_madspin_runcard.write("decay t~ > w- b~, w- > l- vl~\n") + f_madspin_runcard.write("decay t > w+ b, w+ > j j\n") + f_madspin_runcard.write("decay t~ > w- b~, w- > j j\n") + f_madspin_runcard.write("launch\n") + f_madspin_runcard.write("quit\n") + + def run_MadSpin_executable(self, MadSpin_executable): + logger.info("Running MadSpin executable") + with open("madspin_runcard.txt", "rb") as runcard_input: + processes = [ProcessHandling.SingleProcessThread([MadSpin_executable], stdin=runcard_input)] + manager = ProcessHandling.ProcessManager(processes) + while manager.monitor(): + pass + + def prepare_MadSpin_outputs(self): + logger.info("Preparing MadSpin output") + + # Unzip MadSpin events + subprocess.call("gunzip pwgevents_decayed.lhe.gz 2> /dev/null", shell=True) + shutil.move("pwgevents_decayed.lhe", "{}.decayed".format(self._input_LHE_events)) + + # Combine headers + pwg_opening_string = LHEUtils.get_opening_string("{}.undecayed".format(self._input_LHE_events)) + pwg_closing_string = LHEUtils.get_closing_string("{}.undecayed".format(self._input_LHE_events)) + madspin_opening_string = LHEUtils.get_opening_string("{}.decayed".format(self._input_LHE_events)) + + # Split Powheg headers to insert MadSpin information + if pwg_opening_string.find("<header>") != -1: + pwg_pre_header = pwg_opening_string[: pwg_opening_string.find("<header>") + 8] + pwg_post_header = pwg_opening_string[pwg_opening_string.find("</header>") + 9:] + else: + pwg_pre_header = pwg_opening_string[: pwg_opening_string.find("<init>")] + "<header>" + pwg_post_header = pwg_opening_string[pwg_opening_string.find("<init>"):] + madspin_header = madspin_opening_string[madspin_opening_string.find("<header>") + 8: madspin_opening_string.find("</header>") + 9] + + # Write events to LHE file with MadSpin information + with open("pwgevents_with_MadSpin.lhe", "wb") as f_combined_LHE: + f_combined_LHE.write(pwg_pre_header) + f_combined_LHE.write(madspin_header) + f_combined_LHE.write(pwg_post_header) + for event in LHEUtils.event_iterator("{}.decayed".format(self._input_LHE_events)): + f_combined_LHE.write(event) + f_combined_LHE.write(pwg_closing_string) + + # Rename output file + if os.path.isfile(self._input_LHE_events): + shutil.move(self._input_LHE_events, "madspin_LHE.input") + shutil.move("pwgevents_with_MadSpin.lhe", self._input_LHE_events) + + for LHE_tarball in list(set(glob.glob("*lhe*.gz") + glob.glob("*events*.gz"))): + logger.info("Cleaning up MadSpin tarball: {}".format(LHE_tarball)) + os.remove(LHE_tarball) diff --git a/Generators/PowhegControl/python/strategies/AfterburnerMeanEventWeightCalculator.py b/Generators/PowhegControl/python/strategies/AfterburnerMeanEventWeightCalculator.py new file mode 100644 index 0000000000000..ff30cee6e7f7c --- /dev/null +++ b/Generators/PowhegControl/python/strategies/AfterburnerMeanEventWeightCalculator.py @@ -0,0 +1,27 @@ +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + +# @PowhegControl AfterburnerMeanEventWeightCalculator +# Calculate the mean event weight of pre-generated Powheg events +# Apply PHOTOS afterburner to pre-generated Powheg events +# +# Authors: James Robinson <james.robinson@cern.ch> + +#! /usr/bin/env python +from AthenaCommon.Logging import logging +import itertools as it +import numpy as np +from ..utility import LHEUtils + +# Initialise logging handler +logger = logging.getLogger("PowhegControl") + +# Run PHOTOS as an afterburner to existing events +def afterburner_mean_event_weight_calculator(LHE_file_name): + logger.info("Born-level suppression is enabled so the cross-section MUST be recalculated!") + # LHEUtils returns a generator, since the input file may be large + sum_of_weights, n_events = reduce(np.add, it.izip(LHEUtils.event_weight_iterator(LHE_file_name), it.repeat(1))) + # Print statistics to logger + logger.info("... sum of event weights is: {}".format(sum_of_weights)) + logger.info("... number of events generated: {}".format(int(n_events))) + logger.info("... mean event weight: {}".format((sum_of_weights / n_events if n_events != 0 else 0))) + logger.info("MetaData: cross-section (nb) = {:.3E}".format((sum_of_weights / (1000 * n_events) if n_events != 0 else 0))) diff --git a/Generators/PowhegControl/python/strategies/AfterburnerNNLOReweighting.py b/Generators/PowhegControl/python/strategies/AfterburnerNNLOReweighting.py index 5c87c523ec3d3..0c0d339f01a2e 100644 --- a/Generators/PowhegControl/python/strategies/AfterburnerNNLOReweighting.py +++ b/Generators/PowhegControl/python/strategies/AfterburnerNNLOReweighting.py @@ -1,257 +1,228 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl AfterburnerNNLOReweighting +# @PowhegControl AfterburnerNNLOReweighting # NNLOPS afterburner to reweight Powheg events # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -from ..utility import LHEHandler, ProcessHandling +from AthenaCommon.Logging import logging +import glob +import os +import re +import shutil from xml.etree import ElementTree -import glob, mmap, os, shutil - -## Convenience function to set up an instance of the reweighting class -def afterburner_NNLO_reweighting(configurator) : - reweighter = AfterburnerNNLOReweighting( configurator ) - reweighter.run_NNLO_executable() - reweighter.postprocess_NNLO_events() - - -## Handler for reweighting functions -class AfterburnerNNLOReweighting : - - def __init__(self, configurator) : - self._logger = configurator.logger - self._logger.info( 'Initialising NNLO reweighting' ) - - # Read-in inputs and outputs - self._LHEF_name = 'pwgevents.lhe' - self._LHEF_nnlo_name = 'pwgevents.lhe.nnlo' - self._NNLO_reweighting_inputs = configurator.NNLO_reweighting_inputs - self._NNLO_output_weights = configurator.NNLO_output_weights - self._nominal_group_name = [ x[1] for x in configurator.fixed_parameters if x[0] == 'lhrwgt_group_name' ][0] - - # Strip comment strings from input LHEF file - reweighter will crash otherwise - self._logger.info( 'Removing comments from input LHE file' ) - os.system( "sed -i 's/\!.*$//g' {0}".format( self._LHEF_name ) ) - - # Construct weight descriptor sets for consistent ordering - self._logger.info( 'Constructing list of weights' ) - self._NNLO_weight_descriptors = [] - for idx, (weight_ID, weight_description) in enumerate( sorted( self._NNLO_output_weights.items() ), start=4001 ) : - if hasattr( configurator, 'variations' ) : - for replacement in [ x for x in configurator.variations if x.weight_description in weight_description ] : - weight_description = weight_description.replace( "\'{0}\'".format(replacement.weight_description), "\'{0}\'".format(replacement.weight_ID) ) - self._NNLO_weight_descriptors.append( (idx, weight_ID, weight_description) ) - - # Get NNLO executable - self._NNLO_executable = self.get_executable( configurator._powheg_executable ) - self._logger.info( 'Using NNLO reweighter at {0}'.format(self._NNLO_executable ) ) - - # Get reweighting file - for NNLO_reweighting_file_name in self._NNLO_reweighting_inputs.values() : - if os.path.isfile( NNLO_reweighting_file_name ) : - self._logger.info( 'Using local configuration file {}'.format( NNLO_reweighting_file_name ) ) - else : - self._logger.info( 'Trying to acquire configuration file {}'.format( NNLO_reweighting_file_name ) ) - try : - shutil.copy( glob.glob( '{}/../AuxFiles/*/{}'.format( configurator.powheg_directory, NNLO_reweighting_file_name ) )[0], NNLO_reweighting_file_name ) - except OSError : - self._logger.warning( '{} does not exist!'.format( NNLO_reweighting_file_name ) ) - self._logger.warning( '(1) if you generated this file then please ensure it is visible to Powheg on-the-fly.' ) - self._logger.warning( '(2) if the twiki says this file is provided by Powheg on-the-fly, please submit a bug report.' ) - - - ## Run the NNLO executable - def run_NNLO_executable(self) : - # Run NNLOPS - if 'nnlopsreweighter' in self._NNLO_executable : - self.construct_NNLOPS_runcard() - processes = [ ProcessHandling.SingleProcessThread( self._NNLO_executable , self._logger ) ] - manager = ProcessHandling.ProcessManager( processes ) - while manager.monitor( self._logger ) : pass - - # Run DYNNLO - elif 'minnlo' in self._NNLO_executable : - # Stage 1 - produce MINLO-W*-denom.top files - stage_1_command = self.construct_DYNNLO_argument_list() - self._logger.info( 'Running reweighting stage 1: denominator calculation' ) - processes = [ ProcessHandling.SingleProcessThread( stage_1_command, self._logger ) ] - manager = ProcessHandling.ProcessManager( processes ) - while manager.monitor( self._logger ) : pass - - # Stage 2 - produce MINLO-W*-denom.top files - stage_2_command = stage_1_command + [ 'MINLO-W{0}-denom.top'.format(idx) for idx in range(1,len(self._NNLO_reweighting_inputs)+1) ] - self._logger.info( 'Running reweighting stage 2: reweighting with pre-calculated denominators' ) - processes = [ ProcessHandling.SingleProcessThread( stage_2_command, self._logger ) ] - manager = ProcessHandling.ProcessManager( processes ) - while manager.monitor( self._logger ) : pass - - # Rename output - shutil.move( 'pwgevents.lhe-nnlo', 'pwgevents.lhe.nnlo' ) - - - ## Postprocessing for NNLOPS and DYNNLO events - def postprocess_NNLO_events(self) : - shutil.move( self._LHEF_name, '{0}.native'.format(self._LHEF_name) ) - self._logger.info( 'Reformatting NNLO reweighting output' ) - # Run NNLOPS - if 'nnlopsreweighter' in self._NNLO_executable : - self.postprocess_NNLOPS_events() - # Run DYNNLO - elif 'minnlo' in self._NNLO_executable : - self.postprocess_DYNNLO_events() - - - ## Determine the path to the appropriate executable - def get_executable( self, powheg_executable ) : - process = powheg_executable.split('/')[-2] - if process == 'HJ' : relative_path = 'nnlopsreweighter' - elif process == 'Wj' : relative_path = 'DYNNLOPS/WNNLOPS/Reweighter/minnlo' - elif process == 'Zj' : relative_path = 'DYNNLOPS/ZNNLOPS/Reweighter/minnlo' - return powheg_executable.replace('pwhg_main',relative_path) - - - ## Construct the argument list needed by DYNNLOPS reweighter - def construct_DYNNLO_argument_list(self) : - DYNNLO_top_files = self._NNLO_reweighting_inputs.values() - return [ self._NNLO_executable, 'pwgevents.lhe', len(DYNNLO_top_files) ] + DYNNLO_top_files - - - ## Construct the run card needed by NNLOPSreweighter - def construct_NNLOPS_runcard(self) : - self._logger.info( 'Constructing NNLOPS run card' ) - # Prepare the nnlopsreweighter runcard - with open( 'nnlopsreweighter.input', 'wb' ) as f : - # Name of the input LHE file - f.write( "lhfile {0}\n\n".format(self._LHEF_name) ) - - # Weights present in the lhfile: #mtinf, mt, mtmb, mtmb-bminlo - # a line with: 'nnlofiles' followed by a quoted label and the name of a HNNLO output file. - f.write( "nnlofiles\n" ) - for label, NNLO_reweighting_file_name in self._NNLO_reweighting_inputs.items() : - f.write( "'{0}' {1}\n".format( label, NNLO_reweighting_file_name ) ) - f.write( "\n" ) - - # NNLOPS weights, in LHEv3 format: can be grouped as prefered with arbitrary IDs - # Description line tells reweighter how to calculate weights: - # *) loops through the weight IDs in the LHEF file and through the labels of the nnlofiles. - # *) if description contains a weight-label and an nnlofile-label: - # - compute new weight by reweighting the corresponding weights in the input file with the result from the nnlofile - f.write( "<initrwgt>\n" ) - f.write( "<weightgroup name='NNLOPS'>\n" ) - for idx, weight_ID, weight_description in self._NNLO_weight_descriptors : - f.write( "<weight id='{0}'> {1} </weight>\n".format( weight_ID, weight_description ) ) - f.write( "</weightgroup>\n" ) - f.write( "</initrwgt>\n" ) - - - def postprocess_NNLOPS_events(self) : - self._logger.info( 'Renaming NNLO weights' ) - ## Rename NNLO weights to fit ATLAS conventions - could be rewritten to use XML parsing, but this may be overkill - NNLO_weight_sets = [ (idx, ID_string, description) for idx, (ID_string, description) in enumerate( sorted(self._NNLO_output_weights.items()), start=4001 ) ] - with open( self._LHEF_name, 'wb' ) as f_output : - with open( self._LHEF_nnlo_name, 'rb' ) as f_input : - for input_line in f_input : - output_line = input_line - for idx, weight_ID, weight_description in self._NNLO_weight_descriptors : - # Switch weight ID/description naming - if "id='{0}'".format(weight_ID) in output_line : - output_line = output_line.replace( weight_ID, str(idx) ).replace( weight_description, weight_ID ) - # Convert exponential delimiter - if "wgt id=" in output_line : - output_line = output_line.replace('D+','E+').replace('D-','E-') - if len(output_line) > 1 : # strip empty lines - f_output.write( output_line ) - - - def postprocess_DYNNLO_events(self) : - self._logger.info( 'Converting output to LHEv3 format' ) - # Extract header, footer and representative event - with open( self._LHEF_nnlo_name, 'rb' ) as f_input : - input_string = mmap.mmap( f_input.fileno(), 0, access=mmap.ACCESS_READ ) - if input_string.find('<header>') != -1 : - intro = input_string[ : input_string.find('<header>') ] - header = input_string[ input_string.find('<header>') : input_string.find('</header>')+9 ] - else : - intro = input_string[ : input_string.find('<init>') ] - header = '<header></header>' - init = input_string[ input_string.find('<init>') : input_string.find('</init>')+8 ] - if input_string.find('<LesHouchesEvents>') != -1 : - footer = input_string[ input_string.find('</LesHouchesEvents>') : ] - else : - footer = '</LesHouchesEvents>' - first_event = input_string[ input_string.find('<event>') : input_string.find('</event>')+8 ] - - ## Get weight names and header - weights = LHEHandler.weights_from_event(first_event) - header_elem = ElementTree.fromstring(header) - if header_elem.find('initrwgt') is None : - header_elem.append( ElementTree.fromstring('<initrwgt></initrwgt>') ) - - ## Add nominal and DYNNLO weightgroups to the header - weightgroups = [ x for x in header_elem.find('initrwgt').findall('weightgroup') ] - for weightgroup_name in [ self._nominal_group_name, 'dynnlo' ] : - if not any( [ weightgroup.attrib['name'] == weightgroup_name for weightgroup in weightgroups ] ) : - header_elem.find('initrwgt').append( ElementTree.fromstring('<weightgroup combine="none" name="{0}"></weightgroup>'.format(weightgroup_name)) ) - self._logger.info( 'Adding LHEv3 weightgroup: {0}'.format(weightgroup_name) ) - - ## Add nominal weight name to header - weightgroup = [ x for x in header_elem.find('initrwgt').findall('weightgroup') if x.attrib['name'] == self._nominal_group_name ][0] - if not any( [ weight.attrib['id'] == '0' for weight in weightgroup.findall('weight') ] ) : - weightgroup.append( ElementTree.fromstring("<weight id='0'> nominal </weight>") ) - self._logger.info( 'Adding LHEv3 weight: nominal' ) - - ## Add DYNNLO weight names to header - try : - weight_elems = header_elem.iter(tag='weight') # needs python >= 2.7 - except AttributeError : - weight_elems = header_elem.getiterator(tag='weight') - existing_weights = sorted( [ int(weight_elem.attrib['id']) for weight_elem in weight_elems ] ) - weight_number_offset = max( [ w for w in existing_weights if 4000<=w<5000 ]+[4000] ) + 1 - weightgroup = [ x for x in header_elem.find('initrwgt').findall('weightgroup') if x.attrib['name'] == 'dynnlo' ][0] - weight_name_to_id = {} - for idx, weight in enumerate(weights) : - weight_name_to_id[weight[0]] = weight_number_offset+idx - weightgroup.append( ElementTree.fromstring('<weight id="{0}"> {1} </weight>'.format(weight_name_to_id[weight[0]],weight[0])) ) - self._logger.info( 'Adding LHEv3 weight: {0}'.format(weight[0]) ) - self.reindent(header_elem) - - ## Process input events - with open( self._LHEF_name, 'wb' ) as f_output : - f_output.write( intro ) - ElementTree.ElementTree( header_elem ).write( f_output ) - f_output.write( init ) - with open( self._LHEF_nnlo_name, 'rb' ) as f_input : - in_event, event_lines = False, '' - for line in f_input : - if '<event>' in line : in_event = True - if in_event : event_lines += line - if '</event>' in line : - # Construct LHEv3 weight lines - if '#new weight,renfact,facfact,pdf1,pdf2' in event_lines : - if not '<rwgt>' in event_lines : - nominal_weight = [ x for x in event_lines.split('\n')[1].split(' ') if len(x) > 0 ][2] - event_lines = event_lines[:event_lines.find('#')] + "<rwgt>\n<wgt id='0'> {0} </wgt>\n</rwgt>\n".format(nominal_weight) + event_lines[event_lines.find('#'):] - weight_lines = ''.join( [ "<wgt id='{0}'> {1} </wgt>\n".format( weight_name_to_id[weight[0]], weight[1] ) for weight in LHEHandler.weights_from_event( event_lines ) ] ) - output_lines = event_lines[:event_lines.find('</rwgt>')] + weight_lines + event_lines[event_lines.find('</rwgt>'):event_lines.find('#new weight,renfact,facfact,pdf1,pdf2')]+'</event>\n' - else : - output_lines = event_lines - f_output.write( output_lines ) - in_event, event_lines = False, '' - f_output.write( footer ) - - - def reindent( self, elem ) : - if len(elem) : - if not elem.text or not elem.text.strip() : - elem.text = '\n' - if not elem.tail or not elem.tail.strip() : - elem.tail = '\n' - for subelem in elem : - self.reindent(subelem) - if not elem.tail or not elem.tail.strip() : - elem.tail = '\n' - else : - if not elem.tail or not elem.tail.strip() : - elem.tail = '\n' +from ..utility import LHEUtils, ProcessHandling + +# Initialise logging handler +logger = logging.getLogger("PowhegControl") + +# Convenience function to set up an instance of the reweighting class + + +def afterburner_NNLO_reweighting(configurator): + reweighter = AfterburnerNNLOReweighting(configurator) + reweighter.run_NNLO_executable() + reweighter.postprocess_NNLO_events() + + +# Handler for reweighting functions +class AfterburnerNNLOReweighting(object): + + def __init__(self, configurator): + logger.info("Initialising NNLO reweighting") + + # Read-in inputs and outputs + self._LHEF_name = "pwgevents.lhe" + self._LHEF_nnlo_name = "pwgevents.lhe.NNLO" + self._NNLO_reweighting_inputs = configurator.NNLO_reweighting_inputs + self._NNLO_output_weights = configurator.NNLO_output_weights + self._nominal_group_name = [x[1] for x in configurator.fixed_parameters if x[0] == "lhrwgt_group_name"][0] + + # Strip comment strings from input LHEF file - reweighter will crash otherwise + logger.info("Removing comments from input LHE file") + os.system(r"sed -i 's/\!.*$//g' {}".format(self._LHEF_name)) + + # Construct weight descriptor sets for consistent ordering + logger.info("Constructing list of weights") + self._NNLO_weight_descriptors, existing_weights = [], configurator.weight_description_to_ID.items()[:] + for idx, (NNLO_weight_ID, NNLO_weight_description) in enumerate(self._NNLO_output_weights.items(), start=4001): + weight_ID, weight_description = NNLO_weight_ID, NNLO_weight_description.replace("muR = 1.0, muF = 1.0", "nominal") + # Check whether any of the NNLO descriptions refer to existing weights + for existing_weight_description, existing_weight_ID in existing_weights: + # Check for both '$description' and "$description" + re_match = re.search( r"""["']{}["']""".format(existing_weight_description), weight_description ) + if re_match is not None: + weight_description = weight_description.replace(re_match.group(0), re_match.group(0).replace(existing_weight_description, str(existing_weight_ID))) + logger.info("... identified '{}' as weight ID '{}'".format(existing_weight_description, existing_weight_ID)) + # If a match is found then replace description -> ID in the string and store in the map + configurator.weight_description_to_ID[weight_description] = weight_ID + self._NNLO_weight_descriptors.append((idx, weight_ID, weight_description)) + + # Get NNLO executable + self._NNLO_executable = self.get_executable(configurator._powheg_executable) + logger.info("Using NNLO reweighter at {}".format(self._NNLO_executable)) + + # Get reweighting file + for NNLO_reweighting_file_name in self._NNLO_reweighting_inputs.values(): + if os.path.isfile(NNLO_reweighting_file_name): + logger.info("Using local configuration file {}".format(NNLO_reweighting_file_name)) + else: + logger.info("Trying to acquire configuration file {}".format(NNLO_reweighting_file_name)) + try: + shutil.copy(glob.glob("{}/../AuxFiles/*/{}".format(configurator.powheg_directory, NNLO_reweighting_file_name))[0], NNLO_reweighting_file_name) + except (OSError, IndexError): + logger.warning("{} does not exist!".format(NNLO_reweighting_file_name)) + logger.warning("(1) if you generated this file then please ensure it is visible to Powheg on-the-fly.") + logger.warning("(2) if you expected Powheg on-the-fly to know about this file, please submit a bug report.") + + # Run the NNLO executable + def run_NNLO_executable(self): + # Run NNLOPS + if "nnlopsreweighter" in self._NNLO_executable: + self.construct_NNLOPS_runcard() + processes = [ProcessHandling.SingleProcessThread(self._NNLO_executable)] + manager = ProcessHandling.ProcessManager(processes) + while manager.monitor(): + pass + # Rename output + shutil.move("pwgevents.lhe.nnlo", self._LHEF_nnlo_name) + + # Run DYNNLO + elif "minnlo" in self._NNLO_executable: + # Stage 1 - produce MINLO-W*-denom.top files + stage_1_command = self.construct_DYNNLO_argument_list() + logger.info("Running reweighting stage 1: denominator calculation") + processes = [ProcessHandling.SingleProcessThread(stage_1_command)] + manager = ProcessHandling.ProcessManager(processes) + while manager.monitor(): + pass + + # Stage 2 - produce MINLO-W*-denom.top files + stage_2_command = stage_1_command + ["MINLO-W{}-denom.top".format(idx) for idx in range(1, len(self._NNLO_reweighting_inputs) + 1)] + logger.info("Running reweighting stage 2: reweighting with pre-calculated denominators") + processes = [ProcessHandling.SingleProcessThread(stage_2_command)] + manager = ProcessHandling.ProcessManager(processes) + while manager.monitor(): + pass + + # Rename output + shutil.move("pwgevents.lhe-nnlo", self._LHEF_nnlo_name) + + # Postprocessing for NNLOPS and DYNNLO events + def postprocess_NNLO_events(self): + shutil.move(self._LHEF_name, "{}.NLO".format(self._LHEF_name)) + logger.info("Reformatting NNLO reweighting output") + # Run NNLOPS + if "nnlopsreweighter" in self._NNLO_executable: + self.postprocess_NNLOPS_events() + # Run DYNNLO + elif "minnlo" in self._NNLO_executable: + self.postprocess_DYNNLO_events() + + # Determine the path to the appropriate executable + def get_executable(self, powheg_executable): + process = powheg_executable.split("/")[-2] + if process == "HJ": + relative_path = "nnlopsreweighter" + elif process == "Wj": + relative_path = "DYNNLOPS/WNNLOPS/Reweighter/minnlo" + elif process == "Zj": + relative_path = "DYNNLOPS/ZNNLOPS/Reweighter/minnlo" + return powheg_executable.replace("pwhg_main", relative_path) + + # Construct the argument list needed by DYNNLOPS reweighter + def construct_DYNNLO_argument_list(self): + DYNNLO_top_files = self._NNLO_reweighting_inputs.values() + return [self._NNLO_executable, "pwgevents.lhe", len(DYNNLO_top_files)] + DYNNLO_top_files + + # Construct the run card needed by NNLOPSreweighter + def construct_NNLOPS_runcard(self): + logger.info("Constructing NNLOPS run card") + # Prepare the nnlopsreweighter runcard + with open("nnlopsreweighter.input", "wb") as f_input_card: + # Name of the input LHE file + f_input_card.write("lhfile {}\n\n".format(self._LHEF_name)) + + # Header of "nnlofiles" followed by a quoted label and the name of a HNNLO output file. + f_input_card.write("nnlofiles\n") + for label, NNLO_reweighting_file_name in self._NNLO_reweighting_inputs.items(): + f_input_card.write("'{}' {}\n".format(label, NNLO_reweighting_file_name)) + f_input_card.write("\n") + + # NNLOPS weights, in LHEv3 format + # Description line tells reweighter how to calculate weights: + # *) loops through the weight IDs in the LHEF file and through the labels of the nnlofiles. + # *) if description contains a weight-label and an nnlofile-label: + # - compute new weight by reweighting the corresponding weights in the + # input file with the result from the nnlofile + f_input_card.write("<initrwgt>\n") + f_input_card.write("<weightgroup name='NNLOPS'>\n") + for _, weight_ID, weight_description in self._NNLO_weight_descriptors: + f_input_card.write("<weight id='{}'> {} </weight>\n".format(weight_ID, weight_description)) + f_input_card.write("</weightgroup>\n") + f_input_card.write("</initrwgt>\n") + + def postprocess_NNLOPS_events(self): + logger.info("Renaming NNLO weights") + # Rename NNLO weights to fit ATLAS conventions - could be rewritten to use XML parsing, but this may be overkill + with open(self._LHEF_name, "wb") as f_output: + with open(self._LHEF_nnlo_name, "rb") as f_input: + for input_line in f_input: + output_line = input_line + for idx, weight_ID, weight_description in self._NNLO_weight_descriptors: + # Switch weight ID/description naming + if "id='{}'".format(weight_ID) in output_line: + output_line = output_line.replace(weight_ID, str(idx)).replace(weight_description, weight_ID) + # Convert exponential delimiter + if "wgt id=" in output_line: + output_line = output_line.replace("D+", "E+").replace("D-", "E-") + if len(output_line) > 1: # strip empty lines + f_output.write(output_line) + + def postprocess_DYNNLO_events(self): + logger.info("Converting output to LHEv3 format") + + # Extract intro, header and footer + opening_string = LHEUtils.get_opening_string(self._LHEF_nnlo_name) + closing_string = LHEUtils.get_closing_string(self._LHEF_nnlo_name) + if opening_string.find("<header>") != -1: + intro = opening_string[: opening_string.find("<header>")] + header = opening_string[opening_string.find("<header>"): opening_string.find("</header>") + 9] + else: + intro = opening_string[: opening_string.find("<init>")] + header = "<header></header>" + init = opening_string[opening_string.find("<init>"): opening_string.find("</init>") + 8] + if closing_string.find("<LesHouchesEvents>") != -1: + footer = closing_string[closing_string.find("</LesHouchesEvents>"):] + else: + footer = "</LesHouchesEvents>" + + # Add nominal weight to header + logger.info("Adding LHEv3 weight: nominal") + header_elem = LHEUtils.add_weight_to_header(header, self._nominal_group_name, "nominal", 0) + + # Get list of any weights already used in the range 4000-5000 + weight_name_to_id = {} + try: + w_elems = header_elem.iter(tag="weight") # needs python >= 2.7 + except AttributeError: + w_elems = header_elem.getiterator(tag="weight") + weight_number_offset = max(filter(lambda w: 4000 <= w < 5000, [int(w_elem.attrib["id"]) for w_elem in w_elems]) + [4000]) + + # Add DYNNLO weights to header + dynnlo_weight_names = [x[0] for x in LHEUtils.string_to_weight(LHEUtils.get_first_event(self._LHEF_nnlo_name))] + for idx, weight_name in enumerate(dynnlo_weight_names, start=1): + logger.info("Adding LHEv3 weight: {}".format(weight_name)) + weight_name_to_id[weight_name] = weight_number_offset + idx + header_elem = LHEUtils.add_weight_to_header(header_elem, "dynnlo", weight_name, weight_name_to_id[weight_name]) + + # Convert Powheg input events to LHEv3 output ones + logger.info("Converting Powheg output into LHEv3 format") + with open(self._LHEF_name, "wb") as f_output: + f_output.write(intro) + ElementTree.ElementTree(header_elem).write(f_output) + f_output.write(init) + for event in LHEUtils.event_iterator(self._LHEF_nnlo_name): + f_output.write(LHEUtils.Powheg2LHEv3(event, weight_name_to_id)) + f_output.write(footer) diff --git a/Generators/PowhegControl/python/strategies/AfterburnerPhotos.py b/Generators/PowhegControl/python/strategies/AfterburnerPhotos.py index 5901cd374264d..bfb7716d43888 100644 --- a/Generators/PowhegControl/python/strategies/AfterburnerPhotos.py +++ b/Generators/PowhegControl/python/strategies/AfterburnerPhotos.py @@ -1,17 +1,22 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl AfterburnerPhotos +# @PowhegControl AfterburnerPhotos # Apply PHOTOS afterburner to pre-generated Powheg events # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python +from AthenaCommon.Logging import logging from ..utility import ProcessHandling +# Initialise logging handler +logger = logging.getLogger("PowhegControl") -## Run PHOTOS as an afterburner to existing events -def afterburner_PHOTOS(configurator) : - configurator.logger.info( 'Running PHOTOS afterburner' ) - processes = [ ProcessHandling.SingleProcessThread( configurator._PHOTOS_executable, configurator.logger ) ] - manager = ProcessHandling.ProcessManager( processes ) - while manager.monitor( configurator.logger ) : pass + +# Run PHOTOS as an afterburner to existing events +def afterburner_PHOTOS(configurator): + logger.info("Running PHOTOS afterburner") + processes = [ProcessHandling.SingleProcessThread(configurator._PHOTOS_executable)] + manager = ProcessHandling.ProcessManager(processes) + while manager.monitor(): + pass diff --git a/Generators/PowhegControl/python/strategies/AfterburnerReweighting.py b/Generators/PowhegControl/python/strategies/AfterburnerReweighting.py index d68fdb1b40573..135bf569b5b8a 100644 --- a/Generators/PowhegControl/python/strategies/AfterburnerReweighting.py +++ b/Generators/PowhegControl/python/strategies/AfterburnerReweighting.py @@ -1,114 +1,126 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl AfterburnerReweighting +# @PowhegControl AfterburnerReweighting # Reweight pre-generated Powheg events # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -import collections, os, shutil, subprocess, time -from GenerateSingleCore import * +from AthenaCommon.Logging import logging +import collections +import os +import shutil +import time +from GenerateSingleCore import generate_single_core from ..utility import FileParser, RepeatingTimer -## Initialise and validate reweighting lists -def initialise_reweighting(configurator) : - configurator.logger.info( 'Initialising PDF/scale variations' ) - - # Construct and sanitise PDF and scale lists - configurator.PDF = map( int, configurator.PDF ) if isinstance(configurator.PDF,list) else [ configurator.PDF ] - configurator.mu_F = map( float, configurator.mu_F ) if isinstance(configurator.mu_F,list) else [ configurator.mu_F ] - configurator.mu_R = map( float, configurator.mu_R ) if isinstance(configurator.mu_R,list) else [ configurator.mu_R ] - assert( len(configurator.mu_F) == len(configurator.mu_R) ), 'List of mu_F variations must be the same length as list of mu_R variations' - - # Construct nominal (assuming that it is first) - configurator.logger.info( 'Using PDF={}, mu_F={}, mu_R={} as nominal sample'.format( configurator.PDF[0], configurator.mu_F[0], configurator.mu_R[0] ) ) - - # Enable #rwgt information lines - these cause Pythia to crash if present in the final output - FileParser('powheg.input').text_replace( 'storeinfo_rwgt 0', 'storeinfo_rwgt 1' ) - shutil.copy( 'powheg.input', 'powheg_nominal.input' ) - - -## Run reweighting as an afterburner to existing events -def afterburner_reweighting(configurator) : - # Tuples to hold reweighting information - ScalePDFWeightSpecifier = collections.namedtuple( 'ScalePDFWeightSpecifier', ['PDF', 'mu_F', 'mu_R', 'weight_ID', 'weight_description', 'group_combination_method', 'group_description'] ) - ArbitraryWeightSpecifier = collections.namedtuple( 'ArbitraryWeightSpecifier', ['parameter_settings', 'weight_ID', 'weight_description', 'group_combination_method', 'group_description'] ) - - # Backup of generation statistics - if os.path.isfile( 'pwgcounters.dat' ) : - shutil.copy( 'pwgcounters.dat', 'pwgcounters.dat.bak' ) - - # Construct scale/PDF variations (ignoring first entry) - configurator.variations = [ ScalePDFWeightSpecifier( PDF=configurator.PDF[0], mu_F=configurator.mu_F[0], mu_R=configurator.mu_R[0], weight_ID=0, weight_description='nominal', group_combination_method='', group_description='nominal' ) ] - for idx, (mu_F, mu_R) in enumerate( zip( configurator.mu_F[1:], configurator.mu_R[1:] ) ) : - configurator.variations.append( ScalePDFWeightSpecifier( PDF=configurator.PDF[0], mu_F=mu_F, mu_R=mu_R, weight_ID=1001+idx, weight_description='muR = {}, muF = {}'.format(mu_R,mu_F), group_combination_method='envelope', group_description='scale_variation' ) ) - for idx, PDF in enumerate( configurator.PDF[1:] ) : - configurator.variations.append( ScalePDFWeightSpecifier( PDF=PDF, mu_F=configurator.mu_F[0], mu_R=configurator.mu_R[0], weight_ID=2001+idx, weight_description='PDF set = {0:d}'.format(PDF), group_combination_method='hessian', group_description='PDF_variation' ) ) - - # Construct arbitrary variations - weight_ID = 3001 - for group_name, group_variations in configurator.event_weight_groups.items() : - for variation_name in [ name for name in group_variations.keys() if not name == 'parameter_names' ] : - configurator.variations.append( ArbitraryWeightSpecifier( parameter_settings=group_variations[variation_name], weight_ID=weight_ID, weight_description=variation_name, group_combination_method='none', group_description=group_name ) ) - weight_ID += 1 - - # Iterate over variations: they are cast to int to mitigate vulnerability from shell=True - for idx_variation, variation in enumerate( configurator.variations ) : - if idx_variation == 0 : continue # skip nominal variation - configurator.logger.info( 'Preparing to run weight variation {0}/{1}'.format(idx_variation, len(configurator.variations)-1) ) - configurator.logger.info( '... weight name is: {}'.format( variation.weight_description ) ) - configurator.logger.info( '... weight index ID is: {}'.format( variation.weight_ID ) ) - shutil.copy( 'powheg_nominal.input', 'powheg.input' ) - - # As the nominal process has already been run, turn on compute_rwgt - FileParser('powheg.input').text_replace( 'compute_rwgt 0', 'compute_rwgt 1' ) - - # Ensure that manyseeds is turned off, as this would cause the reweighting to crash - FileParser('powheg.input').text_replace( 'manyseeds .*', 'manyseeds 0' ) - FileParser('powheg.input').text_replace( 'parallelstage .*', 'parallelstage -1' ) - - # Apply scale/PDF variation settings - if isinstance( variation, ScalePDFWeightSpecifier ) : - configurator.logger.info( 'Weight variation type: scale/PDF' ) - FileParser('powheg.input').text_replace( 'lhans1 {}'.format(configurator.PDF[0]), 'lhans1 {0}'.format(variation.PDF) ) - FileParser('powheg.input').text_replace( 'lhans2 {}'.format(configurator.PDF[0]), 'lhans2 {0}'.format(variation.PDF) ) - configurator.logger.info( '... setting PDF to {}'.format( variation.PDF ) ) - FileParser('powheg.input').text_replace( 'facscfact {}'.format(configurator.mu_F[0]), 'facscfact {}'.format(variation.mu_F) ) - configurator.logger.info( '... setting factorisation scale to {}'.format( variation.mu_F ) ) - FileParser('powheg.input').text_replace( 'renscfact {}'.format(configurator.mu_R[0]), 'renscfact {}'.format(variation.mu_R) ) - configurator.logger.info( '... setting renormalisation scale to {}'.format( variation.mu_R ) ) - - # Apply arbitrary settings - if isinstance( variation, ArbitraryWeightSpecifier ) : - configurator.logger.info( 'Weight variation type: user-defined weight group' ) - for (parameter,value) in variation.parameter_settings : - try : - for powheg_parameter in configurator.configurable_to_parameters[parameter] : - FileParser('powheg.input').text_replace( '^{}.*'.format(powheg_parameter), '{} {}'.format(powheg_parameter,value) ) - configurator.logger.info( '... setting {} to {}'.format( parameter, value ) ) - except KeyError : - self.logger.warning( 'Parameter "{}" not recognised. Cannot reweight!'.format(parameter) ) - - # Set reweighting metadata - FileParser('powheg.input').text_replace( "lhrwgt_descr \'nominal\'", "lhrwgt_descr \'{}\'".format(variation.weight_description) ) - FileParser('powheg.input').text_replace( "lhrwgt_id \'0\'", "lhrwgt_id \'{0}\'".format(variation.weight_ID) ) - FileParser('powheg.input').text_replace( "lhrwgt_group_combine \'none\'", "lhrwgt_group_combine \'{0}\'".format(variation.group_combination_method) ) - FileParser('powheg.input').text_replace( "lhrwgt_group_name \'none\'", "lhrwgt_group_name \'{0}\'".format(variation.group_description) ) - - # Run the process until termination - time_start = time.time() - generate_single_core( configurator ) - shutil.move( 'pwgevents-rwgt.lhe', 'pwgevents.lhe' ) - configurator.logger.info( 'Finished weight variation {0}/{1} in {2}'.format(idx_variation, len(configurator.variations)-1, RepeatingTimer.human_readable_time_interval(time.time() - time_start)) ) - - # Remove rwgt lines, which crash Pythia and are not needed if lhrwgt xml is present - FileParser('pwgevents.lhe').text_remove( '^#rwgt' ) - FileParser('pwgevents.lhe').text_remove( '^#new weight' ) - - # Correct LHE version identification; otherwise Pythia will treat all files as v1 - FileParser('pwgevents.lhe').text_replace( 'LesHouchesEvents version="1.0"', 'LesHouchesEvents version="3.0"' ) - - # Restore generation statistics and initial runcard - shutil.move( 'powheg_nominal.input', 'powheg.input' ) - if os.path.isfile( 'pwgcounters.dat.bak' ) : - shutil.move( 'pwgcounters.dat.bak', 'pwgcounters.dat' ) +# Initialise logging handler +logger = logging.getLogger("PowhegControl") + +# Initialise and validate reweighting lists + + +def initialise_reweighting(configurator): + logger.info("Initialising PDF/scale variations") + + # Construct and sanitise PDF and scale lists + configurator.PDF = map(int, configurator.PDF) if isinstance(configurator.PDF, list) else [configurator.PDF] + configurator.mu_F = map(float, configurator.mu_F) if isinstance(configurator.mu_F, list) else [configurator.mu_F] + configurator.mu_R = map(float, configurator.mu_R) if isinstance(configurator.mu_R, list) else [configurator.mu_R] + assert(len(configurator.mu_F) == len(configurator.mu_R)), "List of mu_F variations must be the same length as list of mu_R variations" + + # Construct nominal (assuming that it is first) + logger.info("Using PDF={}, mu_F={}, mu_R={} as nominal sample".format(configurator.PDF[0], configurator.mu_F[0], configurator.mu_R[0])) + + # Enable #rwgt information lines - these cause Pythia to crash if present in the final output + FileParser("powheg.input").text_replace("storeinfo_rwgt 0", "storeinfo_rwgt 1") + shutil.copy("powheg.input", "powheg_nominal.input") + + +# Run reweighting as an afterburner to existing events +def afterburner_reweighting(configurator): + # Tuples to hold reweighting information + ScalePDFWeightSpecifier = collections.namedtuple("ScalePDFWeightSpecifier", ["PDF", "mu_F", "mu_R", "weight_ID", "weight_description", "group_combination_method", "group_description"]) + ArbitraryWeightSpecifier = collections.namedtuple("ArbitraryWeightSpecifier", ["parameter_settings", "weight_ID", "weight_description", "group_combination_method", "group_description"]) + + # Backup of generation statistics + if os.path.isfile("pwgcounters.dat"): + shutil.copy("pwgcounters.dat", "pwgcounters.dat.bak") + + # Construct scale/PDF variations (using first entry as nominal) + weight_variations = [ScalePDFWeightSpecifier(PDF=configurator.PDF[0], mu_F=configurator.mu_F[0], mu_R=configurator.mu_R[0], weight_ID=0, weight_description="nominal", group_combination_method="", group_description="nominal")] + for idx, (mu_F, mu_R) in enumerate(zip(configurator.mu_F[1:], configurator.mu_R[1:])): + weight_variations.append(ScalePDFWeightSpecifier(PDF=configurator.PDF[0], mu_F=mu_F, mu_R=mu_R, weight_ID=1001 + idx, weight_description="muR = {}, muF = {}".format(mu_R, mu_F), group_combination_method="envelope", group_description="scale_variation")) + for idx, PDF in enumerate(configurator.PDF[1:]): + weight_variations.append(ScalePDFWeightSpecifier(PDF=PDF, mu_F=configurator.mu_F[0], mu_R=configurator.mu_R[0], weight_ID=2001 + idx, weight_description="PDF set = {:d}".format(PDF), group_combination_method="hessian", group_description="PDF_variation")) + + # Construct arbitrary variations + weight_ID = 3001 + for group_name, group_variations in configurator.event_weight_groups.items(): + for variation_name in [name for name in group_variations.keys() if not name == "parameter_names"]: + weight_variations.append(ArbitraryWeightSpecifier(parameter_settings=group_variations[variation_name], weight_ID=weight_ID, weight_description=variation_name, group_combination_method="none", group_description=group_name)) + weight_ID += 1 + + # Iterate over variations: they are cast to int to mitigate vulnerability from shell=True + for idx_variation, variation in enumerate(weight_variations): + # Add information to configurator + configurator.weight_description_to_ID[variation.weight_description] = variation.weight_ID + if idx_variation == 0: + continue # skip nominal variation + logger.info("Preparing to run weight variation {}/{}".format(idx_variation, len(weight_variations) - 1)) + logger.info("... weight name is: {}".format(variation.weight_description)) + logger.info("... weight index ID is: {}".format(variation.weight_ID)) + shutil.copy("powheg_nominal.input", "powheg.input") + + # As the nominal process has already been run, turn on compute_rwgt + FileParser("powheg.input").text_replace("compute_rwgt 0", "compute_rwgt 1") + + # Ensure that manyseeds is turned off, as this would cause the reweighting to crash + FileParser("powheg.input").text_replace("manyseeds .*", "manyseeds 0") + FileParser("powheg.input").text_replace("parallelstage .*", "parallelstage -1") + + # Apply scale/PDF variation settings + if isinstance(variation, ScalePDFWeightSpecifier): + logger.info("Weight variation type: scale/PDF") + FileParser("powheg.input").text_replace("lhans1 {}".format(configurator.PDF[0]), "lhans1 {}".format(variation.PDF)) + FileParser("powheg.input").text_replace("lhans2 {}".format(configurator.PDF[0]), "lhans2 {}".format(variation.PDF)) + logger.info("... setting PDF to {}".format(variation.PDF)) + FileParser("powheg.input").text_replace("facscfact {}".format(configurator.mu_F[0]), "facscfact {}".format(variation.mu_F)) + logger.info("... setting factorisation scale to {}".format(variation.mu_F)) + FileParser("powheg.input").text_replace("renscfact {}".format(configurator.mu_R[0]), "renscfact {}".format(variation.mu_R)) + logger.info("... setting renormalisation scale to {}".format(variation.mu_R)) + + # Apply arbitrary settings + if isinstance(variation, ArbitraryWeightSpecifier): + logger.info("Weight variation type: user-defined weight group") + for (parameter, value) in variation.parameter_settings: + try: + for powheg_parameter in configurator.configurable_to_parameters[parameter]: + FileParser("powheg.input").text_replace("^{}.*".format(powheg_parameter), "{} {}".format(powheg_parameter, value)) + logger.info("... setting {} to {}".format(parameter, value)) + except KeyError: + logger.warning("Parameter '{}' not recognised. Cannot reweight!".format(parameter)) + + # Set reweighting metadata + FileParser("powheg.input").text_replace("lhrwgt_descr .*", "lhrwgt_descr '{}'".format(variation.weight_description)) + FileParser("powheg.input").text_replace("lhrwgt_id .*", "lhrwgt_id '{}'".format(variation.weight_ID)) + FileParser("powheg.input").text_replace("lhrwgt_group_combine .*", "lhrwgt_group_combine '{}'".format(variation.group_combination_method)) + FileParser("powheg.input").text_replace("lhrwgt_group_name .*", "lhrwgt_group_name '{}'".format(variation.group_description)) + + # Run the process until termination + time_start = time.time() + generate_single_core(configurator) + shutil.move("pwgevents-rwgt.lhe", "pwgevents.lhe") + logger.info("Finished weight variation {}/{} in {}".format(idx_variation, len(weight_variations) - 1, RepeatingTimer.human_readable_time_interval(time.time() - time_start))) + + # Remove rwgt lines, which crash Pythia and are not needed if lhrwgt xml is present + FileParser("pwgevents.lhe").text_remove("^#rwgt") + FileParser("pwgevents.lhe").text_remove("^#new weight") + + # Correct LHE version identification; otherwise Pythia will treat all files as v1 + FileParser("pwgevents.lhe").text_replace('LesHouchesEvents version="1.0"', 'LesHouchesEvents version="3.0"') + + # Restore generation statistics and initial runcard + shutil.move("powheg_nominal.input", "powheg.input") + if os.path.isfile("pwgcounters.dat.bak"): + shutil.move("pwgcounters.dat.bak", "pwgcounters.dat") diff --git a/Generators/PowhegControl/python/strategies/GenerateSingleCore.py b/Generators/PowhegControl/python/strategies/GenerateSingleCore.py index 61eeb4f27cdaf..8e9915d671777 100644 --- a/Generators/PowhegControl/python/strategies/GenerateSingleCore.py +++ b/Generators/PowhegControl/python/strategies/GenerateSingleCore.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl GenerateSingleCore +# @PowhegControl GenerateSingleCore # Run a single Powheg process in its own thread # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,8 +8,9 @@ #! /usr/bin/env python from ..utility import ProcessHandling -## Run single process -def generate_single_core( configurator ) : - processes = [ ProcessHandling.SingleProcessThread( configurator._powheg_executable, configurator.logger ) ] - manager = ProcessHandling.ProcessManager( processes ) - while manager.monitor( configurator.logger ) : pass +# Run single process +def generate_single_core(configurator): + processes = [ProcessHandling.SingleProcessThread(configurator._powheg_executable)] + manager = ProcessHandling.ProcessManager(processes) + while manager.monitor(): + pass diff --git a/Generators/PowhegControl/python/strategies/GenerateV1MultiCore.py b/Generators/PowhegControl/python/strategies/GenerateV1MultiCore.py index 2fb8471314135..4524624387b03 100644 --- a/Generators/PowhegControl/python/strategies/GenerateV1MultiCore.py +++ b/Generators/PowhegControl/python/strategies/GenerateV1MultiCore.py @@ -1,24 +1,33 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl GenerateV1MultiCore +# @PowhegControl GenerateV1MultiCore # Run multiple Powheg v1 processes using a thread for each one # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python +from AthenaCommon.Logging import logging from ..utility import FileParser, ProcessHandling -## Run multiple Powheg processes -def generate_v1_multi_core(configurator) : - # Construct random seeds - increment by 1e6 each time - configurator.logger.info( 'Running in multicore mode with {0} subjobs'.format(configurator.cores) ) - with open('pwgseeds.dat','wb') as random_seed_list : [ random_seed_list.write( str( configurator.random_seed + int(idx*1e6) )+'\n' ) for idx in range(configurator.cores) ] +# Initialise logging handler +logger = logging.getLogger("PowhegControl") - # Remove iseed if providing seeds from pwgseeds.dat - FileParser('powheg.input').text_remove( '^iseed' ) - configurator.logger.debug( 'Disabling iseed variable when multiple seeds are used' ) +# Run multiple Powheg processes - # Run in multicore mode - processes = [ ProcessHandling.SingleProcessThread( configurator._powheg_executable, configurator.logger, seed_index=idx ) for idx in range(1,configurator.cores+1) ] - manager = ProcessHandling.ProcessManager( processes ) - while manager.monitor( configurator.logger ) : pass + +def generate_v1_multi_core(configurator): + # Construct random seeds - increment by 1e6 each time + logger.info("Running in multicore mode with {} subjobs".format(configurator.cores)) + with open("pwgseeds.dat", "wb") as random_seed_list: + for idx in range(configurator.cores): + random_seed_list.write(str(configurator.random_seed + int(idx * 1e6)) + "\n") + + # Remove iseed if providing seeds from pwgseeds.dat + FileParser("powheg.input").text_remove("^iseed") + logger.debug("Disabling iseed variable when multiple seeds are used") + + # Run in multicore mode + processes = [ProcessHandling.SingleProcessThread(configurator._powheg_executable, seed_index=idx) for idx in range(1, configurator.cores + 1)] + manager = ProcessHandling.ProcessManager(processes) + while manager.monitor(): + pass diff --git a/Generators/PowhegControl/python/strategies/GenerateV2MultiCore.py b/Generators/PowhegControl/python/strategies/GenerateV2MultiCore.py index c10434d9dd78a..804f633dd82c5 100644 --- a/Generators/PowhegControl/python/strategies/GenerateV2MultiCore.py +++ b/Generators/PowhegControl/python/strategies/GenerateV2MultiCore.py @@ -1,51 +1,60 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl GenerateV2MultiCore +# @PowhegControl GenerateV2MultiCore # Run multiple Powheg v2 processes using a thread for each one # - needs multiple stages # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -import subprocess, time +import time +from AthenaCommon.Logging import logging from ..utility import FileParser, ProcessHandling, RepeatingTimer -## Run multiple Powheg processes -def generate_v2_multi_core(configurator) : - # Construct random seeds - increment by 1e6 each time - configurator.logger.info( 'Running in multicore mode with {0} subjobs'.format(configurator.cores) ) - with open('pwgseeds.dat','wb') as random_seed_list : [ random_seed_list.write( str( configurator.random_seed + int(idx*1e6) )+'\n' ) for idx in range(configurator.cores) ] - - # Remove iseed if providing seeds from pwgseeds.dat - FileParser('powheg*.input').text_remove('^iseed' ) - - configurator.logger.debug( 'Disabling iseed variable when multiple seeds are used' ) - - # Set up four passes to run each parallelstage - for idx_stage in range(1,5) : - configurator.logger.info( 'Now running stage {0}/4'.format(idx_stage) ) - - # Set number of xgriditerations to itmx1 - n_xgriditerations = configurator.itmx1 - current_xgriditeration = 0 - - # Inner loop to allow multiple xgrid iterations - while True : - # For stage 1, we need itmx1 iterations - if idx_stage == 1 : - current_xgriditeration += 1 - FileParser('powheg.input').text_replace( 'xgriditeration.*', 'xgriditeration {0}'.format(current_xgriditeration) ) - configurator.logger.info( 'Now running xgriditeration {0}/{1}'.format(current_xgriditeration,n_xgriditerations) ) - - # Run the multiprocess step and wait for output collector to terminate - time_start = time.time() - processes = [ ProcessHandling.SingleProcessThread( configurator._powheg_executable, configurator.logger, seed_index=idx ) for idx in range(1,configurator.cores+1) ] - manager = ProcessHandling.ProcessManager( processes ) - while manager.monitor( configurator.logger ) : pass - - # Exit inner loop - if idx_stage != 1 or current_xgriditeration >= n_xgriditerations : break - - # Increment parallelstage and repeat - FileParser('powheg.input').text_replace( 'parallelstage {0}'.format(idx_stage), 'parallelstage {0}'.format(idx_stage+1) ) - configurator.logger.info( 'Finished stage {0}/4 in {1}'.format( idx_stage, RepeatingTimer.human_readable_time_interval(time.time() - time_start)) ) +# Initialise logging handler +logger = logging.getLogger("PowhegControl") + + +# Run multiple Powheg processes +def generate_v2_multi_core(configurator): + # Construct random seeds - increment by 1e6 each time + logger.info("Running in multicore mode with {} subjobs".format(configurator.cores)) + with open("pwgseeds.dat", "wb") as random_seed_list: + for idx in range(configurator.cores): + random_seed_list.write(str(configurator.random_seed + int(idx * 1e6)) + "\n") + + # Remove iseed if providing seeds from pwgseeds.dat + FileParser("powheg*.input").text_remove("^iseed") + + logger.debug("Disabling iseed variable when multiple seeds are used") + + # Set up four passes to run each parallelstage + for idx_stage in range(1, 5): + logger.info("Now running stage {}/4".format(idx_stage)) + + # Set number of xgriditerations to itmx1 + n_xgriditerations = configurator.itmx1 + current_xgriditeration = 0 + + # Inner loop to allow multiple xgrid iterations + while True: + # For stage 1, we need itmx1 iterations + if idx_stage == 1: + current_xgriditeration += 1 + FileParser("powheg.input").text_replace("xgriditeration.*", "xgriditeration {}".format(current_xgriditeration)) + logger.info("Now running xgriditeration {}/{}".format(current_xgriditeration, n_xgriditerations)) + + # Run the multiprocess step and wait for output collector to terminate + time_start = time.time() + processes = [ProcessHandling.SingleProcessThread(configurator._powheg_executable, seed_index=idx) for idx in range(1, configurator.cores + 1)] + manager = ProcessHandling.ProcessManager(processes) + while manager.monitor(): + pass + + # Exit inner loop + if idx_stage != 1 or current_xgriditeration >= n_xgriditerations: + break + + # Increment parallelstage and repeat + FileParser("powheg.input").text_replace("parallelstage {}".format(idx_stage), "parallelstage {}".format(idx_stage + 1)) + logger.info("Finished stage {}/4 in {}".format(idx_stage, RepeatingTimer.human_readable_time_interval(time.time() - time_start))) diff --git a/Generators/PowhegControl/python/strategies/__init__.py b/Generators/PowhegControl/python/strategies/__init__.py index 7398a9f65ab59..6a52175e430e8 100644 --- a/Generators/PowhegControl/python/strategies/__init__.py +++ b/Generators/PowhegControl/python/strategies/__init__.py @@ -1,5 +1,7 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +from AfterburnerMadSpin import * +from AfterburnerMeanEventWeightCalculator import * from AfterburnerNNLOReweighting import * from AfterburnerPhotos import * from AfterburnerReweighting import * diff --git a/Generators/PowhegControl/python/utility/FileParser.py b/Generators/PowhegControl/python/utility/FileParser.py index f1fc51544d805..84df183591d61 100644 --- a/Generators/PowhegControl/python/utility/FileParser.py +++ b/Generators/PowhegControl/python/utility/FileParser.py @@ -1,44 +1,48 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl FileParser +# @PowhegControl FileParser # PowhegControl Text alteration operations for files # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -import glob, os, re, shutil - -## Utility class to perform simple operations on files -class FileParser(object) : - ## Initialise with an file pattern - def __init__( self, input_file_pattern ) : - self.__input_file_names = glob.glob( input_file_pattern ) - - - ## Replace regex_find by regex_replace in input_file_name - # @param input_file_pattern Pattern of files to perform replacement on - # @param regex_find Regular expression to search for - # @param string_replace String to replace by - # @param count If non-zero then only replace first count occurences in each line - def text_replace( self, regex_find, string_replace, count=0 ) : - for input_file_name in self.__input_file_names : - shutil.move( input_file_name, '{0}.bak'.format(input_file_name) ) - with open( '{0}.bak'.format(input_file_name), 'rb') as f_input : - with open( input_file_name, 'wb') as f_output : - for line in f_input : - new_line = re.sub( regex_find, string_replace, line.rstrip(), count ) - f_output.write( new_line+'\n' ) - os.remove( '{0}.bak'.format(input_file_name) ) - - - ## Remove lines matching regex_find in input_file_name - # @param regex_find Regular expression to search for - def text_remove( self, regex_find ) : - for input_file_name in self.__input_file_names : - shutil.move( input_file_name, '{0}.bak'.format(input_file_name) ) - with open( '{0}.bak'.format(input_file_name), 'rb') as f_input : - with open( input_file_name, 'wb') as f_output : - for line in f_input : - if re.search( regex_find, line.rstrip() ) is None : - f_output.write( line ) - os.remove( '{0}.bak'.format(input_file_name) ) +import glob +import os +import re +import shutil + +# Utility class to perform simple operations on files + + +class FileParser(object): + + # Initialise with an file pattern + # @param input_file_pattern Pattern of files to perform actions on + def __init__(self, input_file_pattern): + self.__input_file_names = glob.glob(input_file_pattern) + + # Replace regex_find by regex_replace in input_file_name + # @param regex_find Regular expression to search for + # @param string_replace String to replace by + # @param count If non-zero then only replace first count occurences in each line + def text_replace(self, regex_find, string_replace, count=0): + for input_file_name in self.__input_file_names: + shutil.move(input_file_name, "{}.text_replace_backup".format(input_file_name)) + with open("{}.text_replace_backup".format(input_file_name), "rb") as f_input: + with open(input_file_name, "wb") as f_output: + for line in f_input: + new_line = re.sub(regex_find, string_replace, line.rstrip(), count) + f_output.write(new_line + "\n") + os.remove("{}.text_replace_backup".format(input_file_name)) + + # Remove lines matching regex_find in input_file_name + # @param regex_find Regular expression to search for + def text_remove(self, regex_find): + for input_file_name in self.__input_file_names: + shutil.move(input_file_name, "{}.text_replace_backup".format(input_file_name)) + with open("{}.text_replace_backup".format(input_file_name), "rb") as f_input: + with open(input_file_name, "wb") as f_output: + for line in f_input: + if re.search(regex_find, line.rstrip()) is None: + f_output.write(line) + os.remove("{}.text_replace_backup".format(input_file_name)) diff --git a/Generators/PowhegControl/python/utility/IntegrationGridTester.py b/Generators/PowhegControl/python/utility/IntegrationGridTester.py index 4a10f0fcec0a4..1cdbed45ff4d2 100644 --- a/Generators/PowhegControl/python/utility/IntegrationGridTester.py +++ b/Generators/PowhegControl/python/utility/IntegrationGridTester.py @@ -1,100 +1,104 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl IntegrationGridTester +# @PowhegControl IntegrationGridTester # Helper class to calculate and output integration grid quality # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python -import glob, os, re +import glob +import math +import os +import re -class IntegrationGridTester(object): - '''Calculation of integration grid quality''' +# Calculation of integration grid quality - ## Regex to extract floats :: from perldoc perlretut - __re_match_floats = r'[+-]? *(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?' - # [+-]? * # first, match an optional sign (and space) - # (?: # then match integers or f.p. mantissas: - # \d+ # start out with a ... - # (?: - # \.\d* # mantissa of the form a.b or a. - # )? # ? takes care of integers of the form a - # |\.\d+ # mantissa of the form .b - # ) - # (?:[eE][+-]?\d+)? # finally, optionally match an exponent +class IntegrationGridTester(object): - @classmethod - def output_results( cls, logger ) : - ## Read in integration quality metrics from output files - # Allow any check to fail, since this output is not a critical part of generation - inclusive_xs, inclusive_xs_error, negative_weights, total_weights, n_events, n_upper_bound_failures_xs, n_upper_bound_failures_radiation = 0, 0, 0, 0, 0, 0, 0 - for file_name in glob.glob( 'pwg*stat*.dat' ) : - if os.path.isfile( file_name ) : - # Inclusive cross-section uncertainty [relative error on (total pos + |total neg|)] - with open( file_name, 'rb' ) as data_file : - try : - matched_lines = [ line.replace('+-','') for line in data_file if re.match(r'(.*)(btilde(.*)weights)(.*)[0-9](.*)\+\-(.*)[0-9](.*)', line) ] - if len(matched_lines) > 0 : - positive_weight_xs = sum( [ map( float, re.findall(cls.__re_match_floats,line) ) for line in matched_lines if 'pos.' in line ], [] ) - negative_weight_xs = sum( [ map( float, re.findall(cls.__re_match_floats,line) ) for line in matched_lines if '|neg.|' in line ], [] ) - inclusive_xs += positive_weight_xs[0] + negative_weight_xs[0] - inclusive_xs_error += math.sqrt( positive_weight_xs[1]**2 + negative_weight_xs[1]**2 ) - except : # catch all exceptions - pass - # Negative weight test - with open( file_name, 'rb' ) as data_file : - try : - matched_lines = [ line.replace('+-','') for line in data_file if re.match(r'(.*)(btilde \|neg\.\| weights|btilde Total \(pos.-\|neg.\|\))(.*)[0-9](.*)\+\-(.*)[0-9](.*)', line) ] - if len(matched_lines) > 0 : - negative_weights += map( float, re.findall( cls.__re_match_floats, [line for line in matched_lines if 'btilde |neg.|' in line][0] ) )[0] - total_weights += map( float, re.findall( cls.__re_match_floats, [line for line in matched_lines if 'btilde Total' in line][0] ) )[0] - except : # catch all exceptions - pass + # Regex to extract floats :: from perldoc perlretut + __re_match_floats = r"[+-]? *(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?" + # [+-]? * # first, match an optional sign (and space) + # (?: # then match integers or f.p. mantissas: + # \d+ # start out with a ... + # (?: + # \.\d* # mantissa of the form a.b or a. + # )? # ? takes care of integers of the form a + # |\.\d+ # mantissa of the form .b + # ) + # (?:[eE][+-]?\d+)? # finally, optionally match an exponent - for file_name in [ x for x in glob.glob( 'pwgcounters*.dat' ) if not "st3" in x ] : - if os.path.isfile( file_name ) : - # Upper bound violations [in inclusive cross-section and generation of radiation] - with open( file_name, 'rb' ) as data_file : - try : - matched_lines = [ line.replace('+-','') for line in data_file if re.match(r'(.*)(btilde event|remnant event|upper bound failure)(.*)[0-9](.*)', line) ] - if len(matched_lines) > 0 : - n_events += sum( map( float, [ re.findall(cls.__re_match_floats,line)[0] for line in matched_lines if 'event' in line ] ) ) - n_upper_bound_failures_xs += sum( map( float, [ re.findall(cls.__re_match_floats,line)[0] for line in matched_lines if 'upper bound failure in inclusive' in line ] ) ) - n_upper_bound_failures_radiation += sum( map( float, [ re.findall(cls.__re_match_floats,line)[0] for line in matched_lines if 'upper bound failure in generation' in line ] ) ) - except : # catch all exceptions - pass + @classmethod + def output_results(cls, logger): + # Read in integration quality metrics from output files + # Allow any check to fail, since this output is not a critical part of generation + inclusive_xs, inclusive_xs_error, negative_weights, total_weights, n_events, n_upper_bound_failures_xs, n_upper_bound_failures_radiation = 0, 0, 0, 0, 0, 0, 0 + for file_name in glob.glob("pwg*stat*.dat"): + if os.path.isfile(file_name): + # Inclusive cross-section uncertainty [relative error on (total pos + |total neg|)] + with open(file_name, "rb") as data_file: + try: + matched_lines = [line.replace("+-", "") for line in data_file if re.match(r"(.*)(btilde(.*)weights)(.*)[0-9](.*)\+\-(.*)[0-9](.*)", line)] + if len(matched_lines) > 0: + positive_weight_xs = sum([map(float, re.findall(cls.__re_match_floats, line)) for line in matched_lines if "pos." in line], []) + negative_weight_xs = sum([map(float, re.findall(cls.__re_match_floats, line)) for line in matched_lines if "|neg.|" in line], []) + inclusive_xs += positive_weight_xs[0] + negative_weight_xs[0] + inclusive_xs_error += math.sqrt(positive_weight_xs[1]**2 + negative_weight_xs[1]**2) + except: # catch all exceptions + pass + # Negative weight test + with open(file_name, "rb") as data_file: + try: + matched_lines = [line.replace("+-", "") for line in data_file if re.match(r"(.*)(btilde \|neg\.\| weights|btilde Total \(pos.-\|neg.\|\))(.*)[0-9](.*)\+\-(.*)[0-9](.*)", line)] + if len(matched_lines) > 0: + negative_weights += map(float, re.findall(cls.__re_match_floats, [line for line in matched_lines if "btilde |neg.|" in line][0]))[0] + total_weights += map(float, re.findall(cls.__re_match_floats, [line for line in matched_lines if "btilde Total" in line][0]))[0] + except: # catch all exceptions + pass + + for file_name in [x for x in glob.glob("pwgcounters*.dat") if not "st3" in x]: + if os.path.isfile(file_name): + # Upper bound violations [in inclusive cross-section and generation of radiation] + with open(file_name, "rb") as data_file: + try: + matched_lines = [line.replace("+-", "") for line in data_file if re.match(r"(.*)(btilde event|remnant event|upper bound failure)(.*)[0-9](.*)", line)] + if len(matched_lines) > 0: + n_events += sum(map(float, [re.findall(cls.__re_match_floats, line)[0] for line in matched_lines if "event" in line])) + n_upper_bound_failures_xs += sum(map(float, [re.findall(cls.__re_match_floats, line)[0] for line in matched_lines if "upper bound failure in inclusive" in line])) + n_upper_bound_failures_radiation += sum(map(float, [re.findall(cls.__re_match_floats, line)[0] for line in matched_lines if "upper bound failure in generation" in line])) + except: # catch all exceptions + pass - # Calculate test statistics - try : - inclusive_xs_test = 100 * inclusive_xs_error / inclusive_xs - except : # catch all exceptions - inclusive_xs_test = float('nan') - try : - negative_weight_test = 100 * negative_weights / total_weights - except : # catch all exceptions - negative_weight_test = float('nan') - try : - upper_bound_test = 100 * (n_upper_bound_failures_xs+n_upper_bound_failures_radiation) / n_events - except : # catch all exceptions - upper_bound_test = float('nan') - try : - upper_bound_test_xs = 100 * n_upper_bound_failures_xs / n_events - except : # catch all exceptions - upper_bound_test_xs = float('nan') - try : - upper_bound_test_radiation = 100 * n_upper_bound_failures_radiation / n_events - except : # catch all exceptions - upper_bound_test_radiation = float('nan') + # Calculate test statistics + try: + inclusive_xs_test = 100 * inclusive_xs_error / inclusive_xs + except: # catch all exceptions + inclusive_xs_test = float("nan") + try: + negative_weight_test = 100 * negative_weights / total_weights + except: # catch all exceptions + negative_weight_test = float("nan") + try: + upper_bound_test = 100 * (n_upper_bound_failures_xs + n_upper_bound_failures_radiation) / n_events + except: # catch all exceptions + upper_bound_test = float("nan") + try: + upper_bound_test_xs = 100 * n_upper_bound_failures_xs / n_events + except: # catch all exceptions + upper_bound_test_xs = float("nan") + try: + upper_bound_test_radiation = 100 * n_upper_bound_failures_radiation / n_events + except: # catch all exceptions + upper_bound_test_radiation = float("nan") - # Write output - try : - getattr( logger, ['warning','info'][0.0 <= inclusive_xs_test < 1.0] )( 'Integration test :: {0:>30} : {1:.2f}%'.format('cross-section uncertainty', inclusive_xs_test) ) - getattr( logger, ['warning','info'][0.0 <= negative_weight_test < 1.0] )( 'Integration test :: {0:>30} : {1:.2f}%'.format('negative weight fraction', negative_weight_test) ) - getattr( logger, ['warning','info'][0.0 <= upper_bound_test < 1.0] )( 'Integration test :: {0:>30} : {1:.2f}%'.format('upper bound violations', upper_bound_test) ) - logger.info( ' -> {0:>30} : {1:.2f}%'.format('in inclusive cross-section', upper_bound_test_xs) ) - logger.info( ' -> {0:>30} : {1:.2f}%'.format('in generation of radiation', upper_bound_test_radiation) ) - if inclusive_xs_test < 0.0 or inclusive_xs_test >= 1.0 or negative_weight_test < 0.0 or negative_weight_test >= 1.0 or upper_bound_test < 0.0 or upper_bound_test >= 1.0 : - logger.warning( 'Not all integration tests passed. Please ensure that physics validation is done before using this sample!' ) - except : # catch all exceptions - pass + # Write output + try: + getattr(logger, ["warning", "info"][0.0 <= inclusive_xs_test < 1.0])("Integration test :: {:>30} : {:.2f}%".format("cross-section uncertainty", inclusive_xs_test)) + getattr(logger, ["warning", "info"][0.0 <= negative_weight_test < 1.0])("Integration test :: {:>30} : {:.2f}%".format("negative weight fraction", negative_weight_test)) + getattr(logger, ["warning", "info"][0.0 <= upper_bound_test < 1.0])("Integration test :: {:>30} : {:.2f}%".format("upper bound violations", upper_bound_test)) + logger.info(" -> {:>30} : {:.2f}%".format("in inclusive cross-section", upper_bound_test_xs)) + logger.info(" -> {:>30} : {:.2f}%".format("in generation of radiation", upper_bound_test_radiation)) + if any((inclusive_xs_test < 0.0, inclusive_xs_test >= 1.0, negative_weight_test < 0.0, negative_weight_test >= 1.0, upper_bound_test < 0.0, upper_bound_test >= 1.0)): + logger.warning("Not all integration tests passed. Please ensure that physics validation is done before using this sample!") + except: # catch all exceptions + pass diff --git a/Generators/PowhegControl/python/utility/LHEHandler.py b/Generators/PowhegControl/python/utility/LHEHandler.py deleted file mode 100644 index 3b141af1b1efa..0000000000000 --- a/Generators/PowhegControl/python/utility/LHEHandler.py +++ /dev/null @@ -1,68 +0,0 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration - -## @PowhegControl LHEHandler -# PowhegControl Generic LHE file utilities -# -# Authors: James Robinson <james.robinson@cern.ch> - -#! /usr/bin/env python - -## Generic LHE file utilities -class LHEHandler : - - ## Initialise with a logging handler - def __init__(self, logger=None): - self._logger = logger - - - ## Write to the logger with appropriate log-level - def log(self, message, level='info') : - if self._logger is not None : - getattr( self._logger, level )( message ) - - - ## Merge many input LHE files into a single output file - def merge( self, output_file, input_file_list ) : - if len(input_file_list) < 1 : raise IOError( 'No input LHE files provided. Aborting merge!' ) - self.log( 'Preparing to create {0} from {1} input files'.format( output_file, len(input_file_list) ) ) - nEvents = 0 - - # Open output file - with open(output_file, 'ab') as f_output : - # Start with the first file - self.log( '... working on {0}'.format(input_file_list[0]) ) - output_footer = [] - with open(input_file_list[0],'rb') as f_input : - in_LesHouchesEvents = True - for line in f_input : - if '<event>' in line : nEvents += 1 - if '</LesHouchesEvents>' in line : in_LesHouchesEvents = False - if in_LesHouchesEvents : - f_output.write( line ) - else : - output_footer.append( line ) - - # Now append other files in turn - for file_name in input_file_list[1:] : - self.log( '... working on {0}'.format(file_name) ) - in_event = False - with open(file_name,'rb') as f_input : - for line in f_input : - if '<event>' in line : in_event = True; nEvents += 1 - if in_event : - f_output.write( line ) - if '</event>' in line : in_event = False - - # Finally add the footer - for line in output_footer : - f_output.write( line ) - - self.log( 'Wrote {0} events to {1}'.format( nEvents, output_file ) ) - - - ## Get new-style event weights from an input event string - @staticmethod - def weights_from_event(input_event) : - comment_lines = input_event[input_event.find('#'):].replace('\n',' ').replace('</event>','') - weight_lines = [ ' '.join(line.split()) for line in comment_lines.split('#') if 'new weight,renfact,facfact,pdf1,pdf2' in line ] - return [ (line.split(' ')[-1],line.split(' ')[2]) for line in weight_lines ] diff --git a/Generators/PowhegControl/python/utility/LHEUtils.py b/Generators/PowhegControl/python/utility/LHEUtils.py new file mode 100644 index 0000000000000..a18919a954db6 --- /dev/null +++ b/Generators/PowhegControl/python/utility/LHEUtils.py @@ -0,0 +1,165 @@ +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + +# @PowhegControl LHEUtils +# PowhegControl Generic LHE file utilities +# +# Authors: James Robinson <james.robinson@cern.ch> + +#! /usr/bin/env python +import glob +import mmap +from AthenaCommon.Logging import logging +from xml.etree import ElementTree + +# Initialise logging handler +logger = logging.getLogger("PowhegControl") + + +# Merge many input LHE files into a single output file +def merge(input_file_pattern, output_file): + # Create input file list from pattern, ensuring that output_file is not in the list + input_file_list = sorted([x for x in glob.glob(input_file_pattern) if not x == output_file]) + if len(input_file_list) < 1: + raise IOError("No input LHE files provided. Aborting merge!") + logger.info("Preparing to create {} from {} input files".format(output_file, len(input_file_list))) + + # Open output file and write events + with open(output_file, "ab") as f_output: + logger.info("... reading metadata from {}".format(input_file_list[0])) + # Start with the first file and extract opening/closing string + opening_string = get_opening_string(input_file_list[0]) + closing_string = get_closing_string(input_file_list[0]) + f_output.write(opening_string) + + # Now write events from all files to output + # Use sanitised list in case output_file matches the pattern + for nEvents, event in enumerate(event_iterator(input_file_list)): + f_output.write(event) + + # Finally add the footer + f_output.write(closing_string) + + # Write the event count to the logger + logger.info("Wrote {} events to {}".format(nEvents + 1, output_file)) + + +# Python generator to iterate through events from input LHE files +def event_iterator(input_files, verbose=True): + # If a glob-able pattern is provided, expand this into a list + if not isinstance(input_files, list): + input_files = sorted(glob.glob(input_files)) + + # Iterate over input files + for file_name in input_files: + if verbose: + logger.info("... reading events from {}".format(file_name)) + in_event, event_lines = False, "" + # Group all lines inside an XML event element + with open(file_name, "rb") as f_input: + for line in f_input: + if "<event>" in line: + in_event = True + line = line[line.index("<event>"):] # catch cases like "</init><event>" + if in_event: + event_lines += line + if "</event>" in line: + yield event_lines + in_event, event_lines = False, "" + + +# Python generator to iterate through event weights from input LHE files +def event_weight_iterator(input_files): + for event in event_iterator(input_files): + yield float([w for w in event.splitlines()[1].split(" ") if w][2]) + + +# Count total number of events in input files +def event_counter(input_file_pattern): + for nEvents, _ in enumerate(event_iterator(input_file_pattern, verbose=False)): + pass + return nEvents + 1 + + +# Add a weight to a header passed as input (can be a string or an ElementTree) +def add_weight_to_header(header, weightgroup_name, weight_name, weight_id): + # Convert string to ElementTree + if not isinstance(header, ElementTree.Element): + header_elem = ElementTree.fromstring(header) + else: + header_elem = header + + # Add initrwgt element if it doesn't exist + if header_elem.find("initrwgt") is None: + header_elem.append(ElementTree.fromstring("<initrwgt></initrwgt>")) + + # Add weightgroup element if it doesn't exist + if not weightgroup_name in [x.attrib["name"] for x in header_elem.find("initrwgt").findall("weightgroup")]: + header_elem.find("initrwgt").append(ElementTree.fromstring("<weightgroup combine='none' name='{}'></weightgroup>".format(weightgroup_name))) + + # Add weight to appropriate weightgroup + weightgroup = [x for x in header_elem.find("initrwgt").findall("weightgroup") if x.attrib["name"] == weightgroup_name][0] + if not any([weight.attrib["id"] == weight_id for weight in weightgroup.findall("weight")]): + weightgroup.append(ElementTree.fromstring("<weight id='{}'> {} </weight>".format(weight_id, weight_name))) + + reindent_XML(header_elem) + return header_elem + + +# Get opening lines from file as a string +def get_opening_string(input_LHE_file): + with open(input_LHE_file, "rb") as f_input: + s_input = mmap.mmap(f_input.fileno(), 0, access=mmap.ACCESS_READ) + s_output = s_input[: s_input.find("<event>")] + return s_output + + +# Get first event from file as a string +def get_first_event(input_LHE_file): + with open(input_LHE_file, "rb") as f_input: + s_input = mmap.mmap(f_input.fileno(), 0, access=mmap.ACCESS_READ) + s_output = s_input[s_input.find("<event>"): s_input.find("</event>") + 8] + return s_output + + +# Get closing lines from file as a string +def get_closing_string(input_LHE_file): + with open(input_LHE_file, "rb") as f_input: + s_input = mmap.mmap(f_input.fileno(), 0, access=mmap.ACCESS_READ) + s_output = s_input[s_input.rfind("</event>") + 9:] + return s_output + + +# Get weight name/value pairs from an input string +def string_to_weight(input_event): + comment_lines = input_event[input_event.find("#"):].replace("\n", " ").replace("</event>", "") + weight_lines = [" ".join(line.split()) for line in comment_lines.split("#") if "new weight,renfact,facfact,pdf1,pdf2" in line] + return [(line.split(" ")[-1], line.split(" ")[2]) for line in weight_lines] + + +# Get new-style event weights from an input event string +def Powheg2LHEv3(input_event, name_to_ID): + # Return event as-is if there are no Powheg-style weights + if not "#new weight,renfact,facfact,pdf1,pdf2" in input_event: + return input_event + # Otherwise convert these to LHEv3 weights + if not "<rwgt>" in input_event: + nominal_weight = [x for x in input_event.split("\n")[1].split(" ") if len(x) > 0][2] + input_event = input_event[:input_event.find("#")] + "<rwgt>\n<wgt id='0'> {0} </wgt>\n</rwgt>\n".format(nominal_weight) + input_event[input_event.find("#"):] + weight_lines = "".join(["<wgt id='{}'> {} </wgt>\n".format(name_to_ID[weight[0]], weight[1]) for weight in string_to_weight(input_event)]) + return input_event[:input_event.find("</rwgt>")] + weight_lines + input_event[input_event.find("</rwgt>"):input_event.find("#new weight,renfact,facfact,pdf1,pdf2")] + "</event>\n" + + +# Re-indent XML so that elements are on their own line +def reindent_XML(elem): + if len(elem): + if not elem.text or not elem.text.strip(): + elem.text = "\n" + if not elem.tail or not elem.tail.strip(): + elem.tail = "\n" + for subelem in elem: + reindent_XML(subelem) + if not elem.tail or not elem.tail.strip(): + elem.tail = "\n" + else: + if not elem.tail or not elem.tail.strip(): + elem.tail = "\n" diff --git a/Generators/PowhegControl/python/utility/NonBlockingStreamReader.py b/Generators/PowhegControl/python/utility/NonBlockingStreamReader.py index 41507348c35b4..d1e835c85e435 100644 --- a/Generators/PowhegControl/python/utility/NonBlockingStreamReader.py +++ b/Generators/PowhegControl/python/utility/NonBlockingStreamReader.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl NonBlockingStreamReader +# @PowhegControl NonBlockingStreamReader # Read an output stream without blocking # # Authors: James Robinson <james.robinson@cern.ch> @@ -10,37 +10,36 @@ import threading import Queue -class NonBlockingStreamReader(object) : - ## Set up input stream, output queue and process to transfer between them - def __init__(self, input_stream): - self._stream = input_stream - self._queue = Queue.Queue() - self._running = True - - self._output_thread = threading.Thread( target=self.populate_queue, args=(self._stream, self._queue) ) - self._output_thread.daemon = True - self._output_thread.start() # start collecting lines from the stream - - - ## Collect lines from stream and put them in queue - def populate_queue(self, stream, queue): - while self._running : - line = stream.readline() - if line : queue.put( line ) - - - ## Return lines from queue - def readline(self, timeout=None): - try: - output = self._queue.get( block=(timeout is not None), timeout=timeout ).rstrip() - return (output,self._queue.qsize()) - except Queue.Empty : - return (None,0) - - - ## Release thread resources on finalise - def finalise( self ) : - self._stream.flush() - self._running = False - self._output_thread.join() +class NonBlockingStreamReader(object): + + # Set up input stream, output queue and process to transfer between them + def __init__(self, input_stream): + self._stream = input_stream + self._queue = Queue.Queue() + self._running = True + + self._output_thread = threading.Thread(target=self.populate_queue, args=(self._stream, self._queue)) + self._output_thread.daemon = True + self._output_thread.start() # start collecting lines from the stream + + # Collect lines from stream and put them in queue + def populate_queue(self, stream, queue): + while self._running: + line = stream.readline() + if line: + queue.put(line) + + # Return lines from queue + def readline(self, timeout=None): + try: + output = self._queue.get(block=(timeout is not None), timeout=timeout).rstrip() + return (output, self._queue.qsize()) + except Queue.Empty: + return (None, 0) + + # Release thread resources on finalise + def finalise(self): + self._stream.flush() + self._running = False + self._output_thread.join() diff --git a/Generators/PowhegControl/python/utility/ProcessHandling.py b/Generators/PowhegControl/python/utility/ProcessHandling.py index 5589bc205dbf2..3a2ae5ab9f61f 100644 --- a/Generators/PowhegControl/python/utility/ProcessHandling.py +++ b/Generators/PowhegControl/python/utility/ProcessHandling.py @@ -1,90 +1,98 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl ProcessHandling +# @PowhegControl ProcessHandling # Utility classes to handle Powheg processes # # Authors: James Robinson <james.robinson@cern.ch> #! /usr/bin/env python import subprocess -import time +from AthenaCommon.Logging import logging from NonBlockingStreamReader import NonBlockingStreamReader -## A wrapper to handle multiple Powheg subprocesses -class ProcessManager : - def __init__(self, process_list) : - self.__process_list = process_list - self.__n_initial = len(process_list) - - - ## Monitor each of the managed processes and log when they are finished - def monitor(self, logger) : - for idx, process in enumerate(self.__process_list) : process.id_number = idx+1 - while len( self.__process_list ) > 0 : - for process in list(self.__process_list) : - if not process.has_output() : - self.__process_list.remove( process ) - logger.info( 'Finished process #{0}: there are now {1}/{2} running'.format( process.id_number, len(self.__process_list), self.__n_initial ) ) - - - -## A single Powheg subprocess -class SingleProcessThread : - log_level = { 'stdout':'info', 'stderr':'error' } - - ## Setup underlying process together with non-blocking readers for stdout and stderr - def __init__(self, command_list, logger, seed_index=None) : - self.__logger = logger - if not isinstance( command_list, list ) : command_list = [ command_list ] - self.__process = subprocess.Popen( [str(x) for x in command_list], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE ) - self.__output_prefix = [ 'Process #{0}: '.format( seed_index ), '' ][ seed_index is None ] - # Write seed to stdin - if seed_index is not None : - self.__process.stdin.write( str(seed_index) ) - self.__process.stdin.close() - with open('pwgseeds.dat','rb') as seed_file : random_seed_list = seed_file.read().splitlines() - self.log( 'Providing random seed: {0}'.format( random_seed_list[seed_index-1] ) ) - # Setup non-blocking stream readers for stdout and stderr - self.__stdout = NonBlockingStreamReader(self.__process.stdout) - self.__stderr = NonBlockingStreamReader(self.__process.stderr) - - - ## Write queued output and return process status - def has_output( self ) : - status = self.is_running() - self.write_queued_output() - return status - - - ## Check if the underlying process is running and finalise stream readers if not - def is_running( self ) : - if self.__process.poll() is not None : # process has ended - [ getattr(self, nbsr).finalise() for nbsr in ['stdout','stderr'] ] - return False - return True - - - ## Write to the logger with appropriate log-level - def log( self, message, log_level='info' ) : - getattr( self.__logger, log_level )( '{0}{1}'.format( self.__output_prefix, message ) ) - - - ## Pass queued output to the logger - def write_queued_output( self ) : - for stream in [ 'stdout', 'stderr' ] : - while True : - output, queue_size = getattr( self, stream ).readline(timeout=0.1) - if not (output is None or len(output) == 0) : self.log( output, self.log_level[stream] ) - if queue_size == 0 : break - - - ## stdout stream from underlying process - @property - def stdout(self) : - return self.__stdout - - - ## stderr stream from underlying process - @property - def stderr(self) : - return self.__stderr +# Initialise logging handler +logger = logging.getLogger("PowhegControl") + +# A wrapper to handle multiple Powheg subprocesses +class ProcessManager(object): + + def __init__(self, process_list): + self.__process_list = process_list + self.__n_initial = len(process_list) + + # Monitor each of the managed processes and log when they are finished + def monitor(self): + for idx, process in enumerate(self.__process_list): + process.id_number = idx + 1 + while len(self.__process_list) > 0: + for process in list(self.__process_list): + if not process.has_output(): + self.__process_list.remove(process) + logger.info("Finished process #{}: there are now {}/{} running".format(process.id_number, len(self.__process_list), self.__n_initial)) + + +# A single Powheg subprocess +class SingleProcessThread(object): + log_level = {"stdout": "info", "stderr": "error"} + __output_prefix = "" + + # Setup underlying process together with non-blocking readers for stdout and stderr + def __init__(self, command_list, seed_index=None, stdin=None): + if not isinstance(command_list, list): + command_list = [command_list] + command_list = [str(x) for x in command_list] + # Usual case, where no open file handle is provided + if stdin is None: + self.__process = subprocess.Popen(command_list, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE) + # Write seed to stdin + if seed_index is not None: + self.__output_prefix = "Process #{}: ".format(seed_index) + self.__process.stdin.write(str(seed_index)) + self.__process.stdin.close() + with open("pwgseeds.dat", "rb") as seed_file: + random_seed_list = seed_file.read().splitlines() + self.log("Providing random seed: {}".format(random_seed_list[seed_index - 1])) + # Using an open file handle to provide input to stdin: remember to close this later + else: + self.__process = subprocess.Popen(command_list, stdout=subprocess.PIPE, stdin=stdin, stderr=subprocess.PIPE) + # Setup non-blocking stream readers for stdout and stderr + self.__stdout = NonBlockingStreamReader(self.__process.stdout) + self.__stderr = NonBlockingStreamReader(self.__process.stderr) + + # Write queued output and return process status + def has_output(self): + status = self.is_running() + self.write_queued_output() + return status + + # Check if the underlying process is running and finalise stream readers if not + def is_running(self): + if self.__process.poll() is not None: # process has ended + for nbsr in ("stdout", "stderr") : + getattr(self, nbsr).finalise() + return False + return True + + # Write to the logger with appropriate log-level + def log(self, message, log_level="info"): + getattr(logger, log_level)("{}{}".format(self.__output_prefix, message)) + + # Pass queued output to the logger + def write_queued_output(self): + for stream in ["stdout", "stderr"]: + while True: + output, queue_size = getattr(self, stream).readline(timeout=0.1) + if not (output is None or len(output) == 0): + self.log(output, self.log_level[stream]) + if queue_size == 0: + break + + # stdout stream from underlying process + @property + def stdout(self): + return self.__stdout + + # stderr stream from underlying process + @property + def stderr(self): + return self.__stderr diff --git a/Generators/PowhegControl/python/utility/RepeatingTimer.py b/Generators/PowhegControl/python/utility/RepeatingTimer.py index 7389c7f172314..06d58a22884f7 100644 --- a/Generators/PowhegControl/python/utility/RepeatingTimer.py +++ b/Generators/PowhegControl/python/utility/RepeatingTimer.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -## @PowhegControl RepeatingTimer +# @PowhegControl RepeatingTimer # Helper class to run repeating timer in additional thread # # Authors: James Robinson <james.robinson@cern.ch> @@ -8,24 +8,26 @@ #! /usr/bin/env python import threading -## Allow timing output in an additional thread. +# Allow timing output in an additional thread. # From http://stackoverflow.com/questions/5429577/ -class RepeatingTimer(threading._Timer) : - ## Override Thread.run with desired behaviour - def run(self): - while True: - self.finished.wait(self.interval) - if self.finished.is_set(): - return - else: - self.function( *self.args, **self.kwargs ) - ## Return time interval in a human-readable form - # @param seconds_elapsed Number of seconds to convert into time interval - @classmethod - def human_readable_time_interval( cls, seconds_elapsed ) : - h = int( seconds_elapsed / (60 * 60) ) - m = int( (seconds_elapsed % (60 * 60)) / 60 ) - s = int( seconds_elapsed % 60. ) - return "{0}h {1:>02}m {2:>02}s".format(h, m, s) +class RepeatingTimer(threading._Timer): + + # Override Thread.run with desired behaviour + def run(self): + while True: + self.finished.wait(self.interval) + if self.finished.is_set(): + return + else: + self.function(*self.args, **self.kwargs) + + # Return time interval in a human-readable form + # @param seconds_elapsed Number of seconds to convert into time interval + @classmethod + def human_readable_time_interval(cls, seconds_elapsed): + h = int(seconds_elapsed / (60 * 60)) + m = int((seconds_elapsed % (60 * 60)) / 60) + s = int(seconds_elapsed % 60.) + return "{}h {:>02}m {:>02}s".format(h, m, s) diff --git a/Generators/PowhegControl/python/utility/__init__.py b/Generators/PowhegControl/python/utility/__init__.py index b6934ac32aaf8..f8cf55f81d1ce 100644 --- a/Generators/PowhegControl/python/utility/__init__.py +++ b/Generators/PowhegControl/python/utility/__init__.py @@ -2,7 +2,7 @@ from FileParser import * from IntegrationGridTester import * -from LHEHandler import * +from LHEUtils import * from NonBlockingStreamReader import * from ProcessHandling import * from RepeatingTimer import * diff --git a/Generators/PowhegControl/share/PowhegControl_t_tch_4f_Common.py b/Generators/PowhegControl/share/PowhegControl_t_tch_4f_Common.py new file mode 100644 index 0000000000000..277d55453e897 --- /dev/null +++ b/Generators/PowhegControl/share/PowhegControl_t_tch_4f_Common.py @@ -0,0 +1,6 @@ +from PowhegControl import PowhegConfig_t_tch_4f + +# Use the PowhegConfig_t_sch configuration +transform_runArgs = runArgs if 'runArgs' in dir() else None +transform_opts = opts if 'opts' in dir() else None +PowhegConfig = PowhegConfig_t_tch_4f( runArgs=transform_runArgs, opts=transform_opts ) -- GitLab