How To: Find missing topologies that are not covered by the database

In [1]:
# Set up the path to SModelS installation folder
import sys; sys.path.append("."); import smodels_paths
In [2]:
# Import those parts of smodels that are needed for this exercise
from smodels.tools.physicsUnits import TeV, GeV, fb
from smodels.installation import installDirectory
from smodels.theory import slhaDecomposer
from smodels.theory.theoryPrediction import theoryPredictionsFor
from smodels.experiment.databaseObj import Database
from smodels.tools import coverage
In [3]:
# Define the SLHA input file name
filename="%s/inputFiles/slha/gluino_squarks.slha" % installDirectory()
In [4]:
# Load the database, do the decomposition and compute theory predictions:
# (Look at the theory predictions HowTo to learn how to compute theory predictions)
database = Database("official")
expResults = database.getExpResults()
topList = slhaDecomposer.decompose(filename, sigcut = 0.03 * fb, doCompress=True, doInvisible=True,minmassgap = 5* GeV)
#(Computing theory predictions will tag the elements which have been tested)
allThPredictions = [theoryPredictionsFor(exp, topList) for exp in expResults]
In [5]:
# Create missing Topologies object
uncovered = coverage.Uncovered(topList)
In [6]:
# Print basic information about coverage:
print ("Total missing topology cross section (fb): %10.3E" %(uncovered.getMissingXsec()))
print ("Total cross section where we are outside the mass grid (fb): %10.3E" %(uncovered.getOutOfGridXsec()))
print ("Total cross section in long cascade decays (fb): %10.3E" %(uncovered.getLongCascadeXsec()))
print ("Total cross section in decays with asymmetric branches (fb): %10.3E" %(uncovered.getAsymmetricXsec()))  
Total missing topology cross section (fb):  2.936E+03
Total cross section where we are outside the mass grid (fb):  3.257E+00
Total cross section in long cascade decays (fb):  1.247E+03
Total cross section in decays with asymmetric branches (fb):  1.667E+03
In [7]:
# Get list of topologies which are not tested by any result:
missingTopos = uncovered.missingTopos
# print information about the first few missing topologies and
# the elements contributing to the topology: 
for top in missingTopos.topos[:5]:
    print ('\nmissing topology:',top.topo)
    print ('Contributing elements:')
    for el in sorted(top.contributingElements, key=lambda el: el.weight):
        print (el,', xsection:',el.weight)
missing topology: [[],[]] ('MET', 'MET')
Contributing elements:
[[],[]] , xsection: ['8.00E+00 [TeV]:4.81E-04 [pb]', '1.30E+01 [TeV]:1.58E-03 [pb]']

missing topology: [[],[[W]]] ('MET', 'MET')
Contributing elements:
[[],[[W+]]] , xsection: ['8.00E+00 [TeV]:2.40E-04 [pb]', '1.30E+01 [TeV]:2.63E-04 [pb]']

missing topology: [[],[[jet]]] ('MET', 'MET')
Contributing elements:
[[],[[c]]] , xsection: ['8.00E+00 [TeV]:1.23E-05 [pb]', '1.30E+01 [TeV]:8.09E-05 [pb]']
[[],[[q]]] , xsection: ['8.00E+00 [TeV]:1.19E-05 [pb]', '1.30E+01 [TeV]:1.83E-04 [pb]']
[[],[[q]]] , xsection: ['8.00E+00 [TeV]:6.15E-04 [pb]', '1.30E+01 [TeV]:3.15E-03 [pb]']

missing topology: [[],[[b,b]]] ('MET', 'MET')
Contributing elements:
[[],[[b,b]]] , xsection: ['8.00E+00 [TeV]:1.13E-05 [pb]', '1.30E+01 [TeV]:6.43E-05 [pb]']

missing topology: [[],[[jet,jet]]] ('MET', 'MET')
Contributing elements:
[[],[[c,c]]] , xsection: ['8.00E+00 [TeV]:9.63E-05 [pb]', '1.30E+01 [TeV]:5.47E-04 [pb]']
[[],[[q,q]]] , xsection: ['8.00E+00 [TeV]:1.54E-04 [pb]', '1.30E+01 [TeV]:8.76E-04 [pb]']
In [9]:
# Get list of topologies which are outside the upper limit and efficiency map grids:
outsideGrid = uncovered.outsideGrid
# print information about the first few missing topologies and
# the elements contributing to the topology: 
for top in outsideGrid.topos[:5]:
    print ('\noutside the grid topology:',top.topo)
    print ('Contributing elements:')
    for el in top.contributingElements:
        print (el,'mass=',el.getMasses())
outside the grid topology: [[[jet]],[[t,t]]] ('MET', 'MET')
Contributing elements:
[[[q]],[[t+,t-]]] mass= [[9.91E+02 [GeV], 1.29E+02 [GeV]], [8.65E+02 [GeV], 1.29E+02 [GeV]]]
[[[q]],[[t+,t-]]] mass= [[9.92E+02 [GeV], 1.29E+02 [GeV]], [8.65E+02 [GeV], 1.29E+02 [GeV]]]
[[[q]],[[t+,t-]]] mass= [[9.92E+02 [GeV], 1.29E+02 [GeV]], [8.65E+02 [GeV], 1.29E+02 [GeV]]]

outside the grid topology: [[[b],[higgs]],[[b],[higgs]]] ('MET', 'MET')
Contributing elements:
[[[b],[higgs]],[[b],[higgs]]] mass= [[9.59E+02 [GeV], 2.69E+02 [GeV], 1.29E+02 [GeV]], [9.59E+02 [GeV], 2.69E+02 [GeV], 1.29E+02 [GeV]]]

outside the grid topology: [[[t],[W]],[[t],[W]]] ('MET', 'MET')
Contributing elements:
[[[t+],[W-]],[[t-],[W+]]] mass= [[9.59E+02 [GeV], 2.69E+02 [GeV], 1.29E+02 [GeV]], [9.59E+02 [GeV], 2.69E+02 [GeV], 1.29E+02 [GeV]]]
[[[t+],[W-]],[[t-],[W+]]] mass= [[9.59E+02 [GeV], 2.69E+02 [GeV], 1.29E+02 [GeV]], [9.59E+02 [GeV], 7.46E+02 [GeV], 1.29E+02 [GeV]]]
[[[t+],[W-]],[[t-],[W+]]] mass= [[9.59E+02 [GeV], 7.46E+02 [GeV], 1.29E+02 [GeV]], [9.59E+02 [GeV], 2.69E+02 [GeV], 1.29E+02 [GeV]]]
In [ ]: