From 0419cb22dd312404c56f959363abaebe330dcdf8 Mon Sep 17 00:00:00 2001 From: Tamara Vazquez Schroeder <tamara.vazquez.schroeder@cern.ch> Date: Tue, 26 Sep 2017 07:47:59 +0000 Subject: [PATCH] Revert "Merge branch 'revert-b3708b79' into '21.0'" This reverts merge request !4774 Former-commit-id: c89361830a55b3ca77994479c8d4e4027dbdeb21 --- .../share/formatFlukaFile.pl | 94 +++++++++++ .../python/CosmicGeneratorConfig.py | 18 +- .../share/CosmicSliceConfig.py | 14 +- .../CosmicGenerator/src/CosmicGenerator.cxx | 5 +- Generators/Epos_i/src/Epos.cxx | 2 +- .../EvgenJobTransforms/python/EvgenConfig.py | 2 +- .../EvgenJobTransforms/python/evgenTrfArgs.py | 18 +- .../scripts/AfterBurner_tf.py | 4 +- .../scripts/EvtGenFromEVNT_tf.py | 4 +- .../EvgenJobTransforms/scripts/Generate_tf.py | 90 +++++++++- .../EvgenJobTransforms/scripts/Rivet_tf.py | 4 +- .../share/Generate_TruthJets.py | 8 +- .../share/Generate_ecmenergies.py | 8 +- .../share/Generate_randomseeds.py | 4 + .../share/skeleton.ABtoEVGEN.py | 49 ++++-- .../share/skeleton.EVGENtoRivet.py | 3 + .../share/skeleton.EvtGenFromEVNT.py | 2 + .../share/skeleton.GENtoEVGEN.py | 154 +++++++++++++++--- .../EvgenJobTransforms_TestConfiguration.xml | 38 ++++- .../EvgenJobTransforms/test/setup_testenv | 2 +- .../test/test_MC14_Pythia6_Wtaunu.py | 2 - .../test/test_MC14_Pythia8_Zee.py | 2 - Generators/EvgenJobTransforms/test/test_bphys | 4 +- .../EvgenJobTransforms/test/test_herwig7 | 8 + .../EvgenJobTransforms/test/test_herwig7dijet | 8 + .../test/test_ph8TauolappEG_ztautau | 10 ++ .../EvgenJobTransforms/test/test_powheg_ttbar | 2 +- .../test/test_powhegpy8TauolaPPEG | 8 + .../test/test_pythia8_powheg | 4 +- .../test/test_pythia8_ztautau | 4 +- Generators/EvgenProdTools/CMakeLists.txt | 1 - .../EvgenProdTools/CopyEventWeight.h | 2 +- .../EvgenProdTools/CountHepMC.h | 2 +- .../EvgenProdTools/EvgenOTFTopUpSvc.h | 4 +- .../EvgenProdTools/IEvgenOTFTopUpSvc.h | 41 +++++ .../EvgenProdTools/cmt/.svn/dir-prop-base | 11 ++ Generators/EvgenProdTools/cmt/.svn/entries | 62 +++++++ .../cmt/.svn/text-base/requirements.svn-base | 33 ++++ Generators/EvgenProdTools/cmt/Makefile | 4 + Generators/EvgenProdTools/cmt/cleanup.csh | 27 +++ Generators/EvgenProdTools/cmt/cleanup.sh | 25 +++ Generators/EvgenProdTools/cmt/setup.csh | 27 +++ Generators/EvgenProdTools/cmt/setup.sh | 25 +++ Generators/EvgenProdTools/cmt/version.cmt | 1 + .../examples/jobOption.Pythia8_FixHepMC.py | 2 - .../python/LogicalExpressionFilter.py | 4 +- .../EvgenProdTools/src/EvgenOTFTopUpSvc.cxx | 2 +- Generators/EvgenProdTools/src/FixHepMC.cxx | 2 +- .../src/components/EvgenProdTools_entries.cxx | 3 + .../src/components/EvgenProdTools_load.cxx | 4 + Generators/Sherpa_i/Sherpa_i/Sherpa_i.h | 20 ++- .../Example/MC15.999999.Sherpa_Example.py | 13 +- Generators/Sherpa_i/src/Sherpa_i.cxx | 60 ++----- Projects/Athena/externals/Sherpa.cmake | 2 +- 54 files changed, 812 insertions(+), 140 deletions(-) create mode 100644 Generators/BeamHaloGenerator/share/formatFlukaFile.pl create mode 100755 Generators/EvgenJobTransforms/test/test_herwig7 create mode 100755 Generators/EvgenJobTransforms/test/test_herwig7dijet create mode 100755 Generators/EvgenJobTransforms/test/test_ph8TauolappEG_ztautau create mode 100755 Generators/EvgenJobTransforms/test/test_powhegpy8TauolaPPEG create mode 100644 Generators/EvgenProdTools/EvgenProdTools/IEvgenOTFTopUpSvc.h create mode 100644 Generators/EvgenProdTools/cmt/.svn/dir-prop-base create mode 100644 Generators/EvgenProdTools/cmt/.svn/entries create mode 100644 Generators/EvgenProdTools/cmt/.svn/text-base/requirements.svn-base create mode 100644 Generators/EvgenProdTools/cmt/Makefile create mode 100644 Generators/EvgenProdTools/cmt/cleanup.csh create mode 100644 Generators/EvgenProdTools/cmt/cleanup.sh create mode 100644 Generators/EvgenProdTools/cmt/setup.csh create mode 100644 Generators/EvgenProdTools/cmt/setup.sh create mode 100644 Generators/EvgenProdTools/cmt/version.cmt diff --git a/Generators/BeamHaloGenerator/share/formatFlukaFile.pl b/Generators/BeamHaloGenerator/share/formatFlukaFile.pl new file mode 100644 index 00000000000..9a50150dc12 --- /dev/null +++ b/Generators/BeamHaloGenerator/share/formatFlukaFile.pl @@ -0,0 +1,94 @@ +#!/usr/bin/perl +# +# A.Sbrizzi +# +# A script to format FLUKA HL-LHC beam gas files from Anton Lechner format into Roderick Bruce format +# +use strict; + +die ("Usage: $0 <input file> <output prefix> <number of events>\n") + unless ($#ARGV==2); + +my $input_file = $ARGV[0]; +my $output_prefix = $ARGV[1]; +my $num_events = $ARGV[2]; +my $file_counter = 1; +my $event_counter = 0; + +my $event_number = 0; +my $particle_gen = 1; +my $particle_type = 0; +my $stat_weight = 0; +my $x_position = 0; +my $y_position = 0; +my $x_cosine = 0; +my $y_cosine = 0; +my $t_start = -1; +my $total_energy = 0; +my $kinetic_energy = 0; +my $t_primary = 0; +my $x_primary = 0; +my $y_primary = 0; +my $z_primary = 0; + +die ("Cannot open $input_file for reading\n") + unless open(INPUTFILE, "< $input_file"); + +my $output_file = sprintf("$output_prefix%05d.events", $file_counter); +die ("Cannot open $output_file for writing\n") + unless open(OUTPUTFILE, '>', $output_file); + +my $last_event = -10; + +while (my $line = <INPUTFILE>) { + + # Remove the new line character + chomp $line; + + # If the string is not refined, skip this line. + if (defined $line) { + + # Split the string, using one or more spaces to denote the splitting. + my @frags = split(/\s+/,$line); + + $event_number = $frags[1]; + $particle_type = $frags[2]; + $stat_weight = $frags[4]; + $x_position = $frags[5]; + $y_position = $frags[6]; + $x_cosine = $frags[7]; + $y_cosine = $frags[8]; + $total_energy = $frags[9]; + $kinetic_energy = $frags[10]; + $t_primary = $frags[11]; + $x_primary = $frags[12]; + $y_primary = $frags[13]; + $z_primary = $frags[14]; + + if ($event_number != $last_event) { + + $event_counter = $event_counter + 1; + + if ($event_counter > $num_events) { + + close(OUTPUTFILE); + + $file_counter++; + $event_counter = 1; + + $output_file = sprintf("$output_prefix%05d.events", $file_counter); + + die ("Cannot open $output_file for writing\n") + unless open(OUTPUTFILE, '>', $output_file); + } + } + + $last_event = $event_number; + } + + printf OUTPUTFILE "%10d %3d %6d %27.17e %27.17e %27.17e %27.17e %27.17e %27.17e %3d %27.17e %27.17e %27.17e %27.17e %27.17e \n", + $event_counter, $particle_gen, $particle_type, $kinetic_energy, $stat_weight, $x_position, $y_position, $x_cosine, $y_cosine, $t_start, $total_energy, $x_primary, $y_primary, $z_primary, $t_primary; +} + +close(INPUTFILE); +close(OUTPUTFILE); diff --git a/Generators/CosmicGenerator/python/CosmicGeneratorConfig.py b/Generators/CosmicGenerator/python/CosmicGeneratorConfig.py index c20529d3cc3..d61c88962c2 100644 --- a/Generators/CosmicGenerator/python/CosmicGeneratorConfig.py +++ b/Generators/CosmicGenerator/python/CosmicGeneratorConfig.py @@ -1,4 +1,6 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + class CavernPropertyCalculator(object): @@ -135,13 +137,13 @@ class CavernPropertyCalculator(object): else: from AthenaCommon.AppMgr import theApp GeoModelSvc = theApp.service('GeoModelSvc') - if (newSize <= 500000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-03-Bedrock500' - elif (newSize <= 1000000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-03-Bedrock1000' - elif (newSize <= 1500000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-03-Bedrock1500' - elif (newSize <= 2000000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-03-Bedrock2000' - elif (newSize <= 3000000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-03-Bedrock3000' - elif (newSize <= 4000000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-03-Bedrock4000' - elif (newSize <= 5000000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-03-Bedrock5000' + if (newSize <= 500000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-04-Bedrock500' + elif (newSize <= 1000000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-04-Bedrock1000' + elif (newSize <= 1500000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-04-Bedrock1500' + elif (newSize <= 2000000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-04-Bedrock2000' + elif (newSize <= 3000000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-04-Bedrock3000' + elif (newSize <= 4000000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-04-Bedrock4000' + elif (newSize <= 5000000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-04-Bedrock5000' else : print "No need to resize the bedrock for cosmic generation" diff --git a/Generators/CosmicGenerator/share/CosmicSliceConfig.py b/Generators/CosmicGenerator/share/CosmicSliceConfig.py index 61d5b525761..2d61573e485 100644 --- a/Generators/CosmicGenerator/share/CosmicSliceConfig.py +++ b/Generators/CosmicGenerator/share/CosmicSliceConfig.py @@ -46,12 +46,12 @@ if (bedrockDX > 350000 or bedrockDZ > 350000) : GeoModelSvc = Configurable.allConfigurables.get('GeoModelSvc') else: GeoModelSvc = theApp.service('GeoModelSvc') - if (newSize <= 500000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-03-Bedrock500' - elif (newSize <= 1000000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-03-Bedrock1000' - elif (newSize <= 1500000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-03-Bedrock1500' - elif (newSize <= 2000000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-03-Bedrock2000' - elif (newSize <= 3000000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-03-Bedrock3000' - elif (newSize <= 4000000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-03-Bedrock4000' - elif (newSize <= 5000000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-03-Bedrock5000' + if (newSize <= 500000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-04-Bedrock500' + elif (newSize <= 1000000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-04-Bedrock1000' + elif (newSize <= 1500000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-04-Bedrock1500' + elif (newSize <= 2000000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-04-Bedrock2000' + elif (newSize <= 3000000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-04-Bedrock3000' + elif (newSize <= 4000000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-04-Bedrock4000' + elif (newSize <= 5000000) : GeoModelSvc.CavernInfraVersionOverride = 'CavernInfra-04-Bedrock5000' else : print "No need to resize the bedrock for cosmic generation" diff --git a/Generators/CosmicGenerator/src/CosmicGenerator.cxx b/Generators/CosmicGenerator/src/CosmicGenerator.cxx index c17c658686f..7299b573f88 100644 --- a/Generators/CosmicGenerator/src/CosmicGenerator.cxx +++ b/Generators/CosmicGenerator/src/CosmicGenerator.cxx @@ -79,7 +79,10 @@ extern "C" float cosmicrndm_(int* /*dummy*/) //-------------------------------------------------------------------------- CosmicGenerator::CosmicGenerator(const std::string& name, - ISvcLocator* pSvcLocator): GenModule(name,pSvcLocator) + ISvcLocator* pSvcLocator) + : GenModule(name,pSvcLocator) + , m_stopped_tminus(0.) + , m_stopped_tplus(0.) //-------------------------------------------------------------------------- { // diff --git a/Generators/Epos_i/src/Epos.cxx b/Generators/Epos_i/src/Epos.cxx index 3731ccad86b..0644dd780cf 100644 --- a/Generators/Epos_i/src/Epos.cxx +++ b/Generators/Epos_i/src/Epos.cxx @@ -209,7 +209,7 @@ StatusCode Epos::genInitialize() long int si1 = sip[0]; long int si2 = sip[1]; - int iSeed = si1; // FIXME ? + int iSeed = si1%1000000000; // FIXME ? // set up initial values diff --git a/Generators/EvgenJobTransforms/python/EvgenConfig.py b/Generators/EvgenJobTransforms/python/EvgenConfig.py index a373b000bd4..49fc44a3528 100644 --- a/Generators/EvgenJobTransforms/python/EvgenConfig.py +++ b/Generators/EvgenJobTransforms/python/EvgenConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration ## Generators providing input events via the LHEF format (MC@NLO produces LHEF ## when used in connection with Herwig++, which is fine since this variable is diff --git a/Generators/EvgenJobTransforms/python/evgenTrfArgs.py b/Generators/EvgenJobTransforms/python/evgenTrfArgs.py index f011371933a..f812dfc1c93 100644 --- a/Generators/EvgenJobTransforms/python/evgenTrfArgs.py +++ b/Generators/EvgenJobTransforms/python/evgenTrfArgs.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration import PyJobTransforms.trfArgClasses as trfArgClasses @@ -99,4 +99,20 @@ def addStdEvgenArgs(parser): default=trfArgClasses.argInt(0, runarg=True), type=trfArgClasses.argFactory(trfArgClasses.argInt, runarg=True)) + parser.add_argument('--lheOnly', '--lheOnly', group='Evgen', + default=trfArgClasses.argInt(0, runarg=True), + type=trfArgClasses.argFactory(trfArgClasses.argInt, runarg=True), + help='Set to 1 if Evgen file should be removed') + + parser.add_argument("--localPath", group="Evgen", + help="Name of local path to JOs", + type=trfArgClasses.argFactory(trfArgClasses.argString, runarg=True)) + parser.add_argument('--saveList', '--saveList', group='Evgen', + help="a comma-separated list of files to be saved in output or a single digit if the whole output directory is to be saved", + type=trfArgClasses.argFactory(trfArgClasses.argSubstepList, runarg=True)) + + parser.add_argument('--cleanOut', '--cleanOut', group='Evgen', + default=trfArgClasses.argInt(0, runarg=True), + type=trfArgClasses.argFactory(trfArgClasses.argInt, runarg=True), + help='Set to any digit !=0 if the output files should be cleaned up --saveList may help to save selected files') diff --git a/Generators/EvgenJobTransforms/scripts/AfterBurner_tf.py b/Generators/EvgenJobTransforms/scripts/AfterBurner_tf.py index 5880ed1849d..e2336eab9e4 100755 --- a/Generators/EvgenJobTransforms/scripts/AfterBurner_tf.py +++ b/Generators/EvgenJobTransforms/scripts/AfterBurner_tf.py @@ -1,6 +1,6 @@ -#! /usr/bin/env python +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +#! /usr/bin/env python """ Run event simulation and produce an EVNT file. diff --git a/Generators/EvgenJobTransforms/scripts/EvtGenFromEVNT_tf.py b/Generators/EvgenJobTransforms/scripts/EvtGenFromEVNT_tf.py index cca31344052..8c47ffb87e7 100755 --- a/Generators/EvgenJobTransforms/scripts/EvtGenFromEVNT_tf.py +++ b/Generators/EvgenJobTransforms/scripts/EvtGenFromEVNT_tf.py @@ -1,6 +1,6 @@ -#! /usr/bin/env python +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +#! /usr/bin/env python import sys import time diff --git a/Generators/EvgenJobTransforms/scripts/Generate_tf.py b/Generators/EvgenJobTransforms/scripts/Generate_tf.py index 5c8d5fe8354..6c37efaa6d7 100755 --- a/Generators/EvgenJobTransforms/scripts/Generate_tf.py +++ b/Generators/EvgenJobTransforms/scripts/Generate_tf.py @@ -1,6 +1,6 @@ -#! /usr/bin/env python +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +#! /usr/bin/env python """ Run event simulation and produce an EVNT file. @@ -18,7 +18,7 @@ import PyJobTransforms.trfArgClasses as trfArgClasses ## Prodsys1 hack... # TODO: Remove! -ListOfDefaultPositionalKeys=['--AMIConfig', '--AMITag', '--argJSON', '--asetup', '--athena', '--athenaMPMergeTargetSize', '--athenaopts', '--attempt', '--checkEventCount', '--command', '--dumpJSON', '--dumpPickle', '--ecmEnergy', '--env', '--eventAcceptanceEfficiency', '--evgenJobOpts', '--execOnly', '--fileValidation', '--firstEvent', '--ignoreErrors', '--ignoreFiles', '--ignorePatterns', '--imf', '--inputEVNT_PreFile', '--inputFileValidation', '--inputGenConfFile', '--inputGeneratorFile', '--jobConfig', '--jobid', '--maxEvents', '--orphanKiller', '--outputEVNTFile', '--outputEVNT_PreFile', '--outputFileValidation', '--outputNTUP_TRUTHFile', '--outputTXTFile', '--parallelFileValidation', '--postExec', '--postInclude', '--preExec', '--preInclude', '--printEvts', '--randomSeed', '--reportName', '--reportType', '--rivetAnas', '--runNumber', '--showGraph', '--showPath', '--showSteps', '--skipEvents', '--skipFileValidation', '--skipInputFileValidation', '--skipOutputFileValidation', '--steering', '--taskid', '--tcmalloc', '--valgrind', '--valgrindbasicopts', '--valgrindextraopts'] +ListOfDefaultPositionalKeys=['--AMIConfig', '--AMITag', '--argJSON', '--asetup', '--athena', '--athenaMPMergeTargetSize', '--athenaopts', '--attempt', '--checkEventCount', '--command', '--dumpJSON', '--dumpPickle', '--ecmEnergy', '--env', '--eventAcceptanceEfficiency', '--evgenJobOpts', '--execOnly', '--fileValidation', '--firstEvent', '--ignoreErrors', '--ignoreFiles', '--ignorePatterns', '--imf', '--inputEVNT_PreFile', '--inputFileValidation', '--inputGenConfFile', '--inputGeneratorFile', '--jobConfig', '--jobid', '--maxEvents', '--orphanKiller', '--outputEVNTFile', '--outputEVNT_PreFile', '--outputFileValidation', '--outputNTUP_TRUTHFile', '--outputTXTFile', '--parallelFileValidation', '--postExec', '--postInclude', '--preExec', '--preInclude', '--printEvts', '--randomSeed', '--reportName', '--reportType', '--rivetAnas', '--runNumber', '--showGraph', '--showPath', '--showSteps', '--skipEvents', '--skipFileValidation', '--skipInputFileValidation', '--skipOutputFileValidation', '--steering', '--taskid', '--tcmalloc', '--valgrind', '--valgrindbasicopts', '--valgrindextraopts', '--lheOnly', '--localPath', '--cleanOut', '--saveList'] class EvgenExecutor(athenaExecutor): "Specialised trf executor class for event generation jobs" @@ -132,9 +132,16 @@ class EvgenExecutor(athenaExecutor): else: msg.info('ATLAS_SW_BASE path: %s' %sw_base) + local_path = None + if ("localPath" in self._trf.argdict ): + local_path = self._trf.argdict["localPath"].value + print("local path",local_path) cvmfs_path = os.path.join(sw_base, "atlas.cern.ch") - if os.path.exists(cvmfs_path): + if ((local_path is not None) and (os.path.exists(local_path))) : + mk_jo_proxy(local_path, "MC15JobOptions","_joproxy15") + print("JO fragments taken from local path i.e. ",local_path) + elif os.path.exists(cvmfs_path): # TODO: Make the package name configurable if "MC14" in str(joparam): cvmfs_mc14 = os.path.join(cvmfs_path, "repo/sw/Generators/MC14JobOptions/latest/") @@ -154,10 +161,29 @@ class EvgenExecutor(athenaExecutor): ## Expand tarball input event and generator conf files, if provided if "inputGeneratorFile" in self._trf.argdict: - expand_if_archive(self._trf.argdict["inputGeneratorFile"].value) +# expand_if_archive(self._trf.argdict["inputGeneratorFile"].value) + myinputfiles = self._trf.argdict["inputGeneratorFile"].value + genInputFiles = myinputfiles.split(',') + for file in genInputFiles: + expand_if_archive(file) if "inputGenConfFile" in self._trf.argdict: expand_if_archive(self._trf.argdict["inputGenConfFile"].value) +def move_files(main_dir,tmp_dir,whitelist): + files = os.listdir(tmp_dir) + print("list of files ",files) + print("white list ",whitelist) + files.sort() + for f in files: + for i in whitelist: + if i in f: + src = tmp_dir+"/"+f + dest = main_dir+"/"+f +# print("src ",src) +# print("dest ",dest) + os.rename(src,dest) + break + def getTransform(): exeSet = set() @@ -175,11 +201,65 @@ def getTransform(): @sigUsrStackTrace def main(): msg.info("This is %s" % sys.argv[0]) + main_dir = os.getcwd() trf = getTransform() trf.parseCmdLineArgs(sys.argv[1:]) +# print("main ",main_dir) + if (("cleanOut" in trf.argdict) and (trf.argdict["cleanOut"].value != 0)): + name_tmpdir = "tmprun" + tmp_dir = os.path.join(main_dir, name_tmpdir) +# print("tmpdir ",tmp_dir) + if os.path.isdir(tmp_dir): + shutil.rmtree(tmp_dir, ignore_errors=True) + os.mkdir("tmprun") + os.chdir("tmprun") + tmp_dir = os.getcwd() + whitelist_in = ['MC','group','TXT'] + move_files(tmp_dir,main_dir,whitelist_in) + +# trf = getTransform() +# trf.parseCmdLineArgs(sys.argv[1:]) trf.execute() trf.generateReport() msg.info("%s stopped at %s, trf exit code %d" % (sys.argv[0], time.asctime(), trf.exitCode)) + + + if "outputTXTFile" in trf.argdict: + whitelist_out.append('TXT') + +# read files/dirs that should be saved and if present in cwd - remove + + if (("cleanOut" in trf.argdict) and (trf.argdict["cleanOut"].value!=0)): +# print("mamy cleanOut !!!",trf.argdict["cleanOut"].value) + whitelist_out = ['log.generate','.root'] + if "saveList" in trf.argdict: + saveList_dic= trf.argdict["saveList"].value + saveList_str= str(saveList_dic) + saveList_str=saveList_str[10:-3] + saveList= saveList_str.split(",") + for item in saveList: + test_ex = os.path.join(main_dir,str(item)) + if os.path.isdir(test_ex): + shutil.rmtree(test_ex, ignore_errors=True) +# print("directory removed ", test_ex) + elif os.path.isfile(test_ex): + os.remove(test_ex) +# print("file removed ", test_ex) +# new_list = list(list(int(a) for a in b) for b in T1 if a.isdigit()) + if not saveList[0].isdigit(): + whitelist_out=whitelist_out+saveList + + move_files(main_dir,tmp_dir,whitelist_out) + os.chdir(main_dir) + if "saveList" not in trf.argdict: + shutil.rmtree(tmp_dir, ignore_errors=True) +# elif firstSaveList!=1: + elif not saveList[0].isdigit(): + shutil.rmtree(tmp_dir, ignore_errors=True) + + if (("lheOnly" in trf.argdict ) and (trf.argdict["lheOnly"].value == 1)): + outputName = ''.join(trf.argdict["outputEVNTFile"].value) + os.remove(outputName) sys.exit(trf.exitCode) diff --git a/Generators/EvgenJobTransforms/scripts/Rivet_tf.py b/Generators/EvgenJobTransforms/scripts/Rivet_tf.py index fc5319a96ce..bdefb584669 100755 --- a/Generators/EvgenJobTransforms/scripts/Rivet_tf.py +++ b/Generators/EvgenJobTransforms/scripts/Rivet_tf.py @@ -1,6 +1,6 @@ -#! /usr/bin/env python +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +#! /usr/bin/env python """ Take an input EVNT file and run Rivet on it diff --git a/Generators/EvgenJobTransforms/share/Generate_TruthJets.py b/Generators/EvgenJobTransforms/share/Generate_TruthJets.py index 2c9eec6fed4..2b7a9845ad4 100644 --- a/Generators/EvgenJobTransforms/share/Generate_TruthJets.py +++ b/Generators/EvgenJobTransforms/share/Generate_TruthJets.py @@ -1,3 +1,6 @@ + +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + ## Configure and schedule jet finding algorithms for the jet ## containers defined in the user's JO fragment ## @@ -6,12 +9,14 @@ # Convert HepMC event record to xAODTruth for use by jet tools +print 'bedzie konwersja !!' from xAODTruthCnv.xAODTruthCnvConf import xAODMaker__xAODTruthCnvAlg if not hasattr(prefiltSeq, 'xAODCnv'): - prefiltSeq += xAODMaker__xAODTruthCnvAlg('xAODCnv') + prefiltSeq += xAODMaker__xAODTruthCnvAlg('xAODCnv',WriteTruthMetaData=False) prefiltSeq.xAODCnv.AODContainerName = 'GEN_EVENT' # Turn off jet tools specific to detector-level jets +print 'bedzie wylaczenie !!' from JetRec.JetRecFlags import jetFlags jetFlags.useTracks = False jetFlags.eventShapeTools = [] @@ -23,6 +28,7 @@ else: raise NameError('jetFlags has no attribute usePflow or usePFlow') jetFlags.useCaloQualityTool = False # Attach jet algorithms +print 'podlacz algorytmy jetowe !!' from JetRec.JetAlgorithm import addJetRecoToAlgSequence if not hasattr(prefiltSeq, 'jetalg'): addJetRecoToAlgSequence(prefiltSeq) diff --git a/Generators/EvgenJobTransforms/share/Generate_ecmenergies.py b/Generators/EvgenJobTransforms/share/Generate_ecmenergies.py index 0eeb8f46a67..f9280d4527a 100644 --- a/Generators/EvgenJobTransforms/share/Generate_ecmenergies.py +++ b/Generators/EvgenJobTransforms/share/Generate_ecmenergies.py @@ -1,3 +1,7 @@ + +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + + ## Propagate energy argument to the generators # TODO: Standardise energy setting in the GenModule interface @@ -30,8 +34,8 @@ elif 'Herwig' in evgenConfig.generators: genSeq.Herwig.HerwigCommand.append("beam2energy %s" % eBeam) elif 'Herwigpp' in evgenConfig.generators: genSeq.Herwigpp.Commands.append("set /Herwig/Generators/LHCGenerator:EventHandler:LuminosityFunction:Energy %s" % eCM) -elif 'Herwig7' in evgenConfig.generators: - genSeq.Herwig7.Commands.append("set /Herwig/Generators/LHCGenerator:EventHandler:LuminosityFunction:Energy %s" % eCM) +#elif 'Herwig7' in evgenConfig.generators: +# genSeq.Herwig7.Commands.append("set /Herwig/Generators/LHCGenerator:EventHandler:LuminosityFunction:Energy %s" % eCM) elif 'Sherpa' in evgenConfig.generators: genSeq.Sherpa_i.Parameters.append("BEAM_ENERGY_1=%s" % eBeam) genSeq.Sherpa_i.Parameters.append("BEAM_ENERGY_2=%s" % eBeam) diff --git a/Generators/EvgenJobTransforms/share/Generate_randomseeds.py b/Generators/EvgenJobTransforms/share/Generate_randomseeds.py index c6087a12d1a..430c60cac3f 100644 --- a/Generators/EvgenJobTransforms/share/Generate_randomseeds.py +++ b/Generators/EvgenJobTransforms/share/Generate_randomseeds.py @@ -1,3 +1,7 @@ + +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + + ## Set random seeds depending on used generators genseeds = { diff --git a/Generators/EvgenJobTransforms/share/skeleton.ABtoEVGEN.py b/Generators/EvgenJobTransforms/share/skeleton.ABtoEVGEN.py index 7cc88f6d3cc..72650afe7cd 100644 --- a/Generators/EvgenJobTransforms/share/skeleton.ABtoEVGEN.py +++ b/Generators/EvgenJobTransforms/share/skeleton.ABtoEVGEN.py @@ -1,3 +1,6 @@ + +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + """Functionality core of the Generate_tf transform""" ##============================================================== @@ -252,16 +255,21 @@ if joparts[0].startswith("MC"): #< if this is an "official" JO expectedgenpart = expectedgenpart.replace("HerwigJimmy", "Herwig") def _norm(s): # TODO: add EvtGen to this normalization for MC14? - return s.replace("Photospp", "").replace("Photos", "").replace("Tauola", "").replace("Tauolapp", "").replace("TauolaPP", "") + return s.replace("Photospp", "").replace("Photos", "").replace("TauolaPP", "").replace("Tauolapp", "").replace("Tauola", "") def _norm2(s): return s.replace("Py", "Pythia").replace("MG","MadGraph").replace("Ph","Powheg").replace("Hpp","Herwigpp").replace("H7","Herwig7").replace("Sh","Sherpa").replace("Ag","Alpgen").replace("EG","EvtGen").replace("PG","ParticleGun") def _short2(s): return s.replace("Pythia","Py").replace("MadGraph","MG").replace("Powheg","Ph").replace("Herwigpp","Hpp").replace("Herwig7","H7").replace("Sherpa","Sh").replace("Alpgen","Ag").replace("EvtGen","EG").replace("PG","ParticleGun") + + if genpart != _norm(expectedgenpart) and _norm2(genpart) != _norm(expectedgenpart): + evgenLog.error("Expected first part of JO name to be '%s' or '%s', but found '%s'" % (_norm(expectedgenpart), _norm(_short2(expectedgenpart)), genpart)) + evgenLog.error("gennames '%s' " %(expectedgenpart)) + sys.exit(1) - if genpart != expectedgenpart and _norm(genpart) != _norm(expectedgenpart) and _norm2(genpart) != expectedgenpart and _norm2(genpart) != _norm(expectedgenpart): - evgenLog.error("Expected first part of JO name to be '%s' or '%s' or '%s', but found '%s'" % (_norm(expectedgenpart), expectedgenpart, _short2(expectedgenpart), genpart)) - sys.exit(1) +# if genpart != expectedgenpart and _norm(genpart) != _norm(expectedgenpart) and _norm2(genpart) != expectedgenpart and _norm2(genpart) != _norm(expectedgenpart): +# evgenLog.error("Expected first part of JO name to be '%s' or '%s' or '%s', but found '%s'" % (_norm(expectedgenpart), expectedgenpart, _short2(expectedgenpart), genpart)) +# sys.exit(1) del _norm ## Check if the tune/PDF part is needed, and if so whether it's present @@ -273,17 +281,38 @@ if joparts[0].startswith("MC"): #< if this is an "official" JO ## Check that the evgenConfig.minevents setting is acceptable ## minevents defines the production event sizes and must be sufficiently "round" +if hasattr(runArgs,'inputGeneratorFile') and ',' in runArgs.inputGeneratorFile: + multiInput = runArgs.inputGeneratorFile.count(',')+1 +else: + multiInput = 0 if evgenConfig.minevents < 1: raise RunTimeError("evgenConfig.minevents must be at least 1") else: - allowed_minevents_lt1000 = [1, 2, 5, 10, 20, 25, 50, 100, 200, 500] + allowed_minevents_lt1000 = [1, 2, 5, 10, 20, 25, 50, 100, 200, 500, 1000] msg = "evgenConfig.minevents = %d: " % evgenConfig.minevents - if evgenConfig.minevents >= 1000 and evgenConfig.minevents % 1000 != 0: - msg += "minevents in range >= 1000 must be a multiple of 1000" - raise RuntimeError(msg) + if multiInput !=0 : + dummy_minevents = evgenConfig.minevents*(multiInput) + evgenLog.info('Replacing input minevents '+str(evgenConfig.minevents)+' with calculated '+str(dummy_minevents) + ' rounded to ' + str(int(round(dummy_minevents)))) + evgenConfig.minevents = dummy_minevents + rest1000 = evgenConfig.minevents % 1000 + if multiInput !=0 : + rounding=1 + if rest1000 < 1000-rest1000: + evgenLog.info('Replacing input minevents '+str(evgenConfig.minevents)+' with calculated '+str(evgenConfig.minevents-rest1000)) + evgenConfig.minevents = evgenConfig.minevents-rest1000 + else: + evgenLog.info('Replacing input minevents '+str(evgenConfig.minevents)+' with calculated '+str(evgenConfig.minevents-rest1000+1000)) + evgenConfig.minevents = evgenConfig.minevents-rest1000+1000 + else: + msg += "minevents in range >= 1000 must be a multiple of 1000" + raise RuntimeError(msg) elif evgenConfig.minevents < 1000 and evgenConfig.minevents not in allowed_minevents_lt1000: - msg += "minevents in range < 1000 must be one of %s" % allowed_minevents_lt1000 - raise RuntimeError(msg) + if multiInput !=0: + rounding=1 + evgenConfig.minevents=min(allowed_minevents_lt1000,key=lambda x:abs(x-evgenConfig.minevents)) + else: + msg += "minevents in range <= 1000 must be one of %s" % allowed_minevents_lt1000 + raise RuntimeError(msg) ## Check that the keywords are in the list of allowed words (and exit if processing an official JO) if evgenConfig.keywords: diff --git a/Generators/EvgenJobTransforms/share/skeleton.EVGENtoRivet.py b/Generators/EvgenJobTransforms/share/skeleton.EVGENtoRivet.py index ba0ce1b485d..ca3c0fef61f 100644 --- a/Generators/EvgenJobTransforms/share/skeleton.EVGENtoRivet.py +++ b/Generators/EvgenJobTransforms/share/skeleton.EVGENtoRivet.py @@ -1,3 +1,6 @@ + +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + """Functionality core of the Rivet_tf transform""" ##============================================================== diff --git a/Generators/EvgenJobTransforms/share/skeleton.EvtGenFromEVNT.py b/Generators/EvgenJobTransforms/share/skeleton.EvtGenFromEVNT.py index 68fc68f19c8..70be345f790 100644 --- a/Generators/EvgenJobTransforms/share/skeleton.EvtGenFromEVNT.py +++ b/Generators/EvgenJobTransforms/share/skeleton.EvtGenFromEVNT.py @@ -1,3 +1,5 @@ +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + ############################# ## basic jobO configuration include("PATJobTransforms/CommonSkeletonJobOptions.py") diff --git a/Generators/EvgenJobTransforms/share/skeleton.GENtoEVGEN.py b/Generators/EvgenJobTransforms/share/skeleton.GENtoEVGEN.py index a4847fbe2e2..35c1a2c089c 100644 --- a/Generators/EvgenJobTransforms/share/skeleton.GENtoEVGEN.py +++ b/Generators/EvgenJobTransforms/share/skeleton.GENtoEVGEN.py @@ -1,3 +1,6 @@ + +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + """Functionality core of the Generate_tf transform""" ##============================================================== @@ -6,7 +9,7 @@ ## Create sequences for generators, clean-up algs, filters and analyses ## and import standard framework objects with standard local scope names -import os, re, string +import os, re, string, subprocess import AthenaCommon.AlgSequence as acas import AthenaCommon.AppMgr as acam from AthenaCommon.AthenaCommonFlags import jobproperties @@ -120,10 +123,10 @@ if not hasattr(postSeq, "CopyEventWeight"): # TODO: Rewrite in Python? from EvgenProdTools.EvgenProdToolsConf import CountHepMC svcMgr.EventSelector.FirstEvent = runArgs.firstEvent - +theApp.EvtMax = -1 # This is necessary for athenaMP -if hasattr(runArgs, "maxEvents"): - theApp.EvtMax = runArgs.maxEvents +#if hasattr(runArgs, "maxEvents"): +# theApp.EvtMax = runArgs.maxEvents if not hasattr(postSeq, "CountHepMC"): postSeq += CountHepMC() @@ -131,7 +134,7 @@ if not hasattr(postSeq, "CountHepMC"): postSeq.CountHepMC.FirstEvent = runArgs.firstEvent postSeq.CountHepMC.CorrectHepMC = False -postSeq.CountHepMC.CorrectEventID = True +postSeq.CountHepMC.CorrectEventID = False ## Print out the contents of the first 5 events (after filtering) # TODO: Allow configurability from command-line/exec/include args @@ -260,17 +263,23 @@ if joparts[0].startswith("MC"): #< if this is an "official" JO expectedgenpart = expectedgenpart.replace("HerwigJimmy", "Herwig") def _norm(s): # TODO: add EvtGen to this normalization for MC14? - return s.replace("Photospp", "").replace("Photos", "").replace("Tauola", "").replace("Tauolapp", "").replace("TauolaPP", "") + return s.replace("Photospp", "").replace("Photos", "").replace("TauolaPP", "").replace("Tauolapp", "").replace("Tauola", "") def _norm2(s): return s.replace("Py", "Pythia").replace("MG","MadGraph").replace("Ph","Powheg").replace("Hpp","Herwigpp").replace("H7","Herwig7").replace("Sh","Sherpa").replace("Ag","Alpgen").replace("EG","EvtGen").replace("PG","ParticleGun") def _short2(s): return s.replace("Pythia","Py").replace("MadGraph","MG").replace("Powheg","Ph").replace("Herwigpp","Hpp").replace("Herwig7","H7").replace("Sherpa","Sh").replace("Alpgen","Ag").replace("EvtGen","EG").replace("PG","ParticleGun") - if genpart != expectedgenpart and _norm(genpart) != _norm(expectedgenpart) and _norm2(genpart) != expectedgenpart and _norm2(genpart) != _norm(expectedgenpart): - evgenLog.error("Expected first part of JO name to be '%s' or '%s' or '%s', but found '%s'" % (_norm(expectedgenpart), expectedgenpart, _short2(expectedgenpart), genpart)) +# if genpart != expectedgenpart and _norm(genpart) != _norm(expectedgenpart) and _norm2(genpart) != expectedgenpart and _norm2(genpart) != _norm(expectedgenpart): +# evgenLog.error("Expected first part of JO name to be '%s' or '%s' or '%s', but found '%s'" % (_norm(expectedgenpart), expectedgenpart, _short2(expectedgenpart), genpart)) +# evgenLog.error("gennames '%s' " %(expectedgenpart)) +# sys.exit(1) + + if genpart != _norm(expectedgenpart) and _norm2(genpart) != _norm(expectedgenpart): + evgenLog.error("Expected first part of JO name to be '%s' or '%s', but found '%s'" % (_norm(expectedgenpart), _norm(_short2(expectedgenpart)), genpart)) evgenLog.error("gennames '%s' " %(expectedgenpart)) sys.exit(1) + del _norm ## Check if the tune/PDF part is needed, and if so whether it's present if not gens_notune(gennames) and len(jo_physshortparts) < 3: @@ -288,20 +297,50 @@ if gen_require_steering(gennames): ## Check that the evgenConfig.minevents setting is acceptable ## minevents defines the production event sizes and must be sufficiently "round" +rounding = 0 +if hasattr(runArgs,'inputGeneratorFile') and ',' in runArgs.inputGeneratorFile: multiInput = runArgs.inputGeneratorFile.count(',')+1 +else: + multiInput = 0 + if evgenConfig.minevents < 1: raise RunTimeError("evgenConfig.minevents must be at least 1") else: - allowed_minevents_lt1000 = [1, 2, 5, 10, 20, 25, 50, 100, 200, 500] + allowed_minevents_lt1000 = [1, 2, 5, 10, 20, 25, 50, 100, 200, 500, 1000] msg = "evgenConfig.minevents = %d: " % evgenConfig.minevents + if multiInput !=0 : + dummy_minevents = evgenConfig.minevents*(multiInput) + evgenLog.info('Replacing input minevents '+str(evgenConfig.minevents)+' with calculated '+str(dummy_minevents)) + evgenConfig.minevents = dummy_minevents + if evgenConfig.minevents >= 1000 and evgenConfig.minevents % 1000 != 0: - msg += "minevents in range >= 1000 must be a multiple of 1000" - raise RuntimeError(msg) + rest1000 = evgenConfig.minevents % 1000 + if multiInput !=0 : + rounding=1 + if rest1000 < 1000-rest1000: + evgenLog.info('Replacing minevents '+str(evgenConfig.minevents)+' with roundeded '+str(evgenConfig.minevents-rest1000)) + evgenConfig.minevents = evgenConfig.minevents-rest1000 + else: + evgenLog.info('Replacing input minevents '+str(evgenConfig.minevents)+' with calculated '+str(evgenConfig.minevents-rest1000+1000)) + evgenConfig.minevents = evgenConfig.minevents-rest1000+1000 + else: + msg += "minevents in range >= 1000 must be a multiple of 1000" + raise RuntimeError(msg) elif evgenConfig.minevents < 1000 and evgenConfig.minevents not in allowed_minevents_lt1000: - msg += "minevents in range < 1000 must be one of %s" % allowed_minevents_lt1000 - raise RuntimeError(msg) - else: - postSeq.CountHepMC.RequestedOutput = evgenConfig.minevents if runArgs.maxEvents == -1 else runArgs.maxEvents - + if multiInput !=0: + rounding=1 +# minimum_list = [abs(variable - evgenConfig.minevents) for variable in allowed_minevents_lt1000] +# from operator import itemgetter +# evgenLog.info("Minimum list: %s" % minimum_list) +# evgenLog.info("index of the min. value: " + str(min(enumerate(minimum_list), key=itemgetter(1))[0]) + " and the value is: " + str(allowed_minevents_lt1000[min(enumerate(minimum_list), key=itemgetter(1))[0]])) + round_minevents=min(allowed_minevents_lt1000,key=lambda x:abs(x-evgenConfig.minevents)) + evgenLog.info('Replacing minevents lt 1000 '+str(evgenConfig.minevents)+' with rounded '+str(round_minevents)) + evgenConfig.minevents=round_minevents + else: + msg += "minevents in range <= 1000 must be one of %s" % allowed_minevents_lt1000 + raise RuntimeError(msg) +# else: + postSeq.CountHepMC.RequestedOutput = evgenConfig.minevents if runArgs.maxEvents == -1 or rounding==1 else runArgs.maxEvents + evgenLog.info('Requested output events '+str(postSeq.CountHepMC.RequestedOutput)) ## Check that the keywords are in the list of allowed words (and exit if processing an official JO) if evgenConfig.keywords: @@ -474,6 +513,54 @@ def find_unique_file(pattern): raise RuntimeError("More than one '%s' file found" % pattern) return files[0] +# This function merges a list of input LHE file to make one outputFile. The header is taken from the first +# file, but the number of events is updated to equal the total number of events in all the input files +def merge_lhe_files(listOfFiles,outputFile): + if(os.path.exists(outputFile)): + print "outputFile ",outputFile," already exists. Will rename to ",outputFile,".OLD" + os.rename(outputFile,outputFile+".OLD") + output = open(outputFile,'w') + holdHeader = "" + nevents=0 + for file in listOfFiles: + cmd = "grep /event "+file+" | wc -l" + nevents+=int(subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True)) + + for file in listOfFiles: + inHeader = True + header = "" + print "*** Starting file ",file + for line in open(file,"r"): +## Reading first event signals that we are done with all the header information +## Using this approach means the script will properly handle any metadata stored +## at the beginning of the file. Note: aside from the number of events, no metadata +## is updated after the first header is read (eg the random number seed recorded will be +## that of the first file. + if("<event" in line and inHeader): + inHeader = False + if(len(holdHeader)<1): + holdHeader = header + output.write(header) +## each input file ends with "</LesHouchesEvents>". We don't want to write this out until all +## the files have been read. The elif below writes out all the events. + elif(not inHeader and not ("</LesHouchesEvents>" in line)): + output.write(line) + if(inHeader): +## Format for storing number of events different in MG and Powheg + if("nevents" in line): +## MG5 format is "n = nevents" + tmp = line.split("=") + line = line.replace(tmp[0],str(nevents)) + elif("numevts" in line): +## Powheg format is numevts n + tmp = line.split(" ") + nnn = str(nevents) + line = line.replace(tmp[1],nnn) + header+=line + output.write("</LesHouchesEvents>") + output.close() + + def mk_symlink(srcfile, dstfile): "Make a symlink safely" if dstfile: @@ -493,13 +580,42 @@ if eventsFile or datFile: if evgenConfig.inputfilecheck and not re.search(evgenConfig.inputfilecheck, runArgs.inputGeneratorFile): raise RuntimeError("inputGeneratorFile=%s is incompatible with inputfilecheck '%s' in %s" % (runArgs.inputGeneratorFile, evgenConfig.inputfilecheck, runArgs.jobConfig)) - inputroot = os.path.basename(runArgs.inputGeneratorFile).split("._")[0] +# inputroot = os.path.basename(runArgs.inputGeneratorFile).split("._")[0] if datFile: +# inputroot = os.path.basename(runArgs.inputGeneratorFile).split("._")[0] + inputroot = os.path.basename(runArgs.inputGeneratorFile).split(".tar.")[0] realDatFile = find_unique_file('*%s*.dat' % inputroot) mk_symlink(realDatFile, datFile) if eventsFile: - realEventsFile = find_unique_file('*%s.*.ev*ts' % inputroot) - mk_symlink(realEventsFile, eventsFile) +# realEventsFile = find_unique_file('*%s.*.ev*ts' % inputroot) +# mk_symlink(realEventsFile, eventsFile) + myinputfiles = runArgs.inputGeneratorFile + genInputFiles = myinputfiles.split(',') + numberOfFiles = len(genInputFiles) + # if there is a single file, make a symlink. If multiple files, merge them into one output eventsFile + if(numberOfFiles<2): +# inputroot = os.path.basename(runArgs.inputGeneratorFile).split("._")[0] + inputroot = os.path.basename(runArgs.inputGeneratorFile).split(".tar.")[0] + realEventsFile = find_unique_file('*%s.*ev*ts' % inputroot) + mk_symlink(realEventsFile, eventsFile) + else: + allFiles = [] + for file in genInputFiles: +# Since we can have multiple files from the same task, inputroot must include more of the filename +# to make it unique +# input0 = os.path.basename(file).split("._")[0] +# input1 = (os.path.basename(file).split("._")[1]).split(".")[0] +# inputroot = input0+"._"+input1 + inputroot = os.path.basename(file).split(".tar.")[0] +# print "inputroot ",inputroot + realEventsFile = find_unique_file('*%s.*ev*ts' % inputroot) +# The only input format where merging is permitted is LHE + with open(realEventsFile, 'r') as f: + first_line = f.readline() + if(not ("LesHouche" in first_line)): + raise RuntimeError("%s is NOT a LesHouche file" % realEventsFile) + allFiles.append(realEventsFile) + merge_lhe_files(allFiles,eventsFile) else: if hasattr(runArgs, "inputGeneratorFile") and runArgs.inputGeneratorFile != "NONE": raise RuntimeError("inputGeneratorFile arg specified for %s, but generators %s do not require an input file" % diff --git a/Generators/EvgenJobTransforms/test/EvgenJobTransforms_TestConfiguration.xml b/Generators/EvgenJobTransforms/test/EvgenJobTransforms_TestConfiguration.xml index 84b51db3ee7..f75b771c455 100644 --- a/Generators/EvgenJobTransforms/test/EvgenJobTransforms_TestConfiguration.xml +++ b/Generators/EvgenJobTransforms/test/EvgenJobTransforms_TestConfiguration.xml @@ -54,18 +54,30 @@ <timelimit>15</timelimit> <prescript>source ${ATN_PACKAGE}/test/setup_testenv</prescript> </TEST> + + <TEST name="Py8TauolaPPZtautau" type="script" suite="EvgenJobTransforms-Core"> + <doc>Tests a Pythia8 Z->tautau job, with Photos++, Tauola++ and EG</doc> + <classification> + <displayClass>OfflineValidation</displayClass> + <displayProcess>EvGen</displayProcess> + <displayComponent>Athena-Core</displayComponent> + </classification> + <options_atn>${ATN_PACKAGE}/test/test_ph8TauolappEG_ztautau</options_atn> + <timelimit>15</timelimit> + <prescript>source ${ATN_PACKAGE}/test/setup_testenv</prescript> + </TEST> - <TEST name="Py8EvtGen" type="script" suite="EvgenJobTransforms-Core"> - <doc>Test Pythia8+EvtGen</doc> + <TEST name="powhegpy8TauolaPPEG" type="script" suite="EvgenJobTransforms-Core"> + <doc>Test Powheg+Pythia8+TauolaPP+EvtGen</doc> <classification> <displayClass>OfflineValidation</displayClass> <displayProcess>EvGen</displayProcess> <displayComponent>Athena-Core</displayComponent> </classification> - <options_atn>${ATN_PACKAGE}/test/test_pythia8_evtgen</options_atn> - <timelimit>15</timelimit> + <options_atn>${ATN_PACKAGE}/test/test_powhegpy8TauolaPPEG</options_atn> + <timelimit>25</timelimit> <prescript>source ${ATN_PACKAGE}/test/setup_testenv</prescript> </TEST> @@ -155,17 +167,29 @@ - <TEST name="Herwig++" type="script" suite="EvgenJobTransforms-Core"> - <doc>Test minimum bias generation with Herwigpp</doc> + <TEST name="Herwig7" type="script" suite="EvgenJobTransforms-Core"> + <doc>Test minimum bias generation with Herwig7</doc> <classification> <displayClass>OfflineValidation</displayClass> <displayProcess>EvGen</displayProcess> <displayComponent>Athena-Core</displayComponent> </classification> - <options_atn>${ATN_PACKAGE}/test/test_herwigpp</options_atn> + <options_atn>${ATN_PACKAGE}/test/test_herwig7</options_atn> <timelimit>15</timelimit> <prescript>source ${ATN_PACKAGE}/test/setup_testenv</prescript> </TEST> + + <TEST name="Herwig7dijet" type="script" suite="EvgenJobTransforms-Core"> + <doc>Test dijets generation with Herwig7</doc> + <classification> + <displayClass>OfflineValidation</displayClass> + <displayProcess>EvGen</displayProcess> + <displayComponent>Athena-Core</displayComponent> + </classification> + <options_atn>${ATN_PACKAGE}/test/test_herwig7dijet</options_atn> + <timelimit>35</timelimit> + <prescript>source ${ATN_PACKAGE}/test/setup_testenv</prescript> + </TEST> <TEST name="PowhegWenu" type="script" suite="EvgenJobTransforms-Core"> <doc>Test W-enu generation with Powheg</doc> diff --git a/Generators/EvgenJobTransforms/test/setup_testenv b/Generators/EvgenJobTransforms/test/setup_testenv index 881cd7e056a..5b2205f26e8 100644 --- a/Generators/EvgenJobTransforms/test/setup_testenv +++ b/Generators/EvgenJobTransforms/test/setup_testenv @@ -1,3 +1,3 @@ export TESTDATA=/afs/cern.ch/atlas/offline/ProdData/17.2.X export JODIR=/afs/cern.ch/atlas/groups/Generators/MC14JobOptions/latest -export JODIR15=/afs/cern.ch/atlas/groups/Generators/MC15JobOptions/latest +export JODIR15=/cvmfs/atlas.cern.ch/repo/sw/Generators/MC15JobOptions/latest diff --git a/Generators/EvgenJobTransforms/test/test_MC14_Pythia6_Wtaunu.py b/Generators/EvgenJobTransforms/test/test_MC14_Pythia6_Wtaunu.py index 2e4e1b2d56b..d4cbf409574 100644 --- a/Generators/EvgenJobTransforms/test/test_MC14_Pythia6_Wtaunu.py +++ b/Generators/EvgenJobTransforms/test/test_MC14_Pythia6_Wtaunu.py @@ -1,5 +1,3 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration - ## PYTHIA W->tau,nu evgenConfig.description = "W->tau,nu production with the AUET2B CTEQ6L1 tune" diff --git a/Generators/EvgenJobTransforms/test/test_MC14_Pythia8_Zee.py b/Generators/EvgenJobTransforms/test/test_MC14_Pythia8_Zee.py index ebbcff8f7d1..b1d860a1e83 100644 --- a/Generators/EvgenJobTransforms/test/test_MC14_Pythia8_Zee.py +++ b/Generators/EvgenJobTransforms/test/test_MC14_Pythia8_Zee.py @@ -1,5 +1,3 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration - ## Pythia8 Z->ee evgenConfig.description = "Z->ee production with no lepton filter and AU2 CTEQ6L1 tune" diff --git a/Generators/EvgenJobTransforms/test/test_bphys b/Generators/EvgenJobTransforms/test/test_bphys index 4571835f5c8..0572e1052d0 100755 --- a/Generators/EvgenJobTransforms/test/test_bphys +++ b/Generators/EvgenJobTransforms/test/test_bphys @@ -2,7 +2,7 @@ ## Any arguments are considered overrides, and will be added at the end export TRF_ECHO=True; -Generate_tf.py --ecmEnergy=13000 --runNumber=304697 --maxEvents=10 \ - --jobConfig=$JODIR15/share/DSID304xxx/MC15.304697.Pythia8BEvtGen_A14NNPDF23LO_pp_JpsimumuZmumu.py \ +Generate_tf.py --ecmEnergy=13000 --runNumber=429705 --maxEvents=10 \ + --jobConfig=$JODIR15/share/DSID429xxx/MC15.429705.Pythia8B_A14NNPDF23LO_pp_JpsimumuZmumu.py \ --outputEVNTFile=test_bb_Jpsimu4mu4X.EVNT.pool.root \ $@ diff --git a/Generators/EvgenJobTransforms/test/test_herwig7 b/Generators/EvgenJobTransforms/test/test_herwig7 new file mode 100755 index 00000000000..8a7aa291797 --- /dev/null +++ b/Generators/EvgenJobTransforms/test/test_herwig7 @@ -0,0 +1,8 @@ +#! /usr/bin/env bash + +## Any arguments are considered overrides, and will be added at the end +export TRF_ECHO=True; +Generate_tf.py --ecmEnergy=13000 --runNumber=429700 --maxEvents=10 \ + --jobConfig=$JODIR15/share/DSID429xxx/MC15.429700.Herwig7_MinBias.py \ + --outputEVNTFile=test_herwig7_minbias_inelastic.EVNT.pool.root \ + $@ diff --git a/Generators/EvgenJobTransforms/test/test_herwig7dijet b/Generators/EvgenJobTransforms/test/test_herwig7dijet new file mode 100755 index 00000000000..549bb0a8e8e --- /dev/null +++ b/Generators/EvgenJobTransforms/test/test_herwig7dijet @@ -0,0 +1,8 @@ +#! /usr/bin/env bash + +## Any arguments are considered overrides, and will be added at the end +export TRF_ECHO=True; +Generate_tf.py --ecmEnergy=13000 --runNumber=429699 --maxEvents=10 \ + --jobConfig=$JODIR15/share/DSID429xxx/MC15.429699.Herwig7_Dijet.py \ + --outputEVNTFile=test_herwig7_dijet.EVNT.pool.root \ + $@ diff --git a/Generators/EvgenJobTransforms/test/test_ph8TauolappEG_ztautau b/Generators/EvgenJobTransforms/test/test_ph8TauolappEG_ztautau new file mode 100755 index 00000000000..6ff2c134228 --- /dev/null +++ b/Generators/EvgenJobTransforms/test/test_ph8TauolappEG_ztautau @@ -0,0 +1,10 @@ +#! /usr/bin/env bash + +## Any arguments are considered overrides, and will be added at the end +export TRF_ECHO=True; +Generate_tf.py --ecmEnergy=13000 --runNumber=429697 --maxEvents=10 \ + --jobConfig=$JODIR15/share/DSID429xxx/MC15.429697.Pythia8EvtGen_A14NNPDF23LO_DYtautau_120M180.py \ + --outputEVNTFile=test_DYZtautau.EVNT.pool.root \ + $@ + + diff --git a/Generators/EvgenJobTransforms/test/test_powheg_ttbar b/Generators/EvgenJobTransforms/test/test_powheg_ttbar index 7b2caf52a36..983ac9171f4 100755 --- a/Generators/EvgenJobTransforms/test/test_powheg_ttbar +++ b/Generators/EvgenJobTransforms/test/test_powheg_ttbar @@ -3,6 +3,6 @@ ## Any arguments are considered overrides, and will be added at the end export TRF_ECHO=True; Generate_tf.py --ecmEnergy=13000 --runNumber=101010 --maxEvents=10 \ - --jobConfig=$JODIR/share/tests/MC14.101010.PowhegPythiaPhotosTauola_Perugia2011_tt_example.py \ + --jobConfig=$JODIR/share/tests/MC14.101010.PowhegPythia_Perugia2011_tt_example.py \ --outputEVNTFile=test_powheg_minbias_inelastic.EVNT.pool.root \ $@ diff --git a/Generators/EvgenJobTransforms/test/test_powhegpy8TauolaPPEG b/Generators/EvgenJobTransforms/test/test_powhegpy8TauolaPPEG new file mode 100755 index 00000000000..6fcd23ae2c9 --- /dev/null +++ b/Generators/EvgenJobTransforms/test/test_powhegpy8TauolaPPEG @@ -0,0 +1,8 @@ +#! /usr/bin/env bash + +## Any arguments are considered overrides, and will be added at the end +export TRF_ECHO=True; +Generate_tf.py --ecmEnergy=13000 --runNumber=429696 --maxEvents=10 \ + --jobConfig=$JODIR15/share/DSID429xxx/MC15.429696.PowhegPythia8EvtGen_AZNLOCTEQ6L1_Ztautau.py \ + --outputEVNTFile=test_JZ0_evtgen.EVNT.pool.root \ + $@ diff --git a/Generators/EvgenJobTransforms/test/test_pythia8_powheg b/Generators/EvgenJobTransforms/test/test_pythia8_powheg index c218a9fcc8c..b1df8722a54 100755 --- a/Generators/EvgenJobTransforms/test/test_pythia8_powheg +++ b/Generators/EvgenJobTransforms/test/test_pythia8_powheg @@ -2,8 +2,8 @@ ## Any arguments are considered overrides, and will be added at the end export TRF_ECHO=True; -Generate_tf.py --ecmEnergy=8000 --runNumber=147800 --maxEvents=10 \ - --jobConfig=$JODIR/share/tests/MC14.147800.PowhegPythia8_AU2CT10_Wplusenu.py \ +Generate_tf.py --ecmEnergy=8000 --runNumber=429695 --maxEvents=10 \ + --jobConfig=$JODIR15/share/DSID429xxx/MC15.429695.PowhegPythia8EvtGen_A14NNPDF23LO_Wplusenu.py \ --inputGeneratorFile=$TESTDATA/group.phys-gener.Powheg_CT10.147800.Wplusenu_8TeV.TXT.mc12_v2._00001.tar.gz \ --outputEVNTFile=test_powhegpythia8_Wpluswnu.EVNT.pool.root \ $@ diff --git a/Generators/EvgenJobTransforms/test/test_pythia8_ztautau b/Generators/EvgenJobTransforms/test/test_pythia8_ztautau index e330dba5fac..50c730635af 100755 --- a/Generators/EvgenJobTransforms/test/test_pythia8_ztautau +++ b/Generators/EvgenJobTransforms/test/test_pythia8_ztautau @@ -2,7 +2,7 @@ ## Any arguments are considered overrides, and will be added at the end export TRF_ECHO=True; -Generate_tf.py --ecmEnergy=13000 --runNumber=429110 --maxEvents=10 \ - --jobConfig=$JODIR15/share/DSID429xxx/MC15.429110.Pythia8EvtGen_A14NNPDF23LO_Ztautau.py \ +Generate_tf.py --ecmEnergy=13000 --runNumber=429708 --maxEvents=10 \ + --jobConfig=$JODIR15/share/DSID429xxx/MC15.429708.Pythia8EvtGen_A14NNPDF23LO_Ztautau.py \ --outputEVNTFile=test_Ztautau.EVNT.pool.root \ $@ diff --git a/Generators/EvgenProdTools/CMakeLists.txt b/Generators/EvgenProdTools/CMakeLists.txt index fe58e620547..b7de7408052 100644 --- a/Generators/EvgenProdTools/CMakeLists.txt +++ b/Generators/EvgenProdTools/CMakeLists.txt @@ -9,7 +9,6 @@ atlas_subdir( EvgenProdTools ) atlas_depends_on_subdirs( PUBLIC Control/AthenaBaseComps Generators/GenAnalysisTools/TruthHelper - Generators/GenInterfaces Generators/GeneratorModules PRIVATE Control/AthenaKernel diff --git a/Generators/EvgenProdTools/EvgenProdTools/CopyEventWeight.h b/Generators/EvgenProdTools/EvgenProdTools/CopyEventWeight.h index 3ff9ef7ec35..d5586d10434 100644 --- a/Generators/EvgenProdTools/EvgenProdTools/CopyEventWeight.h +++ b/Generators/EvgenProdTools/EvgenProdTools/CopyEventWeight.h @@ -41,4 +41,4 @@ private: #endif -#endif \ No newline at end of file +#endif diff --git a/Generators/EvgenProdTools/EvgenProdTools/CountHepMC.h b/Generators/EvgenProdTools/EvgenProdTools/CountHepMC.h index 8bbbec1e220..fed77d35ad4 100644 --- a/Generators/EvgenProdTools/EvgenProdTools/CountHepMC.h +++ b/Generators/EvgenProdTools/EvgenProdTools/CountHepMC.h @@ -40,4 +40,4 @@ private: #endif -#endif \ No newline at end of file +#endif diff --git a/Generators/EvgenProdTools/EvgenProdTools/EvgenOTFTopUpSvc.h b/Generators/EvgenProdTools/EvgenProdTools/EvgenOTFTopUpSvc.h index 7c8ead95431..9bdb35f19b7 100644 --- a/Generators/EvgenProdTools/EvgenProdTools/EvgenOTFTopUpSvc.h +++ b/Generators/EvgenProdTools/EvgenProdTools/EvgenOTFTopUpSvc.h @@ -8,7 +8,7 @@ #define EVGENPRODTOOLS_EVGENOTFTOPUPSVC_H #include "AthenaBaseComps/AthService.h" -#include "GenInterfaces/IEvgenOTFTopUpSvc.h" +#include "EvgenProdTools/IEvgenOTFTopUpSvc.h" #include <string> /// @brief Service to hold some information for topping up @@ -62,4 +62,4 @@ private: #endif -#endif \ No newline at end of file +#endif diff --git a/Generators/EvgenProdTools/EvgenProdTools/IEvgenOTFTopUpSvc.h b/Generators/EvgenProdTools/EvgenProdTools/IEvgenOTFTopUpSvc.h new file mode 100644 index 00000000000..3ba04f6ef1e --- /dev/null +++ b/Generators/EvgenProdTools/EvgenProdTools/IEvgenOTFTopUpSvc.h @@ -0,0 +1,41 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef EVGENPRODTOOLS_IEVGENOTFTOPUPSVC_H +#define EVGENPRODTOOLS_IEVGENOTFTOPUPSVC_H + +#include "GaudiKernel/IInterface.h" +#include <string> + +/// @brief IService to hold some information for topping up +/// algorithms that are running on the fly. It's a bit tricky, +/// but this is mostly just a service for holding some numbers... +/// + +static const InterfaceID IID_IEvgenOTFTopUpSvc("IEvgenOTFTopUpSvc", 1 , 0); + +class IEvgenOTFTopUpSvc : virtual public IInterface { +public: + + // Getters + virtual long getNPerFile() const = 0; + virtual long getNUsedSoFar() const = 0; + virtual double getEfficiency() const = 0; + virtual bool getNewFileFlag() const = 0; + + // Setters - first for Pythia/Herwig to call when they use up events + virtual void usedEvents() = 0; + virtual void usedEvents( const int ) = 0; + + // New file created by the OTF generator algorithm + virtual void newFile( std::string& ) = 0; + + // New file grabbed by the showering generator + virtual const std::string& getFile() = 0; + + static const InterfaceID& interfaceID() { return IID_IEvgenOTFTopUpSvc; }; + +}; + +#endif diff --git a/Generators/EvgenProdTools/cmt/.svn/dir-prop-base b/Generators/EvgenProdTools/cmt/.svn/dir-prop-base new file mode 100644 index 00000000000..498342c0a5a --- /dev/null +++ b/Generators/EvgenProdTools/cmt/.svn/dir-prop-base @@ -0,0 +1,11 @@ +K 10 +svn:ignore +V 79 +cleanup.*sh +setup.*sh +install.*history +native_version.cmt +version.cmt +Makefile + +END diff --git a/Generators/EvgenProdTools/cmt/.svn/entries b/Generators/EvgenProdTools/cmt/.svn/entries new file mode 100644 index 00000000000..dcb92044b22 --- /dev/null +++ b/Generators/EvgenProdTools/cmt/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +810106 +svn+ssh://svn.cern.ch/reps/atlasoff/Generators/EvgenProdTools/trunk/cmt +svn+ssh://svn.cern.ch/reps/atlasoff + + + +2015-07-20T10:06:37.464503Z +684250 +will +has-props + + + + + + + + + + + + + +4525493e-7705-40b1-a816-d608a930855b + +requirements +file + + + + +2017-09-08T09:59:21.000000Z +682ebe95f10c7475f2f008230a516129 +2015-07-20T10:06:37.464503Z +684250 +will + + + + + + + + + + + + + + + + + + + + + +1019 + diff --git a/Generators/EvgenProdTools/cmt/.svn/text-base/requirements.svn-base b/Generators/EvgenProdTools/cmt/.svn/text-base/requirements.svn-base new file mode 100644 index 00000000000..4970326dc9f --- /dev/null +++ b/Generators/EvgenProdTools/cmt/.svn/text-base/requirements.svn-base @@ -0,0 +1,33 @@ +package EvgenProdTools + +author Andy Buckley <andy.buckley@cern.ch> +author Zach Marshall <zach.marshall@cern.ch> +author Will Buttinger <will@cern.ch> + +use AtlasPolicy AtlasPolicy-* +use AtlasHepMC AtlasHepMC-* External +use AtlasROOT AtlasROOT-* External +use GeneratorModules GeneratorModules-* Generators +use TruthHelper TruthHelper-* Generators/GenAnalysisTools +use AthenaBaseComps AthenaBaseComps-* Control + +private +use AthenaKernel AthenaKernel-* Control +use TruthUtils TruthUtils-* Generators +use GaudiInterface GaudiInterface-* External +use EventInfo EventInfo-* Event + + +end_private + +#use AtlasHepMC AtlasHepMC-* External +#use AthenaBaseComps AthenaBaseComps-* Control +#use StoreGate StoreGate-* Control + +apply_pattern dual_use_library files=" *.cxx " + +apply_pattern declare_joboptions files="*.py" + +apply_pattern declare_runtime extras="*.txt" + +apply_pattern declare_python_modules files="*.py" diff --git a/Generators/EvgenProdTools/cmt/Makefile b/Generators/EvgenProdTools/cmt/Makefile new file mode 100644 index 00000000000..c2c9dbbed79 --- /dev/null +++ b/Generators/EvgenProdTools/cmt/Makefile @@ -0,0 +1,4 @@ +include $(CMTROOT)/src/Makefile.header + +include $(CMTROOT)/src/constituents.make + diff --git a/Generators/EvgenProdTools/cmt/cleanup.csh b/Generators/EvgenProdTools/cmt/cleanup.csh new file mode 100644 index 00000000000..2978ccae95f --- /dev/null +++ b/Generators/EvgenProdTools/cmt/cleanup.csh @@ -0,0 +1,27 @@ +# echo "cleanup EvgenProdTools EvgenProdTools-00-02-30 in /afs/cern.ch/user/e/ewelina/testarea/20.7.X.Y.Z-VAL/Generators" + +if ( $?CMTROOT == 0 ) then + setenv CMTROOT /cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.9/CMT/v1r25p20160527 +endif +source ${CMTROOT}/mgr/setup.csh +set cmtEvgenProdToolstempfile=`${CMTROOT}/${CMTBIN}/cmt.exe -quiet build temporary_name` +if $status != 0 then + set cmtEvgenProdToolstempfile=/tmp/cmt.$$ +endif +${CMTROOT}/${CMTBIN}/cmt.exe cleanup -csh -pack=EvgenProdTools -version=EvgenProdTools-00-02-30 -path=/afs/cern.ch/user/e/ewelina/testarea/20.7.X.Y.Z-VAL/Generators -quiet -without_version_directory $* >${cmtEvgenProdToolstempfile} +if ( $status != 0 ) then + echo "${CMTROOT}/${CMTBIN}/cmt.exe cleanup -csh -pack=EvgenProdTools -version=EvgenProdTools-00-02-30 -path=/afs/cern.ch/user/e/ewelina/testarea/20.7.X.Y.Z-VAL/Generators -quiet -without_version_directory $* >${cmtEvgenProdToolstempfile}" + set cmtcleanupstatus=2 + /bin/rm -f ${cmtEvgenProdToolstempfile} + unset cmtEvgenProdToolstempfile + exit $cmtcleanupstatus +endif +set cmtcleanupstatus=0 +source ${cmtEvgenProdToolstempfile} +if ( $status != 0 ) then + set cmtcleanupstatus=2 +endif +/bin/rm -f ${cmtEvgenProdToolstempfile} +unset cmtEvgenProdToolstempfile +exit $cmtcleanupstatus + diff --git a/Generators/EvgenProdTools/cmt/cleanup.sh b/Generators/EvgenProdTools/cmt/cleanup.sh new file mode 100644 index 00000000000..e2297444256 --- /dev/null +++ b/Generators/EvgenProdTools/cmt/cleanup.sh @@ -0,0 +1,25 @@ +# echo "cleanup EvgenProdTools EvgenProdTools-00-02-30 in /afs/cern.ch/user/e/ewelina/testarea/20.7.X.Y.Z-VAL/Generators" + +if test "${CMTROOT}" = ""; then + CMTROOT=/cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.9/CMT/v1r25p20160527; export CMTROOT +fi +. ${CMTROOT}/mgr/setup.sh +cmtEvgenProdToolstempfile=`${CMTROOT}/${CMTBIN}/cmt.exe -quiet build temporary_name` +if test ! $? = 0 ; then cmtEvgenProdToolstempfile=/tmp/cmt.$$; fi +${CMTROOT}/${CMTBIN}/cmt.exe cleanup -sh -pack=EvgenProdTools -version=EvgenProdTools-00-02-30 -path=/afs/cern.ch/user/e/ewelina/testarea/20.7.X.Y.Z-VAL/Generators -quiet -without_version_directory $* >${cmtEvgenProdToolstempfile} +if test $? != 0 ; then + echo >&2 "${CMTROOT}/${CMTBIN}/cmt.exe cleanup -sh -pack=EvgenProdTools -version=EvgenProdTools-00-02-30 -path=/afs/cern.ch/user/e/ewelina/testarea/20.7.X.Y.Z-VAL/Generators -quiet -without_version_directory $* >${cmtEvgenProdToolstempfile}" + cmtcleanupstatus=2 + /bin/rm -f ${cmtEvgenProdToolstempfile} + unset cmtEvgenProdToolstempfile + return $cmtcleanupstatus +fi +cmtcleanupstatus=0 +. ${cmtEvgenProdToolstempfile} +if test $? != 0 ; then + cmtcleanupstatus=2 +fi +/bin/rm -f ${cmtEvgenProdToolstempfile} +unset cmtEvgenProdToolstempfile +return $cmtcleanupstatus + diff --git a/Generators/EvgenProdTools/cmt/setup.csh b/Generators/EvgenProdTools/cmt/setup.csh new file mode 100644 index 00000000000..7754b069727 --- /dev/null +++ b/Generators/EvgenProdTools/cmt/setup.csh @@ -0,0 +1,27 @@ +# echo "setup EvgenProdTools EvgenProdTools-00-02-30 in /afs/cern.ch/user/e/ewelina/testarea/20.7.X.Y.Z-VAL/Generators" + +if ( $?CMTROOT == 0 ) then + setenv CMTROOT /cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.9/CMT/v1r25p20160527 +endif +source ${CMTROOT}/mgr/setup.csh +set cmtEvgenProdToolstempfile=`${CMTROOT}/${CMTBIN}/cmt.exe -quiet build temporary_name` +if $status != 0 then + set cmtEvgenProdToolstempfile=/tmp/cmt.$$ +endif +${CMTROOT}/${CMTBIN}/cmt.exe setup -csh -pack=EvgenProdTools -version=EvgenProdTools-00-02-30 -path=/afs/cern.ch/user/e/ewelina/testarea/20.7.X.Y.Z-VAL/Generators -quiet -without_version_directory -no_cleanup $* >${cmtEvgenProdToolstempfile} +if ( $status != 0 ) then + echo "${CMTROOT}/${CMTBIN}/cmt.exe setup -csh -pack=EvgenProdTools -version=EvgenProdTools-00-02-30 -path=/afs/cern.ch/user/e/ewelina/testarea/20.7.X.Y.Z-VAL/Generators -quiet -without_version_directory -no_cleanup $* >${cmtEvgenProdToolstempfile}" + set cmtsetupstatus=2 + /bin/rm -f ${cmtEvgenProdToolstempfile} + unset cmtEvgenProdToolstempfile + exit $cmtsetupstatus +endif +set cmtsetupstatus=0 +source ${cmtEvgenProdToolstempfile} +if ( $status != 0 ) then + set cmtsetupstatus=2 +endif +/bin/rm -f ${cmtEvgenProdToolstempfile} +unset cmtEvgenProdToolstempfile +exit $cmtsetupstatus + diff --git a/Generators/EvgenProdTools/cmt/setup.sh b/Generators/EvgenProdTools/cmt/setup.sh new file mode 100644 index 00000000000..6e6bc458f98 --- /dev/null +++ b/Generators/EvgenProdTools/cmt/setup.sh @@ -0,0 +1,25 @@ +# echo "setup EvgenProdTools EvgenProdTools-00-02-30 in /afs/cern.ch/user/e/ewelina/testarea/20.7.X.Y.Z-VAL/Generators" + +if test "${CMTROOT}" = ""; then + CMTROOT=/cvmfs/atlas.cern.ch/repo/sw/software/x86_64-slc6-gcc49-opt/20.7.9/CMT/v1r25p20160527; export CMTROOT +fi +. ${CMTROOT}/mgr/setup.sh +cmtEvgenProdToolstempfile=`${CMTROOT}/${CMTBIN}/cmt.exe -quiet build temporary_name` +if test ! $? = 0 ; then cmtEvgenProdToolstempfile=/tmp/cmt.$$; fi +${CMTROOT}/${CMTBIN}/cmt.exe setup -sh -pack=EvgenProdTools -version=EvgenProdTools-00-02-30 -path=/afs/cern.ch/user/e/ewelina/testarea/20.7.X.Y.Z-VAL/Generators -quiet -without_version_directory -no_cleanup $* >${cmtEvgenProdToolstempfile} +if test $? != 0 ; then + echo >&2 "${CMTROOT}/${CMTBIN}/cmt.exe setup -sh -pack=EvgenProdTools -version=EvgenProdTools-00-02-30 -path=/afs/cern.ch/user/e/ewelina/testarea/20.7.X.Y.Z-VAL/Generators -quiet -without_version_directory -no_cleanup $* >${cmtEvgenProdToolstempfile}" + cmtsetupstatus=2 + /bin/rm -f ${cmtEvgenProdToolstempfile} + unset cmtEvgenProdToolstempfile + return $cmtsetupstatus +fi +cmtsetupstatus=0 +. ${cmtEvgenProdToolstempfile} +if test $? != 0 ; then + cmtsetupstatus=2 +fi +/bin/rm -f ${cmtEvgenProdToolstempfile} +unset cmtEvgenProdToolstempfile +return $cmtsetupstatus + diff --git a/Generators/EvgenProdTools/cmt/version.cmt b/Generators/EvgenProdTools/cmt/version.cmt new file mode 100644 index 00000000000..7e25b0d2151 --- /dev/null +++ b/Generators/EvgenProdTools/cmt/version.cmt @@ -0,0 +1 @@ +EvgenProdTools-00-02-30 diff --git a/Generators/EvgenProdTools/examples/jobOption.Pythia8_FixHepMC.py b/Generators/EvgenProdTools/examples/jobOption.Pythia8_FixHepMC.py index f28b5d15ba0..b5558ed556e 100644 --- a/Generators/EvgenProdTools/examples/jobOption.Pythia8_FixHepMC.py +++ b/Generators/EvgenProdTools/examples/jobOption.Pythia8_FixHepMC.py @@ -1,5 +1,3 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration - ## Example job option script to run an event generator with FixHepMC filtering ## Author: Andy Buckley <andy.buckley@cern.ch> diff --git a/Generators/EvgenProdTools/python/LogicalExpressionFilter.py b/Generators/EvgenProdTools/python/LogicalExpressionFilter.py index 02ca5959fc5..d1d202c44d2 100644 --- a/Generators/EvgenProdTools/python/LogicalExpressionFilter.py +++ b/Generators/EvgenProdTools/python/LogicalExpressionFilter.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration ##============================================================================== ## Name: LogicalExpressionFilter.py @@ -158,7 +158,7 @@ class LogicalExpressionFilter( PyAthena.Alg ): def evalFilter(self, filterName): if not self.algdict[filterName].isExecuted(): - self.algdict[filterName].sysExecute() + self.algdict[filterName].sysExecute( self.getContext() ) self.algdict[filterName].setExecuted(True) decision = self.algdict[filterName].filterPassed() self.msg.verbose(filterName + " decision=" + str(decision)) diff --git a/Generators/EvgenProdTools/src/EvgenOTFTopUpSvc.cxx b/Generators/EvgenProdTools/src/EvgenOTFTopUpSvc.cxx index c16fcda467f..6d742c45fe8 100644 --- a/Generators/EvgenProdTools/src/EvgenOTFTopUpSvc.cxx +++ b/Generators/EvgenProdTools/src/EvgenOTFTopUpSvc.cxx @@ -36,4 +36,4 @@ StatusCode EvgenOTFTopUpSvc::queryInterface(const InterfaceID& riid, void** ppvI return StatusCode::SUCCESS; } -#endif \ No newline at end of file +#endif diff --git a/Generators/EvgenProdTools/src/FixHepMC.cxx b/Generators/EvgenProdTools/src/FixHepMC.cxx index 21a75ecadad..0e0d2a48b3f 100644 --- a/Generators/EvgenProdTools/src/FixHepMC.cxx +++ b/Generators/EvgenProdTools/src/FixHepMC.cxx @@ -159,4 +159,4 @@ bool FixHepMC::isLoop(const HepMC::GenParticle* p) { //@} -#endif \ No newline at end of file +#endif diff --git a/Generators/EvgenProdTools/src/components/EvgenProdTools_entries.cxx b/Generators/EvgenProdTools/src/components/EvgenProdTools_entries.cxx index 826b3db5722..a8c317a2f62 100644 --- a/Generators/EvgenProdTools/src/components/EvgenProdTools_entries.cxx +++ b/Generators/EvgenProdTools/src/components/EvgenProdTools_entries.cxx @@ -1,3 +1,6 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ #include "GaudiKernel/DeclareFactoryEntries.h" #include "EvgenProdTools/CopyEventWeight.h" diff --git a/Generators/EvgenProdTools/src/components/EvgenProdTools_load.cxx b/Generators/EvgenProdTools/src/components/EvgenProdTools_load.cxx index 29408041811..89d04ed1759 100644 --- a/Generators/EvgenProdTools/src/components/EvgenProdTools_load.cxx +++ b/Generators/EvgenProdTools/src/components/EvgenProdTools_load.cxx @@ -1,3 +1,7 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + #include "GaudiKernel/LoadFactoryEntries.h" LOAD_FACTORY_ENTRIES(EvgenProdTools) diff --git a/Generators/Sherpa_i/Sherpa_i/Sherpa_i.h b/Generators/Sherpa_i/Sherpa_i/Sherpa_i.h index 27be67d95ef..d74c55bdf80 100755 --- a/Generators/Sherpa_i/Sherpa_i/Sherpa_i.h +++ b/Generators/Sherpa_i/Sherpa_i/Sherpa_i.h @@ -31,10 +31,26 @@ protected: SHERPA::Sherpa * p_sherpa; - std::string m_path; + /// Sherpa run card snippet (from JO file) + std::string m_runcard; + + /// List of additional Sherpa parameters beyond run card snippet (from JO file) std::vector<std::string> m_params; + + /// List of needed OpenLoops process libraries (from JO file) + std::vector<std::string> m_openloopslibs; + + /// List of any additional needed files, e.g. custom libraries, PDF sets (from JO file) + std::vector<std::string> m_extrafiles; + + /// Number of cores recommended for multi-core integration file + int m_ncores; + + /// Memory required for integration/evgen + double m_memorymb; + double m_xsscale; - std::string m_scalevarref; + bool m_cleanup; }; diff --git a/Generators/Sherpa_i/share/Example/MC15.999999.Sherpa_Example.py b/Generators/Sherpa_i/share/Example/MC15.999999.Sherpa_Example.py index e06d487ac4f..123195a3855 100644 --- a/Generators/Sherpa_i/share/Example/MC15.999999.Sherpa_Example.py +++ b/Generators/Sherpa_i/share/Example/MC15.999999.Sherpa_Example.py @@ -1,10 +1,10 @@ -include("MC15JobOptions/Sherpa_NNPDF30NNLO_Common.py") +include("MC15JobOptions/Sherpa_2.2.2_NNPDF30NNLO_Common.py") evgenConfig.description = "Sherpa 2.2.x example JO, Z+0,1-jet production." -evgenConfig.keywords = [ "Example", "DrellYan" ] +evgenConfig.keywords = [ "2lepton" ] evgenConfig.contact = [ "atlas-generators-sherpa@cern.ch", "frank.siegert@cern.ch"] -sherpaRunCard=""" +genSeq.Sherpa_i.RunCard=""" (processes){ Process 93 93 -> 11 -11 93{1} Order (*,2) @@ -16,3 +16,10 @@ sherpaRunCard=""" Mass 11 -11 40 E_CMS }(selector) """ + +genSeq.Sherpa_i.Parameters = [] +genSeq.Sherpa_i.OpenLoopsLibs = [] +genSeq.Sherpa_i.ExtraFiles = [] +genSeq.Sherpa_i.NCores = 1 + +genSeq.Sherpa_i.CleanupGeneratedFiles = 1 diff --git a/Generators/Sherpa_i/src/Sherpa_i.cxx b/Generators/Sherpa_i/src/Sherpa_i.cxx index bce2251532e..0ed453d9be0 100755 --- a/Generators/Sherpa_i/src/Sherpa_i.cxx +++ b/Generators/Sherpa_i/src/Sherpa_i.cxx @@ -25,10 +25,15 @@ CLHEP::HepRandomEngine* p_rndEngine; Sherpa_i::Sherpa_i(const std::string& name, ISvcLocator* pSvcLocator) : GenModule(name, pSvcLocator), p_sherpa(NULL) { - declareProperty("RunPath", m_path = "."); + declareProperty("RunCard", m_runcard = ""); declareProperty("Parameters", m_params); + declareProperty("OpenLoopsLibs", m_openloopslibs); + declareProperty("ExtraFiles", m_extrafiles); + declareProperty("NCores", m_ncores=1); + declareProperty("MemoryMB", m_memorymb=2500.); + declareProperty("CrossSectionScaleFactor", m_xsscale=1.0); - declareProperty("ScaleVariationReference", m_scalevarref="MUR1_MUF1_PDF261000"); + declareProperty("CleanupGeneratedFiles", m_cleanup=false); } @@ -64,40 +69,24 @@ StatusCode Sherpa_i::genInitialize(){ getParameters(argc, argv); p_sherpa->InitializeTheRun(argc,(char **)argv); delete [] argv; + + p_sherpa->InitializeTheEventHandler(); } catch (ATOOLS::Exception exception) { if (exception.Class()=="Matrix_Element_Handler" && exception.Type()==ATOOLS::ex::normal_exit) { - delete p_sherpa; - - ATH_MSG_INFO("Have to compile Amegic libraries"); - std::string tmp="cd "+m_path+"; ./makelibs && cd -;"; - int stat = system(tmp.c_str()); - if (stat==0) { - ATH_MSG_INFO("Finished compiling Amegic libraries"); - } - else { - ATH_MSG_ERROR("Error while compiling Amegic libraries."); - return StatusCode::FAILURE; - } - - int argc; - char** argv; - getParameters(argc, argv); - p_sherpa = new SHERPA::Sherpa(); - p_sherpa->InitializeTheRun(argc,(char **)argv); - delete [] argv; + ATH_MSG_ERROR("Have to compile Amegic libraries"); + ATH_MSG_ERROR("You probably want to run ./makelibs"); } else { ATH_MSG_ERROR("Unwanted ATOOLS::exception caught."); ATH_MSG_ERROR(exception); - return StatusCode::FAILURE; } + return StatusCode::FAILURE; } catch (std::exception exception) { ATH_MSG_ERROR("std::exception caught."); return StatusCode::FAILURE; } - p_sherpa->InitializeTheEventHandler(); return StatusCode::SUCCESS; } @@ -127,21 +116,6 @@ StatusCode Sherpa_i::fillEvt(HepMC::GenEvent* event) { if (i==0 || i>3) event->weights()[i] /= weight_normalisation; ATH_MSG_DEBUG("Sherpa WEIGHT " << i << " value="<< event->weights()[i]); } - - // workaround according to https://sherpa.hepforge.org/trac/ticket/365 - if (event->weights().has_key(m_scalevarref)) { - double correction_factor = event->weights()[0] / event->weights()[m_scalevarref]; - if (correction_factor != 1.0) { - ATH_MSG_DEBUG("correction_factor = " << correction_factor); - for (size_t i=4; i<event->weights().size(); ++i) { - event->weights()[i] *= correction_factor; - } - } - } - else { - ATH_MSG_DEBUG("No weight with key " << m_scalevarref); - } - } GeVToMeV(event); //unit check @@ -168,6 +142,11 @@ StatusCode Sherpa_i::genFinalize() { p_sherpa->SummarizeRun(); delete p_sherpa; + + if (m_cleanup) { + ATH_MSG_INFO("Deleting left-over files from working directory."); + system("rm -rf Results.db Process MIG_*.db MPI_*.dat libSherpa*.so libProc*.so"); + } return StatusCode::SUCCESS; } @@ -177,11 +156,7 @@ void Sherpa_i::getParameters(int &argc, char** &argv) { std::vector<std::string> params; // set some ATLAS specific default values as a starting point - params.push_back("PATH="+m_path); params.push_back("EXTERNAL_RNG=Atlas_RNG"); - params.push_back("MAX_PROPER_LIFETIME=10.0"); - params.push_back("BEAM_1=2212"); - params.push_back("BEAM_2=2212"); /*** Adopt Atlas Debug Level Scheme @@ -214,6 +189,7 @@ void Sherpa_i::getParameters(int &argc, char** &argv) { strcpy(argv[0], "Sherpa"); ATH_MSG_INFO("Sherpa_i using the following Arguments"); + ATH_MSG_INFO(m_runcard); for(size_t i=0; i<params.size(); i++) { ATH_MSG_INFO(" [ " << params[i] << " ] "); argv[i+1] = new char[params[i].size()+1]; diff --git a/Projects/Athena/externals/Sherpa.cmake b/Projects/Athena/externals/Sherpa.cmake index 284ecfeb045..7c321a184e5 100644 --- a/Projects/Athena/externals/Sherpa.cmake +++ b/Projects/Athena/externals/Sherpa.cmake @@ -2,6 +2,6 @@ # File specifying the location of Sherpa to use. # -set( SHERPA_VERSION 2.2.1 ) +set( SHERPA_VERSION 2.2.4 ) set( SHERPA_ROOT ${LCG_RELEASE_DIR}/MCGenerators/sherpa/${SHERPA_VERSION}/${LCG_PLATFORM} ) -- GitLab