+
+
+ 404 | JetReconstruction.jl
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/previews/PR66/assets/app.CC7umEhW.js b/previews/PR66/assets/app.CC7umEhW.js
new file mode 100644
index 0000000..9ba2da3
--- /dev/null
+++ b/previews/PR66/assets/app.CC7umEhW.js
@@ -0,0 +1 @@
+import{U as o,a8 as p,a9 as u,aa as l,ab as c,ac as f,ad as d,ae as m,af as h,ag as g,ah as A,d as P,u as v,y,x as w,ai as C,aj as R,ak as b,a6 as E}from"./chunks/framework.CT7mYJ7N.js";import{R as S}from"./chunks/theme.DM0OIwSv.js";function i(e){if(e.extends){const a=i(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=i(S),T=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=v();return y(()=>{w(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),R(),b(),s.setup&&s.setup(),()=>E(s.Layout)}});async function _(){globalThis.__VITEPRESS__=!0;const e=x(),a=j();a.provide(u,e);const t=l(e.route);return a.provide(c,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function j(){return h(T)}function x(){let e=o,a;return g(t=>{let n=A(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&_().then(({app:e,router:a,data:t})=>{a.go().then(()=>{p(a.route,t.site),e.mount("#app")})});export{_ as createApp};
diff --git a/previews/PR66/assets/chunks/@localSearchIndexroot.D9KFUL09.js b/previews/PR66/assets/chunks/@localSearchIndexroot.D9KFUL09.js
new file mode 100644
index 0000000..f2dcad6
--- /dev/null
+++ b/previews/PR66/assets/chunks/@localSearchIndexroot.D9KFUL09.js
@@ -0,0 +1 @@
+const e='{"documentCount":25,"nextId":25,"documentIds":{"0":"/JetReconstruction.jl/previews/PR66/examples#Jet-Reconstruction-Examples","1":"/JetReconstruction.jl/previews/PR66/examples#jetreco.jl","2":"/JetReconstruction.jl/previews/PR66/examples#instrumented-jetreco.jl","3":"/JetReconstruction.jl/previews/PR66/examples#visualise-jets.jl","4":"/JetReconstruction.jl/previews/PR66/examples#visualise-jets.ipynb","5":"/JetReconstruction.jl/previews/PR66/examples#animate-reconstruction.jl","6":"/JetReconstruction.jl/previews/PR66/#Jet-Reconstruction","7":"/JetReconstruction.jl/previews/PR66/#algorithms","8":"/JetReconstruction.jl/previews/PR66/#Reconstruction-Interface","9":"/JetReconstruction.jl/previews/PR66/#strategy","10":"/JetReconstruction.jl/previews/PR66/#Inclusive-and-Exclusive-Selections","11":"/JetReconstruction.jl/previews/PR66/#sorting","12":"/JetReconstruction.jl/previews/PR66/#Plotting-and-Animation","13":"/JetReconstruction.jl/previews/PR66/#serialisation","14":"/JetReconstruction.jl/previews/PR66/#reference","15":"/JetReconstruction.jl/previews/PR66/#Authors-and-Copyright","16":"/JetReconstruction.jl/previews/PR66/lib/internal#Jet-Reconstruction-Internal-Documentation","17":"/JetReconstruction.jl/previews/PR66/lib/internal#index","18":"/JetReconstruction.jl/previews/PR66/lib/internal#Public-Interface","19":"/JetReconstruction.jl/previews/PR66/lib/public#Jet-Reconstruction-Public-Documentation","20":"/JetReconstruction.jl/previews/PR66/lib/public#index","21":"/JetReconstruction.jl/previews/PR66/lib/public#Public-Methods-and-Types","22":"/JetReconstruction.jl/previews/PR66/lib/visualisation#Jet-Visualisation-Documentation","23":"/JetReconstruction.jl/previews/PR66/lib/visualisation#index","24":"/JetReconstruction.jl/previews/PR66/lib/visualisation#Jet-Visualisation-Public-Interfaces"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[3,1,32],"1":[2,3,49],"2":[3,3,52],"3":[3,3,35],"4":[3,3,39],"5":[3,3,19],"6":[2,1,26],"7":[1,2,32],"8":[2,2,37],"9":[1,2,93],"10":[4,2,24],"11":[1,6,42],"12":[3,2,63],"13":[1,2,32],"14":[1,2,78],"15":[3,2,40],"16":[4,1,22],"17":[1,4,94],"18":[2,4,751],"19":[4,1,9],"20":[1,4,21],"21":[4,4,445],"22":[3,1,7],"23":[1,3,4],"24":[4,3,237]},"averageFieldLength":[2.4,2.56,91.31999999999998],"storedFields":{"0":{"title":"Jet Reconstruction Examples","titles":[]},"1":{"title":"jetreco.jl","titles":["Jet Reconstruction Examples"]},"2":{"title":"instrumented-jetreco.jl","titles":["Jet Reconstruction Examples"]},"3":{"title":"visualise-jets.jl","titles":["Jet Reconstruction Examples"]},"4":{"title":"visualise-jets.ipynb","titles":["Jet Reconstruction Examples"]},"5":{"title":"animate-reconstruction.jl","titles":["Jet Reconstruction Examples"]},"6":{"title":"Jet Reconstruction","titles":[]},"7":{"title":"Algorithms","titles":["Jet Reconstruction"]},"8":{"title":"Reconstruction Interface","titles":["Jet Reconstruction"]},"9":{"title":"Strategy","titles":["Jet Reconstruction"]},"10":{"title":"Inclusive and Exclusive Selections","titles":["Jet Reconstruction"]},"11":{"title":"Sorting","titles":["Jet Reconstruction","Inclusive and Exclusive Selections"]},"12":{"title":"Plotting and Animation","titles":["Jet Reconstruction"]},"13":{"title":"Serialisation","titles":["Jet Reconstruction"]},"14":{"title":"Reference","titles":["Jet Reconstruction"]},"15":{"title":"Authors and Copyright","titles":["Jet Reconstruction"]},"16":{"title":"Jet Reconstruction Internal Documentation","titles":[]},"17":{"title":"Index","titles":["Jet Reconstruction Internal Documentation"]},"18":{"title":"Public Interface","titles":["Jet Reconstruction Internal Documentation"]},"19":{"title":"Jet Reconstruction Public Documentation","titles":[]},"20":{"title":"Index","titles":["Jet Reconstruction Public Documentation"]},"21":{"title":"Public Methods and Types","titles":["Jet Reconstruction Public Documentation"]},"22":{"title":"Jet Visualisation Documentation","titles":[]},"23":{"title":"Index","titles":["Jet Visualisation Documentation"]},"24":{"title":"Jet Visualisation Public Interfaces","titles":["Jet Visualisation Documentation"]}},"dirtCount":0,"index":[["7",{"2":{"24":2}}],[">lorentzvectorhep",{"2":{"21":2}}],["\\t",{"2":{"18":1}}],["|p|",{"2":{"18":1}}],["quot",{"2":{"18":2,"21":20}}],["qtot",{"2":{"18":1,"21":5}}],["xxx",{"2":{"18":3}}],["x=included",{"2":{"18":2}}],["x",{"2":{"18":6,"21":4}}],["x100",{"2":{"18":1}}],["x3c",{"2":{"18":3,"21":1}}],["ßß",{"2":{"18":1}}],["~1",{"2":{"18":1}}],["ϕ",{"2":{"18":17,"24":2}}],["zero",{"2":{"18":3,"24":1}}],["z",{"2":{"18":5,"21":4}}],["η",{"2":{"17":1,"18":15,"24":2}}],["y=0",{"2":{"24":1}}],["y",{"2":{"18":4,"21":4,"24":2}}],["year=",{"2":{"14":1}}],["year",{"2":{"14":1}}],["you",{"2":{"14":1,"18":1,"24":11}}],["yourself",{"2":{"24":2}}],["your",{"2":{"11":1,"24":4}}],["20",{"2":{"21":2}}],["2022",{"2":{"15":1}}],["2023",{"2":{"14":1}}],["2024",{"2":{"14":1,"15":1}}],["202429505017",{"2":{"14":3}}],["2",{"2":{"18":3,"24":2}}],["2d",{"2":{"18":1}}],["2π",{"2":{"18":4}}],["2309",{"2":{"14":2}}],["295",{"2":{"14":1}}],["k",{"2":{"18":8,"21":1}}],["krasnopolski",{"2":{"14":2,"15":1}}],["kt2",{"2":{"18":13}}],["kt",{"2":{"7":1,"18":2,"21":1}}],["5",{"2":{"11":1,"24":5}}],["+",{"2":{"9":1,"17":1,"18":3,"21":9}}],["3",{"2":{"21":1,"24":1}}],["39",{"2":{"9":1,"16":1,"18":6,"19":1,"21":2,"24":1}}],["3d",{"2":{"3":1,"4":1,"12":1,"24":2}}],["length",{"2":{"21":2}}],["left",{"2":{"18":1}}],["lv",{"2":{"20":1,"21":2}}],["labels",{"2":{"18":1}}],["last",{"2":{"18":2}}],["largest",{"2":{"18":1}}],["large",{"2":{"18":2}}],["like",{"2":{"18":1}}],["link",{"2":{"21":1}}],["linked",{"2":{"18":5}}],["line",{"2":{"21":6}}],["lines",{"2":{"21":2}}],["linearly",{"2":{"24":1}}],["linearindices",{"2":{"18":1}}],["linear",{"2":{"18":3}}],["lift",{"2":{"18":1}}],["list",{"2":{"18":7}}],["license",{"2":{"15":1}}],["limit",{"2":{"9":1}}],["lt",{"2":{"15":3,"18":1}}],["longer",{"2":{"24":1}}],["look",{"2":{"21":1}}],["looks",{"2":{"18":1}}],["lorentz",{"2":{"21":1}}],["lorentzvectorhep",{"2":{"21":1}}],["lorentzvector",{"2":{"21":5}}],["lorentzvectors",{"2":{"21":1}}],["lorentzvectorcyl",{"2":{"21":4}}],["loads",{"2":{"21":1}}],["loadjets",{"2":{"13":2,"20":2,"21":4}}],["loaded",{"2":{"12":1,"21":1}}],["load",{"2":{"12":1,"13":1,"21":3}}],["lower",{"2":{"18":1}}],["lowest",{"2":{"11":1}}],["low",{"2":{"9":2}}],["viewpoint",{"2":{"24":3}}],["video",{"2":{"24":3}}],["viz",{"2":{"21":1}}],["visualisation",{"0":{"22":1,"24":1},"1":{"23":1,"24":1},"2":{"4":1,"22":1}}],["visualised",{"2":{"3":1,"4":1}}],["visualise",{"0":{"3":1,"4":1},"2":{"4":1,"12":1}}],["vt",{"2":{"21":3}}],["vt=lorentzvector",{"2":{"21":1}}],["vaild",{"2":{"18":1}}],["variables",{"2":{"18":1}}],["values",{"2":{"18":18,"21":2,"24":2}}],["value",{"2":{"18":22,"21":6,"24":1}}],["valid",{"2":{"17":1,"18":9}}],["volume",{"2":{"14":1}}],["version",{"2":{"24":1}}],["very",{"2":{"13":1}}],["vectors",{"2":{"11":1,"18":1,"21":3}}],["vector",{"2":{"8":1,"9":1,"18":29,"21":40}}],["4",{"2":{"8":1,"18":1,"21":5}}],["02pi",{"2":{"17":1,"18":3}}],["05017",{"2":{"14":1}}],["0512210",{"2":{"7":1}}],["0",{"2":{"8":1,"9":1,"10":2,"11":2,"18":11,"21":26,"24":4}}],["rparam",{"2":{"18":4}}],["r^2",{"2":{"18":3}}],["r2",{"2":{"18":10}}],["run",{"2":{"18":1}}],["roundoff",{"2":{"18":1}}],["r=1",{"2":{"18":1,"21":1}}],["right",{"2":{"18":5}}],["rightneighbours",{"2":{"17":1,"18":1}}],["rightmost",{"2":{"17":1,"18":6}}],["raise",{"2":{"18":1}}],["raised",{"2":{"18":1}}],["rank",{"2":{"18":6}}],["ranks",{"2":{"17":1,"18":6}}],["range",{"2":{"18":12}}],["rapidities",{"2":{"18":4}}],["rapidity",{"2":{"17":2,"18":44,"21":7}}],["rap",{"2":{"17":2,"18":6,"21":2}}],["radius",{"2":{"9":1,"18":5,"21":4}}],["r",{"2":{"8":1,"9":2,"18":1,"21":11}}],["required",{"2":{"21":1}}],["real",{"2":{"21":1,"24":4}}],["reads",{"2":{"21":2}}],["read",{"2":{"20":2,"21":8}}],["respectively",{"2":{"18":2}}],["resulting",{"2":{"18":1}}],["results",{"2":{"3":1}}],["removal",{"2":{"18":1}}],["removes",{"2":{"18":1}}],["removed",{"2":{"18":2}}],["remove",{"2":{"17":1,"18":3}}],["recursively",{"2":{"18":1}}],["recommended",{"2":{"21":1}}],["recombining",{"2":{"18":3}}],["recombination",{"2":{"17":2,"18":15,"21":5}}],["recombine=+",{"2":{"18":2,"21":1}}],["recombined",{"2":{"18":5}}],["recombine",{"2":{"9":1,"18":3,"21":11}}],["record",{"2":{"18":1}}],["reco",{"2":{"17":1,"18":1}}],["recostrategy",{"2":{"9":3,"21":7}}],["reconstructing",{"2":{"21":2}}],["reconstruction",{"0":{"0":1,"5":1,"6":1,"8":1,"16":1,"19":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"17":1,"18":1,"20":1,"21":1},"2":{"0":1,"1":2,"2":1,"3":1,"4":1,"5":1,"6":2,"8":1,"12":1,"18":15,"21":21,"24":1}}],["reconstructed",{"2":{"18":2,"21":4}}],["reconstructs",{"2":{"18":1,"21":1}}],["reconstruct",{"2":{"8":3,"9":5,"17":1,"18":3,"20":4,"21":12,"24":2}}],["represents",{"2":{"18":5,"21":4,"24":2}}],["representing",{"2":{"18":11,"21":6,"24":1}}],["return",{"2":{"18":5,"21":3}}],["returning",{"2":{"18":2}}],["returns",{"2":{"18":50,"21":18,"24":1}}],["returned",{"2":{"8":1,"18":1}}],["refid0",{"2":{"14":1}}],["reference",{"0":{"14":1}}],["rev=true",{"2":{"11":1}}],["reimplemented",{"2":{"7":1}}],["=",{"2":{"8":2,"9":3,"10":3,"11":1,"14":8,"18":9,"21":46,"24":9}}],["6097",{"2":{"7":1}}],["17309",{"2":{"14":2}}],["1051",{"2":{"14":3}}],["10",{"2":{"14":3,"21":1}}],["100",{"2":{"2":1}}],["1",{"2":{"8":2,"9":2,"18":9,"21":28,"24":9}}],["1111",{"2":{"7":1}}],["utility",{"2":{"18":1}}],["unavailable",{"2":{"21":1}}],["until",{"2":{"18":1}}],["untagged",{"2":{"17":1,"18":2}}],["union",{"2":{"17":1,"18":11,"21":2}}],["under",{"2":{"15":1}}],["url",{"2":{"14":1}}],["updating",{"2":{"18":2}}],["updated",{"2":{"18":3}}],["update",{"2":{"18":7}}],["updates",{"2":{"18":10}}],["upd",{"2":{"17":3,"18":3}}],["up",{"2":{"3":1,"4":1,"18":1}}],["usually",{"2":{"11":1,"18":2}}],["using",{"2":{"2":1,"18":5,"21":5,"24":4}}],["useful",{"2":{"18":3,"24":1}}],["users",{"2":{"18":1}}],["used",{"2":{"6":1,"7":1,"18":13,"21":27}}],["use",{"2":{"0":1,"1":1,"2":1,"9":3,"12":1,"13":1,"14":1,"18":2,"21":2,"24":6}}],["usage",{"2":{"0":1,"2":1}}],["centre",{"2":{"18":4}}],["center",{"2":{"18":12}}],["certain",{"2":{"18":1,"21":2}}],["cern",{"2":{"15":3}}],["creates",{"2":{"18":3}}],["created",{"2":{"18":4}}],["create",{"2":{"18":2}}],["crosscheck",{"2":{"17":1,"18":3}}],["chart",{"2":{"24":2}}],["changing",{"2":{"24":1}}],["change",{"2":{"18":1,"24":1}}],["checks",{"2":{"18":2,"21":1}}],["checked",{"2":{"18":1}}],["check",{"2":{"18":8}}],["chep",{"2":{"14":1}}],["chep2023",{"2":{"14":1}}],["child",{"2":{"18":4}}],["ch",{"2":{"15":2}}],["cited",{"2":{"14":1}}],["custom",{"2":{"21":1}}],["customised",{"2":{"12":1}}],["currently",{"2":{"18":1}}],["current",{"2":{"18":5,"24":1}}],["cut",{"2":{"10":2,"21":1}}],["cs",{"2":{"11":1,"18":4,"24":8}}],["cairomakie",{"2":{"24":6}}],["category10",{"2":{"24":2}}],["caching",{"2":{"21":1}}],["calculations",{"2":{"21":1}}],["calculate",{"2":{"18":6}}],["calculated",{"2":{"18":4,"21":3}}],["calculates",{"2":{"18":2}}],["calue",{"2":{"21":1}}],["called",{"2":{"8":1,"9":1}}],["call",{"2":{"1":1,"9":1}}],["cartesian",{"2":{"17":1,"18":5}}],["can",{"2":{"9":1,"12":1,"13":1,"18":3,"21":3,"24":4}}],["cambridge",{"2":{"7":1,"18":1,"21":1}}],["c++",{"2":{"7":1}}],["course",{"2":{"24":1}}],["counted",{"2":{"18":1}}],["corresponds",{"2":{"18":1,"21":1}}],["corresponding",{"2":{"18":5}}],["coordinate",{"2":{"18":16}}],["coordinates",{"2":{"18":3}}],["cosine",{"2":{"18":2}}],["costheta",{"2":{"17":1,"18":1}}],["copied",{"2":{"18":1}}],["copy",{"2":{"17":1,"18":2}}],["copyright",{"0":{"15":1},"2":{"15":1}}],["combining",{"2":{"21":3}}],["comments",{"2":{"18":1,"21":1}}],["compact",{"2":{"18":1}}],["comparison",{"2":{"18":3}}],["compares",{"2":{"18":1}}],["compare",{"2":{"18":3}}],["composite",{"2":{"18":1}}],["component",{"2":{"18":9,"21":10}}],["components",{"2":{"18":4,"21":2}}],["computes",{"2":{"21":1}}],["computed",{"2":{"18":1}}],["compute",{"2":{"18":28}}],["com",{"2":{"15":1}}],["condition",{"2":{"21":2}}],["converted",{"2":{"21":1}}],["converts",{"2":{"18":1}}],["convention",{"2":{"18":1}}],["consistent",{"2":{"18":2}}],["considering",{"2":{"18":3}}],["considered",{"2":{"18":1}}],["consider",{"2":{"18":5}}],["constructor=",{"2":{"21":2}}],["constructor",{"2":{"18":1,"21":3}}],["constructs",{"2":{"18":4,"21":6}}],["construct",{"2":{"18":1}}],["constituents",{"2":{"5":1}}],["contain",{"2":{"18":1}}],["containing",{"2":{"18":14,"21":4,"24":1}}],["contains",{"2":{"18":2,"21":1}}],["configuration",{"2":{"18":2}}],["conf",{"2":{"14":1}}],["conference",{"2":{"14":2}}],["code",{"2":{"12":1,"15":2}}],["colour",{"2":{"24":8}}],["colours",{"2":{"3":1,"4":1}}],["coloring",{"2":{"24":1}}],["colormap=",{"2":{"24":3}}],["colormap",{"2":{"24":4}}],["collection",{"2":{"8":1,"21":2}}],["colliders",{"2":{"6":1}}],["clusters",{"2":{"18":2}}],["clusterseq",{"2":{"10":2,"18":16,"21":10}}],["clustersequence",{"2":{"8":1,"10":2,"11":1,"12":1,"18":27,"20":3,"21":23,"24":6}}],["clustered",{"2":{"12":1,"21":2}}],["clustering",{"2":{"6":1,"18":2,"21":8}}],["cluster",{"2":{"3":1,"4":1,"18":14,"21":10,"24":2}}],["glmakie",{"2":{"24":4}}],["glasbey",{"2":{"24":4}}],["global",{"2":{"9":1}}],["gzipped",{"2":{"21":2}}],["greater",{"2":{"21":1}}],["gras",{"2":{"14":2,"15":2}}],["graeme",{"2":{"14":2,"15":2}}],["got",{"2":{"24":1}}],["go",{"2":{"18":1}}],["give",{"2":{"18":1}}],["gives",{"2":{"18":1,"24":1}}],["given",{"2":{"12":1,"18":26,"21":3}}],["guarantee",{"2":{"16":1}}],["generic",{"2":{"21":1}}],["generalised",{"2":{"21":1}}],["general",{"2":{"21":2}}],["generally",{"2":{"9":1}}],["gets",{"2":{"21":1}}],["get",{"2":{"17":4,"18":6,"21":1,"24":1}}],["geometric",{"2":{"17":1,"18":5}}],["gev",{"2":{"11":1}}],["gt",{"2":{"11":1,"15":3,"21":2}}],["g",{"2":{"2":1,"8":1,"9":1}}],["fname",{"2":{"21":4}}],["fn",{"2":{"18":2}}],["fact",{"2":{"18":1}}],["false",{"2":{"18":3,"24":1}}],["far",{"2":{"18":3}}],["faster",{"2":{"18":1}}],["fast",{"2":{"17":1,"18":1}}],["fastjet",{"2":{"7":2,"18":2}}],["following",{"2":{"21":2}}],["followed",{"2":{"18":1}}],["four",{"2":{"18":1,"21":1}}],["fourmomentum",{"2":{"17":1,"18":1,"21":1}}],["form",{"2":{"18":1,"24":1}}],["format=",{"2":{"21":2}}],["format",{"2":{"13":1,"21":6}}],["for",{"2":{"2":1,"6":1,"8":1,"9":4,"12":2,"13":1,"16":1,"18":64,"19":1,"21":40,"22":1,"24":6}}],["full",{"2":{"21":1}}],["further",{"2":{"14":1,"18":1}}],["function=+",{"2":{"21":1}}],["function",{"2":{"12":3,"18":34,"21":19,"24":3}}],["float64=1",{"2":{"21":1}}],["float64",{"2":{"18":17,"21":33}}],["flexible",{"2":{"13":1}}],["flamegraphs",{"2":{"2":1}}],["frame",{"2":{"24":1}}],["frames",{"2":{"24":1}}],["frames=0",{"2":{"24":1}}],["framerate=5",{"2":{"24":1}}],["framerate",{"2":{"24":2}}],["fraction",{"2":{"18":1}}],["fr",{"2":{"7":1}}],["from",{"2":{"5":1,"11":1,"13":1,"17":1,"18":21,"21":13,"24":1}}],["figure",{"2":{"24":1}}],["fig",{"2":{"24":1}}],["fixed",{"2":{"24":1}}],["field",{"2":{"21":1}}],["fields",{"2":{"18":10,"21":4}}],["first",{"2":{"18":18}}],["finds",{"2":{"18":1}}],["find",{"2":{"17":1,"18":5}}],["findmin",{"2":{"17":1,"18":2}}],["finding",{"2":{"14":2,"18":1}}],["finaljets",{"2":{"20":1,"21":2}}],["finaljet",{"2":{"20":1,"21":6}}],["finally",{"2":{"18":3}}],["finalisations",{"2":{"18":1}}],["finalising",{"2":{"18":1}}],["finalization",{"2":{"18":1}}],["final",{"2":{"3":1,"4":1,"10":1,"20":5,"21":14,"24":2}}],["filename",{"2":{"21":5,"24":2}}],["file",{"2":{"0":1,"21":14,"24":2}}],["files",{"2":{"0":1,"21":1}}],["wglmakie",{"2":{"24":4}}],["written",{"2":{"24":1}}],["wraps",{"2":{"18":2}}],["wrapped",{"2":{"18":1}}],["wrapper",{"2":{"18":1}}],["was",{"2":{"18":2,"21":1}}],["walks",{"2":{"18":1}}],["walking",{"2":{"18":1}}],["way",{"2":{"18":1,"21":1}}],["work",{"2":{"24":2}}],["worked",{"2":{"12":1}}],["works",{"2":{"9":2,"24":2}}],["web",{"2":{"14":1}}],["we",{"2":{"12":1,"18":1,"21":1}}],["well",{"2":{"2":1,"9":2,"24":1}}],["whether",{"2":{"18":1,"24":1}}],["when",{"2":{"18":4,"24":1}}],["where",{"2":{"3":1,"4":1,"8":1,"18":8,"21":6,"24":5}}],["whose",{"2":{"18":2}}],["which",{"2":{"3":1,"4":1,"6":1,"8":1,"18":25,"21":5}}],["width",{"2":{"24":4}}],["wishes",{"2":{"9":1}}],["will",{"2":{"3":1,"4":1,"12":2,"18":6,"21":6,"24":2}}],["with",{"2":{"1":1,"3":1,"4":1,"18":19,"21":9,"24":4}}],["etc",{"2":{"24":2}}],["eta=0",{"2":{"24":2}}],["eta2",{"2":{"18":2}}],["eta1",{"2":{"18":2}}],["eta",{"2":{"17":1,"18":33,"24":2}}],["elevation=0",{"2":{"24":1}}],["elevation",{"2":{"24":3}}],["element",{"2":{"18":2,"21":1}}],["elements",{"2":{"18":4}}],["everything",{"2":{"21":1}}],["every",{"2":{"21":1}}],["event",{"2":{"6":1,"18":1,"21":5}}],["events",{"2":{"1":2,"2":1,"21":6}}],["errorexception",{"2":{"21":1}}],["errors",{"2":{"18":1}}],["either",{"2":{"21":2}}],["equal",{"2":{"18":1,"21":1}}],["established",{"2":{"18":1}}],["edge",{"2":{"18":2}}],["edm",{"2":{"11":1}}],["eprint=",{"2":{"14":2}}],["epj",{"2":{"14":1}}],["epjconf",{"2":{"14":3}}],["early",{"2":{"24":1}}],["easily",{"2":{"13":1}}],["each",{"2":{"9":1,"18":7,"21":8}}],["e+e−",{"2":{"6":1}}],["entry",{"2":{"18":3,"21":2}}],["enum",{"2":{"18":2}}],["ending",{"2":{"18":2}}],["end",{"2":{"18":1,"24":2}}],["ended",{"2":{"3":1,"4":1}}],["ensure",{"2":{"17":1,"18":4}}],["environment",{"2":{"12":1}}],["energy",{"2":{"3":1,"4":1,"6":1,"11":2,"17":1,"18":7,"21":13}}],["e",{"2":{"2":1,"8":1,"9":1,"18":6,"21":17}}],["expensive",{"2":{"21":1}}],["explicitly",{"2":{"1":1,"24":2}}],["exist",{"2":{"21":1}}],["exists",{"2":{"18":1}}],["exceptions",{"2":{"21":1}}],["exclusive",{"0":{"10":1},"1":{"11":1},"2":{"1":1,"10":2,"11":1,"20":2,"21":15}}],["ex",{"2":{"14":2}}],["extent",{"2":{"17":1,"18":4}}],["extension",{"2":{"12":1,"22":1}}],["ext",{"2":{"12":1}}],["extremely",{"2":{"9":1}}],["extract",{"2":{"2":1}}],["extra",{"2":{"0":1}}],["example",{"2":{"0":1,"1":1,"2":1,"11":1,"18":2,"21":7,"24":3}}],["examples",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1},"2":{"0":1,"1":2,"12":2,"18":1,"21":1}}],["my",{"2":{"24":9}}],["myjets2",{"2":{"21":1}}],["myjets1",{"2":{"21":1}}],["m^2",{"2":{"18":4}}],["multiplied",{"2":{"18":1}}],["multiplicities",{"2":{"18":1}}],["much",{"2":{"18":1}}],["must",{"2":{"0":1,"18":4,"21":3}}],["mdash",{"2":{"18":73,"21":23,"24":3}}],["m2",{"2":{"17":1,"18":2}}],["m",{"2":{"17":1,"18":2}}],["might",{"2":{"24":1}}],["min",{"2":{"18":5}}],["minrap",{"2":{"18":1}}],["minimum",{"2":{"18":9,"21":3}}],["mit",{"2":{"15":1}}],["misc",{"2":{"14":1}}],["most",{"2":{"24":1}}],["move",{"2":{"18":1}}],["module=glmakie",{"2":{"24":2}}],["module=cairomakie",{"2":{"24":3}}],["module=main",{"2":{"24":4}}],["module",{"2":{"18":1,"22":1,"24":9}}],["modules",{"2":{"12":1}}],["momenta",{"2":{"18":2,"21":1}}],["momentum",{"2":{"17":1,"18":30,"21":28}}],["more",{"2":{"2":1,"12":1,"13":1,"18":1,"21":3}}],["merging",{"2":{"18":1,"21":1}}],["mergers",{"2":{"18":1}}],["merger",{"2":{"18":1}}],["merge=true",{"2":{"18":1}}],["merge",{"2":{"5":1,"8":1,"17":1,"18":9,"21":3}}],["means",{"2":{"21":2}}],["meaningful",{"2":{"18":1}}],["measure",{"2":{"21":1}}],["measurements",{"2":{"2":1}}],["metric",{"2":{"18":6}}],["method",{"2":{"18":59,"21":15,"24":3}}],["methods",{"0":{"21":1},"2":{"11":1,"13":1,"16":1,"21":5}}],["memory",{"2":{"2":1}}],["makes",{"2":{"21":1}}],["makie",{"2":{"12":2,"24":12}}],["matrix",{"2":{"18":5}}],["matching",{"2":{"9":1}}],["map",{"2":{"24":2}}],["mapped",{"2":{"21":1}}],["mapping",{"2":{"18":1}}],["maps",{"2":{"18":1,"21":1}}],["macro",{"2":{"18":1}}],["maxevents=",{"2":{"21":2}}],["maxevents=100",{"2":{"1":2}}],["maxevents",{"2":{"21":2}}],["max",{"2":{"18":5}}],["maxrap",{"2":{"18":1}}],["maximum",{"2":{"18":6,"21":4}}],["mass2",{"2":{"17":1,"18":1}}],["mass",{"2":{"17":1,"18":10}}],["magnitude",{"2":{"18":3}}],["mag",{"2":{"17":1,"18":1}}],["many",{"2":{"12":1}}],["main",{"2":{"8":1,"21":2}}],["made",{"2":{"2":1,"16":1}}],["branching",{"2":{"21":1}}],["browser",{"2":{"4":1}}],["but",{"2":{"18":1,"21":1}}],["busiest",{"2":{"18":1}}],["bonkers",{"2":{"18":1}}],["bool",{"2":{"18":2}}],["boost",{"2":{"18":1}}],["bookkeeping",{"2":{"18":2}}],["both",{"2":{"10":1,"18":2,"21":1}}],["bit",{"2":{"18":1}}],["bi",{"2":{"18":1}}],["bin",{"2":{"18":1}}],["bins",{"2":{"18":1}}],["binning",{"2":{"18":1}}],["bibtex",{"2":{"14":2}}],["b",{"2":{"16":1}}],["by",{"2":{"15":1,"18":13,"21":3}}],["by=jetreconstruction",{"2":{"11":1}}],["backend",{"2":{"24":2}}],["back",{"2":{"21":1}}],["bars",{"2":{"24":3}}],["barsize",{"2":{"24":12}}],["bar",{"2":{"12":1,"24":6}}],["base",{"2":{"17":7,"18":7}}],["based",{"2":{"7":1,"9":1,"18":12,"21":3}}],["basic",{"2":{"1":1}}],["below",{"2":{"24":2}}],["before",{"2":{"18":1,"21":2}}],["beamjet",{"2":{"18":1}}],["beam",{"2":{"18":8}}],["between",{"2":{"18":17,"21":2,"24":1}}],["benedikt",{"2":{"14":2}}],["been",{"2":{"14":1,"18":3,"24":1}}],["best",{"2":{"9":2,"18":1,"21":3}}],["be",{"2":{"2":1,"12":1,"14":1,"18":22,"21":12,"24":5}}],["because",{"2":{"0":1}}],["import",{"2":{"24":6}}],["implementation",{"2":{"18":1}}],["implements",{"2":{"6":1}}],["identifier",{"2":{"21":1}}],["id",{"2":{"18":7,"21":1}}],["idx",{"2":{"18":2,"24":3}}],["ignored",{"2":{"21":1}}],["ignores",{"2":{"21":1}}],["ignore",{"2":{"18":2}}],["iphi",{"2":{"18":1}}],["ipynb",{"0":{"4":1}}],["ieta",{"2":{"18":5}}],["i",{"2":{"18":34,"21":1,"24":3}}],["io",{"2":{"18":6}}],["ij",{"2":{"17":1,"18":2}}],["ib",{"2":{"17":1,"18":2}}],["iterating",{"2":{"18":3}}],["iteration",{"2":{"18":3}}],["iteration=0",{"2":{"18":2}}],["iterates",{"2":{"18":1,"21":1}}],["iterate",{"2":{"17":3,"18":10}}],["it",{"2":{"14":1,"18":20,"21":7,"24":3}}],["itself",{"2":{"18":1,"24":1}}],["its",{"2":{"12":1,"18":10,"24":1}}],["illustration",{"2":{"12":1}}],["if",{"2":{"9":1,"12":1,"14":1,"18":18,"21":9}}],["isspace",{"2":{"21":1}}],["isolated",{"2":{"18":1}}],["isvalid",{"2":{"17":1,"18":1}}],["is",{"2":{"1":1,"2":1,"3":1,"4":1,"8":3,"9":3,"11":1,"12":2,"14":1,"15":3,"16":1,"18":42,"21":28,"24":2}}],["inverse",{"2":{"21":1}}],["inv",{"2":{"21":1}}],["invariant",{"2":{"18":7}}],["invalid",{"2":{"18":3}}],["inner",{"2":{"21":2}}],["inital",{"2":{"18":1}}],["initially",{"2":{"18":1}}],["initializes",{"2":{"18":1}}],["initializing",{"2":{"18":1}}],["initialising",{"2":{"18":1}}],["initialise",{"2":{"18":1}}],["initial",{"2":{"3":1,"4":1,"17":1,"18":6,"21":2}}],["inherited",{"2":{"18":1}}],["inline",{"2":{"18":1}}],["incomplete",{"2":{"21":1}}],["increase",{"2":{"18":1}}],["including",{"2":{"18":1,"21":1}}],["included",{"2":{"18":2,"21":3}}],["includes",{"2":{"18":1,"21":1}}],["include",{"2":{"7":1,"21":1,"24":1}}],["inclusive",{"0":{"10":1},"1":{"11":1},"2":{"1":1,"7":1,"10":2,"11":1,"18":1,"20":1,"21":6}}],["int64",{"2":{"21":1}}],["int=",{"2":{"21":1}}],["intial",{"2":{"18":1}}],["integer",{"2":{"21":2}}],["integers",{"2":{"18":1}}],["internalerror",{"2":{"18":1}}],["internal",{"0":{"16":1},"1":{"17":1,"18":1},"2":{"16":1,"18":1,"21":1}}],["internally",{"2":{"8":1,"21":1}}],["interation",{"2":{"9":1}}],["interfaces",{"0":{"24":1},"2":{"9":1,"16":1,"19":1,"22":1}}],["interface",{"0":{"8":1,"18":1},"2":{"8":1,"9":4,"18":1}}],["int",{"2":{"18":39,"21":8}}],["into",{"2":{"18":5,"21":4}}],["infinite",{"2":{"18":1}}],["information",{"2":{"18":17,"21":2}}],["install",{"2":{"24":2}}],["instrumented",{"0":{"2":1},"2":{"2":1}}],["insensitive",{"2":{"18":1}}],["inserted",{"2":{"18":2}}],["inserts",{"2":{"18":1}}],["insert",{"2":{"17":1,"18":1}}],["indeces",{"2":{"24":2}}],["index=invalid",{"2":{"18":1}}],["indexes",{"2":{"18":6}}],["index",{"0":{"17":1,"20":1,"23":1},"2":{"17":1,"18":83,"21":7}}],["individual",{"2":{"21":1}}],["indicating",{"2":{"18":1}}],["indicates",{"2":{"21":1}}],["indicate",{"2":{"3":1,"4":1}}],["indices",{"2":{"17":1,"18":15}}],["input",{"2":{"9":1,"18":6,"21":4}}],["in",{"2":{"0":2,"3":2,"4":3,"6":1,"7":1,"9":1,"11":1,"12":3,"13":1,"15":1,"18":61,"21":22,"24":5}}],["json",{"2":{"21":2}}],["just",{"2":{"18":1}}],["juliaanimatereco",{"2":{"24":1}}],["juliaadd",{"2":{"18":2}}],["juliaclustersequence",{"2":{"21":2}}],["juliaconst",{"2":{"18":1}}],["juliacostheta",{"2":{"18":1}}],["juliacopy",{"2":{"18":1}}],["julian",{"2":{"21":2}}],["julialoadjets",{"2":{"21":2}}],["juliatiling",{"2":{"18":1}}],["juliatiled",{"2":{"21":4}}],["juliatiledjet",{"2":{"18":3}}],["juliatile",{"2":{"18":1}}],["juliahistoryelement",{"2":{"18":1}}],["juliaupd",{"2":{"18":3}}],["juliaread",{"2":{"21":2}}],["juliareco",{"2":{"18":1}}],["juliarightneighbours",{"2":{"18":1}}],["juliarapidity",{"2":{"18":1}}],["juliapseudojet",{"2":{"21":2}}],["juliaplain",{"2":{"21":1}}],["juliapz",{"2":{"18":1}}],["juliapy",{"2":{"18":1}}],["juliapx",{"2":{"18":1}}],["juliapt2",{"2":{"18":1}}],["juliapt",{"2":{"18":1}}],["juliaphi",{"2":{"18":2}}],["juliamutable",{"2":{"21":1}}],["juliamerge",{"2":{"18":1}}],["juliamass",{"2":{"18":1}}],["juliamag",{"2":{"18":1}}],["juliam2",{"2":{"18":1}}],["juliam",{"2":{"18":1}}],["juliaisvalid",{"2":{"18":1}}],["juliainclusive",{"2":{"21":2}}],["juliainsert",{"2":{"18":1}}],["juliainitial",{"2":{"18":1}}],["juliaget",{"2":{"18":4}}],["juliageometric",{"2":{"18":1}}],["juliafinal",{"2":{"21":1}}],["juliafind",{"2":{"18":1}}],["juliafast",{"2":{"18":1}}],["juliaexclusive",{"2":{"21":2}}],["juliaeta",{"2":{"18":1}}],["juliaenergy",{"2":{"18":1}}],["juliado",{"2":{"18":2}}],["juliadist",{"2":{"18":1}}],["juliadij",{"2":{"18":1}}],["juliadetermine",{"2":{"18":1}}],["juliadetach",{"2":{"18":1}}],["juliasavejets",{"2":{"21":1}}],["juliastruct",{"2":{"18":8,"21":3}}],["juliasurrounding",{"2":{"18":1}}],["juliasetup",{"2":{"18":1}}],["juliaset",{"2":{"18":2}}],["juliashow",{"2":{"18":1}}],["juliasorted",{"2":{"11":1}}],["juliabase",{"2":{"18":4}}],["julia+",{"2":{"18":1}}],["juliajetsplot",{"2":{"24":1}}],["juliajets",{"2":{"21":1}}],["juliajet",{"2":{"8":1,"18":1,"21":2}}],["julia",{"2":{"1":1,"7":1,"9":1,"11":1,"18":4,"21":1}}],["j",{"2":{"18":14}}],["j2",{"2":{"18":3}}],["j1",{"2":{"18":3}}],["journal",{"2":{"14":1}}],["jl",{"0":{"1":1,"2":1,"3":1,"5":1},"2":{"1":2,"2":1,"4":1,"12":2,"16":1,"19":1,"24":3}}],["jetid",{"2":{"21":1}}],["jetinfo",{"2":{"17":1,"18":2}}],["jet2",{"2":{"21":1}}],["jet1",{"2":{"21":1}}],["jettomove",{"2":{"18":3}}],["jetp",{"2":{"18":11}}],["jetb",{"2":{"18":6}}],["jetalgorithm",{"2":{"21":3}}],["jeta",{"2":{"18":6}}],["jetwithancestors",{"2":{"17":1,"18":2}}],["jetvisualisation",{"2":{"12":1}}],["jetsplot",{"2":{"12":1,"23":2,"24":13}}],["jets",{"0":{"3":1,"4":1},"2":{"4":1,"5":1,"10":3,"11":3,"12":1,"18":28,"20":6,"21":75,"24":7}}],["jetreconstruction",{"2":{"16":1,"17":66,"18":69,"19":1,"20":23,"21":28,"23":3,"24":4}}],["jetreco",{"0":{"1":1,"2":1},"2":{"1":2,"2":1}}],["jet",{"0":{"0":1,"6":1,"16":1,"19":1,"22":1,"24":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"17":1,"18":1,"20":1,"21":1,"23":1,"24":1},"2":{"0":1,"1":3,"3":1,"4":1,"5":1,"6":1,"8":1,"9":5,"14":2,"17":2,"18":113,"20":4,"21":51,"24":6}}],["dat",{"2":{"21":2}}],["data",{"2":{"1":2,"2":1,"21":7}}],["dtype",{"2":{"21":1}}],["dtype=float64",{"2":{"21":1}}],["dynamic",{"2":{"21":1}}],["dynamically",{"2":{"9":1}}],["during",{"2":{"18":1,"24":1}}],["does",{"2":{"18":1}}],["doesn",{"2":{"18":1}}],["done",{"2":{"18":1}}],["do",{"2":{"17":2,"18":2}}],["doi",{"2":{"14":2}}],["documentation",{"0":{"16":1,"19":1,"22":1},"1":{"17":1,"18":1,"20":1,"21":1,"23":1,"24":1},"2":{"12":2,"13":1,"16":1,"19":1,"22":1}}],["dcut",{"2":{"10":1,"21":11}}],["development",{"2":{"24":1}}],["developed",{"2":{"14":1}}],["decompress",{"2":{"21":2}}],["decision",{"2":{"21":1}}],["decides",{"2":{"18":1}}],["delimiter",{"2":{"21":1}}],["delta",{"2":{"15":1}}],["define",{"2":{"21":1}}],["defined",{"2":{"18":1,"21":2}}],["definition",{"2":{"18":2}}],["defining",{"2":{"18":1}}],["defaults",{"2":{"18":1}}],["default",{"2":{"18":2,"21":10,"24":3}}],["degeneracy",{"2":{"18":1}}],["description",{"2":{"18":4,"21":1}}],["details",{"2":{"18":1,"21":2}}],["detach",{"2":{"17":1,"18":3}}],["determined",{"2":{"18":1}}],["determines",{"2":{"18":3}}],["determine",{"2":{"17":1,"18":2}}],["density",{"2":{"9":1}}],["depending",{"2":{"11":1}}],["dependencies",{"2":{"0":1}}],["deposit",{"2":{"3":1,"4":1}}],["deposits",{"2":{"3":1,"4":1}}],["dictionary",{"2":{"18":2}}],["dimension",{"2":{"18":3}}],["dib",{"2":{"18":3}}],["display",{"2":{"24":2}}],["distances",{"2":{"18":7}}],["distance",{"2":{"17":1,"18":30,"21":5}}],["dist",{"2":{"17":3,"18":9}}],["disk",{"2":{"13":1}}],["dij",{"2":{"10":1,"17":3,"18":34}}],["directional",{"2":{"18":1}}],["direction",{"2":{"18":3,"24":2}}],["directly",{"2":{"9":2}}],["directory",{"2":{"0":1,"12":1}}],["different",{"2":{"1":1,"5":1,"9":2,"18":1,"21":2}}],["put",{"2":{"21":1}}],["push",{"2":{"21":1}}],["public",{"0":{"18":1,"19":1,"21":1,"24":1},"1":{"20":1,"21":1},"2":{"19":1}}],["perspective=0",{"2":{"24":1}}],["perspective",{"2":{"24":3}}],["performs",{"2":{"5":1,"18":1}}],["performance",{"2":{"2":2,"18":1}}],["perform",{"2":{"1":1,"18":1,"21":1}}],["peudojets",{"2":{"18":1}}],["pseudorapidity",{"2":{"18":4}}],["pseudojets",{"2":{"21":3}}],["pseudojet",{"2":{"18":104,"20":3,"21":29}}],["p=",{"2":{"18":1,"21":1}}],["possibly",{"2":{"21":1}}],["posn",{"2":{"18":1}}],["positions",{"2":{"18":1}}],["position",{"2":{"18":3,"21":1}}],["power",{"2":{"18":3,"21":5}}],["points",{"2":{"18":4}}],["pointers",{"2":{"18":1}}],["point",{"2":{"18":8,"21":2}}],["polyglot",{"2":{"14":2}}],["pz",{"2":{"17":1,"18":3,"21":18}}],["py",{"2":{"17":1,"18":5,"21":18}}],["px",{"2":{"17":1,"18":4,"21":18}}],["practical",{"2":{"24":1}}],["prefered",{"2":{"21":1}}],["predefined",{"2":{"21":1}}],["previous",{"2":{"18":4}}],["printed",{"2":{"18":2}}],["print",{"2":{"18":1}}],["primaryclass=",{"2":{"14":2}}],["properly",{"2":{"18":1}}],["properties",{"2":{"18":1,"21":1}}],["property",{"2":{"18":1}}],["proxy",{"2":{"18":1}}],["protonmail",{"2":{"15":1}}],["proceedings",{"2":{"14":1}}],["processed",{"2":{"21":1}}],["process",{"2":{"5":1,"18":1,"24":1}}],["provides",{"2":{"13":1}}],["provided",{"2":{"11":1,"18":1,"21":4}}],["produces",{"2":{"5":1}}],["produce",{"2":{"3":1,"4":1,"18":1,"21":1}}],["producing",{"2":{"1":1}}],["profiling",{"2":{"2":2}}],["project=",{"2":{"1":2}}],["project",{"2":{"0":1,"2":1}}],["pt2",{"2":{"17":1,"18":2,"21":7}}],["ptmin=5",{"2":{"11":1}}],["ptmin",{"2":{"10":1,"21":8}}],["pt",{"2":{"10":1,"17":1,"18":9,"21":3}}],["placeholders",{"2":{"21":1}}],["plane",{"2":{"18":2}}],["plain",{"2":{"9":2,"17":1,"18":4,"20":1,"21":3}}],["plots",{"2":{"24":3}}],["plotted",{"2":{"24":1}}],["plotting",{"0":{"12":1},"2":{"12":1,"18":1,"24":1}}],["plot",{"2":{"3":1,"4":1,"12":1,"24":4}}],["p",{"2":{"8":1,"9":1,"18":48,"21":13}}],["physical",{"2":{"21":2}}],["physics",{"2":{"6":1}}],["phi=0",{"2":{"24":3}}],["phi2",{"2":{"18":2}}],["phi1",{"2":{"18":2}}],["phi",{"2":{"17":4,"18":46,"21":5,"24":4}}],["philippe",{"2":{"14":2,"15":2}}],["ph",{"2":{"7":1}}],["pp",{"2":{"6":1,"18":1,"21":1}}],["passed",{"2":{"24":2}}],["pairs",{"2":{"21":1}}],["parents",{"2":{"18":1}}],["parent",{"2":{"18":5,"21":1}}],["parent2",{"2":{"18":4}}],["parent1",{"2":{"18":4}}],["parameter",{"2":{"18":5,"21":11}}],["parameters",{"2":{"18":8}}],["parser",{"2":{"18":1}}],["particular",{"2":{"21":3}}],["particle",{"2":{"9":1,"18":16}}],["particles",{"2":{"8":2,"9":2,"18":29,"20":2,"21":34}}],["part",{"2":{"6":1}}],["paper",{"2":{"14":1}}],["pages",{"2":{"14":1}}],["package",{"2":{"0":1,"1":1,"6":1,"7":1,"12":1,"13":1,"14":1,"15":1,"18":1,"21":1,"24":1}}],["pdf",{"2":{"3":1}}],["png",{"2":{"3":1}}],["other",{"2":{"21":1,"24":2}}],["otherwise",{"2":{"18":2}}],["ooo",{"2":{"18":1}}],["o",{"2":{"18":1}}],["o=not",{"2":{"18":2}}],["our",{"2":{"18":1}}],["output",{"2":{"24":2}}],["outputs",{"2":{"18":1}}],["out",{"2":{"18":1}}],["old",{"2":{"18":1}}],["oldb",{"2":{"18":3}}],["overload",{"2":{"24":1}}],["over",{"2":{"18":11,"21":1,"24":1}}],["overhead",{"2":{"9":1}}],["operator",{"2":{"18":1}}],["optional",{"2":{"21":1,"24":3}}],["optionally",{"2":{"1":1}}],["option",{"2":{"2":1,"9":4}}],["options",{"2":{"1":1,"12":1}}],["origin",{"2":{"18":2}}],["original",{"2":{"14":1,"18":4}}],["order",{"2":{"18":2}}],["org",{"2":{"14":1}}],["or",{"2":{"10":1,"16":1,"18":4,"21":6,"24":1}}],["obtain",{"2":{"10":1}}],["object3",{"2":{"24":3}}],["object2",{"2":{"24":3}}],["object1",{"2":{"24":3}}],["object",{"2":{"8":1,"12":1,"18":86,"21":17,"24":3}}],["objects",{"2":{"8":1,"13":1,"18":4,"21":13,"24":13}}],["only",{"2":{"18":2,"21":1}}],["on",{"2":{"7":1,"9":1,"11":1,"13":1,"14":1,"18":13,"21":5}}],["one",{"2":{"0":1,"9":2,"12":1,"13":1,"21":1,"24":1}}],["of",{"2":{"0":2,"2":1,"3":1,"4":1,"5":1,"6":1,"8":1,"9":2,"11":1,"12":1,"14":1,"16":2,"18":207,"21":76,"24":26}}],["symbol",{"2":{"24":2}}],["skip",{"2":{"21":2}}],["skipevents",{"2":{"21":4}}],["smaller",{"2":{"18":2}}],["swiching",{"2":{"21":2}}],["switch",{"2":{"9":2}}],["sweep",{"2":{"18":1}}],["snapshot",{"2":{"18":1}}],["scheme",{"2":{"18":1,"21":2}}],["scalar",{"2":{"18":1}}],["script",{"2":{"3":1}}],["scripts",{"2":{"0":1}}],["square",{"2":{"21":1}}],["squared",{"2":{"18":15,"21":3}}],["sqrt",{"2":{"18":1}}],["signature",{"2":{"24":1}}],["significiant",{"2":{"18":1}}],["simply",{"2":{"21":2}}],["similar",{"2":{"4":1}}],["size",{"2":{"18":8,"24":2}}],["sizes",{"2":{"18":1}}],["single",{"2":{"18":1,"24":1}}],["since",{"2":{"14":1}}],["satisfy",{"2":{"21":2}}],["same",{"2":{"18":2,"24":2}}],["saves",{"2":{"21":1}}],["save",{"2":{"13":1,"21":4,"24":1}}],["savejets",{"2":{"13":1,"20":1,"21":1}}],["safely",{"2":{"9":1}}],["supplies",{"2":{"21":1}}],["support",{"2":{"21":1}}],["supported",{"2":{"10":1}}],["supports",{"2":{"9":1,"21":1}}],["suitable",{"2":{"21":2}}],["sum",{"2":{"18":1}}],["surrounding",{"2":{"17":2,"18":7}}],["such",{"2":{"13":1,"18":1}}],["something",{"2":{"21":1}}],["so",{"2":{"18":4}}],["source",{"2":{"18":73,"21":23,"24":3}}],["sorts",{"2":{"18":1}}],["sort",{"2":{"11":2}}],["sorting",{"0":{"11":1},"2":{"11":2}}],["sophisticated",{"2":{"2":1}}],["spcified",{"2":{"21":1}}],["spcific",{"2":{"18":1}}],["splitby",{"2":{"21":2}}],["splitby=isspace",{"2":{"21":2}}],["split",{"2":{"21":4}}],["specify",{"2":{"24":2}}],["specifying",{"2":{"21":1}}],["specified",{"2":{"18":7,"21":2}}],["specific",{"2":{"9":1,"18":1,"21":4,"24":2}}],["specialisation",{"2":{"21":2}}],["special",{"2":{"11":1}}],["space",{"2":{"9":1,"18":1}}],["stored",{"2":{"21":1}}],["stores",{"2":{"18":4}}],["store",{"2":{"18":1,"21":1}}],["stragegy",{"2":{"21":2}}],["strategies",{"2":{"9":1}}],["strategy=recostrategy",{"2":{"21":1}}],["strategy=n2tiled",{"2":{"1":1}}],["strategy=n2plain",{"2":{"1":1}}],["strategy",{"0":{"9":1},"2":{"1":1,"2":1,"9":8,"21":16}}],["strongly",{"2":{"21":1}}],["struct",{"2":{"18":7,"21":6}}],["structures",{"2":{"18":1}}],["structure",{"2":{"18":6}}],["string",{"2":{"18":2,"21":3}}],["str",{"2":{"18":1}}],["stream",{"2":{"18":2}}],["standard",{"2":{"21":1}}],["stage",{"2":{"18":1,"21":1,"24":1}}],["stable",{"2":{"18":2}}],["stability",{"2":{"16":1}}],["static",{"2":{"24":1}}],["status",{"2":{"18":3}}],["state=1",{"2":{"18":2}}],["state",{"2":{"17":1,"18":8,"20":2,"21":6,"24":1}}],["starting",{"2":{"18":2,"21":2}}],["starts",{"2":{"18":1}}],["start",{"2":{"18":6,"21":1}}],["step",{"2":{"17":4,"18":14}}],["steps",{"2":{"8":1,"17":1,"18":9}}],["stewart2023polyglot",{"2":{"14":1}}],["stewart",{"2":{"14":2,"15":2}}],["s",{"2":{"2":1,"9":1,"16":1,"18":5,"19":1,"24":1}}],["separate",{"2":{"24":1}}],["separators",{"2":{"21":1}}],["self",{"2":{"18":1}}],["selections",{"0":{"10":1},"1":{"11":1},"2":{"1":1,"10":1}}],["second",{"2":{"18":12}}],["serialisation",{"0":{"13":1},"2":{"21":2}}],["sequence",{"2":{"12":1,"18":16,"21":5,"24":2}}],["sequential",{"2":{"6":1}}],["searches",{"2":{"18":1}}],["search",{"2":{"9":1,"18":1}}],["seen",{"2":{"18":1}}],["seeing",{"2":{"18":1}}],["see",{"2":{"1":1,"2":1,"12":3,"13":1,"24":2}}],["sets",{"2":{"18":5}}],["setup",{"2":{"17":1,"18":20}}],["set",{"2":{"1":1,"17":4,"18":19}}],["should",{"2":{"14":1,"18":2,"21":1,"24":3}}],["shown",{"2":{"9":1}}],["showing",{"2":{"3":1,"5":1}}],["shows",{"2":{"1":1}}],["show",{"2":{"0":1,"17":1,"18":1,"24":2}}],["shjulia",{"2":{"1":1,"2":1}}],["ntuple",{"2":{"18":1}}],["nb",{"2":{"18":1}}],["nbsp",{"2":{"18":73,"21":23,"24":3}}],["nndij",{"2":{"18":2}}],["nndist",{"2":{"18":11}}],["nns",{"2":{"18":1}}],["nn",{"2":{"17":3,"18":26}}],["neither",{"2":{"21":1}}],["neighboring",{"2":{"18":1}}],["neighbors",{"2":{"18":6}}],["neighbor",{"2":{"18":30}}],["neighbouring",{"2":{"18":6}}],["neighbourhood",{"2":{"18":1}}],["neighbours",{"2":{"17":3,"18":9}}],["neighbour",{"2":{"17":1,"18":13}}],["need",{"2":{"18":1,"21":1}}],["needs",{"2":{"18":1,"24":2}}],["needed",{"2":{"18":1}}],["necessary",{"2":{"18":1}}],["near",{"2":{"18":5}}],["nearest",{"2":{"17":1,"18":38}}],["nextjet",{"2":{"18":3}}],["next",{"2":{"18":6}}],["newly",{"2":{"18":1}}],["newjet",{"2":{"18":1}}],["new",{"2":{"18":8}}],["njets",{"2":{"10":2,"21":6}}],["non",{"2":{"21":1}}],["nonexistentparent",{"2":{"18":2}}],["nor",{"2":{"21":1}}],["nocross",{"2":{"17":1,"18":3}}],["now",{"2":{"12":1,"24":1}}],["notiledjet",{"2":{"18":2}}],["not",{"2":{"18":4,"21":4,"24":1}}],["nothing",{"2":{"10":2,"18":2,"21":4}}],["notes",{"2":{"9":1}}],["notebook",{"2":{"4":1}}],["note",{"2":{"0":1,"9":1,"18":7,"21":3}}],["no",{"2":{"9":1,"11":1,"16":1,"18":1}}],["n",{"2":{"9":2,"16":1,"18":24,"20":1,"21":2}}],["n256",{"2":{"24":4}}],["n2plain",{"2":{"9":2}}],["n2tiled",{"2":{"2":1,"9":1}}],["namespace",{"2":{"21":4}}],["name",{"2":{"9":1,"21":4,"24":1}}],["natively",{"2":{"7":1}}],["nsamples",{"2":{"2":1}}],["number",{"2":{"0":1,"18":24,"21":12,"24":2}}],["tuple",{"2":{"18":1,"24":1}}],["turbo",{"2":{"18":1}}],["table",{"2":{"18":1}}],["tags",{"2":{"18":3}}],["tagged",{"2":{"18":2}}],["takes",{"2":{"18":1,"21":1,"24":3}}],["type",{"2":{"18":11,"21":8}}],["types",{"0":{"21":1},"2":{"16":2,"18":1}}],["tj",{"2":{"17":2,"18":6}}],["two",{"2":{"12":1,"18":11,"21":1,"24":2}}],["treated",{"2":{"18":1,"21":1}}],["true",{"2":{"18":3,"24":1}}],["track",{"2":{"18":2}}],["tracks",{"2":{"8":1}}],["transverse",{"2":{"18":9,"21":12}}],["tryparse",{"2":{"17":1,"18":2}}],["trivial",{"2":{"11":1}}],["t",{"2":{"9":1,"18":13,"21":10}}],["time",{"2":{"24":1}}],["timing",{"2":{"2":1}}],["tilingdef",{"2":{"17":1,"18":13}}],["tiling",{"2":{"17":3,"18":61}}],["tile",{"2":{"17":5,"18":64}}],["tiles",{"2":{"9":1,"17":3,"18":60}}],["tiledalgoll",{"2":{"18":1}}],["tiledjets",{"2":{"18":3}}],["tiledjet",{"2":{"17":4,"18":46}}],["tiled",{"2":{"2":1,"9":1,"18":6,"20":2,"21":4}}],["title=nothing",{"2":{"24":1}}],["title=",{"2":{"14":1}}],["title",{"2":{"14":1,"24":1}}],["test",{"2":{"1":2,"2":1}}],["together",{"2":{"24":1}}],["todo",{"2":{"21":2}}],["total",{"2":{"18":4,"21":3}}],["toml",{"2":{"0":1}}],["to",{"2":{"0":1,"1":4,"2":3,"4":1,"8":1,"9":5,"10":1,"11":2,"12":1,"13":1,"17":2,"18":109,"21":32,"24":13}}],["thus",{"2":{"18":1,"21":2}}],["than",{"2":{"18":4,"21":2}}],["that",{"2":{"0":1,"1":1,"2":1,"3":1,"4":1,"9":3,"12":1,"13":1,"18":17,"21":7,"24":6}}],["threshold",{"2":{"18":3,"21":1}}],["three",{"2":{"9":1}}],["thrown",{"2":{"18":1}}],["this",{"2":{"1":1,"2":1,"3":2,"4":2,"6":1,"14":1,"15":1,"18":34,"21":8,"24":4}}],["them",{"2":{"18":1,"21":2}}],["they",{"2":{"18":1,"24":1}}],["their",{"2":{"5":1,"18":2}}],["then",{"2":{"5":1,"18":10,"21":2,"24":1}}],["there",{"2":{"1":1,"9":1,"12":1,"18":1,"21":1,"24":1}}],["these",{"2":{"0":1,"1":1,"9":1,"16":1,"18":2,"21":2}}],["the",{"2":{"0":3,"1":2,"2":4,"3":3,"4":3,"5":2,"7":2,"8":2,"9":4,"12":11,"13":1,"14":3,"15":3,"18":582,"21":198,"24":58}}],["hv",{"2":{"24":2}}],["holding",{"2":{"18":1,"21":1}}],["how",{"2":{"0":1,"1":1,"5":1}}],["hand",{"2":{"18":1}}],["have",{"2":{"18":3,"24":7}}],["has",{"2":{"0":1,"14":1,"18":2,"24":1}}],["hist",{"2":{"18":1,"21":4}}],["history",{"2":{"17":2,"18":21,"21":18}}],["historyelement",{"2":{"17":2,"18":8,"21":1}}],["highest",{"2":{"11":1}}],["higher",{"2":{"9":1}}],["high",{"2":{"6":1}}],["https",{"2":{"7":1,"14":1}}],["height",{"2":{"24":1}}],["hence",{"2":{"18":2}}],["heuristic",{"2":{"18":1}}],["here",{"2":{"18":1,"24":2}}],["hegner",{"2":{"14":2}}],["hep",{"2":{"7":1,"14":2}}],["hepmc3",{"2":{"1":2,"2":1,"21":2}}],["help",{"2":{"1":1,"2":1}}],["azimuth=2",{"2":{"24":1}}],["azimuth",{"2":{"21":1,"24":3}}],["azimuthal",{"2":{"18":13,"21":3}}],["automatically",{"2":{"21":2}}],["authored",{"2":{"15":1}}],["authors",{"0":{"15":1},"2":{"15":1}}],["author=",{"2":{"14":1}}],["author",{"2":{"14":1}}],["affected",{"2":{"21":1}}],["after",{"2":{"18":2}}],["against",{"2":{"18":8}}],["across",{"2":{"18":2}}],["access",{"2":{"18":1}}],["accordingly",{"2":{"18":3}}],["actually",{"2":{"18":1}}],["adjusts",{"2":{"18":2}}],["adjecent",{"2":{"18":1}}],["added",{"2":{"18":4,"21":1}}],["additonal",{"2":{"21":1}}],["additive",{"2":{"18":1}}],["additionally",{"2":{"24":2}}],["additional",{"2":{"18":1}}],["addition",{"2":{"18":2,"21":1}}],["adding",{"2":{"18":2}}],["adds",{"2":{"18":2}}],["add",{"2":{"17":2,"18":4,"24":1}}],["applying",{"2":{"18":1}}],["abstractfloat=0",{"2":{"21":2}}],["abstractfloat",{"2":{"18":14,"21":2}}],["about",{"2":{"18":1,"21":1}}],["above",{"2":{"9":1,"12":1,"18":2,"21":1,"24":1}}],["axis",{"2":{"18":2,"21":3,"24":4}}],["attributes",{"2":{"18":1}}],["atell",{"2":{"14":2,"15":2}}],["at",{"2":{"9":1,"18":2,"24":1}}],["available",{"2":{"9":1}}],["aachen",{"2":{"7":1,"18":1,"21":1}}],["argument",{"2":{"21":4,"24":1}}],["argumenterror",{"2":{"21":2}}],["arguments",{"2":{"18":59,"21":17,"24":5}}],["around",{"2":{"18":1}}],["arrays",{"2":{"18":2,"24":7}}],["array",{"2":{"18":57,"21":6,"24":4}}],["archiveprefix=",{"2":{"14":2}}],["article",{"2":{"14":1}}],["arxiv",{"2":{"7":1,"14":3}}],["are",{"2":{"1":1,"3":1,"4":1,"6":1,"7":1,"9":1,"10":1,"11":1,"12":1,"18":14,"21":6,"24":1}}],["any",{"2":{"21":3,"24":2}}],["angle",{"2":{"18":17,"21":4,"24":2}}],["ancestors=false",{"2":{"24":1}}],["ancestors",{"2":{"17":1,"18":9,"24":4}}],["an",{"2":{"11":1,"18":20,"21":5,"24":4}}],["another",{"2":{"9":1,"18":2,"24":1}}],["anti−kt",{"2":{"7":1}}],["antikt",{"2":{"2":2,"18":1,"21":1}}],["animation",{"0":{"12":1},"2":{"5":1,"24":3}}],["animatereco",{"2":{"12":1,"23":1,"24":1}}],["animate",{"0":{"5":1},"2":{"12":1,"24":1}}],["andrew",{"2":{"14":2,"15":1}}],["and",{"0":{"10":1,"12":1,"15":1,"21":1},"1":{"11":1},"2":{"1":2,"2":1,"5":2,"6":1,"7":1,"10":1,"12":2,"13":2,"14":6,"15":1,"16":1,"18":63,"21":18,"24":8}}],["ascii",{"2":{"21":2}}],["assign",{"2":{"18":1}}],["assigned",{"2":{"18":1}}],["assuming",{"2":{"18":1}}],["associated",{"2":{"18":2}}],["as",{"2":{"2":2,"6":1,"8":1,"9":2,"11":1,"12":1,"13":1,"18":9,"21":9,"24":8}}],["alg",{"2":{"21":2}}],["algorithm",{"2":{"1":1,"2":1,"18":2,"21":19}}],["algorithms",{"0":{"7":1},"2":{"1":1,"6":1,"7":2,"9":1,"18":1,"21":3}}],["alias",{"2":{"18":3}}],["along",{"2":{"18":2,"21":3,"24":4}}],["already",{"2":{"18":2,"21":2}}],["although",{"2":{"14":1}}],["also",{"2":{"13":1,"18":3}}],["all",{"2":{"3":1,"4":1,"8":1,"17":1,"18":16,"21":7}}],["allows",{"2":{"2":1}}],["a",{"2":{"0":1,"1":2,"2":2,"3":3,"4":2,"8":2,"9":3,"12":3,"13":1,"15":1,"18":125,"21":65,"24":16}}]],"serializationVersion":2}';export{e as default};
diff --git a/previews/PR66/assets/chunks/VPLocalSearchBox.5RvTfLNv.js b/previews/PR66/assets/chunks/VPLocalSearchBox.5RvTfLNv.js
new file mode 100644
index 0000000..4e2f4ae
--- /dev/null
+++ b/previews/PR66/assets/chunks/VPLocalSearchBox.5RvTfLNv.js
@@ -0,0 +1,7 @@
+var Ct=Object.defineProperty;var It=(o,e,t)=>e in o?Ct(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var Oe=(o,e,t)=>It(o,typeof e!="symbol"?e+"":e,t);import{X as Dt,s as oe,v as $e,al as kt,am as Ot,d as Rt,G as xe,an as tt,h as Fe,ao as _t,ap as Mt,x as Lt,aq as zt,y as Re,R as de,Q as Ee,ar as Pt,as as Bt,Y as Vt,U as $t,a1 as Wt,o as ee,b as Kt,j as k,a2 as Jt,k as j,at as Ut,au as jt,av as Gt,c as re,n as rt,e as Se,E as at,F as nt,a as ve,t as pe,aw as Qt,p as qt,l as Ht,ax as it,ay as Yt,ab as Zt,ah as Xt,az as er,_ as tr}from"./framework.CT7mYJ7N.js";import{u as rr,c as ar}from"./theme.DM0OIwSv.js";const nr={root:()=>Dt(()=>import("./@localSearchIndexroot.D9KFUL09.js"),[])};/*!
+* tabbable 6.2.0
+* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE
+*/var yt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Ne=yt.join(","),mt=typeof Element>"u",ue=mt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Ce=!mt&&Element.prototype.getRootNode?function(o){var e;return o==null||(e=o.getRootNode)===null||e===void 0?void 0:e.call(o)}:function(o){return o==null?void 0:o.ownerDocument},Ie=function o(e,t){var r;t===void 0&&(t=!0);var n=e==null||(r=e.getAttribute)===null||r===void 0?void 0:r.call(e,"inert"),a=n===""||n==="true",i=a||t&&e&&o(e.parentNode);return i},ir=function(e){var t,r=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return r===""||r==="true"},gt=function(e,t,r){if(Ie(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Ne));return t&&ue.call(e,Ne)&&n.unshift(e),n=n.filter(r),n},bt=function o(e,t,r){for(var n=[],a=Array.from(e);a.length;){var i=a.shift();if(!Ie(i,!1))if(i.tagName==="SLOT"){var s=i.assignedElements(),u=s.length?s:i.children,l=o(u,!0,r);r.flatten?n.push.apply(n,l):n.push({scopeParent:i,candidates:l})}else{var h=ue.call(i,Ne);h&&r.filter(i)&&(t||!e.includes(i))&&n.push(i);var d=i.shadowRoot||typeof r.getShadowRoot=="function"&&r.getShadowRoot(i),v=!Ie(d,!1)&&(!r.shadowRootFilter||r.shadowRootFilter(i));if(d&&v){var y=o(d===!0?i.children:d.children,!0,r);r.flatten?n.push.apply(n,y):n.push({scopeParent:i,candidates:y})}else a.unshift.apply(a,i.children)}}return n},wt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},se=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||ir(e))&&!wt(e)?0:e.tabIndex},or=function(e,t){var r=se(e);return r<0&&t&&!wt(e)?0:r},sr=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},xt=function(e){return e.tagName==="INPUT"},ur=function(e){return xt(e)&&e.type==="hidden"},lr=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(r){return r.tagName==="SUMMARY"});return t},cr=function(e,t){for(var r=0;rsummary:first-of-type"),i=a?e.parentElement:e;if(ue.call(i,"details:not([open]) *"))return!0;if(!r||r==="full"||r==="legacy-full"){if(typeof n=="function"){for(var s=e;e;){var u=e.parentElement,l=Ce(e);if(u&&!u.shadowRoot&&n(u)===!0)return ot(e);e.assignedSlot?e=e.assignedSlot:!u&&l!==e.ownerDocument?e=l.host:e=u}e=s}if(vr(e))return!e.getClientRects().length;if(r!=="legacy-full")return!0}else if(r==="non-zero-area")return ot(e);return!1},yr=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var r=0;r=0)},gr=function o(e){var t=[],r=[];return e.forEach(function(n,a){var i=!!n.scopeParent,s=i?n.scopeParent:n,u=or(s,i),l=i?o(n.candidates):s;u===0?i?t.push.apply(t,l):t.push(s):r.push({documentOrder:a,tabIndex:u,item:n,isScope:i,content:l})}),r.sort(sr).reduce(function(n,a){return a.isScope?n.push.apply(n,a.content):n.push(a.content),n},[]).concat(t)},br=function(e,t){t=t||{};var r;return t.getShadowRoot?r=bt([e],t.includeContainer,{filter:We.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:mr}):r=gt(e,t.includeContainer,We.bind(null,t)),gr(r)},wr=function(e,t){t=t||{};var r;return t.getShadowRoot?r=bt([e],t.includeContainer,{filter:De.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):r=gt(e,t.includeContainer,De.bind(null,t)),r},le=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ue.call(e,Ne)===!1?!1:We(t,e)},xr=yt.concat("iframe").join(","),_e=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ue.call(e,xr)===!1?!1:De(t,e)};/*!
+* focus-trap 7.5.4
+* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE
+*/function st(o,e){var t=Object.keys(o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(o);e&&(r=r.filter(function(n){return Object.getOwnPropertyDescriptor(o,n).enumerable})),t.push.apply(t,r)}return t}function ut(o){for(var e=1;e0){var r=e[e.length-1];r!==t&&r.pause()}var n=e.indexOf(t);n===-1||e.splice(n,1),e.push(t)},deactivateTrap:function(e,t){var r=e.indexOf(t);r!==-1&&e.splice(r,1),e.length>0&&e[e.length-1].unpause()}},Ar=function(e){return e.tagName&&e.tagName.toLowerCase()==="input"&&typeof e.select=="function"},Tr=function(e){return(e==null?void 0:e.key)==="Escape"||(e==null?void 0:e.key)==="Esc"||(e==null?void 0:e.keyCode)===27},ge=function(e){return(e==null?void 0:e.key)==="Tab"||(e==null?void 0:e.keyCode)===9},Nr=function(e){return ge(e)&&!e.shiftKey},Cr=function(e){return ge(e)&&e.shiftKey},ct=function(e){return setTimeout(e,0)},ft=function(e,t){var r=-1;return e.every(function(n,a){return t(n)?(r=a,!1):!0}),r},ye=function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n1?p-1:0),I=1;I
This is a basic jet reconstruction example that shows how to call the package to perform a jet reconstruction, with different algorithms and (optionally) strategy, producing exclusive and inclusive jet selections.
This is a more sophisticated example that allows performance measurements to be made of the reconstruction, as well as profiling (flamegraphs and memory profiling). Use the --help option to see usage. e.g., to extract timing performance for the AntiKt algorithm using the tiled strategy:
sh
julia --project instrumented-jetreco.jl -S N2Tiled -A AntiKt --nsamples 100 ../test/data/events.hepmc3
This script will produce a PNG/PDF showing the results of a jet reconstruction. This is a 3D plot where all the initial energy deposits are visualised, with colours that indicate in which final cluster the deposit ended up in.
Similar to visualise-jets.jl this notebook will produce a visualisation of jet reconstruction in the browser. This is a 3D plot where all the initial energy deposits are visualised, with colours that indicate in which final cluster the deposit ended up in.
Generally one can use the jet_reconstruct interface, shown above, as the Best strategy safely as the overhead is extremely low. That interface supports a strategy option to switch to a different option.
Another option, if one wishes to use a specific strategy, is to call that strategy's interface directly, e.g.,
julia
# For N2Plain strategy called directly
+plain_jet_reconstruct(particles::Vector{T}; p = -1, R = 1.0, recombine = +)
Note that there is no strategy option in these interfaces.
To visualise the clustered jets as a 3d bar plot (see illustration above) we now use Makie.jl. See the jetsplot function in ext/JetVisualisation.jl and its documentation for more. There are two worked examples in the examples directory.
The plotting code is a package extension and will load if the one of the Makie modules is loaded in the environment.
The animatereco function will animate the reconstruction sequence, given a ClusterSequence object. See the function documentation for the many options that can be customised.
The package also provides methods such as loadjets, loadjets!, and savejets that one can use to save and load objects on/from disk easily in a very flexible format. See documentation for more.
Although it has been developed further since the CHEP2023 conference, the CHEP conference proceedings, 10.1051/epjconf/202429505017, should be cited if you use this package:
bibtex
@article{refId0,
+ author = {{Stewart, Graeme Andrew} and {Gras, Philippe} and {Hegner, Benedikt} and {Krasnopolski, Atell}},
+ doi = {10.1051/epjconf/202429505017},
+ journal = {EPJ Web of Conf.},
+ pages = {05017},
+ title = {Polyglot Jet Finding},
+ url = {https://doi.org/10.1051/epjconf/202429505017},
+ volume = 295,
+ year = 2024,
+ eprint={2309.17309},
+ archivePrefix={arXiv},
+ primaryClass={hep-ex}
+}
@misc{stewart2023polyglot,
+ title={Polyglot Jet Finding},
+ author={Graeme Andrew Stewart and Philippe Gras and Benedikt Hegner and Atell Krasnopolski},
+ year={2023},
+ eprint={2309.17309},
+ archivePrefix={arXiv},
+ primaryClass={hep-ex}
+}
Ensure that the rapidity and azimuthal angle of the PseudoJet p are valid. If the azimuthal angle is invalid (used as a proxy for both variables), they are set to a valid value using _set_rap_phi!.
Arguments
p::PseudoJet: The PseudoJet object to ensure valid rapidity and azimuthal angle for.
_plain_jet_reconstruct(; particles::Vector{PseudoJet}, p = -1, R = 1.0, recombine = +)
This is the internal implementation of jet reconstruction using the plain algorithm. It takes a vector of particles representing the input particles and reconstructs jets based on the specified parameters. Here the particles must be of type PseudoJet.
Users of the package should use the plain_jet_reconstruct function as their entry point to this jet reconstruction.
The power value maps to specific pp jet reconstruction algorithms: -1 = AntiKt, 0 = Cambridge/Aachen, 1 = Inclusive Kt.
Arguments
particles: A vector of PseudoJet objects representing the input particles.
p=-1: The power to which the transverse momentum (pt) of each particle is raised.
R=1.0: The jet radius parameter.
recombine: The recombination function used to merge two jets. Default is + (additive recombination).
Returns
clusterseq: The resulting ClusterSequence object representing the reconstructed jets.
Set the rapidity and azimuthal angle of the PseudoJet p.
Arguments
p::PseudoJet: The PseudoJet object for which to set the rapidity and azimuthal angle.
Description
This function calculates and sets the rapidity and azimuthal angle of the PseudoJet p based on its momentum components. The rapidity is calculated in a way that is insensitive to roundoff errors when the momentum components are large. If the PseudoJet represents a point with infinite rapidity, a large number is assigned to the rapidity in order to lift the degeneracy between different zero-pt momenta.
Note - the ϕ angle is calculated in the range [0, 2π).
Add a new jet's history into the recombination sequence.
Arguments:
clusterseq::ClusterSequence: The cluster sequence object.
parent1: The index of the first parent.
parent2: The index of the second parent.
jetp_index: The index of the jet.
dij: The dij value.
This function adds a new HistoryElement to the history vector of the clusterseq object. The HistoryElement contains information about the parents, child, jet index, dij value, and the maximum dij value so far. It also updates the child index of the parent elements.
If the parent1 or parent2 have already been recombined, an InternalError is thrown. The jetp_index is used to update the _cluster_hist_index of the corresponding PseudoJet object.
Adds to the vector tile_union the tiles that are in the neighbourhood of the specified center_index, including itself and whose tagged status are false - start adding from position n_near_tiles-1, and increase n_near_tiles. When a neighbour is added its tagged status is set to true.
Arguments
center_index: The index of the center tile.
tile_union: An array to store the indices of neighbouring tiles.
n_near_tiles: The number of neighbouring tiles.
tiling: The tiling object containing the tile tags.
determine_rapidity_extent(eta::Vector{T}) where T <: AbstractFloat
Calculate the minimum and maximum rapidities based on the input vector eta. The function determines the rapidity extent by binning the multiplicities as a function of rapidity and finding the minimum and maximum rapidities such that the edge bins contain a certain fraction (~1/4) of the busiest bin and a minimum number of particles.
This is the heuristic which is used by FastJet (inline comments are from FastJet).
Compute the dij value for a given index i to its nearest neighbor. The nearest neighbor is determined from nn[i], and the metric distance to the nearest neighbor is given by the distance nndist[i] applying the lower of the kt2_array values for the two particles.ßß
Perform the bookkeeping associated with the step of recombining jet_i and jet_j (assuming a distance dij).
Arguments
clusterseq::ClusterSequence: The cluster sequence object.
jet_i: The index of the first jet to be recombined.
jet_j: The index of the second jet to be recombined.
dij: The distance between the two jets.
recombine=+: The recombination function to be used. Default is addition.
Returns
newjet_k: The index of the newly created jet.
Description
This function performs the i-j recombination step in the cluster sequence. It creates a new jet by recombining the first two jets using the specified recombination function. The new jet is then added to the cluster sequence. The function also updates the indices and history information of the new jet and sorts out the history.
Find the union of neighbouring tiles of jetA, jetB, and oldB and add them to the tile_union. This established the set of tiles over which searches for updated and new nearest-neighbours must be run
Arguments
tile_union: The tile union to which the neighbouring tiles will be added.
jetA: The first jet.
jetB: The second jet.
oldB: The old second jet.
tiling: The tiling information.
Returns
The number of neighbouring tiles added to the tile_union.
Compute the linear index of a tile in a tiled setup. This is much faster in this function than using the LinearIndices construct (like x100, which is bonkers, but there you go...)
Arguments
tiling_setup::TilingDef: The tiling setup defining the number of tiles in each dimension.
i_η::Int: The index of the tile in the η dimension.
i_ϕ::Int: The index of the tile in the ϕ dimension.
Inserts a TiledJet object into the linked list of TiledJet objects, before the nextjet object. The jet to move can be an isolated jet, a jet from another list or a jet from the same list
Arguments
nextjet::TiledJet: The TiledJet object after which jettomove should be inserted.
jettomove::TiledJet: The TiledJet object to be inserted.
Compute the ranks of jets in a given ClusterSequence object based on a specified comparison function.
Arguments
clusterseq::ClusterSequence: The ClusterSequence object containing the jets to rank.
compare_fn = JetReconstruction.pt: The comparison function used to determine the order of the jets. Defaults to JetReconstruction.pt, which compares jets based on their transverse momentum.
Returns
A dictionary mapping each jet index to its rank.
Note
This is a utility function that can be used to rank initial clusters based on a specified jet property. It can be used to assign a consistent "rank" to each reconstructed jet in the cluster sequence, which is useful for stable plotting of jet outputs.
Compute the number of jet-jet merge steps in a cluster sequence. This is useful to give the number of meaningful recombination steps in a jet reconstruction sequence (beam merge steps are not counted).
Arguments
clusterseq::ClusterSequence: The cluster sequence object.
This function returns the reconstruction state of a ClusterSequence object based on a given iteration number in the reconstruction.
Arguments
cs::ClusterSequence: The ClusterSequence object to update.
ranks: The ranks of the original clusters, that are inherited by peudojets
during the reconstruction process.
iteration=0: The iteration number to consider for updating the reconstruction state (0 represents the initial state).
ignore_beam_merge=true: Ignore beam merging steps in the reconstruction (which produce no change in status).
Returns
A dictionary representing a snapshot of the reconstruction state.
Details
The function starts by initializing the reconstruction state with the initial particles. Then, it walks over the iteration sequence and updates the reconstruction state based on the history of recombination and finalization/beam merger steps.
Compute the indices of the right neighbors of a given center index in a tiling. This is used in the inital sweep to calculate the nearest neighbors, where the search between jets for the nearest neighbour is bi-directional, thus when a tile is considered only the right neighbours are needed to compare jet distances as the left-hand tiles have been done from that tile already.
Arguments
center::Int: The center index.
tiling::Tiling: The tiling object.
Returns
Surrounding: An object containing the indices of the right neighbors.
This function sets the nearest neighbor information for all jets in the tiledjets vector.
Arguments
clusterseq::ClusterSequence: The cluster sequence object.
tiling::Tiling: The tiling object.
tiledjets::Vector{TiledJet}: The vector of tiled jets.
Returns
NNs::Vector{TiledJet}: The vector of nearest neighbor jets.
diJ::Vector{Float64}: The vector of diJ values.
The function iterates over each tile in the tiling and sets the nearest neighbor information for each jet in the tile. It then looks for neighbor jets in the neighboring tiles and updates the nearest neighbor information accordingly. Finally, it creates the diJ table and returns the vectors of nearest neighbor jets and diJ values.
Note: The diJ values are calculated as the kt distance multiplied by R^2.
setup_tiling(eta::Vector{T}, Rparam::AbstractFloat) where T <: AbstractFloat
This function sets up the tiling parameters for a reconstruction given a vector of rapidities eta and a radius parameter Rparam.
Arguments
eta::Vector{T}: A vector of rapidities.
Rparam::AbstractFloat: The jet radius parameter.
Returns
tiling_setup: A TilingDef object containing the tiling setup parameters.
Description
The function first decides the tile sizes based on the Rparam value. It then determines the number of tiles in the phi direction (n_tiles_phi) based on the tile size. Next, it determines the rapidity extent of the input eta vector and adjusts the values accordingly. Finally, it creates a TilingDef object with the calculated tiling parameters and returns it.
upd_nn_crosscheck!(i, from, to, rapidity_array, phi_array, R2, nndist, nn)
Update the nearest neighbor information for a given particle index i against all particles in the range indexes from to to. The function updates the nndist and nn arrays with the nearest neighbor distance and index respectively, both for particle i and the checked particles [from:to] (hence crosscheck).
Arguments
i::Int: The index of the particle to update and check against.
from::Int: The starting index of the range of particles to check against.
to::Int: The ending index of the range of particles to check against.
rapidity_array: An array containing the rapidity values of all particles.
phi_array: An array containing the phi values of the all particles.
R2: The squared jet distance threshold for considering a particle as a neighbour.
nndist: The array that stores the nearest neighbor distances.
nn: The array that stores the nearest neighbor indices.
upd_nn_nocross!(i, from, to, rapidity_array, phi_array, R2, nndist, nn)
Update the nearest neighbor information for a given particle index i against all particles in the range indexes from to to. The function updates the nndist and nn arrays with the nearest neighbor distance and index respectively, only for particle i (hence nocross).
Arguments
i::Int: The index of the particle to update and check against.
from::Int: The starting index of the range of particles to check against.
to::Int: The ending index of the range of particles to check against.
rapidity_array: An array containing the rapidity values of all particles.
phi_array: An array containing the phi values of the all particles.
R2: The squared jet distance threshold for considering a particle as a neighbour.
nndist: The array that stores the nearest neighbor distances.
nn: The array that stores the nearest neighbor indices.
Update the nearest neighbor information after a jet merge step.
Arguments:
i: Index of the first particle in the last merge step.
j: Index of the second particle in the last merge step.
k: Index of the current particle for which the nearest neighbour will be updated.
N: Total number of particles (currently vaild array indexes are [1:N]).
Nn: Number of nearest neighbors to consider.
kt2_array: Array of transverse momentum squared values.
rapidity_array: Array of rapidity values.
phi_array: Array of azimuthal angle values.
R2: Distance threshold squared for nearest neighbors.
nndist: Array of nearest neighbor geometric distances.
nn: Array of nearest neighbor indices.
nndij: Array of metric distances between particles.
This function updates the nearest neighbor information for the current particle k by considering the distances to particles i and j. It checks if the distance between k and i is smaller than the current nearest neighbor distance for k, and updates the nearest neighbor information accordingly. It also updates the nearest neighbor information for i if the distance between k and i is smaller than the current nearest neighbor distance for i. Finally, it checks if the nearest neighbor of k is the total number of particles Nn and updates it to j if necessary.
A struct holding a record of jet mergers and finalisations
Fields:
parent1: Index in history where first parent of this jet was created (NonexistentParent if this jet is an original particle)
parent2: Index in history where second parent of this jet was created (NonexistentParent if this jet is an original particle); BeamJet if this history entry just labels the fact that the jet has recombined with the beam)
child: Index in history where the current jet is recombined with another jet to form its child. It is Invalid if this jet does not further recombine.
jetp_index: Index in the jets vector where we will find the PseudoJet object corresponding to this jet (i.e. the jet created at this entry of the history). NB: if this element of the history corresponds to a beam recombination, then jetp_index=Invalid.
dij: The distance corresponding to the recombination at this stage of the clustering.
max_dij_so_far: The largest recombination distance seen so far in the clustering history.
TiledJet represents a jet in a tiled algorithm for jet reconstruction, with additional information to track the jet's position in the tiled structures.
Fields
id::Int: The ID of the jet.
eta::Float64: The rapidity of the jet.
phi::Float64: The azimuthal angle of the jet.
kt2::Float64: The transverse momentum squared of the jet.
NN_dist::Float64: The distance to the nearest neighbor.
jets_index::Int: The index of the jet in the jet array.
tile_index::Int: The index of the tile in the tile array.
dij_posn::Int: The position of this jet in the dij compact array.
The Tiling struct represents a tiling configuration for jet reconstruction.
Fields
setup::TilingDef: The tiling definition used for the configuration.
tiles::Matrix{TiledJet}: A matrix of tiled jets, containing the first jet in each tile (then the linked list of the first jet is followed to get access to all jets in this tile).
positions::Matrix{Int}: Used to track tiles that are on the edge of ϕ array, where neighbours need to be wrapped around.
tags::Matrix{Bool}: The matrix of tags indicating whether a tile is valid or not (set to false initially, then true when the tile has been setup properly).
A struct for iterating over all neighbour tiles for a given Cartesian tile index. These are the tiles above and to the right of the given tile (X=included, O=not included):
XXX
+X.X
+XXX
Note, rapidity coordinate must be in range, ϕ coordinate wraps
A struct for iterating over rightmost tiles for a given Cartesian tile index. These are the tiles above and to the right of the given tile (X=included, O=not included):
XXX
+O.X
+OOO
Note, rapidity coordinate must be in range, ϕ coordinate wraps
`,152),n=[o];function r(l,d,c,p,h,u){return i(),t("div",null,n)}const k=e(a,[["render",r]]);export{b as __pageData,k as default};
diff --git a/previews/PR66/assets/lib_internal.md.dfz8Wswb.lean.js b/previews/PR66/assets/lib_internal.md.dfz8Wswb.lean.js
new file mode 100644
index 0000000..6bdcf16
--- /dev/null
+++ b/previews/PR66/assets/lib_internal.md.dfz8Wswb.lean.js
@@ -0,0 +1 @@
+import{_ as e,c as t,o as i,a7 as s}from"./chunks/framework.CT7mYJ7N.js";const b=JSON.parse('{"title":"Jet Reconstruction Internal Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"lib/internal.md","filePath":"lib/internal.md","lastUpdated":null}'),a={name:"lib/internal.md"},o=s("",152),n=[o];function r(l,d,c,p,h,u){return i(),t("div",null,n)}const k=e(a,[["render",r]]);export{b as __pageData,k as default};
diff --git a/previews/PR66/assets/lib_public.md.SJ6FK4z6.js b/previews/PR66/assets/lib_public.md.SJ6FK4z6.js
new file mode 100644
index 0000000..b19597e
--- /dev/null
+++ b/previews/PR66/assets/lib_public.md.SJ6FK4z6.js
@@ -0,0 +1,7 @@
+import{_ as e,c as t,o as s,a7 as i}from"./chunks/framework.CT7mYJ7N.js";const g=JSON.parse('{"title":"Jet Reconstruction Public Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"lib/public.md","filePath":"lib/public.md","lastUpdated":null}'),a={name:"lib/public.md"},n=i(`
Return all exclusive jets of a ClusterSequence, with either a specific number of jets or a cut on the maximum distance parameter.
Arguments
clusterseq::ClusterSequence: The ClusterSequence object containing the clustering history and jets.
dcut::Union{Nothing, Real}: The distance parameter used to define the exclusive jets. If dcut is provided, the number of exclusive jets will be calculated based on this parameter.
njets::Union{Nothing, Integer}: The number of exclusive jets to be calculated. If njets is provided, the distance parameter dcut will be calculated based on this number.
Note: Either dcut or njets must be provided (but not both).
Returns
An array of LorentzVectorCyl objects representing the exclusive jets.
Exceptions
ArgumentError: If neither dcut nor njets is provided.
ArgumentError: If the algorithm used in the ClusterSequence object is not suitable for exclusive jets.
ErrorException: If the cluster sequence is incomplete and exclusive jets are unavailable.
This function takes a vector of PseudoJet objects and a minimum transverse momentum ptmin as input. It returns a vector of FinalJet objects that satisfy the transverse momentum condition.
Arguments
jets::Vector{PseudoJet}: A vector of PseudoJet objects representing the input jets.
ptmin::AbstractFloat=0.0: The minimum transverse momentum required for a jet to be included in the final jets vector.
Returns
A vector of FinalJet objects that satisfy the transverse momentum condition.
Return all inclusive jets of a ClusterSequence with pt > ptmin.
Arguments
clusterseq::ClusterSequence: The ClusterSequence object containing the clustering history and jets.
ptmin::Float64 = 0.0: The minimum transverse momentum (pt) threshold for the inclusive jets.
Returns
An array of LorentzVectorCyl objects representing the inclusive jets.
Description
This function computes the inclusive jets from a given ClusterSequence object. It iterates over the clustering history and checks the transverse momentum of each parent jet. If the transverse momentum is greater than or equal to ptmin, the jet is added to the array of inclusive jets.
jet_reconstruct(particles; p = -1, R = 1.0, recombine = +, strategy = RecoStrategy.Best)
Reconstructs jets from a collection of particles using a specified algorithm and strategy
Arguments
particles: A collection of particles used for jet reconstruction.
p=-1: The power value used for the distance measure for generalised k_T, which maps to a particular reconstruction algorithm (-1 = AntiKt, 0 = Cambridge/Aachen, 1 = Kt).
R=1.0: The jet radius parameter.
recombine=+: The recombination scheme used for combining particles.
strategy=RecoStrategy.Best: The jet reconstruction strategy to use. RecoStrategy.Best makes a dynamic decision based on the number of starting particles.
Returns
A cluster sequence object containing the reconstructed jets and the merging history.
Details
particles argument
Any type that supplies the methods pt2(), phi(), rapidity(), px(), py(), pz(), energy() (in the JetReconstruction namespace) can be used. This includes LorentzVector, LorentzVectorCyl, and PseudoJet, for which these methods are already predefined in the JetReconstruction namespace.
recombine argument
The recombine argument is the function used to merge pairs of particles. The default is simply +(jet1,jet2), i.e. 4-momenta addition or the E-scheme.
Loads the jets from a file. Ignores lines that start with '#'. Each line gets processed in the following way: the line is split using split(line, splitby) or simply split(line) by default. Every value in this line is then converted to the dtype (which is Float64 by default). These values are then used as arguments for the constructor function which should produce individual jets. By default, the constructor constructs Lorentz vectors.
Everything that was already in jets is not affected as we only use push! on it.
Example
julia
# Load jets from two files into one array
+jets = []
+loadjets!("myjets1.dat", jets)
+loadjets!("myjets2.dat", jets)
plain_jet_reconstruct(particles::Vector{T}; p = -1, R = 1.0, recombine = +) where T
Perform jet reconstruction using the plain algorithm.
Arguments
particles::Vector{T}: A vector of particles used for jet reconstruction, any array of particles, which supports suitable 4-vector methods, viz. pt2(), phi(), rapidity(), px(), py(), pz(), energy(), can be used. for each element.
p::Int=-1: The integer value used for jet reconstruction.
R::Float64=1.0: The radius parameter used for jet reconstruction.
recombine::Function=+: The recombination function used for jet reconstruction.
Note for the particles argument, the 4-vector methods need to exist in the JetReconstruction package namespace.
Returns
Vector{PseudoJet}: A vector of reconstructed jets.
Example
julia
jets = plain_jet_reconstruct(particles; p = -1, R = 1.0)
filename: The name of the file to save the jet data to.
jets: An array of jet objects to save.
format="px py pz E": (optional) A string specifying the format of the jet data to save. The default format is "px py pz E".
Details
This function saves jet data to a file in a specific format. Each line in the file represents a jet and contains the information about the jet in the specified format. The format string can include the following placeholders:
"E" or "energy": Jet energy
"px": Momentum along the x-axis
"py": Momentum along the y-axis
"pz": Momentum along the z-axis
"pt2": Square of the transverse momentum
"phi": Azimuth angle
"rapidity": Rapidity
Lines starting with '#' are treated as comments and are ignored.
It is strongly NOT recommended to put something other than values and (possibly custom) separators in the format string.
tiled_jet_reconstruct(particles::Vector{T}; p = -1, R = 1.0, recombine = +) where {T}
Main jet reconstruction algorithm entry point for reconstructing jets using the tiled stragegy for generic jet type T.
Note - if a non-standard recombination is used, it must be defined for JetReconstruction.PseudoJet, as this struct is used internally.
Arguments
particles::Vector{T}: A vector of particles used as input for jet reconstruction. T must support methods px, py, pz and energy (defined in the JetReconstruction namespace)
p::Int = -1: The power parameter for the jet reconstruction algorithm, thus swiching between different algorithms.
R::Float64 = 1.0: The jet radius parameter for the jet reconstruction algorithm.
recombine::Function = +: The recombination function used for combining pseudojets.
Returns
Vector{PseudoJet}: A vector of reconstructed jets.
Example
julia
tiled_jet_reconstruct(particles::Vector{LorentzVectorHEP}; p = -1, R = 0.4, recombine = +)
A struct holding the full history of a jet clustering sequence, including the final jets.
Fields
algorithm::JetAlgorithm.Algorithm: The algorithm used for clustering.
strategy::RecoStrategy.Strategy: The strategy used for clustering.
jets::Vector{PseudoJet}: The physical PseudoJets in the cluster sequence. Each PseudoJet corresponds to a position in the history.
n_initial_jets::Int: The initial number of particles used for exclusive jets.
history::Vector{HistoryElement}: The branching history of the cluster sequence. Each stage in the history indicates where to look in the jets vector to get the physical PseudoJet.
The PseudoJet struct represents a pseudojet, a four-momentum object used in jet reconstruction algorithms. Additonal information for the link back into the history of the clustering is stored in the _cluster_hist_index field. There is caching of the more expensive calculations for rapidity and azimuthal angle.
Fields
px::Float64: The x-component of the momentum.
py::Float64: The y-component of the momentum.
pz::Float64: The z-component of the momentum.
E::Float64: The energy component of the momentum.
_cluster_hist_index::Int: The index of the cluster history.
_pt2::Float64: The squared transverse momentum.
_inv_pt2::Float64: The inverse squared transverse momentum.
`,51),o=[n];function l(r,p,c,d,h,u){return s(),t("div",null,o)}const y=e(a,[["render",l]]);export{g as __pageData,y as default};
diff --git a/previews/PR66/assets/lib_public.md.SJ6FK4z6.lean.js b/previews/PR66/assets/lib_public.md.SJ6FK4z6.lean.js
new file mode 100644
index 0000000..3df6264
--- /dev/null
+++ b/previews/PR66/assets/lib_public.md.SJ6FK4z6.lean.js
@@ -0,0 +1 @@
+import{_ as e,c as t,o as s,a7 as i}from"./chunks/framework.CT7mYJ7N.js";const g=JSON.parse('{"title":"Jet Reconstruction Public Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"lib/public.md","filePath":"lib/public.md","lastUpdated":null}'),a={name:"lib/public.md"},n=i("",51),o=[n];function l(r,p,c,d,h,u){return s(),t("div",null,o)}const y=e(a,[["render",l]]);export{g as __pageData,y as default};
diff --git a/previews/PR66/assets/lib_visualisation.md.BnzlcLmb.js b/previews/PR66/assets/lib_visualisation.md.BnzlcLmb.js
new file mode 100644
index 0000000..0a1722e
--- /dev/null
+++ b/previews/PR66/assets/lib_visualisation.md.BnzlcLmb.js
@@ -0,0 +1,29 @@
+import{_ as e,c as s,o as a,a7 as i}from"./chunks/framework.CT7mYJ7N.js";const g=JSON.parse('{"title":"Jet Visualisation Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"lib/visualisation.md","filePath":"lib/visualisation.md","lastUpdated":null}'),t={name:"lib/visualisation.md"},n=i(`
Animate the jet reconstruction process and save it as a video file.
Arguments
cs::ClusterSequence: The cluster sequence object containing the jets.
filename: The name of the output video file.
Optional Arguments
barsize_phi=0.1: The size of the bars in the phi direction.
barsize_y=0.1: The size of the bars in the y direction.
colormap=:glasbey_category10_n256: The colormap to use for coloring the jets.
perspective=0.5: The perspective of the plot.
azimuth=2.7: The azimuth angle of the plot.
elevation=0.5: The elevation angle of the plot.
framerate=5: The framerate of the output video.
end_frames=0: The number of static frames to show at the end of the animation. This can be useful to show the final state of the jets for a longer time.
title=nothing: The title to add to the plot.
ancestors=false: Whether to include ancestors of the jets in the animation. When true the ancestors of the jets will be plotted as well, as height zero bars, with the same colour as the jet they are ancestors of.
Module: The plotting module to use. Default is Makie.
For perspective, azimuth, and elevation, a single value can be passed for a fixed viewpoint, or a tuple of two values for a changing viewpoint. The viewpoint will then change linearly between the two values over the course of the animation.
Returns
fig: The figure object representing the final frame.
Plots a 3d bar chart that represents jets. Takes an objects array of objects to display and idx_arrays, an array of arrays with indeces, where idx_arrays[i] gives indeces of objects that form the jet number i. This function's signature might not be the most practical for the current version of the JetReconstruction.jl package, as it has been written during the early stage of development. There is now an overload of it that takes a ClusterSequence object as its argument.
Optional arguments: barsize_phi::Real — width of a bar along the ϕ axis; barsize_eta::Real — width of a bar along the η axis; colormap::Symbol — Makie colour map; Module — the module where you have your Makie (see below);
# example
+using CairoMakie # use any other Makie that you have here
+
+jetsplot([object1, object2, object3], [[1], [2, 3]])
The example above plots object1 as a separate jet in one colour and object2 and object3 together in another colour.
This function needs Makie.jl to work. You should install and import/use a specific backend yourself. jetsplot works with CairoMakie, WGLMakie, GLMakie, etc. Additionally, you can specify the module where you have your Makie explicitly:
Plots a 3d bar chart that represents jets. Takes objects, an array of objects to display (should be the same array you have passed to jet_reconstruct to get the cs::ClusterSequence), and the cs::ClusterSequence itself as arguments.
Optional arguments: barsize_phi::Real — width of a bar along the ϕ axis; barsize_eta::Real — width of a bar along the η axis; colormap::Symbol — Makie colour map; Module — the module where you have your Makie (see below);
# example
+using CairoMakie # use any other Makie that you have here
+jetsplot([object1, object2, object3], cluster_sequence_I_got_from_jet_reconstruct; Module=CairoMakie)
This function needs Makie.jl to work. You should install and import/use a specific backend yourself. jetsplot works with CairoMakie, WGLMakie, GLMakie, etc. Additionally, you can specify the module where you have your Makie explicitly:
This is a basic jet reconstruction example that shows how to call the package to perform a jet reconstruction, with different algorithms and (optionally) strategy, producing exclusive and inclusive jet selections.
This is a more sophisticated example that allows performance measurements to be made of the reconstruction, as well as profiling (flamegraphs and memory profiling). Use the --help option to see usage. e.g., to extract timing performance for the AntiKt algorithm using the tiled strategy:
sh
julia --project instrumented-jetreco.jl -S N2Tiled -A AntiKt --nsamples 100 ../test/data/events.hepmc3
This script will produce a PNG/PDF showing the results of a jet reconstruction. This is a 3D plot where all the initial energy deposits are visualised, with colours that indicate in which final cluster the deposit ended up in.
Similar to visualise-jets.jl this notebook will produce a visualisation of jet reconstruction in the browser. This is a 3D plot where all the initial energy deposits are visualised, with colours that indicate in which final cluster the deposit ended up in.
This package implements sequential Jet Reconstruction (clustering) algorithms, which are used in high-energy physics as part of event reconstruction for and colliders.
Three strategies are available for the different algorithms:
Strategy Name
Notes
Interface
RecoStrategy.Best
Dynamically switch strategy based on input particle density
jet_reconstruct
RecoStrategy.N2Plain
Global matching of particles at each interation (works well for low )
plain_jet_reconstruct
RecoStrategy.N2Tiled
Use tiles of radius to limit search space (works well for higher )
tiled_jet_reconstruct
Generally one can use the jet_reconstruct interface, shown above, as the Best strategy safely as the overhead is extremely low. That interface supports a strategy option to switch to a different option.
Another option, if one wishes to use a specific strategy, is to call that strategy's interface directly, e.g.,
julia
# For N2Plain strategy called directly
+plain_jet_reconstruct(particles::Vector{T}; p = -1, R = 1.0, recombine = +)
Note that there is no strategy option in these interfaces.
Sorting vectors is trivial in Julia, no special sorting methods are provided. As an example, to sort exclusive jets of (usually GeV, depending on your EDM) from highest energy to lowest:
To visualise the clustered jets as a 3d bar plot (see illustration above) we now use Makie.jl. See the jetsplot function in ext/JetVisualisation.jl and its documentation for more. There are two worked examples in the examples directory.
The plotting code is a package extension and will load if the one of the Makie modules is loaded in the environment.
The animatereco function will animate the reconstruction sequence, given a ClusterSequence object. See the function documentation for the many options that can be customised.
The package also provides methods such as loadjets, loadjets!, and savejets that one can use to save and load objects on/from disk easily in a very flexible format. See documentation for more.
Although it has been developed further since the CHEP2023 conference, the CHEP conference proceedings, 10.1051/epjconf/202429505017, should be cited if you use this package:
bibtex
@article{refId0,
+ author = {{Stewart, Graeme Andrew} and {Gras, Philippe} and {Hegner, Benedikt} and {Krasnopolski, Atell}},
+ doi = {10.1051/epjconf/202429505017},
+ journal = {EPJ Web of Conf.},
+ pages = {05017},
+ title = {Polyglot Jet Finding},
+ url = {https://doi.org/10.1051/epjconf/202429505017},
+ volume = 295,
+ year = 2024,
+ eprint={2309.17309},
+ archivePrefix={arXiv},
+ primaryClass={hep-ex}
+}
@misc{stewart2023polyglot,
+ title={Polyglot Jet Finding},
+ author={Graeme Andrew Stewart and Philippe Gras and Benedikt Hegner and Atell Krasnopolski},
+ year={2023},
+ eprint={2309.17309},
+ archivePrefix={arXiv},
+ primaryClass={hep-ex}
+}
Ensure that the rapidity and azimuthal angle of the PseudoJet p are valid. If the azimuthal angle is invalid (used as a proxy for both variables), they are set to a valid value using _set_rap_phi!.
Arguments
p::PseudoJet: The PseudoJet object to ensure valid rapidity and azimuthal angle for.
_plain_jet_reconstruct(; particles::Vector{PseudoJet}, p = -1, R = 1.0, recombine = +)
This is the internal implementation of jet reconstruction using the plain algorithm. It takes a vector of particles representing the input particles and reconstructs jets based on the specified parameters. Here the particles must be of type PseudoJet.
Users of the package should use the plain_jet_reconstruct function as their entry point to this jet reconstruction.
The power value maps to specific pp jet reconstruction algorithms: -1 = AntiKt, 0 = Cambridge/Aachen, 1 = Inclusive Kt.
Arguments
particles: A vector of PseudoJet objects representing the input particles.
p=-1: The power to which the transverse momentum (pt) of each particle is raised.
R=1.0: The jet radius parameter.
recombine: The recombination function used to merge two jets. Default is + (additive recombination).
Returns
clusterseq: The resulting ClusterSequence object representing the reconstructed jets.
Set the rapidity and azimuthal angle of the PseudoJet p.
Arguments
p::PseudoJet: The PseudoJet object for which to set the rapidity and azimuthal angle.
Description
This function calculates and sets the rapidity and azimuthal angle of the PseudoJet p based on its momentum components. The rapidity is calculated in a way that is insensitive to roundoff errors when the momentum components are large. If the PseudoJet represents a point with infinite rapidity, a large number is assigned to the rapidity in order to lift the degeneracy between different zero-pt momenta.
Note - the ϕ angle is calculated in the range [0, 2π).
Add a new jet's history into the recombination sequence.
Arguments:
clusterseq::ClusterSequence: The cluster sequence object.
parent1: The index of the first parent.
parent2: The index of the second parent.
jetp_index: The index of the jet.
dij: The dij value.
This function adds a new HistoryElement to the history vector of the clusterseq object. The HistoryElement contains information about the parents, child, jet index, dij value, and the maximum dij value so far. It also updates the child index of the parent elements.
If the parent1 or parent2 have already been recombined, an InternalError is thrown. The jetp_index is used to update the _cluster_hist_index of the corresponding PseudoJet object.
Adds to the vector tile_union the tiles that are in the neighbourhood of the specified center_index, including itself and whose tagged status are false - start adding from position n_near_tiles-1, and increase n_near_tiles. When a neighbour is added its tagged status is set to true.
Arguments
center_index: The index of the center tile.
tile_union: An array to store the indices of neighbouring tiles.
n_near_tiles: The number of neighbouring tiles.
tiling: The tiling object containing the tile tags.
determine_rapidity_extent(eta::Vector{T}) where T <: AbstractFloat
Calculate the minimum and maximum rapidities based on the input vector eta. The function determines the rapidity extent by binning the multiplicities as a function of rapidity and finding the minimum and maximum rapidities such that the edge bins contain a certain fraction (~1/4) of the busiest bin and a minimum number of particles.
This is the heuristic which is used by FastJet (inline comments are from FastJet).
Compute the dij value for a given index i to its nearest neighbor. The nearest neighbor is determined from nn[i], and the metric distance to the nearest neighbor is given by the distance nndist[i] applying the lower of the kt2_array values for the two particles.ßß
Perform the bookkeeping associated with the step of recombining jet_i and jet_j (assuming a distance dij).
Arguments
clusterseq::ClusterSequence: The cluster sequence object.
jet_i: The index of the first jet to be recombined.
jet_j: The index of the second jet to be recombined.
dij: The distance between the two jets.
recombine=+: The recombination function to be used. Default is addition.
Returns
newjet_k: The index of the newly created jet.
Description
This function performs the i-j recombination step in the cluster sequence. It creates a new jet by recombining the first two jets using the specified recombination function. The new jet is then added to the cluster sequence. The function also updates the indices and history information of the new jet and sorts out the history.
Find the union of neighbouring tiles of jetA, jetB, and oldB and add them to the tile_union. This established the set of tiles over which searches for updated and new nearest-neighbours must be run
Arguments
tile_union: The tile union to which the neighbouring tiles will be added.
jetA: The first jet.
jetB: The second jet.
oldB: The old second jet.
tiling: The tiling information.
Returns
The number of neighbouring tiles added to the tile_union.
Compute the linear index of a tile in a tiled setup. This is much faster in this function than using the LinearIndices construct (like x100, which is bonkers, but there you go...)
Arguments
tiling_setup::TilingDef: The tiling setup defining the number of tiles in each dimension.
i_η::Int: The index of the tile in the η dimension.
i_ϕ::Int: The index of the tile in the ϕ dimension.
Inserts a TiledJet object into the linked list of TiledJet objects, before the nextjet object. The jet to move can be an isolated jet, a jet from another list or a jet from the same list
Arguments
nextjet::TiledJet: The TiledJet object after which jettomove should be inserted.
jettomove::TiledJet: The TiledJet object to be inserted.
Compute the ranks of jets in a given ClusterSequence object based on a specified comparison function.
Arguments
clusterseq::ClusterSequence: The ClusterSequence object containing the jets to rank.
compare_fn = JetReconstruction.pt: The comparison function used to determine the order of the jets. Defaults to JetReconstruction.pt, which compares jets based on their transverse momentum.
Returns
A dictionary mapping each jet index to its rank.
Note
This is a utility function that can be used to rank initial clusters based on a specified jet property. It can be used to assign a consistent "rank" to each reconstructed jet in the cluster sequence, which is useful for stable plotting of jet outputs.
Compute the number of jet-jet merge steps in a cluster sequence. This is useful to give the number of meaningful recombination steps in a jet reconstruction sequence (beam merge steps are not counted).
Arguments
clusterseq::ClusterSequence: The cluster sequence object.
This function returns the reconstruction state of a ClusterSequence object based on a given iteration number in the reconstruction.
Arguments
cs::ClusterSequence: The ClusterSequence object to update.
ranks: The ranks of the original clusters, that are inherited by peudojets
during the reconstruction process.
iteration=0: The iteration number to consider for updating the reconstruction state (0 represents the initial state).
ignore_beam_merge=true: Ignore beam merging steps in the reconstruction (which produce no change in status).
Returns
A dictionary representing a snapshot of the reconstruction state.
Details
The function starts by initializing the reconstruction state with the initial particles. Then, it walks over the iteration sequence and updates the reconstruction state based on the history of recombination and finalization/beam merger steps.
Compute the indices of the right neighbors of a given center index in a tiling. This is used in the inital sweep to calculate the nearest neighbors, where the search between jets for the nearest neighbour is bi-directional, thus when a tile is considered only the right neighbours are needed to compare jet distances as the left-hand tiles have been done from that tile already.
Arguments
center::Int: The center index.
tiling::Tiling: The tiling object.
Returns
Surrounding: An object containing the indices of the right neighbors.
This function sets the nearest neighbor information for all jets in the tiledjets vector.
Arguments
clusterseq::ClusterSequence: The cluster sequence object.
tiling::Tiling: The tiling object.
tiledjets::Vector{TiledJet}: The vector of tiled jets.
Returns
NNs::Vector{TiledJet}: The vector of nearest neighbor jets.
diJ::Vector{Float64}: The vector of diJ values.
The function iterates over each tile in the tiling and sets the nearest neighbor information for each jet in the tile. It then looks for neighbor jets in the neighboring tiles and updates the nearest neighbor information accordingly. Finally, it creates the diJ table and returns the vectors of nearest neighbor jets and diJ values.
Note: The diJ values are calculated as the kt distance multiplied by R^2.
setup_tiling(eta::Vector{T}, Rparam::AbstractFloat) where T <: AbstractFloat
This function sets up the tiling parameters for a reconstruction given a vector of rapidities eta and a radius parameter Rparam.
Arguments
eta::Vector{T}: A vector of rapidities.
Rparam::AbstractFloat: The jet radius parameter.
Returns
tiling_setup: A TilingDef object containing the tiling setup parameters.
Description
The function first decides the tile sizes based on the Rparam value. It then determines the number of tiles in the phi direction (n_tiles_phi) based on the tile size. Next, it determines the rapidity extent of the input eta vector and adjusts the values accordingly. Finally, it creates a TilingDef object with the calculated tiling parameters and returns it.
upd_nn_crosscheck!(i, from, to, rapidity_array, phi_array, R2, nndist, nn)
Update the nearest neighbor information for a given particle index i against all particles in the range indexes from to to. The function updates the nndist and nn arrays with the nearest neighbor distance and index respectively, both for particle i and the checked particles [from:to] (hence crosscheck).
Arguments
i::Int: The index of the particle to update and check against.
from::Int: The starting index of the range of particles to check against.
to::Int: The ending index of the range of particles to check against.
rapidity_array: An array containing the rapidity values of all particles.
phi_array: An array containing the phi values of the all particles.
R2: The squared jet distance threshold for considering a particle as a neighbour.
nndist: The array that stores the nearest neighbor distances.
nn: The array that stores the nearest neighbor indices.
upd_nn_nocross!(i, from, to, rapidity_array, phi_array, R2, nndist, nn)
Update the nearest neighbor information for a given particle index i against all particles in the range indexes from to to. The function updates the nndist and nn arrays with the nearest neighbor distance and index respectively, only for particle i (hence nocross).
Arguments
i::Int: The index of the particle to update and check against.
from::Int: The starting index of the range of particles to check against.
to::Int: The ending index of the range of particles to check against.
rapidity_array: An array containing the rapidity values of all particles.
phi_array: An array containing the phi values of the all particles.
R2: The squared jet distance threshold for considering a particle as a neighbour.
nndist: The array that stores the nearest neighbor distances.
nn: The array that stores the nearest neighbor indices.
Update the nearest neighbor information after a jet merge step.
Arguments:
i: Index of the first particle in the last merge step.
j: Index of the second particle in the last merge step.
k: Index of the current particle for which the nearest neighbour will be updated.
N: Total number of particles (currently vaild array indexes are [1:N]).
Nn: Number of nearest neighbors to consider.
kt2_array: Array of transverse momentum squared values.
rapidity_array: Array of rapidity values.
phi_array: Array of azimuthal angle values.
R2: Distance threshold squared for nearest neighbors.
nndist: Array of nearest neighbor geometric distances.
nn: Array of nearest neighbor indices.
nndij: Array of metric distances between particles.
This function updates the nearest neighbor information for the current particle k by considering the distances to particles i and j. It checks if the distance between k and i is smaller than the current nearest neighbor distance for k, and updates the nearest neighbor information accordingly. It also updates the nearest neighbor information for i if the distance between k and i is smaller than the current nearest neighbor distance for i. Finally, it checks if the nearest neighbor of k is the total number of particles Nn and updates it to j if necessary.
A struct holding a record of jet mergers and finalisations
Fields:
parent1: Index in history where first parent of this jet was created (NonexistentParent if this jet is an original particle)
parent2: Index in history where second parent of this jet was created (NonexistentParent if this jet is an original particle); BeamJet if this history entry just labels the fact that the jet has recombined with the beam)
child: Index in history where the current jet is recombined with another jet to form its child. It is Invalid if this jet does not further recombine.
jetp_index: Index in the jets vector where we will find the PseudoJet object corresponding to this jet (i.e. the jet created at this entry of the history). NB: if this element of the history corresponds to a beam recombination, then jetp_index=Invalid.
dij: The distance corresponding to the recombination at this stage of the clustering.
max_dij_so_far: The largest recombination distance seen so far in the clustering history.
TiledJet represents a jet in a tiled algorithm for jet reconstruction, with additional information to track the jet's position in the tiled structures.
Fields
id::Int: The ID of the jet.
eta::Float64: The rapidity of the jet.
phi::Float64: The azimuthal angle of the jet.
kt2::Float64: The transverse momentum squared of the jet.
NN_dist::Float64: The distance to the nearest neighbor.
jets_index::Int: The index of the jet in the jet array.
tile_index::Int: The index of the tile in the tile array.
dij_posn::Int: The position of this jet in the dij compact array.
The Tiling struct represents a tiling configuration for jet reconstruction.
Fields
setup::TilingDef: The tiling definition used for the configuration.
tiles::Matrix{TiledJet}: A matrix of tiled jets, containing the first jet in each tile (then the linked list of the first jet is followed to get access to all jets in this tile).
positions::Matrix{Int}: Used to track tiles that are on the edge of ϕ array, where neighbours need to be wrapped around.
tags::Matrix{Bool}: The matrix of tags indicating whether a tile is valid or not (set to false initially, then true when the tile has been setup properly).
A struct for iterating over all neighbour tiles for a given Cartesian tile index. These are the tiles above and to the right of the given tile (X=included, O=not included):
XXX
+X.X
+XXX
Note, rapidity coordinate must be in range, ϕ coordinate wraps
A struct for iterating over rightmost tiles for a given Cartesian tile index. These are the tiles above and to the right of the given tile (X=included, O=not included):
XXX
+O.X
+OOO
Note, rapidity coordinate must be in range, ϕ coordinate wraps
Return all exclusive jets of a ClusterSequence, with either a specific number of jets or a cut on the maximum distance parameter.
Arguments
clusterseq::ClusterSequence: The ClusterSequence object containing the clustering history and jets.
dcut::Union{Nothing, Real}: The distance parameter used to define the exclusive jets. If dcut is provided, the number of exclusive jets will be calculated based on this parameter.
njets::Union{Nothing, Integer}: The number of exclusive jets to be calculated. If njets is provided, the distance parameter dcut will be calculated based on this number.
Note: Either dcut or njets must be provided (but not both).
Returns
An array of LorentzVectorCyl objects representing the exclusive jets.
Exceptions
ArgumentError: If neither dcut nor njets is provided.
ArgumentError: If the algorithm used in the ClusterSequence object is not suitable for exclusive jets.
ErrorException: If the cluster sequence is incomplete and exclusive jets are unavailable.
This function takes a vector of PseudoJet objects and a minimum transverse momentum ptmin as input. It returns a vector of FinalJet objects that satisfy the transverse momentum condition.
Arguments
jets::Vector{PseudoJet}: A vector of PseudoJet objects representing the input jets.
ptmin::AbstractFloat=0.0: The minimum transverse momentum required for a jet to be included in the final jets vector.
Returns
A vector of FinalJet objects that satisfy the transverse momentum condition.
Return all inclusive jets of a ClusterSequence with pt > ptmin.
Arguments
clusterseq::ClusterSequence: The ClusterSequence object containing the clustering history and jets.
ptmin::Float64 = 0.0: The minimum transverse momentum (pt) threshold for the inclusive jets.
Returns
An array of LorentzVectorCyl objects representing the inclusive jets.
Description
This function computes the inclusive jets from a given ClusterSequence object. It iterates over the clustering history and checks the transverse momentum of each parent jet. If the transverse momentum is greater than or equal to ptmin, the jet is added to the array of inclusive jets.
jet_reconstruct(particles; p = -1, R = 1.0, recombine = +, strategy = RecoStrategy.Best)
Reconstructs jets from a collection of particles using a specified algorithm and strategy
Arguments
particles: A collection of particles used for jet reconstruction.
p=-1: The power value used for the distance measure for generalised k_T, which maps to a particular reconstruction algorithm (-1 = AntiKt, 0 = Cambridge/Aachen, 1 = Kt).
R=1.0: The jet radius parameter.
recombine=+: The recombination scheme used for combining particles.
strategy=RecoStrategy.Best: The jet reconstruction strategy to use. RecoStrategy.Best makes a dynamic decision based on the number of starting particles.
Returns
A cluster sequence object containing the reconstructed jets and the merging history.
Details
particles argument
Any type that supplies the methods pt2(), phi(), rapidity(), px(), py(), pz(), energy() (in the JetReconstruction namespace) can be used. This includes LorentzVector, LorentzVectorCyl, and PseudoJet, for which these methods are already predefined in the JetReconstruction namespace.
recombine argument
The recombine argument is the function used to merge pairs of particles. The default is simply +(jet1,jet2), i.e. 4-momenta addition or the E-scheme.
Loads the jets from a file. Ignores lines that start with '#'. Each line gets processed in the following way: the line is split using split(line, splitby) or simply split(line) by default. Every value in this line is then converted to the dtype (which is Float64 by default). These values are then used as arguments for the constructor function which should produce individual jets. By default, the constructor constructs Lorentz vectors.
Everything that was already in jets is not affected as we only use push! on it.
Example
julia
# Load jets from two files into one array
+jets = []
+loadjets!("myjets1.dat", jets)
+loadjets!("myjets2.dat", jets)
plain_jet_reconstruct(particles::Vector{T}; p = -1, R = 1.0, recombine = +) where T
Perform jet reconstruction using the plain algorithm.
Arguments
particles::Vector{T}: A vector of particles used for jet reconstruction, any array of particles, which supports suitable 4-vector methods, viz. pt2(), phi(), rapidity(), px(), py(), pz(), energy(), can be used. for each element.
p::Int=-1: The integer value used for jet reconstruction.
R::Float64=1.0: The radius parameter used for jet reconstruction.
recombine::Function=+: The recombination function used for jet reconstruction.
Note for the particles argument, the 4-vector methods need to exist in the JetReconstruction package namespace.
Returns
Vector{PseudoJet}: A vector of reconstructed jets.
Example
julia
jets = plain_jet_reconstruct(particles; p = -1, R = 1.0)
filename: The name of the file to save the jet data to.
jets: An array of jet objects to save.
format="px py pz E": (optional) A string specifying the format of the jet data to save. The default format is "px py pz E".
Details
This function saves jet data to a file in a specific format. Each line in the file represents a jet and contains the information about the jet in the specified format. The format string can include the following placeholders:
"E" or "energy": Jet energy
"px": Momentum along the x-axis
"py": Momentum along the y-axis
"pz": Momentum along the z-axis
"pt2": Square of the transverse momentum
"phi": Azimuth angle
"rapidity": Rapidity
Lines starting with '#' are treated as comments and are ignored.
It is strongly NOT recommended to put something other than values and (possibly custom) separators in the format string.
tiled_jet_reconstruct(particles::Vector{T}; p = -1, R = 1.0, recombine = +) where {T}
Main jet reconstruction algorithm entry point for reconstructing jets using the tiled stragegy for generic jet type T.
Note - if a non-standard recombination is used, it must be defined for JetReconstruction.PseudoJet, as this struct is used internally.
Arguments
particles::Vector{T}: A vector of particles used as input for jet reconstruction. T must support methods px, py, pz and energy (defined in the JetReconstruction namespace)
p::Int = -1: The power parameter for the jet reconstruction algorithm, thus swiching between different algorithms.
R::Float64 = 1.0: The jet radius parameter for the jet reconstruction algorithm.
recombine::Function = +: The recombination function used for combining pseudojets.
Returns
Vector{PseudoJet}: A vector of reconstructed jets.
Example
julia
tiled_jet_reconstruct(particles::Vector{LorentzVectorHEP}; p = -1, R = 0.4, recombine = +)
A struct holding the full history of a jet clustering sequence, including the final jets.
Fields
algorithm::JetAlgorithm.Algorithm: The algorithm used for clustering.
strategy::RecoStrategy.Strategy: The strategy used for clustering.
jets::Vector{PseudoJet}: The physical PseudoJets in the cluster sequence. Each PseudoJet corresponds to a position in the history.
n_initial_jets::Int: The initial number of particles used for exclusive jets.
history::Vector{HistoryElement}: The branching history of the cluster sequence. Each stage in the history indicates where to look in the jets vector to get the physical PseudoJet.
The PseudoJet struct represents a pseudojet, a four-momentum object used in jet reconstruction algorithms. Additonal information for the link back into the history of the clustering is stored in the _cluster_hist_index field. There is caching of the more expensive calculations for rapidity and azimuthal angle.
Fields
px::Float64: The x-component of the momentum.
py::Float64: The y-component of the momentum.
pz::Float64: The z-component of the momentum.
E::Float64: The energy component of the momentum.
_cluster_hist_index::Int: The index of the cluster history.
_pt2::Float64: The squared transverse momentum.
_inv_pt2::Float64: The inverse squared transverse momentum.
Animate the jet reconstruction process and save it as a video file.
Arguments
cs::ClusterSequence: The cluster sequence object containing the jets.
filename: The name of the output video file.
Optional Arguments
barsize_phi=0.1: The size of the bars in the phi direction.
barsize_y=0.1: The size of the bars in the y direction.
colormap=:glasbey_category10_n256: The colormap to use for coloring the jets.
perspective=0.5: The perspective of the plot.
azimuth=2.7: The azimuth angle of the plot.
elevation=0.5: The elevation angle of the plot.
framerate=5: The framerate of the output video.
end_frames=0: The number of static frames to show at the end of the animation. This can be useful to show the final state of the jets for a longer time.
title=nothing: The title to add to the plot.
ancestors=false: Whether to include ancestors of the jets in the animation. When true the ancestors of the jets will be plotted as well, as height zero bars, with the same colour as the jet they are ancestors of.
Module: The plotting module to use. Default is Makie.
For perspective, azimuth, and elevation, a single value can be passed for a fixed viewpoint, or a tuple of two values for a changing viewpoint. The viewpoint will then change linearly between the two values over the course of the animation.
Returns
fig: The figure object representing the final frame.
Plots a 3d bar chart that represents jets. Takes an objects array of objects to display and idx_arrays, an array of arrays with indeces, where idx_arrays[i] gives indeces of objects that form the jet number i. This function's signature might not be the most practical for the current version of the JetReconstruction.jl package, as it has been written during the early stage of development. There is now an overload of it that takes a ClusterSequence object as its argument.
Optional arguments: barsize_phi::Real — width of a bar along the ϕ axis; barsize_eta::Real — width of a bar along the η axis; colormap::Symbol — Makie colour map; Module — the module where you have your Makie (see below);
# example
+using CairoMakie # use any other Makie that you have here
+
+jetsplot([object1, object2, object3], [[1], [2, 3]])
The example above plots object1 as a separate jet in one colour and object2 and object3 together in another colour.
This function needs Makie.jl to work. You should install and import/use a specific backend yourself. jetsplot works with CairoMakie, WGLMakie, GLMakie, etc. Additionally, you can specify the module where you have your Makie explicitly:
Plots a 3d bar chart that represents jets. Takes objects, an array of objects to display (should be the same array you have passed to jet_reconstruct to get the cs::ClusterSequence), and the cs::ClusterSequence itself as arguments.
Optional arguments: barsize_phi::Real — width of a bar along the ϕ axis; barsize_eta::Real — width of a bar along the η axis; colormap::Symbol — Makie colour map; Module — the module where you have your Makie (see below);
# example
+using CairoMakie # use any other Makie that you have here
+jetsplot([object1, object2, object3], cluster_sequence_I_got_from_jet_reconstruct; Module=CairoMakie)
This function needs Makie.jl to work. You should install and import/use a specific backend yourself. jetsplot works with CairoMakie, WGLMakie, GLMakie, etc. Additionally, you can specify the module where you have your Makie explicitly: