diff --git a/Tools/DirectIOART/README.md b/Tools/DirectIOART/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..f61db2abb6b96d0cb762db7195a14e87122756e8
--- /dev/null
+++ b/Tools/DirectIOART/README.md
@@ -0,0 +1,125 @@
+# DirectIOART - Testing direct I/O in recent ATLAS offline software releases using ART (rel21)
+## The DirectIOART package
+DirectIOART is a package meant for testing and monitoring file access via direct I/O in (almost) all recent *ATLAS* offline software releases (**only** release 21 and master) making use of the ART ([*ATLAS* Release Tester](https://twiki.cern.ch/twiki/bin/view/AtlasComputing/ART)) framework. Its tests range from simple `TFile::Open` command to more involved `Reco_tf.py` reconstruction or derivation tests as well as small analysis algorithms. Each test is performed three times, in order to test three different protocols:
+* **DAVS**  (davs://...)
+* **HTTPS**  (https://...)
+* **ROOT**  (root://...)
+
+#### Package structure
+The actual tests are implemented in small bash and python scripts stored in the `test/` folder. Some of them need additional code, namely athena job options, which can be found in the `share/` folder. The main directory contains a CMakeLists.txt file which does all the necessary configurations during build time.
+Detailed lists of the tests that are performed within the particular software releases and the input files are given below.
+##### Tests:
+* **TFile::Open** (using an AOD input file)
+  * master/Athena
+  * 21.0/Athena
+  * 21.2/AthAnalysis
+  * 21.2/AthDerivation
+  * 21.2/AnalysisBase
+  * 21.2/AnalysisTop
+  * 21.3/Athena
+  * 21.3/AthSimulation
+  * 21.9/Athena
+* **`Reco_tf.py`** with RAW input file:
+  * 21.0/Athena
+  * 21.0/AthenaMP
+* **`Reco_tf.py`** with RDO input file:
+  * 21.0/Athena
+  * 21.0/AthenaMP
+* **`Reco_tf.py`** with AOD input file:
+  * 21.2/AthDerivation
+* **Analysis algorithm (`ParticleSelectionAlg`)** with AOD input file:
+  * 21.2/AthAnalysis
+* **`xAODChecker`** with DAOD input files:
+  * 21.2/AnalysisBase
+
+**Note:** For each test three test scripts have been generated except for the  `TFile::Open` test. At the moment the DirectIOART package contains 25 tests in total that are individually submitted.
+
+##### Input files:
+* **AOD** input file:
+  * mc15_13TeV:AOD.05536542._000001.pool.root.1 from dataset mc15_13TeV:mc15_13TeV.423202.Pythia8B_A14_CTEQ6L1_Jpsie3e13.merge.AOD.e3869_s2608_s2183_r6630_r6264_tid05536542_00
+* **DAOD** input file:
+  * data18_13TeV:DAOD_MUON0.14316152._000001.pool.root.1 from dataset data18_13TeV:data18_13TeV.00348709.physics_Main.deriv.DAOD_MUON0.f937_m1972_p3553_tid14316152_00
+* **RAW** input file:
+  * data15_13TeV:data15_13TeV.00284285.physics_Main.daq.RAW._lb0856._SFO-1._0003.data from dataset data15_13TeV:data15_13TeV.00284285.physics_Main.daq.RAW
+* **RDO** input file:
+  * mc16_13TeV:RDO.11373415._000001.pool.root.1 from dataset mc16_13TeV:mc16_13TeV.361108.PowhegPythia8EvtGen_AZNLOCTEQ6L1_Ztautau.recon.RDO.e3601_s3126_r9546_tid11373415_00
+
+**Note:** All input files but one are stored in the ART input container (`user.artprod:user.artprod.input.container`), whereas the AOD file is from the Hammercloud input container (`hc_test:hc_test.aft`).
+#### Creating (new) ART tests
+All test scripts kept in `test/` can be produced with the `generateARTtests.py` python script. It contains all relevant TURLs used within the test scripts. So, in order to create entirely new tests or replace the current input files by other/newer ones, this can be easily done by just modifying `generateARTtests.py`. It also takes care of specifying which tests will be run by which software release. This can be done with the ART header keyword `# art-include:` followed by the respective branch and software project, e.g.
+```
+# art-include: 21.2/AthAnalysis
+```
+## Running in *ATLAS* nightlies
+After a nightly build is done, the athena repository is searched for all the available grid-type ART jobs which subsequently are submitted to the grid. This must **NOT** be done by users! All (including the sequence tag) is taken CARE of by gitlab-ci, so as a user you have nothing more to do but to get your tests into the athena repository.
+#### ART results
+Usually, the ART results are downloaded by request to a specific EOS area: `/eos/atlas/atlascerngroupdisk/data-art/grid-output/`.
+#### Displaying ART jobs
+All the necessary information for a given job, panda ID, job name, package name and nightly branch environment variables, are sent by ART to the bigpanda. The results from the grid jobs are displayed in the so-called [ART display](https://bigpanda.cern.ch/art/), where you can select a specific package, branch and nightly tag, respectively.
+## Running manually
+When developing new ART tests you might be interested in testing your code before submitting a new merge request and wait until your latest changes appear on the [ART display](https://bigpanda.cern.ch/art/). How to do so is shown to you by the following instructions.
+#### Setup
+To run the DirectIOART package by yourself, if you're not working on `lxplus`, first you have to set up the ATLAS user interface `ATLASLocalRootBase` (make sure your machine has access to `cvmfs`). In addition, set up git and PanDA before continuing with anything else (you will be needing it later on):
+```
+export ATLAS_LOCAL_ROOT_BASE=/cvmfs/atlas.cern.ch/repo/ATLASLocalRootBase
+source ${ATLAS_LOCAL_ROOT_BASE}/user/atlasLocalSetup.sh
+lsetup git
+lsetup panda
+```
+Now, set up a new and clean work area. Therein, we need three empty folders:
+```
+mkdir TestingDirectIOART/
+cd TestingDirectIOART/
+mkdir build/ source/ run/
+```
+Afterwards, go to the `build/` directory and set up the *ATLAS* software release and version in which you want to launch your tests (as an example, we take **AthAnalysis**):
+```
+cd build/
+acmSetup 21.2,AthAnalysis,latest
+```
+For getting the DirectIOART git repository in there, do a "sparse checkout" of the athena repository with `acm` (requires forking the atlas/athena repository first, as described [here](https://atlassoftwaredocs.web.cern.ch/gittutorial/gitlab-fork)):
+```
+acm sparse_clone_project athena
+```
+This will create a working copy of the ATLAS Offline Git repository (it might take a while) and setup a sparse checkout but doesn’t check out any packages yet. It will also setup your personal fork of the athena repository as `origin` and the main repository as `upstream`. On top of that, `acm` makes sure that you are in the branch appropriate for the release you've set up locally and that everything is up-to-date with the upstream repository. Note that outside of `lxplus` you may have to do this sparse checkout differently (if you don't have a valid kerberos ticket for your CERN credentials), for example via ssh authentication (where `YOUR_GITLAB_NAME` is your gitlab user name):
+```
+acm sparse_clone_project ssh://git@gitlab.cern.ch:7999/YOUR_GITLAB_NAME/athena.git
+```
+
+In order to add the DirectIOART package to your checkout, execute
+```
+acm add_pkg athena/Tools/DirectIOART
+```
+This will checkout the DirectIOART package (the full path resolves to `Tools/DirectIOART/`), but leaves the other parts out of the work tree. Use `acm add_pkg` to add as many packages as you like and `acm rm_pkg` to remove them. Note that `acm` will also take care of any necessary entries in the `package_filters.txt` file, which is used by cmake to filter packages for the build.
+
+After that, you should compile your code, using
+```
+acm compile
+```
+
+After all this worked, go to the `run/` directory of your work area in order to launch the ART tests (as described in the following sections):
+```
+cd ../../run/
+```
+#### Validating ART tests
+Once the DirectIOART package has been properly setup, the test scripts can be validated by executing the following command:
+```
+art.py validate -v ../source/athena/Tools/DirectIOART
+```
+`"art.py"` calls the ART script which is doing all the hard work. As positional arguments you have to provide the path to the directory containing the `test/` folder with all the test scripts in it (e.g. `"../source/DirectIOART/"`). With the keyword `"validate"` the validation procedure will be initiated.  Finally, with the `"-v"` flag the verbosity is turned on in order to get a more detailed terminal output.
+#### Running locally
+For running the tests on your local machine, use the following command:
+```
+art.py run --type=grid -v ../source/athena/Tools/DirectIOART/ .
+```
+After calling `"art.py"`, the keyword `"run"` tells ART to run the tests locally. Again, the `"../source.DirectIOART/"` path has to be given, followed by the so-called sequence tag (`"."`) which in this case is just the current directory `run/`. This means, that all the output created by the ART test will go there. In addition, one has to specify the type of the ART tests, which is for the DirectIOART package `"grid"`.
+The results of all tests are written into a JSON file (`status.json`) containing information about the job (exit code, job name, etc.). Furthermore, for each test script an output directory is created, in which all detailed output (`stdout.txt`, `stderr.txt`, `PoolFileCatalog.xml`, output ROOT files, log files etc.) are stored. 
+#### Running on the grid
+In order to send jobs from the DirectIOART package to the grid instead of running them locally, type the following command:
+```
+art.py grid -v ../source/athena/Tools/DirectIOART/ DirectIOART_20180724_1
+```
+After calling `"art.py"`, the keyword `"grid"` tells ART to prepare for grid submission. Again, the `"../source.DirectIOART/"` path has to be given, but now with a sequence tag which is composed of, firstly, the package name, secondly, the submission date, and third, a counting index. Every `"art.py grid ..."` command will create a separate job containing all executed tests as single tasks. Actually, what the sequence tag looks like doesn't matter as long as it is unique, since it will be part of the grid job's output name as displayed on your [bigpanda](https://bigpanda.cern.ch/) page, e.g.:
+```
+user.flfische.atlas.21.2.AnalysisBase.x86_64-slc6-gcc62-opt.2018-07-04T0335.DirectIOART_20180706_2.DirectIOART/
+```
\ No newline at end of file
diff --git a/Tools/DirectIOART/generateARTtests.py b/Tools/DirectIOART/generateARTtests.py
index fcf07f297ea51b4086b4009ce26193aff4c0d011..59d29b1b1190c9107504c27c213f9fc3fcdca9b6 100755
--- a/Tools/DirectIOART/generateARTtests.py
+++ b/Tools/DirectIOART/generateARTtests.py
@@ -2,11 +2,18 @@
 
 import os
 
+DAOD_FILE = "data18_13TeV:DAOD_MUON0.14316152._000001.pool.root.1"
 RAW_FILE = "data15_13TeV:data15_13TeV.00284285.physics_Main.daq.RAW"
 RDO_FILE = "mc16_13TeV:mc16_13TeV.361108.PowhegPythia8EvtGen_AZNLOCTEQ6L1_Ztautau.recon.RDO.e3601_s3126_r9546"
 HAMMERCLOUD_FILE = "mc15_13TeV.423202.Pythia8B_A14_CTEQ6L1_Jpsie3e13.merge.AOD.e3869_s2608_s2183_r6630_r6264" #NOTE: needs update to mc16(?)
 PROJECTS = ["AthAnalysis", "AthDerivation", "AthSimulation", "Athena", "AnalysisBase"]
 
+XAODCHECKER_TURLS = {
+  "ROOT"  : "root://lcg-lrz-rootd.grid.lrz.de:1094/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/data18_13TeV/e6/c2/DAOD_MUON0.14316152._000001.pool.root.1", # LRZ-LMU,
+  "DAVS"  : "davs://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/data18_13TeV/e6/c2/DAOD_MUON0.14316152._000001.pool.root.1",   # LRZ-LMU
+  "HTTPS" : "https://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/data18_13TeV/e6/c2/DAOD_MUON0.14316152._000001.pool.root.1",  # LRZ-LMU
+}
+
 RECO_TF_TURLS = {
   "RDO" : (
     {"ROOT"  : "root://lcg-lrz-rootd.grid.lrz.de:1094/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/mc16_13TeV/90/96/RDO.11373415._000001.pool.root.1"}, # LRZ-LMU
@@ -22,7 +29,8 @@ RECO_TF_TURLS = {
 
 TFILE_OPEN_TURLs = [
   {"ROOT":
-    ("root://lcg-lrz-rootd.grid.lrz.de:1094/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",            # LRZ-LMU
+    (
+     "root://lcg-lrz-rootd.grid.lrz.de:1094/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",            # LRZ-LMU
      "root://grid-dc.rzg.mpg.de:1094//pnfs/rzg.mpg.de/data/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                       # MPPMU
      "root://dcache-atlas-xrootd.desy.de:1094//pnfs/desy.de/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                      # DESY-Hamburg
      "root://lcg-se0.ifh.de:1094//pnfs/ifh.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                                   # DESY-Zeuthen
@@ -33,7 +41,8 @@ TFILE_OPEN_TURLs = [
     )
   },
   {"DAVS":
-    ("davs://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",             # LRZ-LMU
+    (
+     "davs://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",             # LRZ-LMU
      "davs://grid-dav.rzg.mpg.de:2880/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                                           # MPPMU
      "davs://dcache-atlas-webdav.desy.de:2880/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                                         # DESY-Hamburg
      "davs://lcg-se0.ifh.de:2880/pnfs/ifh.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                                   # DESY-Zeuthen
@@ -44,7 +53,8 @@ TFILE_OPEN_TURLs = [
     )
   },
   {"HTTPS":
-    ("https://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",             # LRZ-LMU
+    (
+     "https://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",             # LRZ-LMU
      "https://grid-dav.rzg.mpg.de:2880/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                                           # MPPMU
      "https://dcache-atlas-webdav.desy.de:2880/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                                         # DESY-Hamburg
      "https://lcg-se0.ifh.de:2880/pnfs/ifh.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                                   # DESY-Zeuthen
@@ -61,15 +71,16 @@ def write_RecoTF(opts):
   if "Athena" in opts.athena_project:
     # loop over turl list of RDO input files
     for item in RECO_TF_TURLS["RDO"]:
-      name = os.path.join("test", "test_directioart_athena_recotf_with_rdo_" + item.keys()[0].lower() + ".sh")
-      print "\tGenerating ...",name
+      name = os.path.join("test", "test_directioart_athena_recotf_with_rdo_{}.sh".format(item.keys()[0].lower()))
+      print("\tGenerating ... {}".format(name))
       outfile = open(name,'w')
       # generate test scripts
       outstring = """#!/bin/bash\n
-# art-description: DirectIOART Athena inputFile:RDO protocol={protocol}
+# art-description: DirectIOART Athena Reco_tf.py inputFile:RDO protocol={protocol}
 # art-type: grid
 # art-output: *.pool.root
-# art-include: 21.0/Athena\n
+# art-include: 21.0/Athena
+# art-include: master/Athena\n
 set -e\n
 Reco_tf.py --AMI q221 --inputRDOFile {turl} --outputRDO_TRIGFile art.pool.root\n
 echo \"art-result: $? DirectIOART_Athena_RecoTF_inputRDO_protocol_{protocol}\"""".format(turl=item.values()[0], protocol=item.keys()[0])
@@ -78,15 +89,16 @@ echo \"art-result: $? DirectIOART_Athena_RecoTF_inputRDO_protocol_{protocol}\"""
       os.system("chmod +x " + name)
       # if AthenaMP
       if opts.mp:
-        name = os.path.join("test", "test_directioart_athenamp_recotf_with_rdo_" + item.keys()[0].lower() + ".sh")
-        print "\tGenerating ...",name
+        name = os.path.join("test", "test_directioart_athenamp_recotf_with_rdo_{}.sh".format(item.keys()[0].lower()))
+        print("\tGenerating ... {}".format(name))
         outfile = open(name,'w')
         # generate test scripts
         outstring = """#!/bin/bash\n
-# art-description: DirectIOART AthenaMP inputFile:RDO protocol={protocol}
+# art-description: DirectIOART AthenaMP Reco_tf.py inputFile:RDO protocol={protocol}
 # art-type: grid
 # art-output: *.pool.root
-# art-include: 21.0/Athena\n
+# art-include: 21.0/Athena
+# art-include: master/Athena\n
 set -e\n
 export ATHENA_PROC_NUMBER=2
 Reco_tf.py --AMI q221 --inputRDOFile {turl} --outputRDO_TRIGFile art.pool.root\n
@@ -97,15 +109,16 @@ echo \"art-result: $? DirectIOART_AthenaMP_RecoTF_inputRDO_protocol_{protocol}\"
     
     # loop over turl list if RAW input files
     for item in RECO_TF_TURLS["RAW"]:
-      name = os.path.join("test", "test_directioart_athena_recotf_with_raw_" + item.keys()[0].lower() + ".sh")
-      print "\tGenerating ...",name
+      name = os.path.join("test", "test_directioart_athena_recotf_with_raw_{}.sh".format(item.keys()[0].lower()))
+      print("\tGenerating ... {}".format(name))
       outfile = open(name,'w')
       # generate test scripts
       outstring = """#!/bin/bash\n
 # art-description: DirectIOART Athena Reco_tf.py inputFile:RAW protocol={protocol}
 # art-type: grid
 # art-output: *.pool.root
-# art-include: 21.0/Athena\n
+# art-include: 21.0/Athena
+# art-include: master/Athena\n
 set -e\n
 Reco_tf.py --AMI q431 --inputBSFile {turl} --outputESDFile art.pool.root\n
 echo \"art-result: $? DirectIOART_Athena_RecoTF_inputBS_protocol_{protocol}\"""".format(turl=item.values()[0], protocol=item.keys()[0])
@@ -114,15 +127,16 @@ echo \"art-result: $? DirectIOART_Athena_RecoTF_inputBS_protocol_{protocol}\""""
       os.system("chmod +x " + name)
       # if AthenaMP
       if opts.mp:
-        name = os.path.join("test", "test_directioart_athenamp_recotf_with_raw_" + item.keys()[0].lower() + ".sh")
-        print "\tGenerating ...",name
+        name = os.path.join("test", "test_directioart_athenamp_recotf_with_raw_{}.sh".format(item.keys()[0].lower()))
+        print("\tGenerating ... {}".format(name))
         outfile = open(name,'w')
         # generate test scripts
         outstring = """#!/bin/bash\n
 # art-description: DirectIOART AthenaMP Reco_tf.py inputFile:RAW protocol={protocol}
 # art-type: grid
 # art-output: *.pool.root
-# art-include: 21.0/Athena\n
+# art-include: 21.0/Athena
+# art-include: master/Athena\n
 set -e\n
 export ATHENA_PROC_NUMBER=2
 Reco_tf.py --AMI q431 --inputBSFile {turl} --outputESDFile art.pool.root\n
@@ -137,12 +151,12 @@ echo \"art-result: $? DirectIOART_AthenaMP_RecoTF_inputBS_protocol_{protocol}\""
     for i in xrange(len(TFILE_OPEN_TURLs)):
       # get values of dictionaries
       for key, value in TFILE_OPEN_TURLs[i].items():
-        name = os.path.join("test", "test_directioart_athderivation_recotf_with_aod_" + key.lower() + ".sh")
-        print "\tGenerating ...",name
+        name = os.path.join("test", "test_directioart_athderivation_recotf_with_aod_{}.sh".format(key.lower()))
+        print("\tGenerating ... {}".format(name))
         outfile = open(name,'w')
         # generate test scripts
         outstring = """#!/bin/bash\n
-# art-description: DirectIOART AthDerivation inputFile:RDO protocol={protocol} reductionConf:TEST1
+# art-description: DirectIOART AthDerivation Reco_tf.py inputFile:RDO protocol={protocol} reductionConf:TEST1
 # art-type: grid
 # art-output: *.pool.root
 # art-include: 21.2/AthDerivation\n
@@ -158,8 +172,8 @@ def write_AthAnalysis_TestAlg():
   for i in xrange(len(TFILE_OPEN_TURLs)):
     # get values of dictionaries
     for key, value in TFILE_OPEN_TURLs[i].items():
-      name = os.path.join("test", "test_directioart_athanalysis_alg_" + key.lower() + ".sh")
-      print "\tGenerating ...",name
+      name = os.path.join("test", "test_directioart_athanalysis_alg_{}.sh".format(key.lower()))
+      print("\tGenerating ... {}".format(name))
       outfile = open(name,'w')
       # generate tests scripts
       outstring = """#!/bin/bash\n
@@ -174,15 +188,50 @@ echo \"art-result: $? DirectIOART_AthAnalysis_ParticleSelectionAlg_protocol_{pro
       outfile.close()
       os.system("chmod +x " + name)
 
+def write_AnalysisBase_xAODChecker():
+  #loop over turl list
+  for key, value in XAODCHECKER_TURLS.items():
+    name = os.path.join("test", "test_directioart_analysisbase_xaodchecker_{}.sh".format(key.lower()))
+    print("\tGenerating ... {}".format(name))
+    outfile = open(name,'w')
+    # generate test scripts
+    outstring = """#!/bin/bash\n
+# art-description: DirectIOART AnalysisBase xAODChecker protocol={protocol}
+# art-type: grid
+# art-include: 21.2/AnalysisBase\n
+set -e\n
+xAODChecker {turl}\n
+echo \"art-result: $? DirectIOART_AnalysisBase_xAODChecker_protocol_{protocol}\"\n
+PFC_FILE=PoolFileCatalog.xml
+touch $PFC_FILE
+echo \"<?xml version=\\"1.0\\" encoding=\\"UTF-8\\" standalone=\\"no\\" ?>\" >> $PFC_FILE
+echo \"<!-- Edited By POOL -->\" >> $PFC_FILE
+echo \"<!DOCTYPE POOLFILECATALOG SYSTEM \\"InMemory\\">\" >> $PFC_FILE
+echo \"<POOLFILECATALOG>\" >> $PFC_FILE
+echo \"\" >> $PFC_FILE
+echo \"</POOLFILECATALOG>\" >> $PFC_FILE""".format(turl=value, protocol=key)
+    outfile.write(outstring)
+    outfile.close()
+    os.system("chmod +x " + name)
+
 def writeTFileOpen():
   name = os.path.join("test", "test_directioart_tfileopen.py")
-  print "\tGenerating ...",name
+  print("\tGenerating ... {}".format(name))
   outfile = open(name,'w')
 
   # generate frame of test scripts
   outstring = """#!/usr/bin/env python\n
 # art-description: DirectIOART TFile::Open
-# art-type: grid\n
+# art-type: grid
+# art-include master/Athena
+# art-include 21.0/Athena
+# art-include 21.0/AthSimulation
+# art-include 21.2/AthAnalysis
+# art-include 21.2/AthDerivation
+# art-include 21.2/AnalysisBase
+# art-include 21.2/AnalysisTop
+# art-include 21.3/Athena
+# art-include 21.9/Athena\n
 import ROOT
 import os\n"""
   # loop over turl list
@@ -251,9 +300,12 @@ def main():
   
   if "Athena" in opts.athena_project or "AthDerivation" in opts.athena_project:
     write_RecoTF(opts)
+  
+  if "AnalysisBase" in opts.athena_project:
+    write_AnalysisBase_xAODChecker()
 
 if __name__ == "__main__":
   try:
     main()
   except KeyboardInterrupt:
-    print "\nexiting"
\ No newline at end of file
+    print "\nexiting"
diff --git a/Tools/DirectIOART/test/test_directioart_analysisbase_xaodchecker_davs.sh b/Tools/DirectIOART/test/test_directioart_analysisbase_xaodchecker_davs.sh
new file mode 100755
index 0000000000000000000000000000000000000000..c4306e3f52172c33b418c0a2a38d91fa4cbd38fc
--- /dev/null
+++ b/Tools/DirectIOART/test/test_directioart_analysisbase_xaodchecker_davs.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+# art-description: DirectIOART AnalysisBase xAODChecker protocol=DAVS
+# art-type: grid
+# art-include: 21.2/AnalysisBase
+
+set -e
+
+xAODChecker davs://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/data18_13TeV/e6/c2/DAOD_MUON0.14316152._000001.pool.root.1
+
+echo "art-result: $? DirectIOART_AnalysisBase_xAODChecker_protocol_DAVS"
+
+PFC_FILE=PoolFileCatalog.xml
+touch $PFC_FILE
+echo "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\" ?>" >> $PFC_FILE
+echo "<!-- Edited By POOL -->" >> $PFC_FILE
+echo "<!DOCTYPE POOLFILECATALOG SYSTEM \"InMemory\">" >> $PFC_FILE
+echo "<POOLFILECATALOG>" >> $PFC_FILE
+echo "" >> $PFC_FILE
+echo "</POOLFILECATALOG>" >> $PFC_FILE
\ No newline at end of file
diff --git a/Tools/DirectIOART/test/test_directioart_analysisbase_xaodchecker_https.sh b/Tools/DirectIOART/test/test_directioart_analysisbase_xaodchecker_https.sh
new file mode 100755
index 0000000000000000000000000000000000000000..73877cbec82db799c38f1d46a6daec5a27b82580
--- /dev/null
+++ b/Tools/DirectIOART/test/test_directioart_analysisbase_xaodchecker_https.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+# art-description: DirectIOART AnalysisBase xAODChecker protocol=HTTPS
+# art-type: grid
+# art-include: 21.2/AnalysisBase
+
+set -e
+
+xAODChecker https://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/data18_13TeV/e6/c2/DAOD_MUON0.14316152._000001.pool.root.1
+
+echo "art-result: $? DirectIOART_AnalysisBase_xAODChecker_protocol_HTTPS"
+
+PFC_FILE=PoolFileCatalog.xml
+touch $PFC_FILE
+echo "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\" ?>" >> $PFC_FILE
+echo "<!-- Edited By POOL -->" >> $PFC_FILE
+echo "<!DOCTYPE POOLFILECATALOG SYSTEM \"InMemory\">" >> $PFC_FILE
+echo "<POOLFILECATALOG>" >> $PFC_FILE
+echo "" >> $PFC_FILE
+echo "</POOLFILECATALOG>" >> $PFC_FILE
\ No newline at end of file
diff --git a/Tools/DirectIOART/test/test_directioart_analysisbase_xaodchecker_root.sh b/Tools/DirectIOART/test/test_directioart_analysisbase_xaodchecker_root.sh
new file mode 100755
index 0000000000000000000000000000000000000000..1f34aa4997935faf9596fb24755e13db106e2330
--- /dev/null
+++ b/Tools/DirectIOART/test/test_directioart_analysisbase_xaodchecker_root.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+# art-description: DirectIOART AnalysisBase xAODChecker protocol=ROOT
+# art-type: grid
+# art-include: 21.2/AnalysisBase
+
+set -e
+
+xAODChecker root://lcg-lrz-rootd.grid.lrz.de:1094/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/data18_13TeV/e6/c2/DAOD_MUON0.14316152._000001.pool.root.1
+
+echo "art-result: $? DirectIOART_AnalysisBase_xAODChecker_protocol_ROOT"
+
+PFC_FILE=PoolFileCatalog.xml
+touch $PFC_FILE
+echo "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\" ?>" >> $PFC_FILE
+echo "<!-- Edited By POOL -->" >> $PFC_FILE
+echo "<!DOCTYPE POOLFILECATALOG SYSTEM \"InMemory\">" >> $PFC_FILE
+echo "<POOLFILECATALOG>" >> $PFC_FILE
+echo "" >> $PFC_FILE
+echo "</POOLFILECATALOG>" >> $PFC_FILE
\ No newline at end of file
diff --git a/Tools/DirectIOART/test/test_directioart_athderivation_recotf_with_aod_davs.sh b/Tools/DirectIOART/test/test_directioart_athderivation_recotf_with_aod_davs.sh
index 288c053bc93ea789f53efeac3b3ec32ae6b31101..c32dfe35bd06a167b9621d2927a5e1a364c8f058 100755
--- a/Tools/DirectIOART/test/test_directioart_athderivation_recotf_with_aod_davs.sh
+++ b/Tools/DirectIOART/test/test_directioart_athderivation_recotf_with_aod_davs.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-# art-description: DirectIOART AthDerivation inputFile:RDO protocol=DAVS reductionConf:TEST1
+# art-description: DirectIOART AthDerivation Reco_tf.py inputFile:RDO protocol=DAVS reductionConf:TEST1
 # art-type: grid
 # art-output: *.pool.root
 # art-include: 21.2/AthDerivation
diff --git a/Tools/DirectIOART/test/test_directioart_athderivation_recotf_with_aod_https.sh b/Tools/DirectIOART/test/test_directioart_athderivation_recotf_with_aod_https.sh
index 9f6cc19967e8163ec2be950607ec96805a5ba4b3..4b4eabf1bfdbcf6b1f96bc00c782fb7fdef15d6e 100755
--- a/Tools/DirectIOART/test/test_directioart_athderivation_recotf_with_aod_https.sh
+++ b/Tools/DirectIOART/test/test_directioart_athderivation_recotf_with_aod_https.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-# art-description: DirectIOART AthDerivation inputFile:RDO protocol=HTTPS reductionConf:TEST1
+# art-description: DirectIOART AthDerivation Reco_tf.py inputFile:RDO protocol=HTTPS reductionConf:TEST1
 # art-type: grid
 # art-output: *.pool.root
 # art-include: 21.2/AthDerivation
diff --git a/Tools/DirectIOART/test/test_directioart_athderivation_recotf_with_aod_root.sh b/Tools/DirectIOART/test/test_directioart_athderivation_recotf_with_aod_root.sh
index 32f3acf361111c5ffa15c84e9aea18b980ed4e0a..b05d48e4add72c1dcc634d9e99873c0f5fab7c6c 100755
--- a/Tools/DirectIOART/test/test_directioart_athderivation_recotf_with_aod_root.sh
+++ b/Tools/DirectIOART/test/test_directioart_athderivation_recotf_with_aod_root.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-# art-description: DirectIOART AthDerivation inputFile:RDO protocol=ROOT reductionConf:TEST1
+# art-description: DirectIOART AthDerivation Reco_tf.py inputFile:RDO protocol=ROOT reductionConf:TEST1
 # art-type: grid
 # art-output: *.pool.root
 # art-include: 21.2/AthDerivation
diff --git a/Tools/DirectIOART/test/test_directioart_athena_recotf_with_raw_davs.sh b/Tools/DirectIOART/test/test_directioart_athena_recotf_with_raw_davs.sh
index 3a79ded14240676d3d4bef5f78db6a3aa13a6d4f..022f321f883b602e4a1725aabaf5e59eebc60232 100755
--- a/Tools/DirectIOART/test/test_directioart_athena_recotf_with_raw_davs.sh
+++ b/Tools/DirectIOART/test/test_directioart_athena_recotf_with_raw_davs.sh
@@ -4,6 +4,7 @@
 # art-type: grid
 # art-output: *.pool.root
 # art-include: 21.0/Athena
+# art-include: master/Athena
 
 set -e
 
diff --git a/Tools/DirectIOART/test/test_directioart_athena_recotf_with_raw_https.sh b/Tools/DirectIOART/test/test_directioart_athena_recotf_with_raw_https.sh
index 481c61f7f6953542cc6cccd403b31f2a7f9e72e4..1bf2f48c64e45c7117a8c522686b96f5af9534e9 100755
--- a/Tools/DirectIOART/test/test_directioart_athena_recotf_with_raw_https.sh
+++ b/Tools/DirectIOART/test/test_directioart_athena_recotf_with_raw_https.sh
@@ -4,6 +4,7 @@
 # art-type: grid
 # art-output: *.pool.root
 # art-include: 21.0/Athena
+# art-include: master/Athena
 
 set -e
 
diff --git a/Tools/DirectIOART/test/test_directioart_athena_recotf_with_raw_root.sh b/Tools/DirectIOART/test/test_directioart_athena_recotf_with_raw_root.sh
index d69547239685523892783fd333789c604e45194c..29db30e95d4f36017a0b8329739cccba0d8dbe5c 100755
--- a/Tools/DirectIOART/test/test_directioart_athena_recotf_with_raw_root.sh
+++ b/Tools/DirectIOART/test/test_directioart_athena_recotf_with_raw_root.sh
@@ -4,6 +4,7 @@
 # art-type: grid
 # art-output: *.pool.root
 # art-include: 21.0/Athena
+# art-include: master/Athena
 
 set -e
 
diff --git a/Tools/DirectIOART/test/test_directioart_athena_recotf_with_rdo_davs.sh b/Tools/DirectIOART/test/test_directioart_athena_recotf_with_rdo_davs.sh
index 11dc429b2882f1ba306504f9a89a6aeb9806f575..19b6ce8cbe58218c395c9d7fcfc014b871fc05dc 100755
--- a/Tools/DirectIOART/test/test_directioart_athena_recotf_with_rdo_davs.sh
+++ b/Tools/DirectIOART/test/test_directioart_athena_recotf_with_rdo_davs.sh
@@ -1,9 +1,10 @@
 #!/bin/bash
 
-# art-description: DirectIOART Athena inputFile:RDO protocol=DAVS
+# art-description: DirectIOART Athena Reco_tf.py inputFile:RDO protocol=DAVS
 # art-type: grid
 # art-output: *.pool.root
 # art-include: 21.0/Athena
+# art-include: master/Athena
 
 set -e
 
diff --git a/Tools/DirectIOART/test/test_directioart_athena_recotf_with_rdo_https.sh b/Tools/DirectIOART/test/test_directioart_athena_recotf_with_rdo_https.sh
index eed46fc8e24a75f31c493eb376db07aedac6d1cc..cf4d44989e543c9ae84c3352bbd34a768bbf578e 100755
--- a/Tools/DirectIOART/test/test_directioart_athena_recotf_with_rdo_https.sh
+++ b/Tools/DirectIOART/test/test_directioart_athena_recotf_with_rdo_https.sh
@@ -1,9 +1,10 @@
 #!/bin/bash
 
-# art-description: DirectIOART Athena inputFile:RDO protocol=HTTPS
+# art-description: DirectIOART Athena Reco_tf.py inputFile:RDO protocol=HTTPS
 # art-type: grid
 # art-output: *.pool.root
 # art-include: 21.0/Athena
+# art-include: master/Athena
 
 set -e
 
diff --git a/Tools/DirectIOART/test/test_directioart_athena_recotf_with_rdo_root.sh b/Tools/DirectIOART/test/test_directioart_athena_recotf_with_rdo_root.sh
index b24c72ecc42a8c1b307341ce8db3aac23076c241..0c68abb50a389a9904c60ced2f17b82bc41f5b80 100755
--- a/Tools/DirectIOART/test/test_directioart_athena_recotf_with_rdo_root.sh
+++ b/Tools/DirectIOART/test/test_directioart_athena_recotf_with_rdo_root.sh
@@ -1,9 +1,10 @@
 #!/bin/bash
 
-# art-description: DirectIOART Athena inputFile:RDO protocol=ROOT
+# art-description: DirectIOART Athena Reco_tf.py inputFile:RDO protocol=ROOT
 # art-type: grid
 # art-output: *.pool.root
 # art-include: 21.0/Athena
+# art-include: master/Athena
 
 set -e
 
diff --git a/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_raw_davs.sh b/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_raw_davs.sh
index 6e0e7d82728c06516ecc1c40c8e59844dbe9c93c..bf779a011ce050b80bc56bf987b6dc1a5ff612b4 100755
--- a/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_raw_davs.sh
+++ b/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_raw_davs.sh
@@ -4,6 +4,7 @@
 # art-type: grid
 # art-output: *.pool.root
 # art-include: 21.0/Athena
+# art-include: master/Athena
 
 set -e
 
diff --git a/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_raw_https.sh b/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_raw_https.sh
index ae565d9212cbb0e2e8d7aafc57c06493c16c1be5..5e19d2cfd436e12eb846a0f9e962ed42f0d10134 100755
--- a/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_raw_https.sh
+++ b/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_raw_https.sh
@@ -4,6 +4,7 @@
 # art-type: grid
 # art-output: *.pool.root
 # art-include: 21.0/Athena
+# art-include: master/Athena
 
 set -e
 
diff --git a/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_raw_root.sh b/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_raw_root.sh
index d978d2b0270c852256d53c949517ebd7a67a0cbd..cd3b4a7da69c98b517899cfb372397d779bafb0f 100755
--- a/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_raw_root.sh
+++ b/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_raw_root.sh
@@ -4,6 +4,7 @@
 # art-type: grid
 # art-output: *.pool.root
 # art-include: 21.0/Athena
+# art-include: master/Athena
 
 set -e
 
diff --git a/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_rdo_davs.sh b/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_rdo_davs.sh
index a8fffc1f4f715b02c1d336f7eac21b7a5a175b83..73c39c6b470fb68178429085365073327aa44747 100755
--- a/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_rdo_davs.sh
+++ b/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_rdo_davs.sh
@@ -1,9 +1,10 @@
 #!/bin/bash
 
-# art-description: DirectIOART AthenaMP inputFile:RDO protocol=DAVS
+# art-description: DirectIOART AthenaMP Reco_tf.py inputFile:RDO protocol=DAVS
 # art-type: grid
 # art-output: *.pool.root
 # art-include: 21.0/Athena
+# art-include: master/Athena
 
 set -e
 
diff --git a/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_rdo_https.sh b/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_rdo_https.sh
index e46bf88196d5fe36a317bc7e51cb9df12ba56fe3..1f56f36ac9c59319029448b6bb6f5d6b2886e860 100755
--- a/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_rdo_https.sh
+++ b/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_rdo_https.sh
@@ -1,9 +1,10 @@
 #!/bin/bash
 
-# art-description: DirectIOART AthenaMP inputFile:RDO protocol=HTTPS
+# art-description: DirectIOART AthenaMP Reco_tf.py inputFile:RDO protocol=HTTPS
 # art-type: grid
 # art-output: *.pool.root
 # art-include: 21.0/Athena
+# art-include: master/Athena
 
 set -e
 
diff --git a/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_rdo_root.sh b/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_rdo_root.sh
index 6bea5ab7996713459e287d41903671853191f541..56bbfeb3c6289b3bf89a5f9e8fd8e536bc2bf9b9 100755
--- a/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_rdo_root.sh
+++ b/Tools/DirectIOART/test/test_directioart_athenamp_recotf_with_rdo_root.sh
@@ -1,9 +1,10 @@
 #!/bin/bash
 
-# art-description: DirectIOART AthenaMP inputFile:RDO protocol=ROOT
+# art-description: DirectIOART AthenaMP Reco_tf.py inputFile:RDO protocol=ROOT
 # art-type: grid
 # art-output: *.pool.root
 # art-include: 21.0/Athena
+# art-include: master/Athena
 
 set -e
 
diff --git a/Tools/DirectIOART/test/test_directioart_tfileopen.py b/Tools/DirectIOART/test/test_directioart_tfileopen.py
index 982d4bc4dfcec167e00bfd49e7e2d684b4deb31f..5cbfcfae4319517041fa2fe1411e255911ff01f6 100755
--- a/Tools/DirectIOART/test/test_directioart_tfileopen.py
+++ b/Tools/DirectIOART/test/test_directioart_tfileopen.py
@@ -2,6 +2,15 @@
 
 # art-description: DirectIOART TFile::Open
 # art-type: grid
+# art-include master/Athena
+# art-include 21.0/Athena
+# art-include 21.0/AthSimulation
+# art-include 21.2/AthAnalysis
+# art-include 21.2/AthDerivation
+# art-include 21.2/AnalysisBase
+# art-include 21.2/AnalysisTop
+# art-include 21.3/Athena
+# art-include 21.9/Athena
 
 import ROOT
 import os
@@ -16,7 +25,7 @@ if f: print("art-result: 0 DirectIOART_TFileOpen_protocol_DAVS")
 else: print("art-result: 1 DirectIOART_TFileOpen_protocol_DAVS")
 del f
 
-f = ROOT.TFile.Open("https://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1 | https://grid-dav.rzg.mpg.de:2880/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1 | https://dcache-atlas-webdav.desy.de:2880/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1 | https://lcg-se0.ifh.de:2880/pnfs/ifh.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1 | https ://atlaswebdav-kit.gridka.de:2880/pnfs/gridka.de/atlas/disk-only/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1 | https://webdav.bfg.uni-freiburg.de:2880/pnfs/bfg.uni-freiburg.de/data/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1 | https://se-goegrid.gwdg.de:2880/pnfs/gwdg.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1 | https://grid-se.physik.uni-wuppertal.de:2881/pnfs/physik.uni-wuppertal.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1")
+f = ROOT.TFile.Open("https://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1 | https://grid-dav.rzg.mpg.de:2880/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1 | https://dcache-atlas-webdav.desy.de:2880/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1 | https://lcg-se0.ifh.de:2880/pnfs/ifh.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1 | https://atlaswebdav-kit.gridka.de:2880/pnfs/gridka.de/atlas/disk-only/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1 | https://webdav.bfg.uni-freiburg.de:2880/pnfs/bfg.uni-freiburg.de/data/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1 | https://se-goegrid.gwdg.de:2880/pnfs/gwdg.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1 | https://grid-se.physik.uni-wuppertal.de:2881/pnfs/physik.uni-wuppertal.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1")
 if f: print("art-result: 0 DirectIOART_TFileOpen_protocol_HTTPS")
 else: print("art-result: 1 DirectIOART_TFileOpen_protocol_HTTPS")
 del f