From 7f4b6f8dac73be30f49279f3b9af665659f45dbc Mon Sep 17 00:00:00 2001
From: Xiaohu Sun <Xiaohu.Sun@cern.ch>
Date: Tue, 29 Sep 2015 09:40:12 +0200
Subject: [PATCH] DigiReco_via_fct_trf correct path (FullChainTests-00-01-66)

---
 Tools/FullChainTests/TODOLIST                 |   3 +
 Tools/FullChainTests/cmt/requirements         |  18 +
 Tools/FullChainTests/python/TrfBuilder.py     |  93 ++++
 Tools/FullChainTests/python/__init__.py       |   2 +
 Tools/FullChainTests/python/readconfig.py     | 174 +++++++
 .../scripts/BCTTestViaFCT_digi.sh             |   7 +
 .../scripts/BCTTestViaFCT_sim.sh              |   9 +
 Tools/FullChainTests/scripts/fct_digi.py      | 208 ++++++++
 Tools/FullChainTests/scripts/fct_digireco.py  | 188 +++++++
 Tools/FullChainTests/scripts/fct_reco.py      | 146 ++++++
 Tools/FullChainTests/scripts/fct_trf.py       | 101 ++++
 .../test/FullChainTests_TestConfiguration.xml | 477 ++++++++++++++++++
 .../FullChainTests/test/RecoOnly_top_digi.cfg |  11 +
 .../FullChainTests/test/RecoOnly_top_reco.cfg |   9 +
 Tools/FullChainTests/test/digireco.cfg        |  29 ++
 Tools/FullChainTests/test/digireco_MC12.cfg   |  30 ++
 16 files changed, 1505 insertions(+)
 create mode 100644 Tools/FullChainTests/TODOLIST
 create mode 100644 Tools/FullChainTests/cmt/requirements
 create mode 100644 Tools/FullChainTests/python/TrfBuilder.py
 create mode 100644 Tools/FullChainTests/python/__init__.py
 create mode 100644 Tools/FullChainTests/python/readconfig.py
 create mode 100755 Tools/FullChainTests/scripts/BCTTestViaFCT_digi.sh
 create mode 100755 Tools/FullChainTests/scripts/BCTTestViaFCT_sim.sh
 create mode 100755 Tools/FullChainTests/scripts/fct_digi.py
 create mode 100755 Tools/FullChainTests/scripts/fct_digireco.py
 create mode 100755 Tools/FullChainTests/scripts/fct_reco.py
 create mode 100755 Tools/FullChainTests/scripts/fct_trf.py
 create mode 100644 Tools/FullChainTests/test/FullChainTests_TestConfiguration.xml
 create mode 100644 Tools/FullChainTests/test/RecoOnly_top_digi.cfg
 create mode 100644 Tools/FullChainTests/test/RecoOnly_top_reco.cfg
 create mode 100644 Tools/FullChainTests/test/digireco.cfg
 create mode 100644 Tools/FullChainTests/test/digireco_MC12.cfg

diff --git a/Tools/FullChainTests/TODOLIST b/Tools/FullChainTests/TODOLIST
new file mode 100644
index 00000000000..eab430096f8
--- /dev/null
+++ b/Tools/FullChainTests/TODOLIST
@@ -0,0 +1,3 @@
+26-11-2011 Serhat Istin
+
+consider to use GetCommand.py properly 
diff --git a/Tools/FullChainTests/cmt/requirements b/Tools/FullChainTests/cmt/requirements
new file mode 100644
index 00000000000..5a441c257be
--- /dev/null
+++ b/Tools/FullChainTests/cmt/requirements
@@ -0,0 +1,18 @@
+package FullChainTests
+
+author Simon Owen <simon.owen@shef.ac.uk>
+
+use AtlasPolicy       AtlasPolicy-* 
+private
+use TestPolicy        TestPolicy-*
+public
+
+apply_pattern declare_scripts files="../scripts/*.py ../scripts/*.sh"
+apply_pattern declare_python_modules files="../python/*.py"
+macro FullChainTests_TestConfiguration "../test/FullChainTests_TestConfiguration.xml"
+apply_pattern declare_runtime extras="../test/FullChainTests_TestConfiguration.xml ../test/*.cfg"
+#apply_pattern declare_joboptions files="*.py"
+
+private
+apply_pattern validate_xml
+public
\ No newline at end of file
diff --git a/Tools/FullChainTests/python/TrfBuilder.py b/Tools/FullChainTests/python/TrfBuilder.py
new file mode 100644
index 00000000000..ac5a889609f
--- /dev/null
+++ b/Tools/FullChainTests/python/TrfBuilder.py
@@ -0,0 +1,93 @@
+#!/usr/bin/python
+
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# -*- coding: utf-8 -*-
+# A Job Transformation builder class. The class reads a configuration file and builds
+# corresponding job transformation commands .
+# Supported commands are Generate_tf.py','AtlasG4_trf.py','Digi_trf.py','Reco_trf.py'
+
+# Configuration files have sections and each section has several settings.
+# Section names should be 'AtlasG4_trf.py','Digi_trf.py','Reco_trf.py' Not all sections have to be implemented in a cfg file
+
+# To-Do:
+# if a section is absent and the command corresponding to this section is tried to be built an error should be thrown
+# implement a reverse enginnering method to succesfully build commands from AMI's GetCommand.py (remember GetCommand.py returns some wrong chars such as whitespace etc...)
+
+# author : Serhat Istin
+# ....:istin@cern.ch
+
+import ConfigParser
+import string
+import copy
+import os
+
+
+class TrfBuilder:
+
+  # implement a constructor
+
+    def __init__(self, cfgFile):  # construct with a config file
+        self.filename = cfgFile
+        self.trfCommands = ['Generate_tf.py', 'AtlasG4_trf.py',
+                            'Digi_tf.py', 'Reco_tf.py']
+        self.DigiRecoConfig = ConfigParser.ConfigParser()
+        self.commandList = []
+        if not os.path.isfile(cfgFile):  # check if file exists first
+            print 'TrfBuilder: ERROR:: ConfigFile ' + cfgFile \
+                + ' Does Not Exist'
+            os.sys.exit(-1)
+
+        self.DigiRecoConfig.optionxform = str  # set this flag in order to use upper-lower case distinction
+        self.DigiRecoConfig.read(cfgFile)  # parse the configuration file
+
+  # implement a function which reads the corresponding settings block from tyhe cfg file and returns the command
+
+    def buildCommand(self, sectionName):
+        pfx = copy.copy(sectionName)  # copy it not to alter sectionName as python uses ref variables
+        pfx += ' '
+        sectionCounter = 0
+        if sectionName in self.trfCommands:
+            for section in self.DigiRecoConfig.sections():  # loop over all sections in the file
+                if section == sectionName:  # take only our section for sectionName into account
+                    sectionCounter = sectionCounter + 1
+                    for option in self.DigiRecoConfig.options(section):  # loop over all settings in specified our section
+                        #pfx += option + '=' \
+                        pfx += ' --' + option + '=' \
+                            + self.DigiRecoConfig.get(section, option) \
+                            + ' '
+            if sectionCounter == 0:
+                print 'TrfBuilder: ERROR:: File Error .No such section: ' \
+                    + sectionName + ' in the file: ' + self.filename
+                os.sys.exit(-1)
+        else:
+
+         # throw an error if something non-sense is supplied by the user
+
+            print 'TrfBuilder: ERROR:: Invalid Command Type: ' \
+                + sectionName
+            os.sys.exit(-1)
+        self.commandList.append(pfx)
+        return pfx
+
+  # implement a method to dump all sections to the screen
+
+    def printSections(self):
+        for section in self.DigiRecoConfig.sections():
+            print section
+
+  # implement a method to write the command into a file
+
+    def write(self, sectionName, filename):
+        command = self.buildCommand(sectionName)
+        file = open(filename, 'w')
+        file.write(command)
+
+    def buildAll(self):
+        for sectionName in self.DigiRecoConfig.sections():
+            self.buildCommand(sectionName)
+
+    def writeAll(self, filename):
+        file = open(filename, 'w')
+        self.filename.write(comandList)
+
+
diff --git a/Tools/FullChainTests/python/__init__.py b/Tools/FullChainTests/python/__init__.py
new file mode 100644
index 00000000000..74583d364ec
--- /dev/null
+++ b/Tools/FullChainTests/python/__init__.py
@@ -0,0 +1,2 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
diff --git a/Tools/FullChainTests/python/readconfig.py b/Tools/FullChainTests/python/readconfig.py
new file mode 100644
index 00000000000..f8e40d63625
--- /dev/null
+++ b/Tools/FullChainTests/python/readconfig.py
@@ -0,0 +1,174 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+class readconfig:
+    def __init__(self,confile):
+        com=open(confile).readlines()
+        for i in range(0,com.count('\n')):
+            com.remove('\n')
+        self.myDict={}
+        self.off1=123456
+        self.off2=2345678
+        for ll in com:
+            # split at the first "="
+            nn=ll.find("=")
+            if nn != -1:
+                lft=ll[0:nn].lstrip(' ')
+                rgt=ll[nn+1:len(ll)].rstrip('<BR>\n')
+                # Now do the crazy modifications
+                for i in range(0,len(lft.split(";"))):
+                    lft1=lft.split(";")[i]
+                    rgt1=rgt.split(";")[i]
+                    self.myDict[lft1]=self.pavelConvert(rgt1)
+        print self.myDict   
+    def pavelConvert(self,cmd):
+        cmd=cmd.replace(" ",",")
+        cmd=cmd.replace("%3B",";")        
+        return cmd
+
+    def setDigitOffset(self,off1=123456,off2=2345678):
+        # To set digitization digits offset, untouched in testing
+        self.off1=off1
+        self.off2=off2
+ 
+    def setEventNumber(self,evnt):
+        self.myDict["events per job"]=evnt
+
+    def listTrfs(self):
+        allowedTrfs=['Reco_trf.py','Digi_trf.py','csc_digi_trf.py']
+        trfs=self.myDict["transfromation"].split(",")
+        goodTrfs=[]
+        for trf in trfs:
+            if trf in allowedTrfs:
+                goodTrfs.append(trf)
+        return goodTrfs
+      
+    def outputFormats(self):
+        return self.myDict["formats"].split(",")
+
+    def DBRelease(self):
+        return "DBRelease-"+self.myDict["DBRelease"]+".tar.gz"
+ 
+    def eventsPerJob(self):   
+        return int(self.myDict["events per job"])
+
+    def readDict(self,tag):
+        if tag in self.myDict.keys():
+            return self.myDict[tag]
+        else:
+            return None
+
+    def digitTrf(self,myInput,myOutput="output.TMP.RDO.pool.root"):
+        if 'Digi_trf.py' not in self.listTrfs():
+            return 'ERROR'
+        myDict=self.myDict
+        # Here we reverse engineer the trf:
+        allSet=[]
+        # input file:
+        allSet.append(" inputHitsFile="+myInput)
+        # output file
+        allSet.append(" outputRDOFile="+myOutput)
+        # number of events
+        allSet.append(" maxEvents="+myDict["events per job"])
+        #Events to skip (set to zero for digi/reco)
+        allSet.append(" skipEvents=0")
+        #Geometry version
+        allSet.append(" geometryVersion="+myDict["geometryVersion"])
+        print 'appended geometry versin in digitTrf'
+        # Digit offset
+        allSet.append(" digiSeedOffset1="+str(self.off1)+" digiSeedOffset2="+str(self.off2))
+        # MB input (assume no pileup for the time being!)
+        if myDict["minbiasHits"] != "NONE":
+            allSet.append(" minbiasHitsFile="+myDict["minbiasHits"])
+
+        # job Config
+#        allSet.append(" JobConfig="+myDict["JobConfig"])
+        # Trigger config (set to None for digitisation)
+        allSet.append(" triggerConfig=DEFAULT")
+        # DB release
+        allSet.append(" DBRelease=DBRelease-"+myDict["DBRelease"]+".tar.gz")
+        # Conditions
+        allSet.append(" conditionsTag="+myDict["conditionsTag"])
+        # Random service
+#        allSet.append(" digiRndmSvc="+myDict["DigiRndmSvc"])
+        # sampling db
+ #       allSet.append(" samplingFractionDbTag="+myDict["SamplingFractionDbTag"])
+        # Calo Digit setting
+#        allSet.append(" AddCaloDigi="+myDict["AddCaloDigi"])
+        # noise setting
+#        allSet.append(" doAllNoise="+myDict["NoiseControl"])
+        # athena options and ignore errors, later please
+        digicmd="Digi_trf.py "
+        for settg in allSet:
+            digicmd += settg
+        return digicmd
+
+    def recoTrf(self,myInput,myOutput="output.TMP",myRN="000000"):
+        if 'Reco_trf.py' not in self.listTrfs():
+            return 'ERROR'
+        myDict=self.myDict
+        # Here we reverse engineer the trf:
+        allSet=[]
+        # Pre include
+#        if myDict["preInclude"] != "NONE":
+#            allSet.append(" preInclude="+myDict["preInclude"])
+        # Pre exec
+#        if myDict["preExec"] != "NONE":
+#            allSet.append(" preExec='"+myDict["preExec"]+"'")
+        # Post include
+#        if myDict["postInclude"] != "NONE":
+#            allSet.append(" postInclude="+myDict["postInclude"])
+        # Post Exec
+#        if myDict["postExec"] != "NONE":
+#            allSet.append(" postExec='"+myDict["postExec"]+"'")    
+        # input file:
+        allSet.append(" inputRDOFile="+myInput)
+        # run number:
+        allSet.append(" RunNumber="+myRN)
+        # OutputESD file
+        if "ESD" in self.outputFormats():
+            allSet.append(" outputESDFile="+myOutput+".ESD.pool.root")
+        # OutputAOD file
+        if "AOD" in self.outputFormats():
+            allSet.append(" outputAODFile="+myOutput+".AOD.pool.root")
+        # Output HIST file
+        if "HIST" in self.outputFormats():
+            allSet.append(" HIST="+myOutput+".HIST.root")
+        # Output NTUP_PIXELCALIB file
+        if "NTUP_PIXELCALIB" in self.outputFormats():
+            allSet.append(" outputPixelCalibNtup="+myOutput+".NTUP_PIXELCALIB.root")
+        # Output NTUP_MUONCALIB file
+        if "NTUP_MUONCALIB" in self.outputFormats():
+            allSet.append(" outputMuonCalibNtup="+myOutput+".NTUP_MUONCALIB.root")
+        # Output TAG_COMM file
+        if "TAG_COMM" in self.outputFormats():
+            allSet.append(" outputTAGComm="+myOutput+".TAG_COMM.pool.root")
+        # Output NTUP_TRIG file
+        if "NTUP_TRIG" in self.outputFormats():
+            allSet.append(" outputNTUP_TRIG="+myOutput+".NTUP_TRIG.root")
+
+        allSet.append(" autoConfiguration='everything'")
+        # number of events
+        allSet.append(" maxEvents="+myDict["events per job"])
+        #Events to skip (set to zero for digi/reco)
+        allSet.append(" skipEvents=0")
+        #Geometry version
+#        allSet.append(" geometryVersion="+myDict["geometryVersion"])
+        #AMI tag
+#        allSet.append(" AMITag="+myDict["AMITag"])
+        # Trigger config
+#        allSet.append(" triggerConfig='"+myDict["triggerConfig"]+"'")
+        # DB release
+#        allSet.append(" DBRelease=DBRelease-"+myDict["DBRelease"]+".tar.gz")
+        # Conditions
+#        allSet.append(" conditionsTag="+myDict["conditionsTag"])
+        #ignore
+#        allSet.append(" --ignoreerrors="+myDict["--ignoreerrors"])
+        # autoconfiguration
+        if "autoConfiguration" in myDict.keys():
+            allSet.append(" autoConfiguration="+myDict["autoConfiguration"])
+
+        recocmd='Reco_trf.py'
+        for settg in allSet:
+            recocmd += settg
+        return recocmd
+
diff --git a/Tools/FullChainTests/scripts/BCTTestViaFCT_digi.sh b/Tools/FullChainTests/scripts/BCTTestViaFCT_digi.sh
new file mode 100755
index 00000000000..baf11854865
--- /dev/null
+++ b/Tools/FullChainTests/scripts/BCTTestViaFCT_digi.sh
@@ -0,0 +1,7 @@
+#avoids ROOT crash
+export ROOTENV_NO_HOME=1
+nightlyType=`echo $GAUDISVCROOT | sed 's/\// \/ /g' | gawk '{ print $(NF-6) }'`
+GetCommand.py AMI=d572 | grep Digi | grep -v INFO | sed 's/LowPtMinbiasHitsFile=mc11_7TeV.108118.Pythia8_minbias_Inelastic_low.merge.HITS.e816_s1299_s1303/LowPtMinbiasHitsFile=root:\/\/eosatlas\/\/eos\/atlas\/atlascerngroupdisk\/proj-sit\/digitization\/RTT\/mc11a\/mc11_7TeV.108118.Pythia8_minbias_Inelastic_low.merge.HITS.e816_s1268_s1269_s1259\/HITS.475989._001423.pool.root.1/g' | sed 's/HighPtMinbiasHitsFile=mc11_7TeV.108119.Pythia8_minbias_Inelastic_high.merge.HITS.e848_s1299_s1303/HighPtMinbiasHitsFile=root:\/\/eosatlas\/\/eos\/atlas\/atlascerngroupdisk\/proj-sit\/digitization\/RTT\/mc11a\/mc11_7TeV.108119.Pythia8_minbias_Inelastic_high.merge.HITS.e848_s1299_s1303\/HITS.500616._001496.pool.root.1/g' | sed "s/inputHitsFile=root:\/\/castoratlas\/\/castor\/cern.ch\/atlas\/atlascerngroupdisk\/proj-sit\/digitization\/RTT\/mc10\/mc10_7TeV.105200.T1_McAtNlo_Jimmy.simul.HITS.e598_s933_tid168076_00\/HITS.168076._008421.pool.root.1/inputHitsFile=\/afs\/cern.ch\/atlas\/project\/RTT\/prod\/Results\/fct\/chainstore\/$nightlyType\/$CMTCONFIG\/AtlasProduction\/Tools\/FullChainTests\/BCTTestViaFCT\/BCTTestViaFCT_Hits.pool.root/g" | sed "s/preExec="\'"from,Digitization.DigitizationFlags,import,digitizationFlags,digitizationFlags.overrideMetadata%2B=\[\"SimLayout\"\]"\'"/preExec="\'"from Digitization.DigitizationFlags import digitizationFlags; digitizationFlags.overrideMetadata=\[\"SimLayout\"\]"\'"/g" | sed 's/LowPtMinBias=39.95132/LowPtMinBias=15/g' | sed 's/outputRDOFile=myRDO.pool.root/outputRDOFile=BCTTestViaFCT_RDO.pool.root/g' >& marksTESTBCT_Digi_Via_FCTScript.sh
+chmod +x marksTESTBCT_Digi_Via_FCTScript.sh
+./marksTESTBCT_Digi_Via_FCTScript.sh
+rm -rf marksTESTBCT_Digi_Via_FCTScript.sh
\ No newline at end of file
diff --git a/Tools/FullChainTests/scripts/BCTTestViaFCT_sim.sh b/Tools/FullChainTests/scripts/BCTTestViaFCT_sim.sh
new file mode 100755
index 00000000000..757975e3cc2
--- /dev/null
+++ b/Tools/FullChainTests/scripts/BCTTestViaFCT_sim.sh
@@ -0,0 +1,9 @@
+#avoids ROOT crash
+export ROOTENV_NO_HOME=1
+#generate command we want
+nightlyType=`echo $GAUDISVCROOT | sed 's/\// \/ /g' | gawk '{ print $(NF-6) }'`
+GetCommand.py AMI=q400 >&  marksTESTBCT_Via_FCTScript.sh
+chmod +x marksTESTBCT_Via_FCTScript.sh
+./marksTESTBCT_Via_FCTScript.sh
+rm -rf marksTESTBCT_Via_FCTScript.sh
+
diff --git a/Tools/FullChainTests/scripts/fct_digi.py b/Tools/FullChainTests/scripts/fct_digi.py
new file mode 100755
index 00000000000..971a8143eae
--- /dev/null
+++ b/Tools/FullChainTests/scripts/fct_digi.py
@@ -0,0 +1,208 @@
+#!/usr/bin/env python
+
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+import sys,datetime,time
+import os, os.path
+import glob,shutil
+import getopt
+
+# Usage String
+usage='Usage: fct_digi.py <-c config_file> [-l (local), use this if want to use local machine] [-o outputFile][-e events] [-f inputhitsfile] '
+
+print 'Starting fct_digi: ',datetime.datetime.now()
+
+if len(sys.argv) < 2:
+    print usage
+    sys.exit(1)
+
+# This section deals with the arguments -c, -e and -l
+##########################################
+try:
+    opts, args = getopt.getopt(sys.argv[1:], "hc:e:o:f:l", ["help","config_file=","events=","output=","inputhitsfile=","local"])
+except getopt.GetoptError, err:
+    print 'Error! Incorrect arguments specified.'
+    print usage
+    sys.exit(2)
+local = None
+myInputEvents = None
+myDir = None
+inputhitsfile = "test"
+
+print "inputhitsfile = " + inputhitsfile
+
+for o, a in opts:
+    if o in ("-h", "--help"):
+        print usage
+        sys.exit()
+    elif o in ("-c", "--config_file"):
+        config_file = a
+    elif o in ("-o", "--output"):
+        myDir = a
+    elif o in ("-e", "--events"):
+        myInputEvents = a
+    elif o in ("-f", "--inputhitsfile"):
+        inputhitsfile = a
+    elif o in ("-l", "--local"):
+        print "localset"
+        local = ""
+    else:
+        assert False, "unhandled option"
+
+
+
+############################################
+
+print "inputhitsfile2 = " + inputhitsfile
+
+# Specify the parent directory.
+
+parentDir='/afs/cern.ch/atlas/offline/external/FullChainTest/rec_input/'
+
+# Print where I am...
+
+workdir=rttdir=os.getcwd()
+print 'The script fct_digi.py is working in the directory '+rttdir
+
+# Get the config file into the rtt directory
+
+configcommand = 'get_files -data '+config_file
+os.system(configcommand)
+
+# Open config file and read config
+
+config_file=open(config_file)
+
+myinputHitsFile=config_file.readline()
+myoutputRDOFile=config_file.readline()
+#myoutputRDOFile=myoutputRDOFile[0:len(myoutputRDOFile)-1]
+mymaxEvents=config_file.readline()
+mymaxEvents=mymaxEvents[0:len(mymaxEvents)-1]
+myskipEvents=config_file.readline()
+myskipEvents=myskipEvents[0:len(myskipEvents)-1]
+mygeometryVersion=config_file.readline()
+mygeometryVersion=mygeometryVersion[0:len(mygeometryVersion)-1]
+mydigiSeedOffset1=config_file.readline()
+mydigiSeedOffset1=mydigiSeedOffset1[0:len(mydigiSeedOffset1)-1]
+mydigiSeedOffset2=config_file.readline()
+mydigiSeedOffset2=mydigiSeedOffset2[0:len(mydigiSeedOffset2)-1]
+myminbiasHitsFile=config_file.readline()
+myminbiasHitsFile=myminbiasHitsFile[0:len(myminbiasHitsFile)-1]
+myjobConfig=config_file.readline()
+myjobConfig=myjobConfig[0:len(myjobConfig)-1]
+mytriggerConfig=config_file.readline()
+mytriggerConfig=mytriggerConfig[0:len(mytriggerConfig)-1]
+myDBRelease=config_file.readline()
+myDBRelease=myDBRelease[0:len(myDBRelease)-1]
+myconditionsTag=config_file.readline()
+myconditionsTag=myconditionsTag[0:len(myconditionsTag)-1]
+
+# Set up maxEvents - either from config or -e input if given 
+if myInputEvents is not None:
+    mymaxEvents='maxEvents='+myInputEvents
+
+# Set up indputFile command if there is no -i specified
+if myDir is None:
+    myoutputRDOFile=myoutputRDOFile[0:len(myoutputRDOFile)-1]
+
+# Set up indputRDOFile command if there is -i specified
+else:
+    myoutputRDOFile='outputRDOFile='+myDir
+    
+    
+if local is not None:
+    print "Fetching HITS files starting",datetime.datetime.now()
+    workdir = os.getcwd()
+    if "WORKDIR" in os.environ: workdir = os.environ["WORKDIR"]
+    print "Working directory is",workdir
+    os.chdir(workdir)
+
+    noFiles=(int(mymaxEvents[10:len(mymaxEvents)])-1) / 10 + 1
+#    noFiles=(int(mymaxEvents[10:len(mymaxEvents)])-1) / 25 + 1
+
+    for i in range(1, noFiles+1):
+        copycmd = ""
+        if len(str(i))==1:
+            copycmd = "cp " + inputhitsfile + "  HITS.094777._00000"+str(i)+".pool.root.1"
+        if len(str(i))==2:
+            copycmd = "cp " + inputhitsfile + "  HITS.094777._0000"+str(i)+".pool.root.1"
+        if len(str(i))==3:
+            copycmd = "cp " + inputhitsfile + "  HITS.094777._000"+str(i)+".pool.root.1"
+        if len(str(i))==4:
+            copycmd = "cp " + inputhitsfile + "  HITS.094777._00"+str(i)+".pool.root.1"
+        os.system(copycmd)
+        print copycmd
+
+    
+#    for i in range(1, noFiles+1):
+#        copycmd = ""
+#        if len(str(i))==1:
+#            copycmd = "cp /afs/cern.ch/atlas/project/RTT/prod/Results/fct/chainstore/dev/i686-slc5-gcc43-opt/AtlasProduction/Tools/FullChainTests/TopChainJob/CSC.005200.T1_McAtNlo_Jimmy.HITS.pool.root  HITS.094777._00000"+str(i)+".pool.root.1"
+#        if len(str(i))==2:
+#            copycmd = "cp /afs/cern.ch/atlas/project/RTT/prod/Results/fct/chainstore/dev/i686-slc5-gcc43-opt/AtlasProduction/Tools/FullChainTests/TopChainJob/CSC.005200.T1_McAtNlo_Jimmy.HITS.pool.root  HITS.094777._0000"+str(i)+".pool.root.1"
+#        if len(str(i))==3:
+#            copycmd = "cp /afs/cern.ch/atlas/project/RTT/prod/Results/fct/chainstore/dev/i686-slc5-gcc43-opt/AtlasProduction/Tools/FullChainTests/TopChainJob/CSC.005200.T1_McAtNlo_Jimmy.HITS.pool.root  HITS.094777._000"+str(i)+".pool.root.1"
+#        if len(str(i))==4:
+#            copycmd = "cp /afs/cern.ch/atlas/project/RTT/prod/Results/fct/chainstore/dev/i686-slc5-gcc43-opt/AtlasProduction/Tools/FullChainTests/TopChainJob/CSC.005200.T1_McAtNlo_Jimmy.HITS.pool.root  HITS.094777._00"+str(i)+".pool.root.1"         
+#        os.system(copycmd)
+#        print copycmd
+
+    print "Fetching HITS files finished",datetime.datetime.now()
+    print
+
+
+# Set up inputFile command if there is no -l specified
+if local is None:
+    myDir=myinputHitsFile.replace('inputHitsFile=','')
+    myDir=myDir[0:len(myDir)-1]
+    myFiles=glob.glob(parentDir+myDir+'/*.root.*')
+    if not myFiles:
+        print 'Error! No files found in specified directory '+parentDir+myDir
+        sys.exit(1)
+    filelist=''
+    for myFile in myFiles:
+        filelist+=myFile+','
+    filelist=filelist[0:len(filelist)-1]
+    myinputHitsFile='inputHitsFile='+filelist
+
+# Set up inputHitsFile command if there is -l specified
+else:
+    myFiles=glob.glob('HITS*.root.*')
+    if not myFiles:
+        print 'Error! No HITS files found in directory' 
+        sys.exit(1)
+    filelist=''
+    for myFile in myFiles:
+        filelist+=myFile+','
+    filelist=filelist[0:len(filelist)-1]
+    myinputHitsFile='inputHitsFile='+filelist
+
+# The command
+mycommand='Digi_trf.py '+myinputHitsFile+' '+myoutputRDOFile+' '+mymaxEvents+' '+myskipEvents+' '+mygeometryVersion+' '+mydigiSeedOffset1+' '+mydigiSeedOffset2+' '+myminbiasHitsFile+' '+myDBRelease+' '+myconditionsTag
+#mycommand='Digi_trf.py '+myinputHitsFile+' '+myoutputRDOFile+' '+mymaxEvents+' '+myskipEvents+' '+mygeometryVersion+' '+mydigiSeedOffset1+' '+mydigiSeedOffset2+' '+myminbiasHitsFile+' '+myjobConfig+' '+mytriggerConfig+' '+myDBRelease+' '+myconditionsTag
+    
+# Execute the command
+print 'The command I am using is: '
+print mycommand
+print
+os.system(mycommand)
+
+if local is not None:
+    # Copy files back to RTT directory... 
+    print
+    print "Copying files back to RTT working directory ",datetime.datetime.now()
+    print "workdir is "+workdir+", rttdir is "+rttdir
+    print
+    for filename in os.listdir(workdir):
+        test = filename.startswith('HITS')
+        if not test:
+            try:
+                shutil.copyfile(workdir+'/'+filename,rttdir+'/'+filename)
+            except:
+                print "Cannot copy file "+filename
+    print "Finished copy ",datetime.datetime.now()
+    print
+
+print 
+print 'Finished fct_digi: ',datetime.datetime.now()
+print
diff --git a/Tools/FullChainTests/scripts/fct_digireco.py b/Tools/FullChainTests/scripts/fct_digireco.py
new file mode 100755
index 00000000000..036cf875fd0
--- /dev/null
+++ b/Tools/FullChainTests/scripts/fct_digireco.py
@@ -0,0 +1,188 @@
+#!/usr/bin/env python
+
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+import sys,datetime,time
+import os, os.path
+import glob,shutil
+import getopt
+
+#setup eos command. eos is an alias so it will not work in os.popen() as a command.
+eos="/afs/cern.ch/project/eos/installation/0.1.0-22d/bin/eos.select"
+
+print "We will use eos command from : "+eos
+
+# Usage String
+usage='Usage: fct_digireco.py <-c config_file> [-i inputdataset] [-o outputfile] [-f firstfile] [-n neventsperfile] [-r runnumber]'
+
+print 'Starting fct_digi: ',datetime.datetime.now()
+
+if len(sys.argv) < 2:
+    print usage
+    sys.exit(1)
+
+# This section deals with the arguments -c, -e, -o, -f, -n, -r
+##########################################
+try:
+    opts, args = getopt.getopt(sys.argv[1:], "hc:i:o:f:n:r:e:", ["help","config_file=","events=","local"])
+except getopt.GetoptError, err:
+    print 'Error! Incorrect arguments specified.'
+    print usage
+    sys.exit(2)
+
+myInputDataset='105200/valid1.105200.T1_McAtNlo_Jimmy.simul.HITS.e380_s610_tid094777'
+myOutputFile = 'TopRecoLong'
+myFirstFile=1
+myEventsPerFile=2000
+config_file=None
+event_number=None
+
+for o, a in opts:
+    if o in ("-h", "--help"):
+        print usage
+        sys.exit()
+    elif o in ("-c", "--config_file"):
+        config_file = a
+    elif o in ("-i", "--inputdataset"):
+        myInputDataset = a
+    elif o in ("-o", "--output"):
+        myOutputFile = a
+    elif o in ("-f", "--firstfile"):
+        myFirstFile = a
+    elif o in ("-n", "--neventsperfile"):
+        myEventsPerFile = int(a)
+    elif o in ("-r", "--runnumber"):
+        rn = a
+    elif o in ("-e", "--events"):
+        event_number = a
+    else:
+        assert False, "unhandled option"
+
+############################################
+# Open config file and read config
+from FullChainTests.readconfig import readconfig
+a=readconfig(config_file)
+
+# Reset event number
+if event_number != None:
+    a.setEventNumber(event_number)
+
+# Specify the parent directory for input files
+# castorinputdir="/castor/cern.ch/grid/atlas/atlasgroupdisk/proj-sit/fct/rec_input/"+myInputDataset+"/"
+castorinputdir=myInputDataset+"/"
+print 'castorinputdir = ' + castorinputdir
+
+if len(os.popen(eos+" ls "+castorinputdir).readlines()) == 0:
+    print 'Specified dataset does not exist'
+    sys.exit(1)
+
+
+
+print 'DataSet exists'
+# use the day of the week
+fuid=os.popen("echo $AtlasVersion").readline()
+
+
+# Change to workernode directory, but keep track of RTT dir
+workdir=rttdir=os.getcwd()
+print 'The script fct_digireco.py is working in the directory '+rttdir
+if "WORKDIR" in os.environ: workdir = os.environ["WORKDIR"]
+print "Working directory is",workdir
+os.chdir(workdir)
+
+# Specify parent directory for DBRelease and check if the DBRelease is there
+# Also look into the unvalidated caches
+DBpath='/afs/cern.ch/atlas/www/GROUPS/DATABASE/pacman4/DBRelease/'
+DBunvalidpath='/afs/cern.ch/atlas/www/GROUPS/DATABASE/pacman4/DBRelease-unvalidated/'
+print a.DBRelease()
+if a.DBRelease() in os.listdir(DBpath):
+    print "linking DB Release to default cache"
+    os.system('ln -s '+DBpath+a.DBRelease()+' .')
+#elif 'DBRelease-'+a.DBRelease()+'.tar.gz' in os.listdir(DBunvalidpath):
+elif a.DBRelease() in os.listdir(DBunvalidpath):
+    print "linking DB Release to unvalidated cache"
+    os.system('ln -s '+DBunvalidpath+a.DBRelease()+' .')
+else:
+    print 'DBRelease  '+a.DBRelease()+' does not exist!'
+    sys.exit(1)
+
+
+# Get files from castor
+noFiles=(a.eventsPerJob()-1)/myEventsPerFile+1
+myFiles=os.popen(eos+" ls "+castorinputdir).readlines()
+print "Number of files: " + str(noFiles)
+for i in range(int(myFirstFile), int(myFirstFile)+noFiles):
+    copycmd="xrdcp root://eosatlas/"+castorinputdir+myFiles[i-1].rstrip('\n')+" ."
+    print "print copycmd: " + copycmd
+    os.system(copycmd)
+
+print "Fetching input files finished",datetime.datetime.now()
+print
+
+
+myFiles=glob.glob('HITS*.root.*')
+if not myFiles:
+    print 'Error! No HITS files found in directory' 
+    sys.exit(1)
+filelist=''
+myFiles.sort()
+for myFile in myFiles:
+    filelist+=myFile+','
+filelist=filelist[0:len(filelist)-1]
+
+# Handle file outputs
+myRDOFile = myOutputFile+'.RDO.pool.root'
+myESDFile = myOutputFile+'.ESD.pool.root'
+myAODFile = myOutputFile+'.AOD.pool.root'
+myHISTFile = myOutputFile+'HIST.root'
+
+mycommand=a.digitTrf(filelist,myRDOFile)
+print 'The command I am using for digi is: '
+print mycommand
+print
+os.system(mycommand)
+
+mycommand=a.recoTrf(myRDOFile,myOutputFile,rn)   
+print 'The command I am using for reco is: '
+print mycommand
+print
+os.system(mycommand)
+
+
+# Get rid of unwanted files
+
+myDelFiles=['RDO','ESD','HIST','NTUP_PIXELCALIB','NTUP_TRIG']
+for delFile in myDelFiles:
+    print "Removing all files containing ."+delFile+". in their file name"
+    os.system("rm *."+delFile+".*")
+
+# Direct castor archive
+
+myArchiveCastor=['AOD']
+for ff in myArchiveCastor:
+    ff=ff.rstrip('\n')
+    castorbase="/eos/atlas/atlascerngroupdisk/proj-sit/fct/rec_output/"+fuid+"/"+ff
+    print "Copying files of type "+ff+" to castor location "+castorbase
+    for aa in os.popen("ls *"+ff+"*.root").readlines():
+        aa=aa.rstrip('\n')
+        os.system("xrdcp "+aa+" root://eosatlas/"+castorbase)
+        os.system("rm "+aa)
+
+# Copy files back to RTT directory... 
+print
+print "Copying files back to RTT working directory ",datetime.datetime.now()
+print "workdir is "+workdir+", rttdir is "+rttdir
+print
+for filename in os.listdir(workdir):
+    test = filename.startswith('HITS')
+    if not test:
+        try:
+            shutil.copyfile(workdir+'/'+filename,rttdir+'/'+filename)
+        except:
+            print "Cannot copy file "+filename
+print "Finished copy ",datetime.datetime.now()
+print
+
+print 
+print 'Finished fct_digireco: ',datetime.datetime.now()
+print
diff --git a/Tools/FullChainTests/scripts/fct_reco.py b/Tools/FullChainTests/scripts/fct_reco.py
new file mode 100755
index 00000000000..2bb22fde54b
--- /dev/null
+++ b/Tools/FullChainTests/scripts/fct_reco.py
@@ -0,0 +1,146 @@
+#!/usr/bin/env python
+
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+import sys,datetime,time
+import os, os.path
+import glob,shutil
+import getopt
+
+# Usage String
+usage='Usage: fct_reco.py <-c config_file> [-l (local), use this if want to use local machine] [-i inputFileName] [-o outputFileName] [-e nEvents]'
+
+if len(sys.argv) < 2:
+    print usage
+    sys.exit(1)
+
+# This section deals with the arguments -c, -l, -i and -e
+##########################################
+try:
+    opts, args = getopt.getopt(sys.argv[1:], "hc:e:i:o:l", ["help","config_file=","events=","input=","output=","local"])
+except getopt.GetoptError, err:
+    print 'Error! Incorrect arguments specified.'
+    print usage
+    sys.exit(2)
+myDir = None
+myDirOut = None
+myInputEvents = None
+local = None
+for o, a in opts:
+    if o in ("-h", "--help"):
+        print usage
+        sys.exit()
+    elif o in ("-c", "--config_file"):
+        config_file = a
+    elif o in ("-l", "--local"):
+        local = ""
+    elif o in ("-i", "--input"):
+        myDir = a
+    elif o in ("-o", "--output"):
+        myDirOut = a
+    elif o in ("-e", "--events"):
+        myInputEvents = a
+    else:
+        assert False, "unhandled option"
+
+############################################
+
+# Specify the parent directory.
+
+parentDir='/afs/cern.ch/atlas/offline/external/FullChainTest/rec_input/'
+
+# Print where I am to check config file opening...
+workdir=rttdir=os.getcwd()
+print 'The script fct_reco.py is working in the directory '+rttdir
+
+# Get the config file into the working directory
+
+configcommand = 'get_files -data '+config_file
+os.system(configcommand)
+
+# Open config file and read config
+
+config_file=open(config_file)
+
+myinputRDOFile=config_file.readline()
+myoutputESDFile=config_file.readline()
+myoutputESDFile=myoutputESDFile[0:len(myoutputESDFile)-1]
+myoutputAODFile=config_file.readline()
+#myoutputAODFile=myoutputAODFile[0:len(myoutputAODFile)-1]
+myntupleFile=config_file.readline()
+myntupleFile=myntupleFile[0:len(myntupleFile)-1]
+mymaxEvents=config_file.readline()
+mymaxEvents=mymaxEvents[0:len(mymaxEvents)-1]
+myskipEvents=config_file.readline()
+myskipEvents=myskipEvents[0:len(myskipEvents)-1]
+mygeometryVersion=config_file.readline()
+mygeometryVersion=mygeometryVersion[0:len(mygeometryVersion)-1]
+mytriggerConfig=config_file.readline()
+mytriggerConfig=mytriggerConfig[0:len(mytriggerConfig)-1]
+myDBRelease=config_file.readline()
+myDBRelease=myDBRelease[0:len(myDBRelease)-1]
+myconditionsTag=config_file.readline()
+myconditionsTag=myconditionsTag[0:len(myconditionsTag)-1]
+
+if local is not None:
+    if "WORKDIR" in os.environ: workdir = os.environ["WORKDIR"]
+    print "Working directory is",workdir
+    os.chdir(workdir)
+
+
+# Set up outputFile command if there is no -o specified
+if myDirOut is None:
+    myoutputAODFile=myoutputAODFile[0:len(myoutputAODFile)-1]
+# Set up outputAODFile command if there is -o specified
+else:
+    myoutputAODFile='outputAODFile='+myDirOut
+
+# Set up indputFile command if there is no -i specified
+if myDir is None:
+    myDir=myinputRDOFile.replace('inputRDOFile=','')
+    myDir=myDir[0:len(myDir)-1]
+    myFiles=glob.glob(parentDir+myDir+'/*.root.*')
+    if not myFiles:
+        print 'Error! No files found in specified directory '+parentDir+myDir
+        sys.exit(1)
+    filelist=''
+    for myFile in myFiles:
+        filelist+=myFile+','
+    filelist=filelist[0:len(filelist)-1]
+    myinputRDOFile='inputRDOFile='+filelist
+
+# Set up indputRDOFile command if there is -i specified
+else:
+    myinputRDOFile='inputRDOFile='+myDir
+
+# Set up maxEvents - either from config or -e input if given 
+if myInputEvents is not None:
+    mymaxEvents='maxEvents='+myInputEvents
+
+# The command
+mycommand='Reco_trf.py '+myinputRDOFile+' '+myoutputESDFile+' '+myoutputAODFile+' '+myntupleFile+' '+mymaxEvents+' '+myskipEvents+' '+mygeometryVersion+' '+mytriggerConfig+' '+myDBRelease+' '+myconditionsTag
+
+# Execute the command
+print 'The command I am using is: '
+print mycommand
+os.system(mycommand)
+
+if local is not None:
+    # Copy files back to RTT directory...
+    print
+    print "Copying files back to RTT working directory ",datetime.datetime.now()
+    print "workdir is "+workdir+", rttdir is "+rttdir
+    print
+    for filename in os.listdir(workdir):
+        test = filename.startswith('HITS')
+        if not test:
+            try:
+                shutil.copyfile(workdir+'/'+filename,rttdir+'/'+filename)
+            except:
+                print "Cannot copy file "+filename
+    print "Finished copy ",datetime.datetime.now()
+    print
+
+print
+print 'Finished fct_reco: ',datetime.datetime.now()
+print 
diff --git a/Tools/FullChainTests/scripts/fct_trf.py b/Tools/FullChainTests/scripts/fct_trf.py
new file mode 100755
index 00000000000..f2b622bf72f
--- /dev/null
+++ b/Tools/FullChainTests/scripts/fct_trf.py
@@ -0,0 +1,101 @@
+#!/usr/bin/env python
+
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+
+# A command line utility to executr job transformations from a configuration file 
+
+
+#author : Serhat Istin
+#mail	: istin@cern.ch
+
+
+#This code builds a set of job transformation(s) from a configuration file and executes it. Supported trf's are : 'generate_tf.py','AtlasG4_trf.py','Digi_trf.py','Reco_trf.py' 
+#For an example configuration see : example.cfg
+
+#There are several command line arguments. However only 2 of them are mandatory. (--config and trf type(s) --runDigi --runReco etc ... are mandatories )
+
+# Trfs in a cfg file can be run individually or all of them can be run consecutively. This is a nice feature to implement a custom chain in a single cfg file
+
+#IMPORTANT : Please note that no matter in what order trf-type sections in the cfg file are , they will be executed in the order evgen->simu->digi->reco if more than one type of trf s are supplied from commandline
+
+
+from FullChainTests.TrfBuilder import TrfBuilder
+
+
+#from TrfBuilder import TrfBuilder
+
+import optparse
+import os
+import subprocess
+
+myoptparser = optparse.OptionParser()
+
+myoptparser.add_option('-c', '--config',help="trf configuration file (Mandatory)",dest="c",metavar='FILE')
+myoptparser.add_option('-e','--runEvgen',help='Run event generation ',dest='e',metavar='flag',action='store_true')
+myoptparser.add_option('-s','--runSimu',help='Run G4 simulation ',dest='s',metavar='flag',action='store_true')
+myoptparser.add_option('-d','--runDigi',help='Run digitisation ',dest='d',metavar='flag',action='store_true')
+myoptparser.add_option('-r','--runReco',help='Run reconstruction',dest='r',metavar='flag',action='store_true')
+myoptparser.add_option('-w','--writeCommand',help='write trf command(s) in a file',dest='w',metavar='FILE')
+
+#parse the command line
+(options, args) = myoptparser.parse_args()
+
+
+#if no input config file is supplied print help and exit
+if options.c is None:
+  print "fct_trf: Command line Error .... No config File is supplied"
+  myoptparser.print_help()
+  os.sys.exit(-1)
+
+command=''#trf command to execute
+
+#get cfg file from commandline
+cfgfile=options.c
+
+#parse the file
+myconfig=TrfBuilder(cfgfile)
+
+#handle command line arguments here 
+if options.e:
+  print 'fct_trf: INFO:: Will run evgen...'
+  command=myconfig.buildCommand("generate_tf.py")
+if options.s:
+  print 'fct_trf: INFO:: Will run simu...'
+  command=myconfig.buildCommand("AtlasG4_trf.py")
+if options.d:
+  print 'fct_trf: INFO:: Will run digi...'
+  command=myconfig.buildCommand("Digi_tf.py")
+if options.r:
+  print 'fct_trf: INFO:: Will run reco...'
+  command=myconfig.buildCommand("Reco_tf.py")
+  
+if not (options.s or options.e or options.r or options.d):
+  print "fct_trf: INFO:: Command Line Error... No trf type is supplied"
+  myoptparser.print_help()
+  os.sys.exit(-1)
+
+if options.w:
+  print 'fct_trf: INFO:: Trf Command will be writen to file: '+options.w
+  ofile=open(options.w,'w')
+  for i in range(0,len(myconfig.commandList)):
+    ofile.write(myconfig.commandList[i]+'\n')
+  ofile.close()
+
+#execute all commands in commandList. Take care of process exit codes
+
+summarycode=0
+for command in myconfig.commandList:
+  print 'fct_trf: INFO:: Executing Command:'+command
+  statcode=subprocess.call(command,shell=True)
+  summarycode=summarycode+statcode
+  if statcode!=0:
+    print "fct_trf: ERROR : command failed."
+  print 'fct_trf: INFO:: Finished executing command:'+command
+
+if summarycode!=0:
+  print "fct_trf :SUMMARY: fct_trf failed: Exiting with status code: "+str(summarycode)
+  os.sys.exit(summarycode)
+else:
+  print "fct_trf :SUMMARY: All went OK. Exiting with status code: "+str(statcode)
+  os.sys.exit(summarycode)
diff --git a/Tools/FullChainTests/test/FullChainTests_TestConfiguration.xml b/Tools/FullChainTests/test/FullChainTests_TestConfiguration.xml
new file mode 100644
index 00000000000..16bd12a898d
--- /dev/null
+++ b/Tools/FullChainTests/test/FullChainTests_TestConfiguration.xml
@@ -0,0 +1,477 @@
+<?xml version="1.0"?>
+<!-- MB: Search for RUNNUMBER to replace the run input collections and setting -->
+<!-- MB: xml file validation: http://www.hep.ucl.ac.uk/atlas/AtlasTesting/DTD/onlineValidation/validator.html -->
+<!-- <!DOCTYPE unifiedTestConfiguration SYSTEM "https://test-rtt.web.cern.ch/test-rtt/brinick/Results/unifiedTestConfiguration.dtd"> --> <!-- xmltest
+                                                                                                                                           -->
+<!DOCTYPE unifiedTestConfiguration SYSTEM "http://www.hep.ucl.ac.uk/atlas/AtlasTesting/DTD/unifiedTestConfiguration.dtd"> <!-- official -->
+
+<unifiedTestConfiguration>
+  <atn/>
+  <kv/>
+  <rtt xmlns="http://www.hep.ucl.ac.uk/atlas/AtlasTesting/rtt">
+    <rttContactPerson>
+      Serhat Istin
+    </rttContactPerson>
+    <mailto>
+      istin@cern.ch
+    </mailto>
+    <refRelease>
+      18.X.0
+    </refRelease>
+    <jobList>
+
+      <!-- COSMICS CHAIN -->
+      <chain>
+        <chainName>CosmicsChainJob</chainName> <!-- Only letters allowed, no white space or punctuation -->
+        <sequential>
+          <!-- Run Simulation -->
+          <chainElement>
+            <jobTransform userJobId="cosmicsSimul">
+              <doc>simul</doc>
+              <jobTransformJobName>cosmics_sim_trf_s1994_2010</jobTransformJobName>
+              <jobTransformCmd>
+                Sim_tf.py --simulator 'MC12G4' --outputHitsFile 'cosmics.HITS.pool.root' --maxEvents '5000' --DataRunNumber '155697' --physicsList 'FTFP_BERT' --geometryVersion 'ATLAS-R1-2010-02-00-00_VALIDATION' --conditionsTag 'OFLCOND-RUN12-SDR-21' --enableLooperKiller 'True' --CosmicFilterVolume 'Calo' --CosmicPtSlice 'slice3' --beamType 'cosmics' --preInclude 'SimulationJobOptions/preInclude.BeamPipeKill.py' --postInclude 'PyJobTransforms/UseFrontier.py' --postExec 'from IOVDbSvc.CondDB import conddb;conddb.addOverride("/EXT/DCS/MAGNETS/SENSORDATA", "ExtDCSMagnetsSensorData-001");conddb.addOverride("/GLOBAL/BField/Map", "BFieldMap-FullAsym-09");' --ignorePatterns=ToolSvc.ISFG4.+ERROR\s+ISF_to_G4Event.+article.conversion.failed+ISF_Particle+PDG+code+=+1000260560
+              </jobTransformCmd>
+              <group>FCTTransform</group>
+              <queue>long</queue>
+              <batchWallTime>300</batchWallTime>
+            </jobTransform>
+
+            <chainfileout>cosmics.HITS.pool.root</chainfileout>
+          </chainElement>
+
+          <!-- Run Digitisation -->
+          <chainElement>
+            <jobTransform userJobId="cosmicsDigi">
+              <doc>digi</doc>
+              <jobTransformJobName>cosmics_digi_trf</jobTransformJobName>
+              <jobTransformCmd>
+                Digi_tf.py --inputHITSFile 'cosmics.HITS.pool.root' --outputRDOFile 'cosmics.RDO.pool.root' --maxEvents 100 --skipEvents 0 --geometryVersion 'ATLAS-R1-2010-02-00-00' --digiSeedOffset1 1232 --digiSeedOffset2 342 --conditionsTag 'OFLCOND-RUN12-SDR-21' --beamType 'cosmics' --DataRunNumber '155697' --postInclude 'PyJobTransforms/UseFrontier.py'
+              </jobTransformCmd>
+              <group>FCTTransform</group>
+              <chaindataset_info>
+                <jobTransformData/>
+                <chaindatasetName>cosmics.HITS.pool.root</chaindatasetName>
+                <dataset_info>
+                  <jobTransformData/>
+                  <datasetName>/afs/cern.ch/atlas/offline/external/FullChainTest/long/rtt.fallback/MC12/cosmics.HITS.pool.root</datasetName>
+                </dataset_info>
+              </chaindataset_info>
+              <queue>long</queue>
+              <batchWallTime>300</batchWallTime>
+            </jobTransform>
+            <chainfileout>cosmics.RDO.pool.root</chainfileout>
+          </chainElement>
+
+          <!-- Run Reconstruction -->
+		  <!-- retired, cosmics trigger menu is not prod rel [ATR-10605] -->
+
+        </sequential>
+      </chain>
+
+      <!-- LONG RECONSTRUCTION CHAIN with fct_trf.py -->
+      <chain>
+        <chainName>digirecoAFSjob</chainName>
+        <sequential>
+          <!-- Run Digitisation and reconstruction with fct_trf -->
+          <chainElement>
+            <jobTransform userJobId="DigiReco_via_fct_trf">
+              <doc>digireco</doc>
+              <jobTransformJobName>MinBias_digi_Reco_trf</jobTransformJobName>
+              <jobTransformCmd>
+                fct_trf.py --config=$AtlasArea/Tools/FullChainTests/test/digireco_MC12.cfg --runDigi --runReco
+              </jobTransformCmd>
+              <group>FCTTransform</group>
+              <queue>long</queue>
+              <batchWallTime>600</batchWallTime>
+            </jobTransform>
+            <chainfileout>
+              digirecoAfs_mc12a.AOD.pool.root
+            </chainfileout>
+          </chainElement>
+        </sequential>
+      </chain>
+
+      <!-- Pile up CHAIN -->
+      <chain>
+        <chainName>ChainJobwthPileUp</chainName>
+        <!-- Only letters allowed, no white space or punctuation in Name -->
+        <sequential>
+          <parallel>
+            <sequential>
+              <!-- Run Event Generation -->
+              <chainElement>
+                <!-- <jobTransform> -->
+                <jobTransform userJobId="ZtautauEvgen">
+                  <doc>evgen</doc>
+                  <jobTransformJobName>Ztautau_evgen_trf</jobTransformJobName>
+                  <jobTransformCmd>
+                    export JODIR=/cvmfs/atlas.cern.ch/repo/sw/Generators/MC14JobOptions/latest;export JOBOPTSEARCHPATH=$JODIR/share/tests:$JOBOPTSEARCHPATH;Generate_tf.py --ecmEnergy=8000. --runNumber=147818 --firstEvent=1 --maxEvents=5000 --randomSeed=54298752 --jobConfig=MC14.147818.Pythia8_AU2CTEQ6L1_Ztautau.py --outputEVNTFile=MC14.147818.Pythia8_AU2CTEQ6L1_Ztautau.8TeV.EVNT.pool.root --postExec='TestHepMC.EffFailThreshold=0.50'
+                  </jobTransformCmd>
+                  <group>FCTTransform</group>
+                  <queue>short</queue>
+                  <batchWallTime>300</batchWallTime>
+                  <keepFilePattern>log.*</keepFilePattern>
+                </jobTransform>
+                <chainfileout>
+                  MC14.147818.Pythia8_AU2CTEQ6L1_Ztautau.8TeV.EVNT.pool.root
+                </chainfileout>
+              </chainElement>
+              <!-- Run Simulation -->
+              <chainElement>
+                <jobTransform userJobId="ZtautauSimul">
+                  <doc>simul</doc>
+                  <jobTransformJobName>ZtautauSimul_Sim_tf_2015_s1967</jobTransformJobName>
+                  <jobTransformCmd>
+                    Sim_tf.py --simulator 'MC12G4' --inputEVNTFile 'MC14.147818.Pythia8_AU2CTEQ6L1_Ztautau.8TeV.EVNT.pool.root' --outputHitsFile 'MC14.147818.Pythia8_AU2CTEQ6L1_Ztautau.8TeV.HITS.pool.root' --maxEvents 10 --skipEvents 0 --geometryVersion 'ATLAS-R2-2015-01-01-00_VALIDATION' --conditionsTag 'OFLCOND-RUN12-SDR-21' --DataRunNumber '222222' --physicsList 'FTFP_BERT' --randomSeed 54298752 --enableLooperKiller 'True' --preInclude 'EVNTtoHITS:SimulationJobOptions/preInclude.BeamPipeKill.py' --postInclude 'PyJobTransforms/UseFrontier.py' --ignorePatterns 'ToolSvc.ISFG4.+ERROR\s+ISF_to_G4Event.+article.conversion.failed'
+                  </jobTransformCmd>
+                  <group>FCTTransform</group>
+                  <chaindataset_info>
+                    <jobTransformData />
+                    <chaindatasetName>
+                      MC14.147818.Pythia8_AU2CTEQ6L1_Ztautau.8TeV.EVNT.pool.root
+                    </chaindatasetName>
+                    <dataset_info>
+                      <jobTransformData />
+                      <datasetName>
+                        /afs/cern.ch/atlas/offline/external/FullChainTest/long/rtt.fallback/MC12/MC12.147818.Pythia8_AU2CTEQ6L1_Ztautau.8TeV.EVNT.pool.root
+                      </datasetName>
+                    </dataset_info>
+                  </chaindataset_info>
+                  <queue>long</queue>
+                  <batchWallTime>
+                    300
+                  </batchWallTime>
+                </jobTransform>
+                <chainfileout>
+                  MC14.147818.Pythia8_AU2CTEQ6L1_Ztautau.8TeV.HITS.pool.root
+                </chainfileout>
+              </chainElement>
+              <!-- Run Digitisation -->
+              <chainElement>
+                <jobTransform userJobId="ZtautauDigi">
+                  <doc>digi</doc>
+                  <jobTransformJobName>ZtautauDigi_trf</jobTransformJobName>
+                  <jobTransformCmd>
+                    Digi_tf.py --inputHITSFile 'MC14.147818.Pythia8_AU2CTEQ6L1_Ztautau.8TeV.HITS.pool.root' --outputRDOFile 'MC14.147818.Pythia8_AU2CTEQ6L1_Ztautau.8TeV.RDO.pool.root' --maxEvents 10 --skipEvents 0 --geometryVersion 'ATLAS-R2-2015-01-01-00' --digiSeedOffset1 123456 --digiSeedOffset2 2345678 --conditionsTag 'OFLCOND-RUN12-SDR-21' --postInclude 'PyJobTransforms/UseFrontier.py'
+                  </jobTransformCmd>
+                  <group>FCTTransform</group>
+                  <chaindataset_info>
+                    <jobTransformData />
+                    <chaindatasetName>
+                      MC14.147818.Pythia8_AU2CTEQ6L1_Ztautau.8TeV.HITS.pool.root
+                    </chaindatasetName>
+                    <dataset_info>
+                      <jobTransformData />
+                      <datasetName>
+                        /afs/cern.ch/atlas/offline/external/FullChainTest/long/rtt.fallback/MC12/MC12.147818.Pythia8_AU2CTEQ6L1_Ztautau.8TeV.HITS.pool.root
+                      </datasetName>
+                    </dataset_info>
+                  </chaindataset_info>
+                  <queue>long</queue>
+                  <batchWallTime>300</batchWallTime>
+                </jobTransform>
+                <chainfileout>
+                  MC14.147818.Pythia8_AU2CTEQ6L1_Ztautau.8TeV.RDO.pool.root
+                </chainfileout>
+              </chainElement>
+              <!-- Run ALL Reconstruction -->
+              <chainElement>
+                <jobTransform userJobId="ZtautauReco">
+                  <doc>
+                    reco
+                  </doc>
+                  <jobTransformJobName>Ztautau_Reco_trf</jobTransformJobName>
+                  <jobTransformCmd>
+                    Reco_tf.py --inputRDOFile 'MC14.147818.Pythia8_AU2CTEQ6L1_Ztautau.8TeV.RDO.pool.root' --outputESDFile 'MC14.147818.Pythia8_AU2CTEQ6L1_Ztautau.8TeV.ESD.pool.root' --outputAODFile 'MC14.147818.Pythia8_AU2CTEQ6L1_Ztautau.8TeV.AOD.pool.root' --maxEvents 10 --skipEvents 0 --autoConfiguration 'everything'
+                  </jobTransformCmd>
+                  <group>FCTTransform</group>
+                  <chaindataset_info>
+                    <jobTransformData />
+                    <chaindatasetName>
+                      MC14.147818.Pythia8_AU2CTEQ6L1_Ztautau.8TeV.RDO.pool.root
+                    </chaindatasetName>
+                    <dataset_info>
+                      <jobTransformData />
+                      <datasetName>
+                        /afs/cern.ch/atlas/offline/external/FullChainTest/long/rtt.fallback/MC12/MC12.147818.Pythia8_AU2CTEQ6L1_Ztautau.8TeV.RDO.pool.root
+                      </datasetName>
+                    </dataset_info>
+                  </chaindataset_info>
+                  <queue>long</queue>
+                  <batchWallTime>300</batchWallTime>
+                </jobTransform>
+                <chainfileout>
+                  MC14.147818.Pythia8_AU2CTEQ6L1_Ztautau.8TeV.AOD.pool.root
+                </chainfileout>
+              </chainElement>
+            </sequential>
+            <!-- Stuff needed for pile-up -->
+            <sequential>
+              <!-- Run Event Generation -->
+              <chainElement>
+                <jobTransform userJobId="8TeVMinBiasEvgen">
+                  <doc>
+                    evgen
+                  </doc>
+                  <jobTransformJobName>8TeVMinBiasEvgen_trf</jobTransformJobName>
+                  <jobTransformCmd>
+                    export JODIR=/cvmfs/atlas.cern.ch/repo/sw/Generators/MC14JobOptions/latest;export JOBOPTSEARCHPATH=$JODIR/share/tests:$JOBOPTSEARCHPATH;Generate_tf.py --ecmEnergy=8000. --runNumber=108351 --firstEvent=1 --maxEvents=5000 --randomSeed=54298752 --jobConfig=MC14.108351.Pythia8_A2CTEQ6L1_minbias_inelastic.py --outputEVNTFile=MC14.108351.pythia_minbias.8TeV.EVNT.pool.root
+                  </jobTransformCmd>
+                  <group>FCTTransform</group>
+                  <queue>short</queue>
+                  <batchWallTime>300</batchWallTime>
+                  <keepFilePattern>log.*</keepFilePattern>
+                </jobTransform>
+                <chainfileout>
+                  MC14.108351.pythia_minbias.8TeV.EVNT.pool.root
+                </chainfileout>
+              </chainElement>
+              <!-- Run Simulation -->
+              <chainElement>
+                <jobTransform userJobId="8TevMinbiasSimul">
+                  <doc>simul</doc>
+                  <jobTransformJobName>8TevMinbiasSimul_Sim_tf_2015_s1967</jobTransformJobName>
+                  <jobTransformCmd>
+                    Sim_tf.py --simulator 'MC12G4' --inputEVNTFile 'MC14.108351.pythia_minbias.8TeV.EVNT.pool.root' --outputHitsFile 'MC14.108351.pythia_minbias.8TeV.HITS.pool.root' --maxEvents 10 --skipEvents 0 --geometryVersion 'ATLAS-R2-2015-01-01-00_VALIDATION' --conditionsTag 'OFLCOND-RUN12-SDR-21' --DataRunNumber '222222' --physicsList 'FTFP_BERT' --enableLooperKiller 'True' --randomSeed 54298752 --preInclude 'EVNTtoHITS:SimulationJobOptions/preInclude.BeamPipeKill.py' --postInclude 'PyJobTransforms/UseFrontier.py' --ignorePatterns='ToolSvc.ISFG4.+ERROR\s+ISF_to_G4Event.+article.conversion.failed'
+                  </jobTransformCmd>
+                  <group>FCTTransform</group>
+                  <chaindataset_info>
+                    <jobTransformData />
+                    <chaindatasetName>
+                      MC14.108351.pythia_minbias.8TeV.EVNT.pool.root
+                    </chaindatasetName>
+                    <dataset_info>
+                      <jobTransformData />
+                      <datasetName>
+                        /afs/cern.ch/atlas/offline/external/FullChainTest/long/rtt.fallback/MC12/MC12.108351.pythia_minbias.8TeV.EVNT.pool.root
+                      </datasetName>
+                    </dataset_info>
+                  </chaindataset_info>
+                  <queue>long</queue>
+                  <batchWallTime>300</batchWallTime>
+                </jobTransform>
+                <chainfileout>
+                  MC14.108351.pythia_minbias.8TeV.HITS.pool.root
+                </chainfileout>
+              </chainElement>
+              <!-- Run Digi -->
+              <chainElement>
+                <jobTransform userJobId="8TeVMinbiasDigi">
+                  <doc>reco</doc>
+                  <jobTransformJobName>8TeVMinbiasDigi_trf</jobTransformJobName>
+                  <jobTransformCmd>
+                    Digi_tf.py --inputHITSFile 'MC14.108351.pythia_minbias.8TeV.HITS.pool.root' --outputRDOFile 'MC14.108351.pythia_minbias.8TeV.RDO.pool.root' --maxEvents '10' --skipEvents '0' --geometryVersion 'ATLAS-R2-2015-01-01-00' --conditionsTag=OFLCOND-RUN12-SDR-21 --digiSeedOffset1 123456 --digiSeedOffset2 2345678 --postInclude 'PyJobTransforms/UseFrontier.py'
+                  </jobTransformCmd>
+                  <group>FCTTransform</group>
+                  <chaindataset_info>
+                    <jobTransformData />
+                    <chaindatasetName>
+                      MC14.108351.pythia_minbias.8TeV.HITS.pool.root
+                    </chaindatasetName>
+                    <dataset_info>
+                      <jobTransformData />
+                      <datasetName>
+                        /afs/cern.ch/atlas/offline/external/FullChainTest/long/rtt.fallback/MC12/MC12.108351.pythia_minbias.8TeV.HITS.pool.root
+                      </datasetName>
+                    </dataset_info>
+                  </chaindataset_info>
+                  <queue>long</queue>
+                  <batchWallTime>300</batchWallTime>
+                </jobTransform>
+                <chainfileout>
+                  MC14.108351.pythia_minbias.8TeV.RDO.pool.root
+                </chainfileout>
+              </chainElement>
+              <!-- Run Reco -->
+              <chainElement>
+                <jobTransform userJobId="8TeVMinBiasReco">
+                  <doc>reco</doc>
+                  <jobTransformJobName>8TeVMinBiasReco_trf</jobTransformJobName>
+                  <jobTransformCmd>
+                    Reco_tf.py --inputRDOFile 'MC14.108351.pythia_minbias.8TeV.RDO.pool.root' --outputESDFile 'MC14.108351.pythia_minbias.8TeV.ESD.pool.root' --outputAODFile 'MC14.108351.pythia_minbias.8TeV.AOD.pool.root' --maxEvents 10 --skipEvents 0 --autoConfiguration 'everything' --postInclude 'PyJobTransforms/UseFrontier.py'
+                  </jobTransformCmd>
+                  <group>FCTTransform</group>
+                  <chaindataset_info>
+                    <jobTransformData />
+                    <chaindatasetName>
+                      MC14.108351.pythia_minbias.8TeV.RDO.pool.root
+                    </chaindatasetName>
+                    <dataset_info>
+                      <jobTransformData />
+                      <datasetName>
+                        /afs/cern.ch/atlas/offline/external/FullChainTest/long/rtt.fallback/MC12/MC12.108351.pythia_minbias.8TeV.RDO.pool.root
+                      </datasetName>
+                    </dataset_info>
+                  </chaindataset_info>
+                  <queue>long</queue>
+                  <batchWallTime>300</batchWallTime>
+                </jobTransform>
+                <chainfileout>
+                  MC14.108351.pythia_minbias.8TeV.AOD.pool.root
+                </chainfileout>
+              </chainElement>
+              <chainElement>
+                <jobTransform userJobId="minbiasEvt2CavernEvt">
+                  <doc>evgen</doc>
+                  <jobTransformJobName>minbias2Cavern_trf</jobTransformJobName>
+                  <jobTransformCmd>
+                    Sim_tf.py --simulator 'MC12G4' --inputEVNTFile 'MC14.108351.pythia_minbias.8TeV.EVNT.pool.root' --outputHITSFile 'discard.HITS.pool.root' --outputEVNT_CAVERNTRFile 'MC14.cavbg8TeV.EVNT.pool.root' --maxEvents 5 --skipEvents 0 --geometryVersion 'ATLAS-R2-2015-01-01-00_VALIDATION' --conditionsTag 'OFLCOND-RUN12-SDR-21' --DataRunNumber='222222' --physicsList 'FTFP_BERT' --randomSeed 5678 --postInclude 'PyJobTransforms/UseFrontier.py'
+                  </jobTransformCmd>
+                  <group>FCTTransform</group>
+                  <chaindataset_info>
+                    <jobTransformData />
+                    <chaindatasetName>
+                      MC14.108351.pythia_minbias.8TeV.EVNT.pool.root
+                    </chaindatasetName>
+                    <dataset_info>
+                      <jobTransformData />
+                      <datasetName>
+                        /afs/cern.ch/atlas/offline/external/FullChainTest/long/rtt.fallback/MC12/MC12.108351.pythia_minbias.8TeV.EVNT.pool.root
+                      </datasetName>
+                    </dataset_info>
+                  </chaindataset_info>
+                  <queue>long</queue>
+                  <batchWallTime>300</batchWallTime>
+                </jobTransform>
+                <chainfileout>
+                  MC14.cavbg8TeV.EVNT.pool.root
+                </chainfileout>
+              </chainElement>
+              <!-- Run Simulation -->
+              <chainElement>
+                <jobTransform userJobId="cavernSimul">
+                  <doc>simul</doc>
+                  <jobTransformJobName>cavernSimul_Sim_tf_2015_s1967</jobTransformJobName>
+                  <jobTransformCmd>
+                    Sim_tf.py --simulator 'MC12G4' --inputEVNT_CAVERNFile 'MC14.cavbg8TeV.EVNT.pool.root' --outputHITSFile 'MC14.cavbg8TeV.HITS.pool.root' --maxEvents -1 --skipEvents 0 --geometryVersion 'ATLAS-R2-2015-01-01-00_VALIDATION' --conditionsTag 'OFLCOND-RUN12-SDR-21' --DataRunNumber '222222' --physicsList 'FTFP_BERT' --enableLooperKiller 'True' --randomSeed 8765 --preInclude 'EVNTtoHITS:SimulationJobOptions/preInclude.BeamPipeKill.py,SimulationJobOptions/preInclude.G4ReadCavern.py' --postInclude 'PyJobTransforms/UseFrontier.py' --ignorePatterns='ToolSvc.ISFG4.+ERROR\s+ISF_to_G4Event.+article.conversion.failed'
+                  </jobTransformCmd>
+                  <group>FCTTransform</group>
+                  <chaindataset_info>
+                    <jobTransformData />
+                    <chaindatasetName>
+                      MC14.cavbg8TeV.EVNT.pool.root
+                    </chaindatasetName>
+                    <dataset_info>
+                      <jobTransformData />
+                      <datasetName>
+                        /afs/cern.ch/atlas/offline/external/FullChainTest/long/rtt.fallback/MC12/MC12.cavbg8TeV.EVNT.pool.root
+                      </datasetName>
+                    </dataset_info>
+                  </chaindataset_info>
+                  <queue>long</queue>
+                  <batchWallTime>300</batchWallTime>
+                </jobTransform>
+                <chainfileout>
+                  MC14.cavbg8TeV.HITS.pool.root
+                </chainfileout>
+              </chainElement>
+            </sequential>
+            <!-- Beam Gas -->
+            <!-- NoBeamGas is supplied to us for MC12 so skip it -->
+          </parallel>
+          <!-- Pileup part -->
+          <!-- Run Digitisation -->
+          <chainElement>
+            <jobTransform userJobId="pileupDigi">
+              <doc>digi</doc>
+              <jobTransformJobName>pileup_digi_trf</jobTransformJobName>
+              <jobTransformCmd>
+                Digi_tf.py --inputHITSFile MC14.147818.Pythia8_AU2CTEQ6L1_Ztautau.8TeV.HITS.pool.root --outputRDOFile MC14.Pileup.RDO.pool.root --maxEvents 2 --skipEvents 0 --geometryVersion 'ATLAS-R2-2015-01-01-00' --conditionsTag 'OFLCOND-RUN12-SDR-21' --DataRunNumber='222222' --digiSeedOffset1 123456 --digiSeedOffset2 2345678 --LowPtMinbiasHitsFile 'MC14.108351.pythia_minbias.8TeV.HITS.pool.root' --cavernHitsFile 'MC14.cavbg8TeV.HITS.pool.root' --preInclude 'HITtoRDO:SimulationJobOptions/preInclude.Lumi001DigitConfig_450ns.py,Digitization/ForceUseOfPileUpTools.py' --postInclude 'PyJobTransforms/UseFrontier.py'
+              </jobTransformCmd>
+              <group>FCTTransform</group>
+              <chaindataset_info>
+                <jobTransformData />
+                <chaindatasetName>
+                  MC14.147818.Pythia8_AU2CTEQ6L1_Ztautau.8TeV.HITS.pool.root
+                </chaindatasetName>
+                <dataset_info>
+                  <jobTransformData />
+                  <datasetName>
+                    /afs/cern.ch/atlas/offline/external/FullChainTest/long/rtt.fallback/MC12/MC12.147818.Pythia8_AU2CTEQ6L1_Ztautau.8TeV.HITS.pool.root
+                  </datasetName>
+                </dataset_info>
+              </chaindataset_info>
+              <chaindataset_info>
+                <jobTransformData />
+                <chaindatasetName>
+                  MC14.108351.pythia_minbias.8TeV.HITS.pool.root
+                </chaindatasetName>
+                <dataset_info>
+                  <jobTransformData />
+                  <datasetName>
+                    /afs/cern.ch/atlas/offline/external/FullChainTest/long/rtt.fallback/MC12/MC12.108351.pythia_minbias.8TeV.HITS.pool.root
+                  </datasetName>
+                </dataset_info>
+              </chaindataset_info>
+              <chaindataset_info>
+                <jobTransformData />
+                <chaindatasetName>
+                  MC14.cavbg8TeV.HITS.pool.root
+                </chaindatasetName>
+                <dataset_info>
+                  <jobTransformData />
+                  <datasetName>
+                    /afs/cern.ch/atlas/offline/external/FullChainTest/long/rtt.fallback/MC12/MC12.cavbg8TeV.HITS.pool.root
+                  </datasetName>
+                </dataset_info>
+              </chaindataset_info>
+              <queue>long</queue>
+              <batchWallTime>300</batchWallTime>
+            </jobTransform>
+            <chainfileout>
+              MC14.Pileup.RDO.pool.root
+            </chainfileout>
+          </chainElement>
+          <!-- Run Reconstruction -->
+          <chainElement>
+            <jobTransform userJobId="pileupReco">
+              <doc>reco</doc>
+              <jobTransformJobName>pileup_Reco_trf</jobTransformJobName>
+              <jobTransformCmd>
+                Reco_tf.py --inputRDOFile 'MC14.Pileup.RDO.pool.root' --outputESDFile 'MC14.Pileup.ESD.pool.root' --outputAODFile 'MC14.Pileup.AOD.pool.root' --maxEvents 2 --skipEvents 0 --autoConfiguration 'everything' --preExec 'muonCnvFlags.RpcCablingMode="new"'
+              </jobTransformCmd>
+              <group>FCTTransform</group>
+              <chaindataset_info>
+                <jobTransformData />
+                <chaindatasetName>
+                  MC14.Pileup.RDO.pool.root
+                </chaindatasetName>
+                <dataset_info>
+                  <jobTransformData />
+                  <datasetName>
+                    /afs/cern.ch/atlas/offline/external/FullChainTest/long/rtt.fallback/MC12/MC12.Pileup.RDO.pool.root
+                  </datasetName>
+                </dataset_info>
+              </chaindataset_info>
+              <queue>long</queue>
+              <batchWallTime>300</batchWallTime>
+            </jobTransform>
+            <chainfileout>
+              MC14.Pileup.ESD.pool.root
+            </chainfileout>
+            <chainfileout>
+              MC14.Pileup.AOD.pool.root
+            </chainfileout>
+          </chainElement>
+        </sequential>
+      </chain>
+    </jobList>
+    <jobGroups>
+      <jobGroup name="FCTTransform" parent="Transform">
+        <keepFilePattern>
+          *.root
+        </keepFilePattern>
+        <keepFilePattern>
+          *.pdf
+        </keepFilePattern>
+        <keepFilePattern>
+          *.log
+        </keepFilePattern>
+        <keepFilePattern>
+          log.*
+        </keepFilePattern>
+      </jobGroup>
+    </jobGroups>
+  </rtt>
+</unifiedTestConfiguration>
diff --git a/Tools/FullChainTests/test/RecoOnly_top_digi.cfg b/Tools/FullChainTests/test/RecoOnly_top_digi.cfg
new file mode 100644
index 00000000000..29de9f040b3
--- /dev/null
+++ b/Tools/FullChainTests/test/RecoOnly_top_digi.cfg
@@ -0,0 +1,11 @@
+inputHitsFile=5200/valid1.105200.T1_McAtNlo_Jimmy.simul.HITS.e380_s610_tid094777
+outputRDOFile=TopRecoLong.RDO.pool.root
+maxEvents=1000
+skipEvents=0
+geometryVersion=ATLAS-GEO-16-00-00
+digiSeedOffset1=123456
+digiSeedOffset2=2345678
+NDMinbiasHitsFile=NONE
+DBRelease=/afs/cern.ch/atlas/www/GROUPS/DATABASE/pacman4/DBRelease/DBRelease-pcache-current.tar.gz
+conditionsTag=OFLCOND-SDR-BS7T-02
+
diff --git a/Tools/FullChainTests/test/RecoOnly_top_reco.cfg b/Tools/FullChainTests/test/RecoOnly_top_reco.cfg
new file mode 100644
index 00000000000..1d2d2cf83c8
--- /dev/null
+++ b/Tools/FullChainTests/test/RecoOnly_top_reco.cfg
@@ -0,0 +1,9 @@
+inputRDOFile=5200/valid1.105200.T1_McAtNlo_Jimmy.digit.RDO.e380_s577_tid078592
+outputESDFile=TopRecoLong.ESD.pool.root
+outputAODFile=TopRecoLong.AOD.pool.root
+outputCBNTFile=TopRecoLong.ntup.root
+maxEvents=1000
+skipEvents=0
+geometryVersion=ATLAS-GEO-16-00-00
+DBRelease=/afs/cern.ch/atlas/www/GROUPS/DATABASE/pacman4/DBRelease/DBRelease-pcache-current.tar.gz
+conditionsTag=OFLCOND-SDR-BS7T-02
diff --git a/Tools/FullChainTests/test/digireco.cfg b/Tools/FullChainTests/test/digireco.cfg
new file mode 100644
index 00000000000..08c05ab4efb
--- /dev/null
+++ b/Tools/FullChainTests/test/digireco.cfg
@@ -0,0 +1,29 @@
+#Digitisation section
+[Digi_trf.py]
+outputRDOFile=myRDO.pool.root
+digiSeedOffset1=1
+digiSeedOffset2=2
+inputHitsFile=root://eosatlas//eos/atlas/atlascerngroupdisk/proj-sit/digitization/RTT/mc11a/mc11_7TeV.105200.T1_McAtNlo_Jimmy.merge.HITS.e835_s1310_s1300/HITS.508808._000857.pool.root.1
+numberOfHighPtMinBias=0.01217
+numberOfLowPtMinBias=9.98783
+jobNumber=0
+conditionsTag=OFLCOND-SDR-BS7T-05-14
+skipEvents=0
+preInclude=SimulationJobOptions/preInclude.PileUpBunchTrains2011Config6_DigitConfig.py,RunDependentSimData/configLumi_mc11a_v3.py
+postExec=ToolSvc.LArAutoCorrTotalToolDefault.NMinBias=0
+preExec='from Digitization.DigitizationFlags import digitizationFlags;digitizationFlags.overrideMetadata=["SimLayout","PhysicsList"]'
+LowPtMinbiasHitsFile=root://eosatlas//eos/atlas/atlascerngroupdisk/proj-sit/digitization/RTT/mc11a/mc11_7TeV.108118.Pythia8_minbias_Inelastic_low.merge.HITS.e816_s1299_s1303/HITS.500617._000382.pool.root.1,root://eosatlas//eos/atlas/atlascerngroupdisk/proj-sit/digitization/RTT/mc11a/mc11_7TeV.108118.Pythia8_minbias_Inelastic_low.merge.HITS.e816_s1299_s1303/HITS.500617._001308.pool.root.1,root://eosatlas//eos/atlas/atlascerngroupdisk/proj-sit/digitization/RTT/mc11a/mc11_7TeV.108118.Pythia8_minbias_Inelastic_low.merge.HITS.e816_s1299_s1303/HITS.500617._001883.pool.root.1,root://eosatlas//eos/atlas/atlascerngroupdisk/proj-sit/digitization/RTT/mc11a/mc11_7TeV.108118.Pythia8_minbias_Inelastic_low.merge.HITS.e816_s1299_s1303/HITS.500617._001944.pool.root.1
+HighPtMinbiasHitsFile=root://eosatlas//eos/atlas/atlascerngroupdisk/proj-sit/digitization/RTT/mc11a/mc11_7TeV.108119.Pythia8_minbias_Inelastic_high.merge.HITS.e848_s1299_s1303/HITS.500616._001496.pool.root.1,root://eosatlas//eos/atlas/atlascerngroupdisk/proj-sit/digitization/RTT/mc11a/mc11_7TeV.108119.Pythia8_minbias_Inelastic_high.merge.HITS.e848_s1299_s1303/HITS.500616._002374.pool.root.1,root://eosatlas//eos/atlas/atlascerngroupdisk/proj-sit/digitization/RTT/mc11a/mc11_7TeV.108119.Pythia8_minbias_Inelastic_high.merge.HITS.e848_s1299_s1303/HITS.500616._007836.pool.root.1,root://eosatlas//eos/atlas/atlascerngroupdisk/proj-sit/digitization/RTT/mc11a/mc11_7TeV.108119.Pythia8_minbias_Inelastic_high.merge.HITS.e848_s1299_s1303/HITS.500616._009288.pool.root.1
+geometryVersion=ATLAS-GEO-18-01-01
+DataRunNumber=-1
+maxEvents=10
+
+#Reconstruction Section
+[Reco_trf.py]
+outputESDFile=serhat_ESD.pool.root
+autoConfiguration=everything
+triggerConfig=MCRECO:DB:TRIGGERDBMC:295,134,239
+postExec='RegSelSvc=topSequence.allConfigurables.get("RegSelSvcDefault");RegSelSvc.DeltaZ=225*Units.mm'
+outputAODFile=digirecoAfs_mc11a.AOD.pool.root
+preExec='TriggerFlags.AODEDMSet="AODSLIM";rec.Commissioning.set_Value_and_Lock(True);jobproperties.Beam.energy.set_Value_and_Lock(3500*Units.GeV);muonRecFlags.writeSDOs=True;jobproperties.Beam.numberOfCollisions.set_Value_and_Lock(8.0);jobproperties.Beam.bunchSpacing.set_Value_and_Lock(50);AODFlags.TrackParticleSlimmer=True;from InDetTrigRecExample.ConfiguredNewTrackingTrigCuts import L2IDTrackingCuts;L2IDTrackingCuts.setRegSelZmax(225*Units.mm)'
+inputRDOFile=myRDO.pool.root
diff --git a/Tools/FullChainTests/test/digireco_MC12.cfg b/Tools/FullChainTests/test/digireco_MC12.cfg
new file mode 100644
index 00000000000..7bcaaac29be
--- /dev/null
+++ b/Tools/FullChainTests/test/digireco_MC12.cfg
@@ -0,0 +1,30 @@
+#Digitisation section
+[Digi_tf.py]
+outputRDOFile=myRDO.pool.root
+digiSeedOffset1=1
+digiSeedOffset2=2
+inputHitsFile=root://eosatlas//eos/atlas/atlascerngroupdisk/proj-sit/digitization/RTT/mc11a/mc11_7TeV.105200.T1_McAtNlo_Jimmy.merge.HITS.e835_s1310_s1300/HITS.508808._000857.pool.root.1
+numberOfHighPtMinBias=0.01217
+numberOfLowPtMinBias=9.98783
+jobNumber=1
+conditionsTag=OFLCOND-SDR-BS7T-05-14
+skipEvents=0
+preInclude=SimulationJobOptions/preInclude.PileUpBunchTrains2011Config6_DigitConfig.py,RunDependentSimData/configLumi_mc11a_v3.py
+postExec=ToolSvc.LArAutoCorrTotalToolDefault.NMinBias=0
+preExec='from Digitization.DigitizationFlags import digitizationFlags;digitizationFlags.overrideMetadata=["SimLayout","PhysicsList"]'
+LowPtMinbiasHitsFile=root://eosatlas//eos/atlas/atlascerngroupdisk/proj-sit/digitization/RTT/mc11a/mc11_7TeV.108118.Pythia8_minbias_Inelastic_low.merge.HITS.e816_s1299_s1303/HITS.500617._000382.pool.root.1,root://eosatlas//eos/atlas/atlascerngroupdisk/proj-sit/digitization/RTT/mc11a/mc11_7TeV.108118.Pythia8_minbias_Inelastic_low.merge.HITS.e816_s1299_s1303/HITS.500617._001308.pool.root.1,root://eosatlas//eos/atlas/atlascerngroupdisk/proj-sit/digitization/RTT/mc11a/mc11_7TeV.108118.Pythia8_minbias_Inelastic_low.merge.HITS.e816_s1299_s1303/HITS.500617._001883.pool.root.1,root://eosatlas//eos/atlas/atlascerngroupdisk/proj-sit/digitization/RTT/mc11a/mc11_7TeV.108118.Pythia8_minbias_Inelastic_low.merge.HITS.e816_s1299_s1303/HITS.500617._001944.pool.root.1
+HighPtMinbiasHitsFile=root://eosatlas//eos/atlas/atlascerngroupdisk/proj-sit/digitization/RTT/mc11a/mc11_7TeV.108119.Pythia8_minbias_Inelastic_high.merge.HITS.e848_s1299_s1303/HITS.500616._001496.pool.root.1,root://eosatlas//eos/atlas/atlascerngroupdisk/proj-sit/digitization/RTT/mc11a/mc11_7TeV.108119.Pythia8_minbias_Inelastic_high.merge.HITS.e848_s1299_s1303/HITS.500616._002374.pool.root.1,root://eosatlas//eos/atlas/atlascerngroupdisk/proj-sit/digitization/RTT/mc11a/mc11_7TeV.108119.Pythia8_minbias_Inelastic_high.merge.HITS.e848_s1299_s1303/HITS.500616._007836.pool.root.1,root://eosatlas//eos/atlas/atlascerngroupdisk/proj-sit/digitization/RTT/mc11a/mc11_7TeV.108119.Pythia8_minbias_Inelastic_high.merge.HITS.e848_s1299_s1303/HITS.500616._009288.pool.root.1
+geometryVersion=ATLAS-GEO-18-01-01
+maxEvents=10
+
+#Reconstruction Section
+[Reco_tf.py]
+outputESDFile=serhat_ESD.pool.root
+autoConfiguration=everything
+#triggerConfig=MCRECO:MC_pp_v3_tight_mc_prescale
+# there is no more pre-scale menus
+triggerConfig=MCRECO:MC_pp_v5
+postExec='RegSelSvc=topSequence.allConfigurables.get("RegSelSvcDefault");RegSelSvc.DeltaZ=225*Units.mm'
+outputAODFile=digirecoAfs_mc12a.AOD.pool.root
+preExec='TriggerFlags.AODEDMSet="AODSLIM";rec.Commissioning.set_Value_and_Lock(True);jobproperties.Beam.energy.set_Value_and_Lock(3500*Units.GeV);muonRecFlags.writeSDOs=True;jobproperties.Beam.numberOfCollisions.set_Value_and_Lock(8.0);jobproperties.Beam.bunchSpacing.set_Value_and_Lock(50);AODFlags.TrackParticleSlimmer=True;from InDetTrigRecExample.ConfiguredNewTrackingTrigCuts import L2IDTrackingCuts;L2IDTrackingCuts.setRegSelZmax(225*Units.mm)'
+inputRDOFile=myRDO.pool.root
-- 
GitLab