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