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.base.physicsUnits import TeV, GeV, fb
from smodels.installation import installDirectory
from smodels.share.models.mssm import BSMList
from smodels.share.models.SMparticles import SMList
from smodels.base.model import Model
from smodels.decomposition import decomposer
from smodels.matching.theoryPrediction import theoryPredictionsFor
from smodels.experiment.databaseObj import Database
from smodels.tools import coverage
from smodels.base import smodelsLogging
smodelsLogging.setLogLevel('error')
In [3]:
# Define the SLHA input file name
filename="inputFiles/slha/gluino_squarks.slha"
model = Model(BSMparticles = BSMList, SMparticles = SMList)
model.updateParticles(inputFile=filename)
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")
topList = decomposer.decompose(model, sigmacut = 10* fb, massCompress=True, invisibleCompress=True,minmassgap = 5* GeV)
print(len(topList.getSMSList()))
#(Computing theory predictions will tag the elements which have been tested)
allThPredictions = theoryPredictionsFor(database, topList)
32
In [5]:
#Find out missing topologies:
uncovered = coverage.Uncovered(topList)
#First sort coverage groups by label
groups = sorted(uncovered.groups[:], key = lambda g: g.label)
In [6]:
#Print uncovered cross-sections:
for group in groups:
print("\nTotal cross-section for %s (fb): %10.3E" %(group.description,group.getTotalXSec()))
Total cross-section for missing topologies (fb): 3.888E+02 Total cross-section for missing topologies with displaced decays (fb): 0.000E+00 Total cross-section for missing topologies with prompt decays (fb): 3.888E+02 Total cross-section for topologies outside the grid (fb): 0.000E+00
In [7]:
# Get list of topologies which are not tested by any result:
missingTopos = uncovered.getGroup('missing (all)')
# print information about the first few missing topologies and
# the elements contributing to the topology:
for genEl in missingTopos.finalStateSMS[:5]:
print ('\nmissing topology:',str(genEl))
print ('Contributing elements:')
for el in genEl._contributingSMS:
print('\t',el)
missing topology: PV > (W,jet,MET), (W,jet,jet,MET) Contributing elements: (PV > su_L(1),gluino(2)), (su_L(1) > q,C1+(4)), (gluino(2) > q,q,C1-(7)), (C1+(4) > N1,W+), (C1-(7) > N1~,W-) (PV > su_L(1),gluino(2)), (su_L(1) > q,C1+(4)), (gluino(2) > q,q,C1+(7)), (C1+(4) > N1,W+), (C1+(7) > N1,W+) (PV > su_L(1),gluino(2)), (su_L(1) > q,C1+(4)), (gluino(2) > q,c,C1-(7)), (C1+(4) > N1,W+), (C1-(7) > N1~,W-) (PV > su_L(1),gluino(2)), (su_L(1) > q,C1+(4)), (gluino(2) > q,c,C1+(7)), (C1+(4) > N1,W+), (C1+(7) > N1,W+) missing topology: PV > (jet,MET), (W,jet,jet,MET) Contributing elements: (PV > su_R(1),gluino(2)), (su_R(1) > N1,q), (gluino(2) > q,q,C1-(7)), (C1-(7) > N1~,W-) (PV > su_R(1),gluino(2)), (su_R(1) > N1,q), (gluino(2) > q,q,C1+(7)), (C1+(7) > N1,W+) (PV > su_R(1),gluino(2)), (su_R(1) > N1,q), (gluino(2) > q,c,C1-(7)), (C1-(7) > N1~,W-) (PV > su_R(1),gluino(2)), (su_R(1) > N1,q), (gluino(2) > q,c,C1+(7)), (C1+(7) > N1,W+) missing topology: PV > (W,jet,MET), (W,b,t,MET) Contributing elements: (PV > su_L(1),gluino(2)), (su_L(1) > q,C1+(4)), (gluino(2) > t-,b,C1+(7)), (C1+(4) > N1,W+), (C1+(7) > N1,W+) (PV > su_L(1),gluino(2)), (su_L(1) > q,C1+(4)), (gluino(2) > b,t+,C1-(7)), (C1+(4) > N1,W+), (C1-(7) > N1~,W-) missing topology: PV > (higgs,jet,MET), (W,jet,jet,MET) Contributing elements: (PV > su_L(1),gluino(2)), (su_L(1) > q,N2(4)), (gluino(2) > q,q,C1-(7)), (N2(4) > N1,higgs), (C1-(7) > N1~,W-) (PV > su_L(1),gluino(2)), (su_L(1) > q,N2(4)), (gluino(2) > q,q,C1+(7)), (N2(4) > N1,higgs), (C1+(7) > N1,W+) (PV > su_L(1),gluino(2)), (su_L(1) > q,N2(4)), (gluino(2) > q,c,C1-(7)), (N2(4) > N1,higgs), (C1-(7) > N1~,W-) (PV > su_L(1),gluino(2)), (su_L(1) > q,N2(4)), (gluino(2) > q,c,C1+(7)), (N2(4) > N1,higgs), (C1+(7) > N1,W+) missing topology: PV > (jet,MET), (W,b,t,MET) Contributing elements: (PV > su_R(1),gluino(2)), (su_R(1) > N1,q), (gluino(2) > t-,b,C1+(7)), (C1+(7) > N1,W+) (PV > su_R(1),gluino(2)), (su_R(1) > N1,q), (gluino(2) > b,t+,C1-(7)), (C1-(7) > N1~,W-)
In [8]:
# Get list of topologies which are not tested by any result:
outsideGrid = uncovered.getGroup('outsideGrid (all)')
# print information about the first few missing topologies and
# the elements contributing to the topology:
for genEl in outsideGrid.finalStateSMS[:5]:
print ('\nmissing topology:',str(genEl))
print ('Contributing elements:')
for el in genEl._contributingSMS:
print('\t',el)
print('\t element mass:',el.mass)
In [ ]: