diff --git a/Tests/python/rivet_check.script b/Tests/python/rivet_check.script
new file mode 100755
--- /dev/null
+++ b/Tests/python/rivet_check.script
@@ -0,0 +1,112 @@
+#!/usr/bin/python
+import glob,subprocess,os,optparse
+
+op = optparse.OptionParser(usage=__doc__)
+op.add_option("--obsolete", dest="obsolete" , default=False, action="store_true" , help="Warn if obsolete analyses not included")
+op.add_option("--search", dest="search" , default=False, action="store_true" , help="Warn if search analyses not included")
+op.add_option("--heavy-ion", dest="heavy_ion" , default=False, action="store_true" , help="Warn if heavy ion analyses not included")
+op.add_option("--MC", dest="MC" , default=False, action="store_true" , help="Warn if MC analyses not included")
+op.add_option("--print-descriptions", dest="output" , default=False, action="store_true" , help="Print analysis descriptions")
+opts, args = op.parse_args()
+
+# analyses to skip
+skip = [ "ATLAS_2010_I849050", # alias
+         "TOTEM_2012_002"    , # alias
+         "TEST"              , # test analysis
+        ]
+searches=["ALEPH_2016_I1492968"]
+
+
+p=subprocess.Popen(["rivet","--list"],stdout=subprocess.PIPE)
+analyses={}
+for line in p.communicate()[0].split("\n") :
+    line=line.strip()
+    if(line=="") : continue
+    temp =  line.split(None,1)
+    if(len(temp)==2) :
+        analyses[temp[0].strip()] = temp[1].strip()
+    elif(len(temp)==1) :
+        analyses[temp[0].strip()] = ""
+    else :
+        print line
+        quit()
+
+# main line hw analyses at high energy
+hw_analyses={}
+files=[]
+for idir in glob.glob("Rivet/*") :
+    if( "Powheg" in idir or "MCatNLO" in idir) : continue
+    if ( not os.path.isdir(idir) ) : continue
+    if ( "Templates" in idir ) : continue
+    for ifile in glob.glob("%s/*.in" % idir) :
+        fshort=ifile.split("/")[-1].replace(".in","")
+        files.append(fshort)
+        file=open(ifile)
+        line=file.readline()
+        while line:
+            if("RivetAnalysis:Analyses" in line) :
+                line=line.strip().split()
+                anal = line[-1].strip().split(":")[0]
+                if(anal not in hw_analyses) :
+                    hw_analyses[anal] = [fshort]
+                else :
+                    hw_analyses[anal].append(fshort)
+            line=file.readline()
+
+# low energy herwig analysis
+p = subprocess.Popen(["./python/LowEnergy.py","--list","--process","all"],stdout=subprocess.PIPE)
+lowEnergy = p.communicate()[0]
+hw_low_energy_analyses=lowEnergy.strip().split()
+# R analyses
+p = subprocess.Popen(["./python/R.py","--list"],stdout=subprocess.PIPE)
+Rlist = p.communicate()[0]
+hw_R_analyses=Rlist.strip().split()
+
+anatohepmc = open("anatohepmc.txt",'w')
+hepmctoana = open("hepmctoana.txt",'w')
+# check the analyses
+for analysis in sorted(analyses.keys()) :
+    # we have it high energy
+    if(analysis in hw_analyses) :
+        anatohepmc.write("%s %s\n" % (analysis,' '.join(sorted(hw_analyses[analysis]))) )
+        if("[OBSOLETE]" in analyses[analysis]) :
+            print "WARNING Obsolete analysis %s included : %s" % (analysis,analyses[analysis])
+    # we have it low energy or R or skipping
+    elif (analysis in hw_low_energy_analyses or analysis in skip or
+          analysis in hw_R_analyses ) :
+        continue
+    # obsolete
+    elif("[OBSOLETE]" in analyses[analysis]) :
+        if(opts.obsolete) : print "Obsolete analysis %s not included : %s" % (analysis,analyses[analysis])
+    # searches
+    elif("Search" in analyses[analysis] or "search" in analyses[analysis] or analysis in searches) :
+        if(opts.search) : print "Search   analysis %s not included  : %s" % (analysis,analyses[analysis])
+    # mc only
+    elif(analysis[0:3]=="MC_") :
+        if(opts.MC) : print "MC   analysis %s not included  : %s" % (analysis,analyses[analysis])
+    # examples
+    elif("[EXAMPLE]" in analyses[analysis]) :
+        continue
+    # we don't have it
+    else :
+        p=subprocess.Popen(["rivet","--show-analysis",analysis],stdout=subprocess.PIPE)
+        desc=p.communicate()[0]
+        beams=[]
+        for line in desc.split("\n") :
+            if("Beams:" in line) :
+                beams=line.replace("Beams:","").split()
+        nHeavy = sum((part=="Pb" or part=="Au") for part in beams)
+        if(nHeavy == len(beams) or nHeavy+1 == len(beams)) :
+            if(opts.heavy_ion) : print "Heavy Ion analysis %s not included  : %s" % (analysis,analyses[analysis])
+        else :
+            print "MISSING ANALYSIS",analysis,analyses[analysis]
+            if(opts.output) : print desc
+# output second file for rivet
+anatohepmc.close()
+for fname in sorted(files) :
+    anals=[]
+    for anal in hw_analyses :
+        if(fname in hw_analyses[anal]) :
+            anals.append(anal)
+    hepmctoana.write("%s %s\n" % (fname,' '.join(sorted(anals))) )
+hepmctoana.close()