diff --git a/Example.ipynb b/Example.ipynb index 3f0883807..5eb15ef9a 100644 --- a/Example.ipynb +++ b/Example.ipynb @@ -9,23 +9,17 @@ "source": [ "#!/usr/bin/env python3\n", "\n", - "from __future__ import print_function\n", "from smodels.base import runtime\n", - "# Define your model (list of BSM particles)\n", - "runtime.modelFile = 'smodels.share.models.mssm'\n", - "# runtime.modelFile = 'mssmQNumbers.slha'\n", - "\n", "from smodels.decomposition import decomposer\n", "from smodels.base.physicsUnits import fb, GeV, TeV\n", "from smodels.matching.theoryPrediction import theoryPredictionsFor,TheoryPredictionsCombiner\n", "from smodels.experiment.databaseObj import Database\n", "from smodels.tools import coverage\n", "from smodels.base.smodelsLogging import setLogLevel\n", - "from smodels.share.models.mssm import BSMList\n", + "from smodels.particlesLoader import load\n", "from smodels.share.models.SMparticles import SMList\n", "from smodels.base.model import Model\n", "import time\n", - "import os\n", "setLogLevel(\"info\")" ] }, @@ -97,12 +91,15 @@ } ], "source": [ + "# Load the BSM model\n", + "runtime.modelFile = \"smodels.share.models.mssm\"\n", + "BSMList = load()\n", "model = Model(BSMparticles=BSMList, SMparticles=SMList)\n", "slhafile = 'inputFiles/slha/lightEWinos.slha'\n", - "model.updateParticles(inputFile=slhafile)\n", + "model.updateParticles(inputFile=slhafile,ignorePromptQNumbers = ['eCharge','spin'])\n", "\n", "# Set main options for decomposition\n", - "sigmacut = 0.5*fb\n", + "sigmacut = 0.001*fb\n", "mingap = 5.*GeV\n", "\n", "t0 = time.time()\n", diff --git a/Example.py b/Example.py index bf4f4e69f..6f7c91976 100755 --- a/Example.py +++ b/Example.py @@ -9,10 +9,6 @@ """ Import basic functions (this file must be executed in the installation folder) """ from smodels.base import runtime -# Define your model (list of BSM particles) -runtime.modelFile = 'smodels.share.models.mssm' -# runtime.modelFile = 'mssmQNumbers.slha' - from smodels.decomposition import decomposer from smodels.base.physicsUnits import fb, GeV, TeV from smodels.matching.theoryPrediction import theoryPredictionsFor,TheoryPredictionsCombiner diff --git a/docs/manual/source/TheoryPredictions.rst b/docs/manual/source/TheoryPredictions.rst index d5c5051b7..f87a6d28b 100644 --- a/docs/manual/source/TheoryPredictions.rst +++ b/docs/manual/source/TheoryPredictions.rst @@ -204,19 +204,22 @@ to determine whether two |SMS| are similar for a given |ExpRes|, which usually m Although the efficiencies are related to the cross section upper limit (:math:`\sigma_{\rm UL}`), the assumption they are inversely proportional is only valid for searches with a single signal region, which is rarely the case. However, if two |SMS| have similar properties (i.e. BSM masses and widths) and their upper limits are nearly equal, it is reasonable to assume that they have similar efficiencies. -Hence the distance between two |SMS| can be defined as the relative difference between their upper limits and if this distance is smaller -than a maximum value (defined by `maxDist `_), -the |SMS| can be grouped together in the same cluster. - -Hence, in order to compute the clusters, the following "upper limit distance" distance between two |SMS| is defined: +Hence, a measure of *distance* between two |SMS| can be defined using the relative difference between their upper limits: .. math:: - \mbox{distance}(a,b) = d(a,b) = 2 \frac{|\sigma_{UL,a}-\sigma_{UL,b}|}{\sigma_{UL,a}+\sigma_{UL,b}} where :math:`\sigma_{UL,a}` (:math:`\sigma_{UL,b}`) is the cross section upper limit for the |SMS| "a" ("b"). These upper limits are extracted from the :ref:`upper limit maps ` and typically depend on the masses and widths of the BSM particles appearing in the |SMS|. +Notice that the above definition of distance quantifies the experimental analysis' +sensitivity to changes in the |SMS| properties (masses and widths). + + +However, since most |ExpRess| combine distinct signal regions, it is possible that two |SMS| have (by chance) the same upper limit value, but still have very distinct efficiencies and should not be clustered together. +One example is shown in :numref:`Fig. %s `, where the |SMS| "a" and "b" have similar upper limits (:math:`\sigma_{\rm UL,a} \simeq \sigma_{\rm UL,b}`), but they clearly have very distinct masses and most likely different efficiencies. +In order to deal with such cases we define for each cluster of |SMS| an "average" topology, which is constructed using the average of the |SMS| properties (average masses and widths). +If the average masses are very distinct from the masses of the original |SMS|, it is likely that the upper limit for the average |SMS| will fall into another region of the upper limit map and will differ considerably from the original upper limits, as shown in :numref:`Fig. %s `. .. _avgSMSFig: @@ -227,29 +230,11 @@ where :math:`\sigma_{UL,a}` (:math:`\sigma_{UL,b}`) is the cross section upper l Example of two |SMS| with similar upper limit, but very distinct masses. The "average" |SMS| is also shown. -Notice that the above definition of distance quantifies the experimental analysis' -sensitivity to changes in the |SMS| properties (masses and widths). -However, since most |ExpRess| combine distinct signal regions, it is possible that two |SMS| have (by chance) the same upper limit value, but still have very distinct efficiencies and should not be clustered together. -One example is shown in :numref:`Fig. %s `, where the |SMS| "a" and "b" have similar upper limits (:math:`\sigma_{\rm UL,a} \simeq \sigma_{\rm UL,b}`), but they clearly have very distinct masses and most likely different efficiencies. -In order to deal with such cases an "average" |SMS| is constructed using the average of the |SMS| properties (average masses and widths). If the average masses are very distinct from the masses of the original |SMS|, it is likely that the upper limit for the average |SMS| will fall into another region of the upper limit map and will differ considerably from the original upper limits. In :numref:`Fig. %s ` this is illustrated by: - -.. math:: - \sigma_{\rm UL,avg} \ll \sigma_{\rm UL,a} \simeq \sigma_{\rm UL,b} - - -Therefore an additional requirement is imposed when clustering |topologies|: the distance between any |SMS| belonging to a cluster and the average |SMS| for the cluster must also be smaller than `maxDist `_. Hence the conditions for clustering two or more |SMS| reads: - - - - 1. :math:`d(a,b) < d_{\rm max}`, for any "a" and "b" in the cluster - 2. :math:`d(a,avg) < d_{\rm max}`, for any "a" in the cluster - -.. math:: - -where *average* SMS of a cluster corresponds to -the |SMS| with the same common structure and final states, but with the -mass array and widths replaced by the average mass and width over all the |topologies| in the cluster. - +Hence the distance between the |SMS| in a given cluster and the cluster average |SMS| (or centroid) can be used as a measure to determine +whether the cluster is valid or not. +This type of clustering corresponds to the K-means clustering algorithm, which relies on the distance between the cluster elements and the cluster centroid. +A modified version of this algorithm is then used to cluster a set of |SMS| using the distance definition given above. +The number of clusters is chosen as the smallest possible so all the |SMS| belong to one cluster and all the |SMS| within a given cluster have a distance to the cluster centroid smaller than a maximum value (defined by `maxDist `_). * **The clustering of SMS is implemented by the** `clusterSMS `_ **method**. diff --git a/docs/manual/source/examples/Example.py b/docs/manual/source/examples/Example.py index bf4f4e69f..6f7c91976 100755 --- a/docs/manual/source/examples/Example.py +++ b/docs/manual/source/examples/Example.py @@ -9,10 +9,6 @@ """ Import basic functions (this file must be executed in the installation folder) """ from smodels.base import runtime -# Define your model (list of BSM particles) -runtime.modelFile = 'smodels.share.models.mssm' -# runtime.modelFile = 'mssmQNumbers.slha' - from smodels.decomposition import decomposer from smodels.base.physicsUnits import fb, GeV, TeV from smodels.matching.theoryPrediction import theoryPredictionsFor,TheoryPredictionsCombiner diff --git a/unittests/database/13TeV/CMS/CMS-EXO-19-012/data/TRV1jj.txt b/unittests/database/13TeV/CMS/CMS-EXO-19-012/data/TRV1jj.txt new file mode 100644 index 000000000..e485705e8 --- /dev/null +++ b/unittests/database/13TeV/CMS/CMS-EXO-19-012/data/TRV1jj.txt @@ -0,0 +1,387 @@ +txName: TRV1jj +constraint: {(PV > Zprime(1)),(Zprime(1) > jetb(2),jetb(3))} +condition: None +conditionDescription: None +figureUrl: https://cms-results.web.cern.ch/cms-results/public-results/publications/EXO-19-012/CMS-EXO-19-012_Figure_010-c.png +source: CMS +validated: True +axesMap: [{0: 'x'}] +dataMap: {0: (1, 'mass', GeV), 1: (1, 'totalwidth', GeV)} +upperLimits:[[[1800.0, 0], 0.2230349999999999*pb], +[[1800.0, 18.0], 0.2230349999999999*pb], +[[1800.0, 90.0], 0.4200996145626882*pb], +[[1800.0, 180.0], 0.7744556057439493*pb], +[[1800.0, 270.0], 1.4884679356092163*pb], +[[1800.0, 360.0], 2.693249895901419*pb], +[[1900.0, 0], 0.21617*pb], +[[1900.0, 19.0], 0.21617*pb], +[[1900.0, 95.0], 0.4258581307030618*pb], +[[1900.0, 190.0], 0.8291866342808377*pb], +[[1900.0, 285.0], 1.487288506338711*pb], +[[1900.0, 380.0], 2.5249688497182974*pb], +[[2000.0, 0], 0.1934825*pb], +[[2000.0, 20.0], 0.1934825*pb], +[[2000.0, 100.0], 0.3587878882515058*pb], +[[2000.0, 200.0], 0.652798399070428*pb], +[[2000.0, 300.0], 1.247449079996126*pb], +[[2000.0, 400.0], 1.831863256285072*pb], +[[2100.0, 0], 0.1543874999999999*pb], +[[2100.0, 21.0], 0.1543874999999999*pb], +[[2100.0, 105.0], 0.2473039974670946*pb], +[[2100.0, 210.0], 0.3977757661968188*pb], +[[2100.0, 315.0], 0.5297723176842034*pb], +[[2100.0, 420.0], 0.8453105287733529*pb], +[[2100.0, 630.0], 1.4484293461577815*pb], +[[2100.0, 840.0], 2.016310697991936*pb], +[[2100.0, 1155.0], 3.707068516912402*pb], +[[2200.0, 0], 0.0778075*pb], +[[2200.0, 22.0], 0.0778075*pb], +[[2200.0, 110.0], 0.1209188948740557*pb], +[[2200.0, 220.0], 0.1842485736514522*pb], +[[2200.0, 330.0], 0.3052699251098527*pb], +[[2200.0, 440.0], 0.4592320825365425*pb], +[[2200.0, 660.0], 0.9397000306091216*pb], +[[2200.0, 880.0], 1.5977778305145105*pb], +[[2200.0, 1210.0], 2.905753823743627*pb], +[[2300.0, 0], 0.0315074999999999*pb], +[[2300.0, 23.0], 0.0315074999999999*pb], +[[2300.0, 115.0], 0.0596306003960165*pb], +[[2300.0, 230.0], 0.108679146485142*pb], +[[2300.0, 345.0], 0.1969048946887067*pb], +[[2300.0, 460.0], 0.3084840958310049*pb], +[[2300.0, 690.0], 0.6932555780933063*pb], +[[2300.0, 920.0], 1.1838275221205588*pb], +[[2300.0, 1265.0], 2.410956923966464*pb], +[[2400.0, 0], 0.0344675*pb], +[[2400.0, 24.0], 0.0344675*pb], +[[2400.0, 120.0], 0.0598893162509059*pb], +[[2400.0, 240.0], 0.1126391573895073*pb], +[[2400.0, 360.0], 0.1991848461008917*pb], +[[2400.0, 480.0], 0.318518030382331*pb], +[[2400.0, 720.0], 0.6558690176322418*pb], +[[2400.0, 960.0], 1.3444930664407568*pb], +[[2400.0, 1320.0], 2.672940340909091*pb], +[[2500.0, 0], 0.0458725*pb], +[[2500.0, 25.0], 0.0458725*pb], +[[2500.0, 125.0], 0.0830071215506603*pb], +[[2500.0, 250.0], 0.1456665774327399*pb], +[[2500.0, 375.0], 0.2399791205149514*pb], +[[2500.0, 500.0], 0.3586221999508577*pb], +[[2500.0, 750.0], 0.7838028880137331*pb], +[[2500.0, 1000.0], 1.3528519425114072*pb], +[[2500.0, 1375.0], 2.578077644681772*pb], +[[2600.0, 0], 0.0634299999999999*pb], +[[2600.0, 26.0], 0.0634299999999999*pb], +[[2600.0, 130.0], 0.1092399537746518*pb], +[[2600.0, 260.0], 0.1845430739273484*pb], +[[2600.0, 390.0], 0.2915893020240999*pb], +[[2600.0, 520.0], 0.4321673661043722*pb], +[[2600.0, 780.0], 0.9369989722507708*pb], +[[2600.0, 1040.0], 1.562537347132282*pb], +[[2600.0, 1430.0000000000002], 3.030046003450259*pb], +[[2700.0, 0], 0.065255*pb], +[[2700.0, 27.0], 0.065255*pb], +[[2700.0, 135.0], 0.1197086203276713*pb], +[[2700.0, 270.0], 0.2208489473325611*pb], +[[2700.0, 405.0], 0.367300582815388*pb], +[[2700.0, 540.0], 0.5453943038253845*pb], +[[2700.0, 810.0], 1.0158104738154612*pb], +[[2700.0, 1080.0], 1.9507421400442584*pb], +[[2700.0, 1485.0000000000002], 3.70351029881056*pb], +[[2800.0, 0], 0.0619124999999999*pb], +[[2800.0, 28.0], 0.0619124999999999*pb], +[[2800.0, 140.0], 0.1149651350731377*pb], +[[2800.0, 280.0], 0.2200654915348708*pb], +[[2800.0, 420.0], 0.3695330651234688*pb], +[[2800.0, 560.0], 0.5464625075355992*pb], +[[2800.0, 840.0], 1.0736853154193349*pb], +[[2800.0, 1120.0], 1.8911512266838757*pb], +[[2800.0, 1540.0000000000002], 3.4983243479527903*pb], +[[2900.0, 0], 0.052125*pb], +[[2900.0, 29.0], 0.052125*pb], +[[2900.0, 145.0], 0.1007572196189162*pb], +[[2900.0, 290.0], 0.2078234843739124*pb], +[[2900.0, 435.0], 0.3382097250524392*pb], +[[2900.0, 580.0], 0.51930794914479*pb], +[[2900.0, 870.0], 1.0132093416464123*pb], +[[2900.0, 1160.0], 1.7424688269609525*pb], +[[2900.0, 1595.0000000000002], 3.0179767103347888*pb], +[[3000.0, 0], 0.0598075*pb], +[[3000.0, 30.0], 0.0598075*pb], +[[3000.0, 150.0], 0.1209263320749015*pb], +[[3000.0, 300.0], 0.2331279914908703*pb], +[[3000.0, 450.0], 0.4010001015856743*pb], +[[3000.0, 600.0], 0.6001397998200142*pb], +[[3000.0, 900.0], 1.1490519992491084*pb], +[[3000.0, 1200.0], 2.1143770870658307*pb], +[[3000.0, 1650.0000000000002], 3.317336433078711*pb], +[[3100.0, 0], 0.0471899999999999*pb], +[[3100.0, 31.0], 0.0471899999999999*pb], +[[3100.0, 155.0], 0.0929579600653733*pb], +[[3100.0, 310.0], 0.1914022336465165*pb], +[[3100.0, 465.0], 0.3514509033467422*pb], +[[3100.0, 620.0], 0.5529623848855401*pb], +[[3100.0, 930.0], 1.0834266517357225*pb], +[[3100.0, 1240.0], 1.9544072193452529*pb], +[[3100.0, 1705.0000000000002], 3.296229508196721*pb], +[[3200.0, 0], 0.0271749999999999*pb], +[[3200.0, 32.0], 0.0271749999999999*pb], +[[3200.0, 160.0], 0.0623288519580619*pb], +[[3200.0, 320.0], 0.1630309673883255*pb], +[[3200.0, 480.0], 0.2801637805402731*pb], +[[3200.0, 640.0], 0.4851894317422562*pb], +[[3200.0, 960.0], 0.971253709198813*pb], +[[3200.0, 1280.0], 1.8485218529173908*pb], +[[3200.0, 1760.0000000000002], 3.409392789373814*pb], +[[3300.0, 0], 0.0191525*pb], +[[3300.0, 33.0], 0.0191525*pb], +[[3300.0, 165.0], 0.0486550430614555*pb], +[[3300.0, 330.0], 0.1338018304071722*pb], +[[3300.0, 495.0], 0.2542909577382601*pb], +[[3300.0, 660.0], 0.455945534444483*pb], +[[3300.0, 990.0], 0.9337738342457994*pb], +[[3300.0, 1320.0], 1.6332497934163963*pb], +[[3300.0, 1815.0], 3.436553945249597*pb], +[[3400.0, 0], 0.0172499999999999*pb], +[[3400.0, 34.0], 0.0172499999999999*pb], +[[3400.0, 170.0], 0.0441741705598516*pb], +[[3400.0, 340.0], 0.1252552467385139*pb], +[[3400.0, 510.0], 0.2422412972292588*pb], +[[3400.0, 680.0], 0.4351972947537091*pb], +[[3400.0, 1020.0], 0.9093582356447448*pb], +[[3400.0, 1360.0], 1.6924897844498172*pb], +[[3400.0, 1870.0], 3.443031704095112*pb], +[[3500.0, 0], 0.0175425*pb], +[[3500.0, 35.0], 0.0175425*pb], +[[3500.0, 175.0], 0.0465707943029917*pb], +[[3500.0, 350.0], 0.1305690898460339*pb], +[[3500.0, 525.0], 0.2483328312916118*pb], +[[3500.0, 700.0], 0.4235401567935907*pb], +[[3500.0, 1050.0], 0.9098181466434514*pb], +[[3500.0, 1400.0], 1.7051898078448884*pb], +[[3500.0, 1925.0], 3.249247743229689*pb], +[[3600.0, 0], 0.019485*pb], +[[3600.0, 36.0], 0.019485*pb], +[[3600.0, 180.0], 0.053846459079748*pb], +[[3600.0, 360.0], 0.1444067968038838*pb], +[[3600.0, 540.0], 0.2533773351999805*pb], +[[3600.0, 720.0], 0.4425451898638715*pb], +[[3600.0, 1080.0], 0.936065899166336*pb], +[[3600.0, 1440.0], 1.8127413230349465*pb], +[[3600.0, 1980.0], 3.133786078098472*pb], +[[3700.0, 0], 0.0224049999999999*pb], +[[3700.0, 37.0], 0.0224049999999999*pb], +[[3700.0, 185.0], 0.0592046308697821*pb], +[[3700.0, 370.0], 0.1583544973544973*pb], +[[3700.0, 555.0], 0.2709044723865521*pb], +[[3700.0, 740.0], 0.4597487814462019*pb], +[[3700.0, 1110.0], 0.9780783582089552*pb], +[[3700.0, 1480.0], 1.9434652975341888*pb], +[[3700.0, 2035.0], 3.006963315217392*pb], +[[3800.0, 0], 0.0220849999999999*pb], +[[3800.0, 38.0], 0.0220849999999999*pb], +[[3800.0, 190.0], 0.0610701638642394*pb], +[[3800.0, 380.0], 0.1634636383489845*pb], +[[3800.0, 570.0], 0.2822571946410894*pb], +[[3800.0, 760.0], 0.4554237062345623*pb], +[[3800.0, 1140.0], 1.052201933404941*pb], +[[3800.0, 1520.0], 1.957333956738323*pb], +[[3800.0, 2090.0], 3.0206382240721465*pb], +[[3900.0, 0], 0.0210949999999999*pb], +[[3900.0, 39.0], 0.0210949999999999*pb], +[[3900.0, 195.0], 0.059959577407573*pb], +[[3900.0, 390.0], 0.1617008242370238*pb], +[[3900.0, 585.0], 0.286013340158506*pb], +[[3900.0, 780.0], 0.4643699942384707*pb], +[[3900.0, 1170.0], 1.0444141069397042*pb], +[[3900.0, 1560.0], 1.755765839878598*pb], +[[3900.0, 2145.0], 3.1177737881508083*pb], +[[4000.0, 0], 0.0199499999999999*pb], +[[4000.0, 40.0], 0.0199499999999999*pb], +[[4000.0, 200.0], 0.0584108756753086*pb], +[[4000.0, 400.0], 0.1628500823723229*pb], +[[4000.0, 600.0], 0.2816909458208264*pb], +[[4000.0, 800.0], 0.5034365818829848*pb], +[[4000.0, 1200.0], 0.9165531335149862*pb], +[[4000.0, 1600.0], 1.7536541181584815*pb], +[[4000.0, 2200.0], 3.1394300144300145*pb], +[[4100.0, 0], 0.0149*pb], +[[4100.0, 41.0], 0.0149*pb], +[[4100.0, 205.0], 0.0485319515216065*pb], +[[4100.0, 410.0], 0.1594508381285964*pb], +[[4100.0, 615.0], 0.2728445840679529*pb], +[[4100.0, 820.0], 0.4785846370247006*pb], +[[4100.0, 1230.0], 0.8538759689922482*pb], +[[4100.0, 1640.0], 1.7748962409345552*pb], +[[4100.0, 2255.0], 3.0293584632113086*pb], +[[4200.0, 0], 0.00754*pb], +[[4200.0, 42.0], 0.00754*pb], +[[4200.0, 210.0], 0.0295082146706302*pb], +[[4200.0, 420.0], 0.1183457790153145*pb], +[[4200.0, 630.0], 0.2323788938225891*pb], +[[4200.0, 840.0], 0.5293236260004279*pb], +[[4200.0, 1260.0], 0.8451510721247564*pb], +[[4200.0, 1680.0], 1.667996515142927*pb], +[[4200.0, 2310.0], 3.1027017024426358*pb], +[[4300.0, 0], 0.0046475*pb], +[[4300.0, 43.0], 0.0046475*pb], +[[4300.0, 215.0], 0.0217722457198738*pb], +[[4300.0, 430.0], 0.1090261920752182*pb], +[[4300.0, 645.0], 0.2189625591943753*pb], +[[4300.0, 860.0], 0.5087835185395693*pb], +[[4300.0, 1290.0], 0.9028468423669817*pb], +[[4300.0, 1720.0], 1.8514947223558988*pb], +[[4300.0, 2365.0], 3.2811538461538463*pb], +[[4400.0, 0], 0.00422*pb], +[[4400.0, 44.0], 0.00422*pb], +[[4400.0, 220.0], 0.0213171257789106*pb], +[[4400.0, 440.0], 0.1143564356435643*pb], +[[4400.0, 660.0], 0.2333428732684447*pb], +[[4400.0, 880.0], 0.4756187981553627*pb], +[[4400.0, 1320.0], 0.9250843060959792*pb], +[[4400.0, 1760.0], 2.038544106634761*pb], +[[4400.0, 2420.0], 3.256065696155282*pb], +[[4500.0, 0], 0.0061074999999999*pb], +[[4500.0, 45.0], 0.0061074999999999*pb], +[[4500.0, 225.0], 0.0295166863913748*pb], +[[4500.0, 450.0], 0.1345061092300898*pb], +[[4500.0, 675.0], 0.2698101665218739*pb], +[[4500.0, 900.0], 0.4649164957271577*pb], +[[4500.0, 1350.0], 1.031127779266006*pb], +[[4500.0, 1800.0], 2.131826204651676*pb], +[[4500.0, 2475.0], 3.3180571876224048*pb], +[[4600.0, 0], 0.008065*pb], +[[4600.0, 46.0], 0.008065*pb], +[[4600.0, 230.0], 0.0390053508704974*pb], +[[4600.0, 460.0], 0.1695353247984826*pb], +[[4600.0, 690.0], 0.3404028981286799*pb], +[[4600.0, 920.0], 0.5030813221267602*pb], +[[4600.0, 1380.0], 1.20907016543069*pb], +[[4600.0, 1840.0], 2.282590629123358*pb], +[[4600.0, 2530.0], 3.739261340826977*pb], +[[4700.0, 0], 0.008355*pb], +[[4700.0, 47.0], 0.008355*pb], +[[4700.0, 235.0], 0.0452780556299368*pb], +[[4700.0, 470.0], 0.1899727912932138*pb], +[[4700.0, 705.0], 0.396650590904815*pb], +[[4700.0, 940.0], 0.5513414330006348*pb], +[[4700.0, 1410.0], 1.303893263342082*pb], +[[4700.0, 1880.0], 2.484694766245927*pb], +[[4700.0, 2585.0], 3.9309875583203735*pb], +[[4800.0, 0], 0.008205*pb], +[[4800.0, 48.0], 0.008205*pb], +[[4800.0, 240.0], 0.0490017585851877*pb], +[[4800.0, 480.0], 0.219810834049871*pb], +[[4800.0, 720.0], 0.442826976286403*pb], +[[4800.0, 960.0], 0.6425677349386977*pb], +[[4800.0, 1440.0], 1.4802383163107398*pb], +[[4800.0, 1920.0], 2.554055595407816*pb], +[[4800.0, 2640.0], 4.491320914479255*pb], +[[4900.0, 0], 0.0078975*pb], +[[4900.0, 49.0], 0.0078975*pb], +[[4900.0, 245.0], 0.0504644294402571*pb], +[[4900.0, 490.0], 0.24017824663514*pb], +[[4900.0, 735.0], 0.4858294322118488*pb], +[[4900.0, 980.0], 0.7475712802732047*pb], +[[4900.0, 1470.0], 1.6147828863346103*pb], +[[4900.0, 1960.0], 2.606302902296798*pb], +[[4900.0, 2695.0], 4.541405269761606*pb], +[[5000.0, 0], 0.0075025*pb], +[[5000.0, 50.0], 0.0075025*pb], +[[5000.0, 250.0], 0.0536912720671211*pb], +[[5000.0, 500.0], 0.2643970387687512*pb], +[[5000.0, 750.0], 0.5005494827706737*pb], +[[5000.0, 1000.0], 0.8065151627230875*pb], +[[5000.0, 1500.0], 1.6647582697201015*pb], +[[5000.0, 2000.0], 2.3726683393635035*pb], +[[5000.0, 2750.0], 4.649606299212598*pb], +[[5100.0, 0], 0.0065574999999999*pb], +[[5100.0, 51.0], 0.0065574999999999*pb], +[[5100.0, 255.0], 0.0522159138715689*pb], +[[5100.0, 510.0], 0.2477498479627002*pb], +[[5100.0, 765.0], 0.534990798124165*pb], +[[5100.0, 1020.0], 0.8914558698741923*pb], +[[5100.0, 1530.0], 1.837629728824908*pb], +[[5100.0, 2040.0], 2.512738586282535*pb], +[[5100.0, 2805.0], 4.713004484304933*pb], +[[5200.0, 0], 0.0048299999999999*pb], +[[5200.0, 52.0], 0.0048299999999999*pb], +[[5200.0, 260.0], 0.0467015161956414*pb], +[[5200.0, 520.0], 0.2563461538461538*pb], +[[5200.0, 780.0], 0.5480748547948419*pb], +[[5200.0, 1040.0], 0.99184202166098*pb], +[[5200.0, 1560.0], 1.603068141277203*pb], +[[5200.0, 2080.0], 2.6557745706198674*pb], +[[5200.0, 2860.0000000000005], 4.544404168554599*pb], +[[5300.0, 0], 0.0029474999999999*pb], +[[5300.0, 53.0], 0.0029474999999999*pb], +[[5300.0, 265.0], 0.0361257595631437*pb], +[[5300.0, 530.0], 0.2517553923818265*pb], +[[5300.0, 795.0], 0.5392545677458578*pb], +[[5300.0, 1060.0], 0.92669865351665*pb], +[[5300.0, 1590.0], 1.6002779708130646*pb], +[[5300.0, 2120.0], 2.6782967095683303*pb], +[[5300.0, 2915.0000000000005], 4.713956701980654*pb], +[[5400.0, 0], 0.00215*pb], +[[5400.0, 54.0], 0.00215*pb], +[[5400.0, 270.0], 0.0318001061441028*pb], +[[5400.0, 540.0], 0.2291666666666666*pb], +[[5400.0, 810.0], 0.5575763598119636*pb], +[[5400.0, 1080.0], 0.8979369177800328*pb], +[[5400.0, 1620.0], 1.6925176056338027*pb], +[[5400.0, 2160.0], 2.8641607419195534*pb], +[[5400.0, 2970.0000000000005], 4.841935483870968*pb], +[[5500.0, 0], 0.001705*pb], +[[5500.0, 55.0], 0.001705*pb], +[[5500.0, 275.0], 0.0290887766301033*pb], +[[5500.0, 550.0], 0.2227454909819639*pb], +[[5500.0, 825.0], 0.5266654866982651*pb], +[[5500.0, 1100.0], 0.8826600377928725*pb], +[[5500.0, 1650.0], 1.8094625283875851*pb], +[[5500.0, 2200.0], 3.033538337062497*pb], +[[5500.0, 3025.0000000000005], 4.826660386245879*pb], +[[5600.0, 0], 0.00145*pb], +[[5600.0, 56.0], 0.00145*pb], +[[5600.0, 280.0], 0.0271488937986355*pb], +[[5600.0, 560.0], 0.2184676354029062*pb], +[[5600.0, 840.0], 0.5234075606748746*pb], +[[5600.0, 1120.0], 0.8026387036579403*pb], +[[5600.0, 1680.0], 1.9137075219549444*pb], +[[5600.0, 2240.0], 3.1596303011272173*pb], +[[5600.0, 3080.0000000000005], 5.287109375*pb], +[[5700.0, 0], 0.0013999999999999*pb], +[[5700.0, 57.0], 0.0013999999999999*pb], +[[5700.0, 285.0], 0.028549068668666*pb], +[[5700.0, 570.0], 0.2083265194875988*pb], +[[5700.0, 855.0], 0.5928519748589262*pb], +[[5700.0, 1140.0], 0.74110145392269*pb], +[[5700.0, 1710.0], 2.031804163454125*pb], +[[5700.0, 2280.0], 3.687662808577026*pb], +[[5700.0, 3135.0000000000005], 5.700200702458605*pb], +[[5800.0, 0], 0.0012825*pb], +[[5800.0, 58.0], 0.0012825*pb], +[[5800.0, 290.0], 0.0296743396361249*pb], +[[5800.0, 580.0], 0.228018154311649*pb], +[[5800.0, 870.0], 0.619629212758779*pb], +[[5800.0, 1160.0], 0.6813284242064684*pb], +[[5800.0, 1740.0], 2.093037459283388*pb], +[[5800.0, 2320.0], 4.378654107401201*pb], +[[5800.0, 3190.0000000000005], 5.58560975609756*pb], +[[5900.0, 0], 0.00121*pb], +[[5900.0, 59.0], 0.00121*pb], +[[5900.0, 295.0], 0.0313233123629451*pb], +[[5900.0, 590.0], 0.2478736710444027*pb], +[[5900.0, 885.0], 0.6738071164927534*pb], +[[5900.0, 1180.0], 0.7373175142256867*pb], +[[5900.0, 1770.0], 2.3586867862969005*pb], +[[5900.0, 2360.0], 4.348005571885093*pb], +[[5900.0, 3245.0000000000005], 5.440220110055027*pb], +[[6000.0, 0], 0.001125*pb], +[[6000.0, 60.0], 0.001125*pb], +[[6000.0, 300.0], 0.0338911169047836*pb], +[[6000.0, 600.0], 0.2543870763382958*pb], +[[6000.0, 900.0], 0.6724944878422954*pb], +[[6000.0, 1200.0], 0.7368467800664286*pb], +[[6000.0, 1800.0], 2.656606162937949*pb], +[[6000.0, 2400.0], 4.187781456999009*pb], +[[6000.0, 3300.0000000000005], 5.327090815802976*pb]] diff --git a/unittests/database/13TeV/CMS/CMS-EXO-19-012/data/dataInfo.txt b/unittests/database/13TeV/CMS/CMS-EXO-19-012/data/dataInfo.txt new file mode 100644 index 000000000..ca217d6d8 --- /dev/null +++ b/unittests/database/13TeV/CMS/CMS-EXO-19-012/data/dataInfo.txt @@ -0,0 +1,2 @@ +dataId: None +dataType: upperLimit diff --git a/unittests/database/13TeV/CMS/CMS-EXO-19-012/globalInfo.txt b/unittests/database/13TeV/CMS/CMS-EXO-19-012/globalInfo.txt new file mode 100644 index 000000000..d13702d28 --- /dev/null +++ b/unittests/database/13TeV/CMS/CMS-EXO-19-012/globalInfo.txt @@ -0,0 +1,11 @@ +id: CMS-EXO-19-012 +sqrts: 13*TeV +lumi: 137.0/fb +url: https://cms-results.web.cern.ch/cms-results/public-results/publications/EXO-19-012/index.html +arxiv: https://arxiv.org/abs/1911.03947 +publication: https://link.springer.com/article/10.1007/JHEP05(2020)033 +contact: CMS collaboration +private: False +implementedBy: Yoxara Villamizar +lastUpdate: 2023/12/9 +type: upperLimit \ No newline at end of file diff --git a/unittests/database/databaseParticles.py b/unittests/database/databaseParticles.py index f64611446..26018b25d 100644 --- a/unittests/database/databaseParticles.py +++ b/unittests/database/databaseParticles.py @@ -104,10 +104,11 @@ LList = MultiParticle('L', [e, mu, ta, eC, muC, taC]) jetList = MultiParticle('jet', [q, c, g, pion]) nuList = nu +jetbList = MultiParticle('jetb', [q, c, g, b]) # Used to construct generic z2-odd and z2-even particles: -anyOdd = Particle(label='anyBSM', isSM=False) -anyEven = Particle(label='anySM', isSM=True) +anyBSM = Particle(label='anyBSM', isSM=False) +anySM = Particle(label='anySM', isSM=True) anyParticle = Particle(label='*') # Used to construct BSM final states: @@ -132,15 +133,19 @@ Hm = Particle(label='H-', isSM=False, eCharge = -1, colordim = 1, spin = 0.) Hpm = MultiParticle(label='Hpm', particles = [Hp,Hm]) +Zprime = Particle(label='Zprime', isSM=False, eCharge = 0, colordim = 1, spin = 1) +Vprime = Particle(label='Vprime', isSM=False, colordim = 1, spin = 1) +H0 = Particle(label='H0', isSM=False, eCharge = 0, colordim = 1, spin = 0) #Define list of inclusive final states: SMfinalStates = [eList,muList,taList,lpList,lmList,lList,WList, - tList,LpList,LmList,LList,jetList,anyEven] + tList,LpList,LmList,LList,jetList,jetbList,anySM] #Include list of exclusive final states: SMfinalStates += SMList #Define list of BSM final states: -BSMfinalStates = [MET,HSCP,RHadronU,RHadronD,RHadronG,RHadronQ,anyOdd, - gluino,chargino,charginoBar,C1,Hp,Hm,Hpm] +BSMfinalStates = [MET,HSCP,RHadronU,RHadronD,RHadronG,RHadronQ,anyBSM, + gluino,chargino,charginoBar,C1,Hp,Hm,Hpm,Zprime,H0] + # Avoid double counting: for i, ptc in enumerate(SMfinalStates): @@ -151,15 +156,9 @@ if any((ptc is p and i != j) for j, p in enumerate(BSMfinalStates)): BSMfinalStates.remove(ptc) +# Protect all final state properties: +for ptc in SMfinalStates+BSMfinalStates: + ptc._static = True -#Define a dummy model just to use the facilities for filtering particles -finalStates = Model(SMparticles = SMfinalStates, - BSMparticles = BSMfinalStates, label = 'databaseParticles.py') - -#Check consistency: -for label in finalStates.getValuesFor('label'): - particles = finalStates.getParticlesWith(label=label) - if len(particles) != 1: - raise SModelSError("%i particles defined with label %s. Particles defined in databaseParticles must have unique labels." - %(len(particles),label)) - +finalStates = Model(SMparticles=SMfinalStates, + BSMparticles=BSMfinalStates) diff --git a/unittests/testFiles/slha/TRV1_1800_300_300.slha b/unittests/testFiles/slha/TRV1_1800_300_300.slha new file mode 100644 index 000000000..1efab4976 --- /dev/null +++ b/unittests/testFiles/slha/TRV1_1800_300_300.slha @@ -0,0 +1,226 @@ + +###################################################################### +## PARAM_CARD AUTOMATICALY GENERATED BY MG5 #### +###################################################################### +################################### +## INFORMATION FOR CKMBLOCK +################################### +BLOCK CKMBLOCK # + 1 2.277360e-01 # cabi +################################### +## INFORMATION FOR DMINPUTS +################################### +BLOCK DMINPUTS # + 1 0.000000e+00 # gvxc + 2 1.000000e+00 # gvxd + 3 0.000000e+00 # gaxd + 4 2.500000e-01 # gvd11 + 5 2.500000e-01 # gvu11 + 6 2.500000e-01 # gvd22 + 7 2.500000e-01 # gvu22 + 8 2.500000e-01 # gvd33 + 9 2.500000e-01 # gvu33 + 10 0.000000e+00 # gad11 + 11 0.000000e+00 # gau11 + 12 0.000000e+00 # gad22 + 13 0.000000e+00 # gau22 + 14 0.000000e+00 # gad33 + 15 0.000000e+00 # gau33 + 16 0.000000e+00 # gvh +################################### +## INFORMATION FOR MASS +################################### +BLOCK MASS # + 6 1.720000e+02 # mt + 15 1.777000e+00 # mta + 23 9.118760e+01 # mz + 25 1.250000e+02 # mh + 51 1.000000e+00 # mxc + 52 3.000000e+02 # mxd + 55 1.800000e+03 # my1 + 5000001 1.000000e+01 # mxr + 1 0.000000e+00 # d : 0.0 + 2 0.000000e+00 # u : 0.0 + 3 0.000000e+00 # s : 0.0 + 4 0.000000e+00 # c : 0.0 + 5 0.000000e+00 # b : 0.0 + 11 0.000000e+00 # e- : 0.0 + 12 0.000000e+00 # ve : 0.0 + 13 0.000000e+00 # mu- : 0.0 + 14 0.000000e+00 # vm : 0.0 + 16 0.000000e+00 # vt : 0.0 + 21 0.000000e+00 # g : 0.0 + 22 0.000000e+00 # a : 0.0 + 24 7.982436e+01 # w+ : cmath.sqrt(mz__exp__2/2. + cmath.sqrt(mz__exp__4/4. - (aew*cmath.pi*mz__exp__2)/(gf*sqrt__2))) + 9000002 9.118760e+01 # ghz : mz + 9000003 7.982436e+01 # ghwp : mw + 9000004 7.982436e+01 # ghwm : mw +################################### +## INFORMATION FOR SMINPUTS +################################### +BLOCK SMINPUTS # + 1 1.279000e+02 # aewm1 + 2 1.166370e-05 # gf + 3 1.300000e-01 # as (note that parameter not used if you use a pdf set) +################################### +## INFORMATION FOR YUKAWA +################################### +BLOCK YUKAWA # + 6 1.720000e+02 # ymt + 15 1.777000e+00 # ymtau +################################### +## INFORMATION FOR QNUMBERS 9000001 +################################### +BLOCK QNUMBERS 9000001 # gha + 1 0 # 3 times electric charge + 2 1 # number of spin states (2s+1) + 3 1 # colour rep (1: singlet, 3: triplet, 8: octet) + 4 1 # particle/antiparticle distinction (0=own anti) +################################### +## INFORMATION FOR QNUMBERS 9000002 +################################### +BLOCK QNUMBERS 9000002 # ghz + 1 0 # 3 times electric charge + 2 1 # number of spin states (2s+1) + 3 1 # colour rep (1: singlet, 3: triplet, 8: octet) + 4 1 # particle/antiparticle distinction (0=own anti) +################################### +## INFORMATION FOR QNUMBERS 9000003 +################################### +BLOCK QNUMBERS 9000003 # ghwp + 1 3 # 3 times electric charge + 2 1 # number of spin states (2s+1) + 3 1 # colour rep (1: singlet, 3: triplet, 8: octet) + 4 1 # particle/antiparticle distinction (0=own anti) +################################### +## INFORMATION FOR QNUMBERS 9000004 +################################### +BLOCK QNUMBERS 9000004 # ghwm + 1 -3 # 3 times electric charge + 2 1 # number of spin states (2s+1) + 3 1 # colour rep (1: singlet, 3: triplet, 8: octet) + 4 1 # particle/antiparticle distinction (0=own anti) +################################### +## INFORMATION FOR QNUMBERS 82 +################################### +BLOCK QNUMBERS 82 # ghg + 1 0 # 3 times electric charge + 2 1 # number of spin states (2s+1) + 3 8 # colour rep (1: singlet, 3: triplet, 8: octet) + 4 1 # particle/antiparticle distinction (0=own anti) +################################### +## INFORMATION FOR QNUMBERS 5000001 +################################### +BLOCK QNUMBERS 5000001 # xr + 1 0 # 3 times electric charge + 2 1 # number of spin states (2s+1) + 3 1 # colour rep (1: singlet, 3: triplet, 8: octet) + 4 0 # particle/antiparticle distinction (0=own anti) +################################### +## INFORMATION FOR QNUMBERS 51 +################################### +BLOCK QNUMBERS 51 # xc + 1 0 # 3 times electric charge + 2 1 # number of spin states (2s+1) + 3 1 # colour rep (1: singlet, 3: triplet, 8: octet) + 4 1 # particle/antiparticle distinction (0=own anti) +################################### +## INFORMATION FOR QNUMBERS 52 +################################### +BLOCK QNUMBERS 52 # xd + 1 0 # 3 times electric charge + 2 2 # number of spin states (2s+1) + 3 1 # colour rep (1: singlet, 3: triplet, 8: octet) + 4 1 # particle/antiparticle distinction (0=own anti) +################################### +## INFORMATION FOR QNUMBERS 55 +################################### +BLOCK QNUMBERS 55 # y1 + 1 0 # 3 times electric charge + 2 3 # number of spin states (2s+1) + 3 1 # colour rep (1: singlet, 3: triplet, 8: octet) + 4 0 # particle/antiparticle distinction (0=own anti) +# +#************************* +# Decay widths * +#************************* +# +# PDG Width +DECAY 1 0.000000e+00 +# +# PDG Width +DECAY 2 0.000000e+00 +# +# PDG Width +DECAY 3 0.000000e+00 +# +# PDG Width +DECAY 4 0.000000e+00 +# +# PDG Width +DECAY 5 0.000000e+00 +# +# PDG Width +DECAY 6 1.508336e+00 +# +# PDG Width +DECAY 11 0.000000e+00 +# +# PDG Width +DECAY 12 0.000000e+00 +# +# PDG Width +DECAY 13 0.000000e+00 +# +# PDG Width +DECAY 14 0.000000e+00 +# +# PDG Width +DECAY 15 0.000000e+00 +# +# PDG Width +DECAY 16 0.000000e+00 +# +# PDG Width +DECAY 21 0.000000e+00 +# +# PDG Width +DECAY 22 0.000000e+00 +# +# PDG Width +DECAY 23 2.495200e+00 +# +# PDG Width +DECAY 24 2.085000e+00 +# +# PDG Width +DECAY 25 4.070000e-03 +# +# PDG Width +DECAY 51 0.000000e+00 +# +# PDG Width +DECAY 52 0.000000e+00 +# +# PDG Width +DECAY 55 1.780000e+01 +# BR NDA ID1 ID2 ... + 0.700000e+00 2 52 -52 + 0.1500000e+00 2 1 -1 + 0.1500000e+00 2 2 -2 +# +# PDG Width +DECAY 5000001 0.000000e+00 +# +# PDG Width +DECAY 9000002 2.495200e+00 +# +# PDG Width +DECAY 9000003 2.085000e+00 +# +# PDG Width +DECAY 9000004 2.085000e+00 + + +XSECTION 1.30E+04 2212 2212 1 55 # Nevts: 10000 xsec unit: pb + 0 1 0 0 0 0 1.2967e+00 MadGraph diff --git a/unittests/testNonZ2.py b/unittests/testNonZ2.py new file mode 100755 index 000000000..270949b12 --- /dev/null +++ b/unittests/testNonZ2.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 + +""" +.. module:: testNonZ2 + :synopsis: Tests Non-Z2 topologies + +.. moduleauthor:: Andre Lessa + +""" + +import sys +import os +sys.path.insert(0, "../") +import unittest +from smodels.base import runtime +from smodels.particlesLoader import load +from smodels.share.models.SMparticles import SMList +from smodels.base.model import Model +from smodels.decomposition import decomposer +from smodels.base.physicsUnits import fb, GeV, pb +from smodels.base.smodelsLogging import setLogLevel +from smodels.matching.theoryPrediction import theoryPredictionsFor +from databaseLoader import database +setLogLevel("error") + + +class RunNonZ2Test(unittest.TestCase): + + def testTRV1(self): + + database.selectExpResults() + runtime.modelFile = "./testFiles/slha/TRV1_1800_300_300.slha" + BSMList = load() + model = Model(BSMparticles=BSMList, SMparticles=SMList) + slhafile = './testFiles/slha/TRV1_1800_300_300.slha' + model.updateParticles(inputFile=slhafile,ignorePromptQNumbers = ['eCharge','colordim'],promptWidth=1e-5*GeV) + + + # Set main options for decomposition + sigmacut = 0.01*fb + mingap = 5.*GeV + + # Decompose model + topDict = decomposer.decompose(model, sigmacut, + massCompress=True, invisibleCompress=True, + minmassgap=mingap) + + self.assertEqual(len(topDict.getSMSList()),3) + + weights = sorted([0.908*pb, 0.908*pb, 0.39*pb]) + decompW = sorted([sms.weightList[0].value for sms in topDict.getSMSList()]) + for iw,w in enumerate(weights): + self.assertAlmostEqual(w.asNumber(pb),decompW[iw].asNumber(pb),places=2) + + allPredictions = theoryPredictionsFor(database, topDict, combinedResults=False) + + self.assertEqual(len(allPredictions),1) + + p = allPredictions[0] + self.assertAlmostEqual(p.xsection.asNumber(pb),0.39,places=2) + self.assertAlmostEqual(p.getRValue(),1.744,places=2) + + + +if __name__ == "__main__": + unittest.main() diff --git a/unittests/testPromptWidth.py b/unittests/testPromptWidth.py new file mode 100755 index 000000000..5ece7247e --- /dev/null +++ b/unittests/testPromptWidth.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 + +""" +.. module:: testPromptWidth + :synopsis: Tests width dependence on prompt decays + +.. moduleauthor:: Andre Lessa + +""" + +import sys +import os +sys.path.insert(0, "../") +import unittest +from smodels.base import runtime +from smodels.particlesLoader import load +from smodels.share.models.SMparticles import SMList +from smodels.base.model import Model +from smodels.decomposition import decomposer +from smodels.base.physicsUnits import fb, GeV, pb +from smodels.base.smodelsLogging import setLogLevel +from smodels.matching.theoryPrediction import theoryPredictionsFor +from databaseLoader import database +setLogLevel("error") + + +class RunPromptWidth(unittest.TestCase): + + def testWidthInfo(self): + + database.selectExpResults() + runtime.modelFile = 'mssm' + filename = "./testFiles/slha/higgsinoStop.slha" + BSMList = load() + model = Model(BSMList,SMList) + model.updateParticles(filename,promptWidth=1e-12*GeV, + ignorePromptQNumbers=['spin','eCharge','colordim']) #Force charginos/neutralinos to be considered as prompt + + p = model.getParticle(pdg = 1000023) + self.assertTrue(p.isPrompt()) + self.assertAlmostEqual(p.totalwidth.asNumber(GeV)/1e-9,7.9951,places=2) + + + def testWidthInterpolation(self): + + database.selectExpResults() + runtime.modelFile = "./testFiles/slha/TRV1_1800_300_300.slha" + BSMList = load() + model = Model(BSMparticles=BSMList, SMparticles=SMList) + slhafile = './testFiles/slha/TRV1_1800_300_300.slha' + model.updateParticles(inputFile=slhafile,ignorePromptQNumbers = ['eCharge','colordim'],promptWidth=1e-5*GeV) + + # Set Zprime width + Zprime = model.getParticle(pdg=55) + Zprime.totalwidth = 1.780000e+01*GeV + + + # Set main options for decomposition + sigmacut = 0.01*fb + mingap = 5.*GeV + + # Decompose model + topDict = decomposer.decompose(model, sigmacut, + massCompress=True, invisibleCompress=True, + minmassgap=mingap) + + allPredictions = theoryPredictionsFor(database, topDict, combinedResults=False) + + self.assertEqual(len(allPredictions),1) + p = allPredictions[0] + self.assertAlmostEqual(p.xsection.asNumber(pb),0.39,places=2) + self.assertAlmostEqual(p.getRValue(),1.744,places=2) + + + # Change Zprime width + Zprime.totalwidth = 5.780000e+01*GeV + # Decompose model again + topDict = decomposer.decompose(model, sigmacut, + massCompress=True, invisibleCompress=True, + minmassgap=mingap) + + allPredictions = theoryPredictionsFor(database, topDict, combinedResults=False) + + self.assertEqual(len(allPredictions),1) + p = allPredictions[0] + self.assertAlmostEqual(p.xsection.asNumber(pb),0.39,places=2) + self.assertAlmostEqual(p.getRValue(),1.063,places=2) + + + +if __name__ == "__main__": + unittest.main()