diff --git a/dev/404.html b/dev/404.html index d0ee3f0..76be84b 100644 --- a/dev/404.html +++ b/dev/404.html @@ -6,16 +6,16 @@ 404 | JetReconstruction.jl - + - +
- + \ No newline at end of file diff --git a/dev/assets/app.DLJIVjwU.js b/dev/assets/app.CKbhwMJQ.js similarity index 90% rename from dev/assets/app.DLJIVjwU.js rename to dev/assets/app.CKbhwMJQ.js index f6ea6d0..ff189f5 100644 --- a/dev/assets/app.DLJIVjwU.js +++ b/dev/assets/app.CKbhwMJQ.js @@ -1 +1 @@ -import{R as p}from"./chunks/theme.EB_RjJjX.js";import{R as o,a6 as u,a7 as c,a8 as l,a9 as f,aa as d,ab as m,ac as h,ad as g,ae as A,af as v,d as P,u as R,v as w,s as y,ag as C,ah as b,ai as E,a4 as S}from"./chunks/framework.BonP4S8S.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(p),T=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=R();return w(()=>{y(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),b(),E(),s.setup&&s.setup(),()=>S(s.Layout)}});async function D(){globalThis.__VITEPRESS__=!0;const e=j(),a=_();a.provide(c,e);const t=l(e.route);return a.provide(f,t),a.component("Content",d),a.component("ClientOnly",m),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:h}),{app:a,router:e,data:t}}function _(){return g(T)}function j(){let e=o,a;return A(t=>{let n=v(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&&D().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{D as createApp}; +import{R as p}from"./chunks/theme.DKvruQCF.js";import{R as o,a6 as u,a7 as c,a8 as l,a9 as f,aa as d,ab as m,ac as h,ad as g,ae as A,af as v,d as P,u as R,v as w,s as y,ag as C,ah as b,ai as E,a4 as S}from"./chunks/framework.BtBDBbTG.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(p),T=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=R();return w(()=>{y(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),b(),E(),s.setup&&s.setup(),()=>S(s.Layout)}});async function D(){globalThis.__VITEPRESS__=!0;const e=j(),a=_();a.provide(c,e);const t=l(e.route);return a.provide(f,t),a.component("Content",d),a.component("ClientOnly",m),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:h}),{app:a,router:e,data:t}}function _(){return g(T)}function j(){let e=o,a;return A(t=>{let n=v(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&&D().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{D as createApp}; diff --git a/dev/assets/chunks/VPLocalSearchBox.CH-hHDaQ.js b/dev/assets/chunks/VPLocalSearchBox.Dk9VxXMu.js similarity index 99% rename from dev/assets/chunks/VPLocalSearchBox.CH-hHDaQ.js rename to dev/assets/chunks/VPLocalSearchBox.Dk9VxXMu.js index 03822ed..0c3e758 100644 --- a/dev/assets/chunks/VPLocalSearchBox.CH-hHDaQ.js +++ b/dev/assets/chunks/VPLocalSearchBox.Dk9VxXMu.js @@ -1,4 +1,4 @@ -var Nt=Object.defineProperty;var Ft=(a,e,t)=>e in a?Nt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Re=(a,e,t)=>Ft(a,typeof e!="symbol"?e+"":e,t);import{V as Ot,p as se,h as pe,aj as Xe,ak as Rt,al as Ct,q as je,am as Mt,d as At,D as ye,an as et,ao as Lt,ap as Dt,s as zt,aq as Pt,v as Ce,P as ue,O as we,ar as jt,as as Vt,W as $t,R as Bt,$ as Wt,o as q,b as Kt,j as S,a0 as Jt,k as D,at as Ut,au as qt,av as Gt,c as Y,n as tt,e as xe,C as st,F as nt,a as de,t as he,aw as Ht,ax as it,ay as Qt,a9 as Yt,af as Zt,az as Xt,_ as es}from"./framework.BonP4S8S.js";import{u as ts,c as ss}from"./theme.EB_RjJjX.js";const ns={root:()=>Ot(()=>import("./@localSearchIndexroot.BxcEJ2C8.js"),[])};/*! +var Nt=Object.defineProperty;var Ft=(a,e,t)=>e in a?Nt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Re=(a,e,t)=>Ft(a,typeof e!="symbol"?e+"":e,t);import{V as Ot,p as se,h as pe,aj as Xe,ak as Rt,al as Ct,q as je,am as Mt,d as At,D as ye,an as et,ao as Lt,ap as Dt,s as zt,aq as Pt,v as Ce,P as ue,O as we,ar as jt,as as Vt,W as $t,R as Bt,$ as Wt,o as q,b as Kt,j as S,a0 as Jt,k as D,at as Ut,au as qt,av as Gt,c as Y,n as tt,e as xe,C as st,F as nt,a as de,t as he,aw as Ht,ax as it,ay as Qt,a9 as Yt,af as Zt,az as Xt,_ as es}from"./framework.BtBDBbTG.js";import{u as ts,c as ss}from"./theme.DKvruQCF.js";const ns={root:()=>Ot(()=>import("./@localSearchIndexroot.BxcEJ2C8.js"),[])};/*! * tabbable 6.2.0 * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE */var vt=["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])"],Ie=vt.join(","),mt=typeof Element>"u",ie=mt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,ke=!mt&&Element.prototype.getRootNode?function(a){var e;return a==null||(e=a.getRootNode)===null||e===void 0?void 0:e.call(a)}:function(a){return a==null?void 0:a.ownerDocument},Ne=function a(e,t){var s;t===void 0&&(t=!0);var n=e==null||(s=e.getAttribute)===null||s===void 0?void 0:s.call(e,"inert"),r=n===""||n==="true",i=r||t&&e&&a(e.parentNode);return i},is=function(e){var t,s=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return s===""||s==="true"},gt=function(e,t,s){if(Ne(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Ie));return t&&ie.call(e,Ie)&&n.unshift(e),n=n.filter(s),n},bt=function a(e,t,s){for(var n=[],r=Array.from(e);r.length;){var i=r.shift();if(!Ne(i,!1))if(i.tagName==="SLOT"){var o=i.assignedElements(),l=o.length?o:i.children,c=a(l,!0,s);s.flatten?n.push.apply(n,c):n.push({scopeParent:i,candidates:c})}else{var h=ie.call(i,Ie);h&&s.filter(i)&&(t||!e.includes(i))&&n.push(i);var v=i.shadowRoot||typeof s.getShadowRoot=="function"&&s.getShadowRoot(i),p=!Ne(v,!1)&&(!s.shadowRootFilter||s.shadowRootFilter(i));if(v&&p){var b=a(v===!0?i.children:v.children,!0,s);s.flatten?n.push.apply(n,b):n.push({scopeParent:i,candidates:b})}else r.unshift.apply(r,i.children)}}return n},yt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},ne=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||is(e))&&!yt(e)?0:e.tabIndex},rs=function(e,t){var s=ne(e);return s<0&&t&&!yt(e)?0:s},as=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},wt=function(e){return e.tagName==="INPUT"},os=function(e){return wt(e)&&e.type==="hidden"},ls=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(s){return s.tagName==="SUMMARY"});return t},cs=function(e,t){for(var s=0;ssummary:first-of-type"),i=r?e.parentElement:e;if(ie.call(i,"details:not([open]) *"))return!0;if(!s||s==="full"||s==="legacy-full"){if(typeof n=="function"){for(var o=e;e;){var l=e.parentElement,c=ke(e);if(l&&!l.shadowRoot&&n(l)===!0)return rt(e);e.assignedSlot?e=e.assignedSlot:!l&&c!==e.ownerDocument?e=c.host:e=l}e=o}if(fs(e))return!e.getClientRects().length;if(s!=="legacy-full")return!0}else if(s==="non-zero-area")return rt(e);return!1},vs=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var s=0;s=0)},gs=function a(e){var t=[],s=[];return e.forEach(function(n,r){var i=!!n.scopeParent,o=i?n.scopeParent:n,l=rs(o,i),c=i?a(n.candidates):o;l===0?i?t.push.apply(t,c):t.push(o):s.push({documentOrder:r,tabIndex:l,item:n,isScope:i,content:c})}),s.sort(as).reduce(function(n,r){return r.isScope?n.push.apply(n,r.content):n.push(r.content),n},[]).concat(t)},bs=function(e,t){t=t||{};var s;return t.getShadowRoot?s=bt([e],t.includeContainer,{filter:Ve.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:ms}):s=gt(e,t.includeContainer,Ve.bind(null,t)),gs(s)},ys=function(e,t){t=t||{};var s;return t.getShadowRoot?s=bt([e],t.includeContainer,{filter:Fe.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):s=gt(e,t.includeContainer,Fe.bind(null,t)),s},re=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ie.call(e,Ie)===!1?!1:Ve(t,e)},ws=vt.concat("iframe").join(","),Me=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ie.call(e,ws)===!1?!1:Fe(t,e)};/*! diff --git a/dev/assets/chunks/framework.BonP4S8S.js b/dev/assets/chunks/framework.BonP4S8S.js deleted file mode 100644 index 5b7075f..0000000 --- a/dev/assets/chunks/framework.BonP4S8S.js +++ /dev/null @@ -1,18 +0,0 @@ -/** -* @vue/shared v3.5.8 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**//*! #__NO_SIDE_EFFECTS__ */function Hr(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ee={},Tt=[],Ue=()=>{},Xo=()=>!1,Zt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),$r=e=>e.startsWith("onUpdate:"),fe=Object.assign,Dr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},zo=Object.prototype.hasOwnProperty,z=(e,t)=>zo.call(e,t),K=Array.isArray,Ct=e=>Fn(e)==="[object Map]",fi=e=>Fn(e)==="[object Set]",q=e=>typeof e=="function",se=e=>typeof e=="string",rt=e=>typeof e=="symbol",ne=e=>e!==null&&typeof e=="object",ui=e=>(ne(e)||q(e))&&q(e.then)&&q(e.catch),di=Object.prototype.toString,Fn=e=>di.call(e),Qo=e=>Fn(e).slice(8,-1),hi=e=>Fn(e)==="[object Object]",jr=e=>se(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,At=Hr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Hn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Zo=/-(\w)/g,Ne=Hn(e=>e.replace(Zo,(t,n)=>n?n.toUpperCase():"")),el=/\B([A-Z])/g,st=Hn(e=>e.replace(el,"-$1").toLowerCase()),$n=Hn(e=>e.charAt(0).toUpperCase()+e.slice(1)),wn=Hn(e=>e?`on${$n(e)}`:""),tt=(e,t)=>!Object.is(e,t),Sn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},wr=e=>{const t=parseFloat(e);return isNaN(t)?e:t},tl=e=>{const t=se(e)?Number(e):NaN;return isNaN(t)?e:t};let hs;const gi=()=>hs||(hs=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Vr(e){if(K(e)){const t={};for(let n=0;n{if(n){const r=n.split(rl);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function Ur(e){let t="";if(se(e))t=e;else if(K(e))for(let n=0;n!!(e&&e.__v_isRef===!0),cl=e=>se(e)?e:e==null?"":K(e)||ne(e)&&(e.toString===di||!q(e.toString))?yi(e)?cl(e.value):JSON.stringify(e,vi,2):String(e),vi=(e,t)=>yi(t)?vi(e,t.value):Ct(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,s],i)=>(n[Zn(r,i)+" =>"]=s,n),{})}:fi(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Zn(n))}:rt(t)?Zn(t):ne(t)&&!K(t)&&!hi(t)?String(t):t,Zn=(e,t="")=>{var n;return rt(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** -* @vue/reactivity v3.5.8 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let _e;class al{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=_e,!t&&_e&&(this.index=(_e.scopes||(_e.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0)return;let e;for(;Dt;){let t=Dt;for(Dt=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(r){e||(e=r)}t=n}}if(e)throw e}function Ei(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function xi(e,t=!1){let n,r=e.depsTail,s=r;for(;s;){const i=s.prevDep;s.version===-1?(s===r&&(r=i),Wr(s,t),ul(s)):n=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=i}e.deps=n,e.depsTail=r}function Sr(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ti(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ti(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Wt))return;e.globalVersion=Wt;const t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&e.deps&&!Sr(e)){e.flags&=-3;return}const n=Z,r=Le;Z=e,Le=!0;try{Ei(e);const s=e.fn(e._value);(t.version===0||tt(s,e._value))&&(e._value=s,t.version++)}catch(s){throw t.version++,s}finally{Z=n,Le=r,xi(e,!0),e.flags&=-3}}function Wr(e,t=!1){const{dep:n,prevSub:r,nextSub:s}=e;if(r&&(r.nextSub=s,e.prevSub=void 0),s&&(s.prevSub=r,e.nextSub=void 0),n.subs===e&&(n.subs=r),!n.subs)if(n.computed){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Wr(i,!0)}else n.map&&!t&&(n.map.delete(n.key),n.map.size||Kt.delete(n.target))}function ul(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Le=!0;const Ci=[];function it(){Ci.push(Le),Le=!1}function ot(){const e=Ci.pop();Le=e===void 0?!0:e}function ps(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Z;Z=void 0;try{t()}finally{Z=n}}}let Wt=0;class dl{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Dn{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.target=void 0,this.map=void 0,this.key=void 0}track(t){if(!Z||!Le||Z===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Z)n=this.activeLink=new dl(Z,this),Z.deps?(n.prevDep=Z.depsTail,Z.depsTail.nextDep=n,Z.depsTail=n):Z.deps=Z.depsTail=n,Z.flags&4&&Ai(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const r=n.nextDep;r.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=r),n.prevDep=Z.depsTail,n.nextDep=void 0,Z.depsTail.nextDep=n,Z.depsTail=n,Z.deps===n&&(Z.deps=r)}return n}trigger(t){this.version++,Wt++,this.notify(t)}notify(t){kr();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Br()}}}function Ai(e){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let r=t.deps;r;r=r.nextDep)Ai(r)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}const Kt=new WeakMap,ht=Symbol(""),Er=Symbol(""),qt=Symbol("");function ve(e,t,n){if(Le&&Z){let r=Kt.get(e);r||Kt.set(e,r=new Map);let s=r.get(n);s||(r.set(n,s=new Dn),s.target=e,s.map=r,s.key=n),s.track()}}function Ge(e,t,n,r,s,i){const o=Kt.get(e);if(!o){Wt++;return}const l=c=>{c&&c.trigger()};if(kr(),t==="clear")o.forEach(l);else{const c=K(e),f=c&&jr(n);if(c&&n==="length"){const a=Number(r);o.forEach((h,g)=>{(g==="length"||g===qt||!rt(g)&&g>=a)&&l(h)})}else switch(n!==void 0&&l(o.get(n)),f&&l(o.get(qt)),t){case"add":c?f&&l(o.get("length")):(l(o.get(ht)),Ct(e)&&l(o.get(Er)));break;case"delete":c||(l(o.get(ht)),Ct(e)&&l(o.get(Er)));break;case"set":Ct(e)&&l(o.get(ht));break}}Br()}function hl(e,t){var n;return(n=Kt.get(e))==null?void 0:n.get(t)}function _t(e){const t=X(e);return t===e?t:(ve(t,"iterate",qt),Pe(e)?t:t.map(me))}function jn(e){return ve(e=X(e),"iterate",qt),e}const pl={__proto__:null,[Symbol.iterator](){return tr(this,Symbol.iterator,me)},concat(...e){return _t(this).concat(...e.map(t=>K(t)?_t(t):t))},entries(){return tr(this,"entries",e=>(e[1]=me(e[1]),e))},every(e,t){return We(this,"every",e,t,void 0,arguments)},filter(e,t){return We(this,"filter",e,t,n=>n.map(me),arguments)},find(e,t){return We(this,"find",e,t,me,arguments)},findIndex(e,t){return We(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return We(this,"findLast",e,t,me,arguments)},findLastIndex(e,t){return We(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return We(this,"forEach",e,t,void 0,arguments)},includes(...e){return nr(this,"includes",e)},indexOf(...e){return nr(this,"indexOf",e)},join(e){return _t(this).join(e)},lastIndexOf(...e){return nr(this,"lastIndexOf",e)},map(e,t){return We(this,"map",e,t,void 0,arguments)},pop(){return Ft(this,"pop")},push(...e){return Ft(this,"push",e)},reduce(e,...t){return gs(this,"reduce",e,t)},reduceRight(e,...t){return gs(this,"reduceRight",e,t)},shift(){return Ft(this,"shift")},some(e,t){return We(this,"some",e,t,void 0,arguments)},splice(...e){return Ft(this,"splice",e)},toReversed(){return _t(this).toReversed()},toSorted(e){return _t(this).toSorted(e)},toSpliced(...e){return _t(this).toSpliced(...e)},unshift(...e){return Ft(this,"unshift",e)},values(){return tr(this,"values",me)}};function tr(e,t,n){const r=jn(e),s=r[t]();return r!==e&&!Pe(e)&&(s._next=s.next,s.next=()=>{const i=s._next();return i.value&&(i.value=n(i.value)),i}),s}const gl=Array.prototype;function We(e,t,n,r,s,i){const o=jn(e),l=o!==e&&!Pe(e),c=o[t];if(c!==gl[t]){const h=c.apply(e,i);return l?me(h):h}let f=n;o!==e&&(l?f=function(h,g){return n.call(this,me(h),g,e)}:n.length>2&&(f=function(h,g){return n.call(this,h,g,e)}));const a=c.call(o,f,r);return l&&s?s(a):a}function gs(e,t,n,r){const s=jn(e);let i=n;return s!==e&&(Pe(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,me(l),c,e)}),s[t](i,...r)}function nr(e,t,n){const r=X(e);ve(r,"iterate",qt);const s=r[t](...n);return(s===-1||s===!1)&&Yr(n[0])?(n[0]=X(n[0]),r[t](...n)):s}function Ft(e,t,n=[]){it(),kr();const r=X(e)[t].apply(e,n);return Br(),ot(),r}const ml=Hr("__proto__,__v_isRef,__isVue"),Ri=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(rt));function yl(e){rt(e)||(e=String(e));const t=X(this);return ve(t,"has",e),t.hasOwnProperty(e)}class Oi{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){const s=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return i;if(n==="__v_raw")return r===(s?i?Ml:Li:i?Ii:Pi).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const o=K(t);if(!s){let c;if(o&&(c=pl[n]))return c;if(n==="hasOwnProperty")return yl}const l=Reflect.get(t,n,ae(t)?t:r);return(rt(n)?Ri.has(n):ml(n))||(s||ve(t,"get",n),i)?l:ae(l)?o&&jr(n)?l:l.value:ne(l)?s?kn(l):Un(l):l}}class Mi extends Oi{constructor(t=!1){super(!1,t)}set(t,n,r,s){let i=t[n];if(!this._isShallow){const c=vt(i);if(!Pe(r)&&!vt(r)&&(i=X(i),r=X(r)),!K(t)&&ae(i)&&!ae(r))return c?!1:(i.value=r,!0)}const o=K(t)&&jr(n)?Number(n)e,Vn=e=>Reflect.getPrototypeOf(e);function cn(e,t,n=!1,r=!1){e=e.__v_raw;const s=X(e),i=X(t);n||(tt(t,i)&&ve(s,"get",t),ve(s,"get",i));const{has:o}=Vn(s),l=r?Kr:n?Jr:me;if(o.call(s,t))return l(e.get(t));if(o.call(s,i))return l(e.get(i));e!==s&&e.get(t)}function an(e,t=!1){const n=this.__v_raw,r=X(n),s=X(e);return t||(tt(e,s)&&ve(r,"has",e),ve(r,"has",s)),e===s?n.has(e):n.has(e)||n.has(s)}function fn(e,t=!1){return e=e.__v_raw,!t&&ve(X(e),"iterate",ht),Reflect.get(e,"size",e)}function ms(e,t=!1){!t&&!Pe(e)&&!vt(e)&&(e=X(e));const n=X(this);return Vn(n).has.call(n,e)||(n.add(e),Ge(n,"add",e,e)),this}function ys(e,t,n=!1){!n&&!Pe(t)&&!vt(t)&&(t=X(t));const r=X(this),{has:s,get:i}=Vn(r);let o=s.call(r,e);o||(e=X(e),o=s.call(r,e));const l=i.call(r,e);return r.set(e,t),o?tt(t,l)&&Ge(r,"set",e,t):Ge(r,"add",e,t),this}function vs(e){const t=X(this),{has:n,get:r}=Vn(t);let s=n.call(t,e);s||(e=X(e),s=n.call(t,e)),r&&r.call(t,e);const i=t.delete(e);return s&&Ge(t,"delete",e,void 0),i}function bs(){const e=X(this),t=e.size!==0,n=e.clear();return t&&Ge(e,"clear",void 0,void 0),n}function un(e,t){return function(r,s){const i=this,o=i.__v_raw,l=X(o),c=t?Kr:e?Jr:me;return!e&&ve(l,"iterate",ht),o.forEach((f,a)=>r.call(s,c(f),c(a),i))}}function dn(e,t,n){return function(...r){const s=this.__v_raw,i=X(s),o=Ct(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,f=s[e](...r),a=n?Kr:t?Jr:me;return!t&&ve(i,"iterate",c?Er:ht),{next(){const{value:h,done:g}=f.next();return g?{value:h,done:g}:{value:l?[a(h[0]),a(h[1])]:a(h),done:g}},[Symbol.iterator](){return this}}}}function Je(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Sl(){const e={get(i){return cn(this,i)},get size(){return fn(this)},has:an,add:ms,set:ys,delete:vs,clear:bs,forEach:un(!1,!1)},t={get(i){return cn(this,i,!1,!0)},get size(){return fn(this)},has:an,add(i){return ms.call(this,i,!0)},set(i,o){return ys.call(this,i,o,!0)},delete:vs,clear:bs,forEach:un(!1,!0)},n={get(i){return cn(this,i,!0)},get size(){return fn(this,!0)},has(i){return an.call(this,i,!0)},add:Je("add"),set:Je("set"),delete:Je("delete"),clear:Je("clear"),forEach:un(!0,!1)},r={get(i){return cn(this,i,!0,!0)},get size(){return fn(this,!0)},has(i){return an.call(this,i,!0)},add:Je("add"),set:Je("set"),delete:Je("delete"),clear:Je("clear"),forEach:un(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=dn(i,!1,!1),n[i]=dn(i,!0,!1),t[i]=dn(i,!1,!0),r[i]=dn(i,!0,!0)}),[e,n,t,r]}const[El,xl,Tl,Cl]=Sl();function qr(e,t){const n=t?e?Cl:Tl:e?xl:El;return(r,s,i)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?r:Reflect.get(z(n,s)&&s in r?n:r,s,i)}const Al={get:qr(!1,!1)},Rl={get:qr(!1,!0)},Ol={get:qr(!0,!1)};const Pi=new WeakMap,Ii=new WeakMap,Li=new WeakMap,Ml=new WeakMap;function Pl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Il(e){return e.__v_skip||!Object.isExtensible(e)?0:Pl(Qo(e))}function Un(e){return vt(e)?e:Gr(e,!1,bl,Al,Pi)}function Ll(e){return Gr(e,!1,wl,Rl,Ii)}function kn(e){return Gr(e,!0,_l,Ol,Li)}function Gr(e,t,n,r,s){if(!ne(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=s.get(e);if(i)return i;const o=Il(e);if(o===0)return e;const l=new Proxy(e,o===2?r:n);return s.set(e,l),l}function pt(e){return vt(e)?pt(e.__v_raw):!!(e&&e.__v_isReactive)}function vt(e){return!!(e&&e.__v_isReadonly)}function Pe(e){return!!(e&&e.__v_isShallow)}function Yr(e){return e?!!e.__v_raw:!1}function X(e){const t=e&&e.__v_raw;return t?X(t):e}function En(e){return!z(e,"__v_skip")&&Object.isExtensible(e)&&pi(e,"__v_skip",!0),e}const me=e=>ne(e)?Un(e):e,Jr=e=>ne(e)?kn(e):e;function ae(e){return e?e.__v_isRef===!0:!1}function oe(e){return Ni(e,!1)}function Xr(e){return Ni(e,!0)}function Ni(e,t){return ae(e)?e:new Nl(e,t)}class Nl{constructor(t,n){this.dep=new Dn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:X(t),this._value=n?t:me(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,r=this.__v_isShallow||Pe(t)||vt(t);t=r?t:X(t),tt(t,n)&&(this._rawValue=t,this._value=r?t:me(t),this.dep.trigger())}}function Fi(e){return ae(e)?e.value:e}const Fl={get:(e,t,n)=>t==="__v_raw"?e:Fi(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const s=e[t];return ae(s)&&!ae(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function Hi(e){return pt(e)?e:new Proxy(e,Fl)}class Hl{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Dn,{get:r,set:s}=t(n.track.bind(n),n.trigger.bind(n));this._get=r,this._set=s}get value(){return this._value=this._get()}set value(t){this._set(t)}}function $l(e){return new Hl(e)}class Dl{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return hl(X(this._object),this._key)}}class jl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Vl(e,t,n){return ae(e)?e:q(e)?new jl(e):ne(e)&&arguments.length>1?Ul(e,t,n):oe(e)}function Ul(e,t,n){const r=e[t];return ae(r)?r:new Dl(e,t,n)}class kl{constructor(t,n,r){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Dn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Wt-1,this.effect=this,this.__v_isReadonly=!n,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&Z!==this)return Si(this),!0}get value(){const t=this.dep.track();return Ti(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Bl(e,t,n=!1){let r,s;return q(e)?r=e:(r=e.get,s=e.set),new kl(r,s,n)}const hn={},Rn=new WeakMap;let ut;function Wl(e,t=!1,n=ut){if(n){let r=Rn.get(n);r||Rn.set(n,r=[]),r.push(e)}}function Kl(e,t,n=ee){const{immediate:r,deep:s,once:i,scheduler:o,augmentJob:l,call:c}=n,f=m=>s?m:Pe(m)||s===!1||s===0?qe(m,1):qe(m);let a,h,g,v,_=!1,S=!1;if(ae(e)?(h=()=>e.value,_=Pe(e)):pt(e)?(h=()=>f(e),_=!0):K(e)?(S=!0,_=e.some(m=>pt(m)||Pe(m)),h=()=>e.map(m=>{if(ae(m))return m.value;if(pt(m))return f(m);if(q(m))return c?c(m,2):m()})):q(e)?t?h=c?()=>c(e,2):e:h=()=>{if(g){it();try{g()}finally{ot()}}const m=ut;ut=a;try{return c?c(e,3,[v]):e(v)}finally{ut=m}}:h=Ue,t&&s){const m=h,M=s===!0?1/0:s;h=()=>qe(m(),M)}const U=bi(),N=()=>{a.stop(),U&&Dr(U.effects,a)};if(i&&t){const m=t;t=(...M)=>{m(...M),N()}}let k=S?new Array(e.length).fill(hn):hn;const p=m=>{if(!(!(a.flags&1)||!a.dirty&&!m))if(t){const M=a.run();if(s||_||(S?M.some((F,$)=>tt(F,k[$])):tt(M,k))){g&&g();const F=ut;ut=a;try{const $=[M,k===hn?void 0:S&&k[0]===hn?[]:k,v];c?c(t,3,$):t(...$),k=M}finally{ut=F}}}else a.run()};return l&&l(p),a=new _i(h),a.scheduler=o?()=>o(p,!1):p,v=m=>Wl(m,!1,a),g=a.onStop=()=>{const m=Rn.get(a);if(m){if(c)c(m,4);else for(const M of m)M();Rn.delete(a)}},t?r?p(!0):k=a.run():o?o(p.bind(null,!0),!0):a.run(),N.pause=a.pause.bind(a),N.resume=a.resume.bind(a),N.stop=N,N}function qe(e,t=1/0,n){if(t<=0||!ne(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,ae(e))qe(e.value,t,n);else if(K(e))for(let r=0;r{qe(r,t,n)});else if(hi(e)){for(const r in e)qe(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&qe(e[r],t,n)}return e}/** -* @vue/runtime-core v3.5.8 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function en(e,t,n,r){try{return r?e(...r):e()}catch(s){tn(s,t,n)}}function Fe(e,t,n,r){if(q(e)){const s=en(e,t,n,r);return s&&ui(s)&&s.catch(i=>{tn(i,t,n)}),s}if(K(e)){const s=[];for(let i=0;i>>1,s=we[r],i=Yt(s);i=Yt(n)?we.push(e):we.splice(Gl(t),0,e),e.flags|=1,Di()}}function Di(){!Gt&&!xr&&(xr=!0,zr=$i.then(ji))}function Yl(e){K(e)?Rt.push(...e):Qe&&e.id===-1?Qe.splice(St+1,0,e):e.flags&1||(Rt.push(e),e.flags|=1),Di()}function _s(e,t,n=Gt?je+1:0){for(;nYt(n)-Yt(r));if(Rt.length=0,Qe){Qe.push(...t);return}for(Qe=t,St=0;Ste.id==null?e.flags&2?-1:1/0:e.id;function ji(e){xr=!1,Gt=!0;try{for(je=0;je{r._d&&Ns(-1);const i=Mn(t);let o;try{o=e(...s)}finally{Mn(i),r._d&&Ns(1)}return o};return r._n=!0,r._c=!0,r._d=!0,r}function If(e,t){if(de===null)return e;const n=Jn(de),r=e.dirs||(e.dirs=[]);for(let s=0;se.__isTeleport,jt=e=>e&&(e.disabled||e.disabled===""),Xl=e=>e&&(e.defer||e.defer===""),ws=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Ss=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Tr=(e,t)=>{const n=e&&e.to;return se(n)?t?t(n):null:n},zl={name:"Teleport",__isTeleport:!0,process(e,t,n,r,s,i,o,l,c,f){const{mc:a,pc:h,pbc:g,o:{insert:v,querySelector:_,createText:S,createComment:U}}=f,N=jt(t.props);let{shapeFlag:k,children:p,dynamicChildren:m}=t;if(e==null){const M=t.el=S(""),F=t.anchor=S("");v(M,n,r),v(F,n,r);const $=(R,b)=>{k&16&&(s&&s.isCE&&(s.ce._teleportTarget=R),a(p,R,b,s,i,o,l,c))},j=()=>{const R=t.target=Tr(t.props,_),b=Bi(R,t,S,v);R&&(o!=="svg"&&ws(R)?o="svg":o!=="mathml"&&Ss(R)&&(o="mathml"),N||($(R,b),xn(t)))};N&&($(n,F),xn(t)),Xl(t.props)?Ee(j,i):j()}else{t.el=e.el,t.targetStart=e.targetStart;const M=t.anchor=e.anchor,F=t.target=e.target,$=t.targetAnchor=e.targetAnchor,j=jt(e.props),R=j?n:F,b=j?M:$;if(o==="svg"||ws(F)?o="svg":(o==="mathml"||Ss(F))&&(o="mathml"),m?(g(e.dynamicChildren,m,R,s,i,o,l),rs(e,t,!0)):c||h(e,t,R,b,s,i,o,l,!1),N)j?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):pn(t,n,M,f,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const L=t.target=Tr(t.props,_);L&&pn(t,L,null,f,0)}else j&&pn(t,F,$,f,1);xn(t)}},remove(e,t,n,{um:r,o:{remove:s}},i){const{shapeFlag:o,children:l,anchor:c,targetStart:f,targetAnchor:a,target:h,props:g}=e;if(h&&(s(f),s(a)),i&&s(c),o&16){const v=i||!jt(g);for(let _=0;_{e.isMounted=!0}),Xi(()=>{e.isUnmounting=!0}),e}const Re=[Function,Array],Wi={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Re,onEnter:Re,onAfterEnter:Re,onEnterCancelled:Re,onBeforeLeave:Re,onLeave:Re,onAfterLeave:Re,onLeaveCancelled:Re,onBeforeAppear:Re,onAppear:Re,onAfterAppear:Re,onAppearCancelled:Re},Ki=e=>{const t=e.subTree;return t.component?Ki(t.component):t},ec={name:"BaseTransition",props:Wi,setup(e,{slots:t}){const n=Yn(),r=Zl();return()=>{const s=t.default&&Yi(t.default(),!0);if(!s||!s.length)return;const i=qi(s),o=X(e),{mode:l}=o;if(r.isLeaving)return rr(i);const c=Es(i);if(!c)return rr(i);let f=Cr(c,o,r,n,g=>f=g);c.type!==ye&&Jt(c,f);const a=n.subTree,h=a&&Es(a);if(h&&h.type!==ye&&!dt(c,h)&&Ki(n).type!==ye){const g=Cr(h,o,r,n);if(Jt(h,g),l==="out-in"&&c.type!==ye)return r.isLeaving=!0,g.afterLeave=()=>{r.isLeaving=!1,n.job.flags&8||n.update(),delete g.afterLeave},rr(i);l==="in-out"&&c.type!==ye&&(g.delayLeave=(v,_,S)=>{const U=Gi(r,h);U[String(h.key)]=h,v[Ze]=()=>{_(),v[Ze]=void 0,delete f.delayedLeave},f.delayedLeave=S})}return i}}};function qi(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==ye){t=n;break}}return t}const tc=ec;function Gi(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function Cr(e,t,n,r,s){const{appear:i,mode:o,persisted:l=!1,onBeforeEnter:c,onEnter:f,onAfterEnter:a,onEnterCancelled:h,onBeforeLeave:g,onLeave:v,onAfterLeave:_,onLeaveCancelled:S,onBeforeAppear:U,onAppear:N,onAfterAppear:k,onAppearCancelled:p}=t,m=String(e.key),M=Gi(n,e),F=(R,b)=>{R&&Fe(R,r,9,b)},$=(R,b)=>{const L=b[1];F(R,b),K(R)?R.every(x=>x.length<=1)&&L():R.length<=1&&L()},j={mode:o,persisted:l,beforeEnter(R){let b=c;if(!n.isMounted)if(i)b=U||c;else return;R[Ze]&&R[Ze](!0);const L=M[m];L&&dt(e,L)&&L.el[Ze]&&L.el[Ze](),F(b,[R])},enter(R){let b=f,L=a,x=h;if(!n.isMounted)if(i)b=N||f,L=k||a,x=p||h;else return;let W=!1;const re=R[gn]=ce=>{W||(W=!0,ce?F(x,[R]):F(L,[R]),j.delayedLeave&&j.delayedLeave(),R[gn]=void 0)};b?$(b,[R,re]):re()},leave(R,b){const L=String(e.key);if(R[gn]&&R[gn](!0),n.isUnmounting)return b();F(g,[R]);let x=!1;const W=R[Ze]=re=>{x||(x=!0,b(),re?F(S,[R]):F(_,[R]),R[Ze]=void 0,M[L]===e&&delete M[L])};M[L]=e,v?$(v,[R,W]):W()},clone(R){const b=Cr(R,t,n,r,s);return s&&s(b),b}};return j}function rr(e){if(nn(e))return e=nt(e),e.children=null,e}function Es(e){if(!nn(e))return ki(e.type)&&e.children?qi(e.children):e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&q(n.default))return n.default()}}function Jt(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Jt(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Yi(e,t=!1,n){let r=[],s=0;for(let i=0;i1)for(let i=0;iPn(_,t&&(K(t)?t[S]:t),n,r,s));return}if(gt(r)&&!s)return;const i=r.shapeFlag&4?Jn(r.component):r.el,o=s?null:i,{i:l,r:c}=e,f=t&&t.r,a=l.refs===ee?l.refs={}:l.refs,h=l.setupState,g=X(h),v=h===ee?()=>!1:_=>z(g,_);if(f!=null&&f!==c&&(se(f)?(a[f]=null,v(f)&&(h[f]=null)):ae(f)&&(f.value=null)),q(c))en(c,l,12,[o,a]);else{const _=se(c),S=ae(c);if(_||S){const U=()=>{if(e.f){const N=_?v(c)?h[c]:a[c]:c.value;s?K(N)&&Dr(N,i):K(N)?N.includes(i)||N.push(i):_?(a[c]=[i],v(c)&&(h[c]=a[c])):(c.value=[i],e.k&&(a[e.k]=c.value))}else _?(a[c]=o,v(c)&&(h[c]=o)):S&&(c.value=o,e.k&&(a[e.k]=o))};o?(U.id=-1,Ee(U,n)):U()}}}let xs=!1;const wt=()=>{xs||(console.error("Hydration completed but contains mismatches."),xs=!0)},nc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",rc=e=>e.namespaceURI.includes("MathML"),mn=e=>{if(e.nodeType===1){if(nc(e))return"svg";if(rc(e))return"mathml"}},xt=e=>e.nodeType===8;function sc(e){const{mt:t,p:n,o:{patchProp:r,createText:s,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:f}}=e,a=(p,m)=>{if(!m.hasChildNodes()){n(null,p,m),On(),m._vnode=p;return}h(m.firstChild,p,null,null,null),On(),m._vnode=p},h=(p,m,M,F,$,j=!1)=>{j=j||!!m.dynamicChildren;const R=xt(p)&&p.data==="[",b=()=>S(p,m,M,F,$,R),{type:L,ref:x,shapeFlag:W,patchFlag:re}=m;let ce=p.nodeType;m.el=p,re===-2&&(j=!1,m.dynamicChildren=null);let V=null;switch(L){case mt:ce!==3?m.children===""?(c(m.el=s(""),o(p),p),V=p):V=b():(p.data!==m.children&&(wt(),p.data=m.children),V=i(p));break;case ye:k(p)?(V=i(p),N(m.el=p.content.firstChild,p,M)):ce!==8||R?V=b():V=i(p);break;case Ut:if(R&&(p=i(p),ce=p.nodeType),ce===1||ce===3){V=p;const Y=!m.children.length;for(let D=0;D{j=j||!!m.dynamicChildren;const{type:R,props:b,patchFlag:L,shapeFlag:x,dirs:W,transition:re}=m,ce=R==="input"||R==="option";if(ce||L!==-1){W&&Ve(m,null,M,"created");let V=!1;if(k(p)){V=po(F,re)&&M&&M.vnode.props&&M.vnode.props.appear;const D=p.content.firstChild;V&&re.beforeEnter(D),N(D,p,M),m.el=p=D}if(x&16&&!(b&&(b.innerHTML||b.textContent))){let D=v(p.firstChild,m,p,M,F,$,j);for(;D;){yn(p,1)||wt();const he=D;D=D.nextSibling,l(he)}}else if(x&8){let D=m.children;D[0]===` -`&&(p.tagName==="PRE"||p.tagName==="TEXTAREA")&&(D=D.slice(1)),p.textContent!==D&&(yn(p,0)||wt(),p.textContent=m.children)}if(b){if(ce||!j||L&48){const D=p.tagName.includes("-");for(const he in b)(ce&&(he.endsWith("value")||he==="indeterminate")||Zt(he)&&!At(he)||he[0]==="."||D)&&r(p,he,null,b[he],void 0,M)}else if(b.onClick)r(p,"onClick",null,b.onClick,void 0,M);else if(L&4&&pt(b.style))for(const D in b.style)b.style[D]}let Y;(Y=b&&b.onVnodeBeforeMount)&&Oe(Y,M,m),W&&Ve(m,null,M,"beforeMount"),((Y=b&&b.onVnodeMounted)||W||V)&&bo(()=>{Y&&Oe(Y,M,m),V&&re.enter(p),W&&Ve(m,null,M,"mounted")},F)}return p.nextSibling},v=(p,m,M,F,$,j,R)=>{R=R||!!m.dynamicChildren;const b=m.children,L=b.length;for(let x=0;x{const{slotScopeIds:R}=m;R&&($=$?$.concat(R):R);const b=o(p),L=v(i(p),m,b,M,F,$,j);return L&&xt(L)&&L.data==="]"?i(m.anchor=L):(wt(),c(m.anchor=f("]"),b,L),L)},S=(p,m,M,F,$,j)=>{if(yn(p.parentElement,1)||wt(),m.el=null,j){const L=U(p);for(;;){const x=i(p);if(x&&x!==L)l(x);else break}}const R=i(p),b=o(p);return l(p),n(null,m,b,R,M,F,mn(b),$),R},U=(p,m="[",M="]")=>{let F=0;for(;p;)if(p=i(p),p&&xt(p)&&(p.data===m&&F++,p.data===M)){if(F===0)return i(p);F--}return p},N=(p,m,M)=>{const F=m.parentNode;F&&F.replaceChild(p,m);let $=M;for(;$;)$.vnode.el===m&&($.vnode.el=$.subTree.el=p),$=$.parent},k=p=>p.nodeType===1&&p.tagName==="TEMPLATE";return[a,h]}const Ts="data-allow-mismatch",ic={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function yn(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(Ts);)e=e.parentElement;const n=e&&e.getAttribute(Ts);if(n==null)return!1;if(n==="")return!0;{const r=n.split(",");return t===0&&r.includes("children")?!0:n.split(",").includes(ic[t])}}function oc(e,t){if(xt(e)&&e.data==="["){let n=1,r=e.nextSibling;for(;r;){if(r.nodeType===1){if(t(r)===!1)break}else if(xt(r))if(r.data==="]"){if(--n===0)break}else r.data==="["&&n++;r=r.nextSibling}}else t(e)}const gt=e=>!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function Nf(e){q(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:s=200,hydrate:i,timeout:o,suspensible:l=!0,onError:c}=e;let f=null,a,h=0;const g=()=>(h++,f=null,v()),v=()=>{let _;return f||(_=f=t().catch(S=>{if(S=S instanceof Error?S:new Error(String(S)),c)return new Promise((U,N)=>{c(S,()=>U(g()),()=>N(S),h+1)});throw S}).then(S=>_!==f&&f?f:(S&&(S.__esModule||S[Symbol.toStringTag]==="Module")&&(S=S.default),a=S,S)))};return Zr({name:"AsyncComponentWrapper",__asyncLoader:v,__asyncHydrate(_,S,U){const N=i?()=>{const k=i(U,p=>oc(_,p));k&&(S.bum||(S.bum=[])).push(k)}:U;a?N():v().then(()=>!S.isUnmounted&&N())},get __asyncResolved(){return a},setup(){const _=ue;if(es(_),a)return()=>sr(a,_);const S=p=>{f=null,tn(p,_,13,!r)};if(l&&_.suspense||sn)return v().then(p=>()=>sr(p,_)).catch(p=>(S(p),()=>r?le(r,{error:p}):null));const U=oe(!1),N=oe(),k=oe(!!s);return s&&setTimeout(()=>{k.value=!1},s),o!=null&&setTimeout(()=>{if(!U.value&&!N.value){const p=new Error(`Async component timed out after ${o}ms.`);S(p),N.value=p}},o),v().then(()=>{U.value=!0,_.parent&&nn(_.parent.vnode)&&_.parent.update()}).catch(p=>{S(p),N.value=p}),()=>{if(U.value&&a)return sr(a,_);if(N.value&&r)return le(r,{error:N.value});if(n&&!k.value)return le(n)}}})}function sr(e,t){const{ref:n,props:r,children:s,ce:i}=t.vnode,o=le(e,r,s);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const nn=e=>e.type.__isKeepAlive;function lc(e,t){Ji(e,"a",t)}function cc(e,t){Ji(e,"da",t)}function Ji(e,t,n=ue){const r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(Wn(t,r,n),n){let s=n.parent;for(;s&&s.parent;)nn(s.parent.vnode)&&ac(r,t,n,s),s=s.parent}}function ac(e,t,n,r){const s=Wn(t,e,r,!0);Kn(()=>{Dr(r[t],s)},n)}function Wn(e,t,n=ue,r=!1){if(n){const s=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{it();const l=rn(n),c=Fe(t,n,e,o);return l(),ot(),c});return r?s.unshift(i):s.push(i),i}}const Ye=e=>(t,n=ue)=>{(!sn||e==="sp")&&Wn(e,(...r)=>t(...r),n)},fc=Ye("bm"),It=Ye("m"),uc=Ye("bu"),dc=Ye("u"),Xi=Ye("bum"),Kn=Ye("um"),hc=Ye("sp"),pc=Ye("rtg"),gc=Ye("rtc");function mc(e,t=ue){Wn("ec",e,t)}const zi="components";function Ff(e,t){return Zi(zi,e,!0,t)||e}const Qi=Symbol.for("v-ndc");function Hf(e){return se(e)?Zi(zi,e,!1)||e:e||Qi}function Zi(e,t,n=!0,r=!1){const s=de||ue;if(s){const i=s.type;{const l=ta(i,!1);if(l&&(l===t||l===Ne(t)||l===$n(Ne(t))))return i}const o=Cs(s[e]||i[e],t)||Cs(s.appContext[e],t);return!o&&r?i:o}}function Cs(e,t){return e&&(e[t]||e[Ne(t)]||e[$n(Ne(t))])}function $f(e,t,n,r){let s;const i=n,o=K(e);if(o||se(e)){const l=o&&pt(e);let c=!1;l&&(c=!Pe(e),e=jn(e)),s=new Array(e.length);for(let f=0,a=e.length;ft(l,c,void 0,i));else{const l=Object.keys(e);s=new Array(l.length);for(let c=0,f=l.length;cLn(t)?!(t.type===ye||t.type===Se&&!eo(t.children)):!0)?e:null}function jf(e,t){const n={};for(const r in e)n[/[A-Z]/.test(r)?`on:${r}`:wn(r)]=e[r];return n}const Ar=e=>e?xo(e)?Jn(e):Ar(e.parent):null,Vt=fe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Ar(e.parent),$root:e=>Ar(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ts(e),$forceUpdate:e=>e.f||(e.f=()=>{Qr(e.update)}),$nextTick:e=>e.n||(e.n=Bn.bind(e.proxy)),$watch:e=>Dc.bind(e)}),ir=(e,t)=>e!==ee&&!e.__isScriptSetup&&z(e,t),yc={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:s,props:i,accessCache:o,type:l,appContext:c}=e;let f;if(t[0]!=="$"){const v=o[t];if(v!==void 0)switch(v){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return i[t]}else{if(ir(r,t))return o[t]=1,r[t];if(s!==ee&&z(s,t))return o[t]=2,s[t];if((f=e.propsOptions[0])&&z(f,t))return o[t]=3,i[t];if(n!==ee&&z(n,t))return o[t]=4,n[t];Rr&&(o[t]=0)}}const a=Vt[t];let h,g;if(a)return t==="$attrs"&&ve(e.attrs,"get",""),a(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==ee&&z(n,t))return o[t]=4,n[t];if(g=c.config.globalProperties,z(g,t))return g[t]},set({_:e},t,n){const{data:r,setupState:s,ctx:i}=e;return ir(s,t)?(s[t]=n,!0):r!==ee&&z(r,t)?(r[t]=n,!0):z(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:s,propsOptions:i}},o){let l;return!!n[o]||e!==ee&&z(e,o)||ir(t,o)||(l=i[0])&&z(l,o)||z(r,o)||z(Vt,o)||z(s.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:z(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Vf(){return vc().slots}function vc(){const e=Yn();return e.setupContext||(e.setupContext=Co(e))}function As(e){return K(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Rr=!0;function bc(e){const t=ts(e),n=e.proxy,r=e.ctx;Rr=!1,t.beforeCreate&&Rs(t.beforeCreate,e,"bc");const{data:s,computed:i,methods:o,watch:l,provide:c,inject:f,created:a,beforeMount:h,mounted:g,beforeUpdate:v,updated:_,activated:S,deactivated:U,beforeDestroy:N,beforeUnmount:k,destroyed:p,unmounted:m,render:M,renderTracked:F,renderTriggered:$,errorCaptured:j,serverPrefetch:R,expose:b,inheritAttrs:L,components:x,directives:W,filters:re}=t;if(f&&_c(f,r,null),o)for(const Y in o){const D=o[Y];q(D)&&(r[Y]=D.bind(n))}if(s){const Y=s.call(n,n);ne(Y)&&(e.data=Un(Y))}if(Rr=!0,i)for(const Y in i){const D=i[Y],he=q(D)?D.bind(n,n):q(D.get)?D.get.bind(n,n):Ue,on=!q(D)&&q(D.set)?D.set.bind(n):Ue,lt=ie({get:he,set:on});Object.defineProperty(r,Y,{enumerable:!0,configurable:!0,get:()=>lt.value,set:$e=>lt.value=$e})}if(l)for(const Y in l)to(l[Y],r,n,Y);if(c){const Y=q(c)?c.call(n):c;Reflect.ownKeys(Y).forEach(D=>{Cc(D,Y[D])})}a&&Rs(a,e,"c");function V(Y,D){K(D)?D.forEach(he=>Y(he.bind(n))):D&&Y(D.bind(n))}if(V(fc,h),V(It,g),V(uc,v),V(dc,_),V(lc,S),V(cc,U),V(mc,j),V(gc,F),V(pc,$),V(Xi,k),V(Kn,m),V(hc,R),K(b))if(b.length){const Y=e.exposed||(e.exposed={});b.forEach(D=>{Object.defineProperty(Y,D,{get:()=>n[D],set:he=>n[D]=he})})}else e.exposed||(e.exposed={});M&&e.render===Ue&&(e.render=M),L!=null&&(e.inheritAttrs=L),x&&(e.components=x),W&&(e.directives=W),R&&es(e)}function _c(e,t,n=Ue){K(e)&&(e=Or(e));for(const r in e){const s=e[r];let i;ne(s)?"default"in s?i=Mt(s.from||r,s.default,!0):i=Mt(s.from||r):i=Mt(s),ae(i)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[r]=i}}function Rs(e,t,n){Fe(K(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function to(e,t,n,r){let s=r.includes(".")?mo(n,r):()=>n[r];if(se(e)){const i=t[e];q(i)&&ke(s,i)}else if(q(e))ke(s,e.bind(n));else if(ne(e))if(K(e))e.forEach(i=>to(i,t,n,r));else{const i=q(e.handler)?e.handler.bind(n):t[e.handler];q(i)&&ke(s,i,e)}}function ts(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:s,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!s.length&&!n&&!r?c=t:(c={},s.length&&s.forEach(f=>In(c,f,o,!0)),In(c,t,o)),ne(t)&&i.set(t,c),c}function In(e,t,n,r=!1){const{mixins:s,extends:i}=t;i&&In(e,i,n,!0),s&&s.forEach(o=>In(e,o,n,!0));for(const o in t)if(!(r&&o==="expose")){const l=wc[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const wc={data:Os,props:Ms,emits:Ms,methods:$t,computed:$t,beforeCreate:be,created:be,beforeMount:be,mounted:be,beforeUpdate:be,updated:be,beforeDestroy:be,beforeUnmount:be,destroyed:be,unmounted:be,activated:be,deactivated:be,errorCaptured:be,serverPrefetch:be,components:$t,directives:$t,watch:Ec,provide:Os,inject:Sc};function Os(e,t){return t?e?function(){return fe(q(e)?e.call(this,this):e,q(t)?t.call(this,this):t)}:t:e}function Sc(e,t){return $t(Or(e),Or(t))}function Or(e){if(K(e)){const t={};for(let n=0;n1)return n&&q(t)?t.call(r&&r.proxy):t}}const ro={},so=()=>Object.create(ro),io=e=>Object.getPrototypeOf(e)===ro;function Ac(e,t,n,r=!1){const s={},i=so();e.propsDefaults=Object.create(null),oo(e,t,s,i);for(const o in e.propsOptions[0])o in s||(s[o]=void 0);n?e.props=r?s:Ll(s):e.type.props?e.props=s:e.props=i,e.attrs=i}function Rc(e,t,n,r){const{props:s,attrs:i,vnode:{patchFlag:o}}=e,l=X(s),[c]=e.propsOptions;let f=!1;if((r||o>0)&&!(o&16)){if(o&8){const a=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[g,v]=lo(h,t,!0);fe(o,g),v&&l.push(...v)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!c)return ne(e)&&r.set(e,Tt),Tt;if(K(i))for(let a=0;ae[0]==="_"||e==="$stable",ns=e=>K(e)?e.map(Me):[Me(e)],Mc=(e,t,n)=>{if(t._n)return t;const r=Jl((...s)=>ns(t(...s)),n);return r._c=!1,r},ao=(e,t,n)=>{const r=e._ctx;for(const s in e){if(co(s))continue;const i=e[s];if(q(i))t[s]=Mc(s,i,r);else if(i!=null){const o=ns(i);t[s]=()=>o}}},fo=(e,t)=>{const n=ns(t);e.slots.default=()=>n},uo=(e,t,n)=>{for(const r in t)(n||r!=="_")&&(e[r]=t[r])},Pc=(e,t,n)=>{const r=e.slots=so();if(e.vnode.shapeFlag&32){const s=t._;s?(uo(r,t,n),n&&pi(r,"_",s,!0)):ao(t,r)}else t&&fo(e,t)},Ic=(e,t,n)=>{const{vnode:r,slots:s}=e;let i=!0,o=ee;if(r.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:uo(s,t,n):(i=!t.$stable,ao(t,s)),o=t}else t&&(fo(e,t),o={default:1});if(i)for(const l in s)!co(l)&&o[l]==null&&delete s[l]},Ee=bo;function Lc(e){return ho(e)}function Nc(e){return ho(e,sc)}function ho(e,t){const n=gi();n.__VUE__=!0;const{insert:r,remove:s,patchProp:i,createElement:o,createText:l,createComment:c,setText:f,setElementText:a,parentNode:h,nextSibling:g,setScopeId:v=Ue,insertStaticContent:_}=e,S=(u,d,y,T=null,w=null,E=null,P=void 0,O=null,A=!!d.dynamicChildren)=>{if(u===d)return;u&&!dt(u,d)&&(T=ln(u),$e(u,w,E,!0),u=null),d.patchFlag===-2&&(A=!1,d.dynamicChildren=null);const{type:C,ref:B,shapeFlag:I}=d;switch(C){case mt:U(u,d,y,T);break;case ye:N(u,d,y,T);break;case Ut:u==null&&k(d,y,T,P);break;case Se:x(u,d,y,T,w,E,P,O,A);break;default:I&1?M(u,d,y,T,w,E,P,O,A):I&6?W(u,d,y,T,w,E,P,O,A):(I&64||I&128)&&C.process(u,d,y,T,w,E,P,O,A,bt)}B!=null&&w&&Pn(B,u&&u.ref,E,d||u,!d)},U=(u,d,y,T)=>{if(u==null)r(d.el=l(d.children),y,T);else{const w=d.el=u.el;d.children!==u.children&&f(w,d.children)}},N=(u,d,y,T)=>{u==null?r(d.el=c(d.children||""),y,T):d.el=u.el},k=(u,d,y,T)=>{[u.el,u.anchor]=_(u.children,d,y,T,u.el,u.anchor)},p=({el:u,anchor:d},y,T)=>{let w;for(;u&&u!==d;)w=g(u),r(u,y,T),u=w;r(d,y,T)},m=({el:u,anchor:d})=>{let y;for(;u&&u!==d;)y=g(u),s(u),u=y;s(d)},M=(u,d,y,T,w,E,P,O,A)=>{d.type==="svg"?P="svg":d.type==="math"&&(P="mathml"),u==null?F(d,y,T,w,E,P,O,A):R(u,d,w,E,P,O,A)},F=(u,d,y,T,w,E,P,O)=>{let A,C;const{props:B,shapeFlag:I,transition:H,dirs:G}=u;if(A=u.el=o(u.type,E,B&&B.is,B),I&8?a(A,u.children):I&16&&j(u.children,A,null,T,w,or(u,E),P,O),G&&Ve(u,null,T,"created"),$(A,u,u.scopeId,P,T),B){for(const te in B)te!=="value"&&!At(te)&&i(A,te,null,B[te],E,T);"value"in B&&i(A,"value",null,B.value,E),(C=B.onVnodeBeforeMount)&&Oe(C,T,u)}G&&Ve(u,null,T,"beforeMount");const J=po(w,H);J&&H.beforeEnter(A),r(A,d,y),((C=B&&B.onVnodeMounted)||J||G)&&Ee(()=>{C&&Oe(C,T,u),J&&H.enter(A),G&&Ve(u,null,T,"mounted")},w)},$=(u,d,y,T,w)=>{if(y&&v(u,y),T)for(let E=0;E{for(let C=A;C{const O=d.el=u.el;let{patchFlag:A,dynamicChildren:C,dirs:B}=d;A|=u.patchFlag&16;const I=u.props||ee,H=d.props||ee;let G;if(y&&ct(y,!1),(G=H.onVnodeBeforeUpdate)&&Oe(G,y,d,u),B&&Ve(d,u,y,"beforeUpdate"),y&&ct(y,!0),(I.innerHTML&&H.innerHTML==null||I.textContent&&H.textContent==null)&&a(O,""),C?b(u.dynamicChildren,C,O,y,T,or(d,w),E):P||D(u,d,O,null,y,T,or(d,w),E,!1),A>0){if(A&16)L(O,I,H,y,w);else if(A&2&&I.class!==H.class&&i(O,"class",null,H.class,w),A&4&&i(O,"style",I.style,H.style,w),A&8){const J=d.dynamicProps;for(let te=0;te{G&&Oe(G,y,d,u),B&&Ve(d,u,y,"updated")},T)},b=(u,d,y,T,w,E,P)=>{for(let O=0;O{if(d!==y){if(d!==ee)for(const E in d)!At(E)&&!(E in y)&&i(u,E,d[E],null,w,T);for(const E in y){if(At(E))continue;const P=y[E],O=d[E];P!==O&&E!=="value"&&i(u,E,O,P,w,T)}"value"in y&&i(u,"value",d.value,y.value,w)}},x=(u,d,y,T,w,E,P,O,A)=>{const C=d.el=u?u.el:l(""),B=d.anchor=u?u.anchor:l("");let{patchFlag:I,dynamicChildren:H,slotScopeIds:G}=d;G&&(O=O?O.concat(G):G),u==null?(r(C,y,T),r(B,y,T),j(d.children||[],y,B,w,E,P,O,A)):I>0&&I&64&&H&&u.dynamicChildren?(b(u.dynamicChildren,H,y,w,E,P,O),(d.key!=null||w&&d===w.subTree)&&rs(u,d,!0)):D(u,d,y,B,w,E,P,O,A)},W=(u,d,y,T,w,E,P,O,A)=>{d.slotScopeIds=O,u==null?d.shapeFlag&512?w.ctx.activate(d,y,T,P,A):re(d,y,T,w,E,P,A):ce(u,d,A)},re=(u,d,y,T,w,E,P)=>{const O=u.component=zc(u,T,w);if(nn(u)&&(O.ctx.renderer=bt),Qc(O,!1,P),O.asyncDep){if(w&&w.registerDep(O,V,P),!u.el){const A=O.subTree=le(ye);N(null,A,d,y)}}else V(O,u,d,y,w,E,P)},ce=(u,d,y)=>{const T=d.component=u.component;if(Bc(u,d,y))if(T.asyncDep&&!T.asyncResolved){Y(T,d,y);return}else T.next=d,T.update();else d.el=u.el,T.vnode=d},V=(u,d,y,T,w,E,P)=>{const O=()=>{if(u.isMounted){let{next:I,bu:H,u:G,parent:J,vnode:te}=u;{const Te=go(u);if(Te){I&&(I.el=te.el,Y(u,I,P)),Te.asyncDep.then(()=>{u.isUnmounted||O()});return}}let Q=I,xe;ct(u,!1),I?(I.el=te.el,Y(u,I,P)):I=te,H&&Sn(H),(xe=I.props&&I.props.onVnodeBeforeUpdate)&&Oe(xe,J,I,te),ct(u,!0);const pe=lr(u),Ie=u.subTree;u.subTree=pe,S(Ie,pe,h(Ie.el),ln(Ie),u,w,E),I.el=pe.el,Q===null&&Wc(u,pe.el),G&&Ee(G,w),(xe=I.props&&I.props.onVnodeUpdated)&&Ee(()=>Oe(xe,J,I,te),w)}else{let I;const{el:H,props:G}=d,{bm:J,m:te,parent:Q,root:xe,type:pe}=u,Ie=gt(d);if(ct(u,!1),J&&Sn(J),!Ie&&(I=G&&G.onVnodeBeforeMount)&&Oe(I,Q,d),ct(u,!0),H&&Qn){const Te=()=>{u.subTree=lr(u),Qn(H,u.subTree,u,w,null)};Ie&&pe.__asyncHydrate?pe.__asyncHydrate(H,u,Te):Te()}else{xe.ce&&xe.ce._injectChildStyle(pe);const Te=u.subTree=lr(u);S(null,Te,y,T,u,w,E),d.el=Te.el}if(te&&Ee(te,w),!Ie&&(I=G&&G.onVnodeMounted)){const Te=d;Ee(()=>Oe(I,Q,Te),w)}(d.shapeFlag&256||Q&>(Q.vnode)&&Q.vnode.shapeFlag&256)&&u.a&&Ee(u.a,w),u.isMounted=!0,d=y=T=null}};u.scope.on();const A=u.effect=new _i(O);u.scope.off();const C=u.update=A.run.bind(A),B=u.job=A.runIfDirty.bind(A);B.i=u,B.id=u.uid,A.scheduler=()=>Qr(B),ct(u,!0),C()},Y=(u,d,y)=>{d.component=u;const T=u.vnode.props;u.vnode=d,u.next=null,Rc(u,d.props,T,y),Ic(u,d.children,y),it(),_s(u),ot()},D=(u,d,y,T,w,E,P,O,A=!1)=>{const C=u&&u.children,B=u?u.shapeFlag:0,I=d.children,{patchFlag:H,shapeFlag:G}=d;if(H>0){if(H&128){on(C,I,y,T,w,E,P,O,A);return}else if(H&256){he(C,I,y,T,w,E,P,O,A);return}}G&8?(B&16&&Lt(C,w,E),I!==C&&a(y,I)):B&16?G&16?on(C,I,y,T,w,E,P,O,A):Lt(C,w,E,!0):(B&8&&a(y,""),G&16&&j(I,y,T,w,E,P,O,A))},he=(u,d,y,T,w,E,P,O,A)=>{u=u||Tt,d=d||Tt;const C=u.length,B=d.length,I=Math.min(C,B);let H;for(H=0;HB?Lt(u,w,E,!0,!1,I):j(d,y,T,w,E,P,O,A,I)},on=(u,d,y,T,w,E,P,O,A)=>{let C=0;const B=d.length;let I=u.length-1,H=B-1;for(;C<=I&&C<=H;){const G=u[C],J=d[C]=A?et(d[C]):Me(d[C]);if(dt(G,J))S(G,J,y,null,w,E,P,O,A);else break;C++}for(;C<=I&&C<=H;){const G=u[I],J=d[H]=A?et(d[H]):Me(d[H]);if(dt(G,J))S(G,J,y,null,w,E,P,O,A);else break;I--,H--}if(C>I){if(C<=H){const G=H+1,J=GH)for(;C<=I;)$e(u[C],w,E,!0),C++;else{const G=C,J=C,te=new Map;for(C=J;C<=H;C++){const Ce=d[C]=A?et(d[C]):Me(d[C]);Ce.key!=null&&te.set(Ce.key,C)}let Q,xe=0;const pe=H-J+1;let Ie=!1,Te=0;const Nt=new Array(pe);for(C=0;C=pe){$e(Ce,w,E,!0);continue}let De;if(Ce.key!=null)De=te.get(Ce.key);else for(Q=J;Q<=H;Q++)if(Nt[Q-J]===0&&dt(Ce,d[Q])){De=Q;break}De===void 0?$e(Ce,w,E,!0):(Nt[De-J]=C+1,De>=Te?Te=De:Ie=!0,S(Ce,d[De],y,null,w,E,P,O,A),xe++)}const us=Ie?Fc(Nt):Tt;for(Q=us.length-1,C=pe-1;C>=0;C--){const Ce=J+C,De=d[Ce],ds=Ce+1{const{el:E,type:P,transition:O,children:A,shapeFlag:C}=u;if(C&6){lt(u.component.subTree,d,y,T);return}if(C&128){u.suspense.move(d,y,T);return}if(C&64){P.move(u,d,y,bt);return}if(P===Se){r(E,d,y);for(let I=0;IO.enter(E),w);else{const{leave:I,delayLeave:H,afterLeave:G}=O,J=()=>r(E,d,y),te=()=>{I(E,()=>{J(),G&&G()})};H?H(E,J,te):te()}else r(E,d,y)},$e=(u,d,y,T=!1,w=!1)=>{const{type:E,props:P,ref:O,children:A,dynamicChildren:C,shapeFlag:B,patchFlag:I,dirs:H,cacheIndex:G}=u;if(I===-2&&(w=!1),O!=null&&Pn(O,null,y,u,!0),G!=null&&(d.renderCache[G]=void 0),B&256){d.ctx.deactivate(u);return}const J=B&1&&H,te=!gt(u);let Q;if(te&&(Q=P&&P.onVnodeBeforeUnmount)&&Oe(Q,d,u),B&6)Jo(u.component,y,T);else{if(B&128){u.suspense.unmount(y,T);return}J&&Ve(u,null,d,"beforeUnmount"),B&64?u.type.remove(u,d,y,bt,T):C&&!C.hasOnce&&(E!==Se||I>0&&I&64)?Lt(C,d,y,!1,!0):(E===Se&&I&384||!w&&B&16)&&Lt(A,d,y),T&&as(u)}(te&&(Q=P&&P.onVnodeUnmounted)||J)&&Ee(()=>{Q&&Oe(Q,d,u),J&&Ve(u,null,d,"unmounted")},y)},as=u=>{const{type:d,el:y,anchor:T,transition:w}=u;if(d===Se){Yo(y,T);return}if(d===Ut){m(u);return}const E=()=>{s(y),w&&!w.persisted&&w.afterLeave&&w.afterLeave()};if(u.shapeFlag&1&&w&&!w.persisted){const{leave:P,delayLeave:O}=w,A=()=>P(y,E);O?O(u.el,E,A):A()}else E()},Yo=(u,d)=>{let y;for(;u!==d;)y=g(u),s(u),u=y;s(d)},Jo=(u,d,y)=>{const{bum:T,scope:w,job:E,subTree:P,um:O,m:A,a:C}=u;Is(A),Is(C),T&&Sn(T),w.stop(),E&&(E.flags|=8,$e(P,u,d,y)),O&&Ee(O,d),Ee(()=>{u.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},Lt=(u,d,y,T=!1,w=!1,E=0)=>{for(let P=E;P{if(u.shapeFlag&6)return ln(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const d=g(u.anchor||u.el),y=d&&d[Ui];return y?g(y):d};let Xn=!1;const fs=(u,d,y)=>{u==null?d._vnode&&$e(d._vnode,null,null,!0):S(d._vnode||null,u,d,null,null,null,y),d._vnode=u,Xn||(Xn=!0,_s(),On(),Xn=!1)},bt={p:S,um:$e,m:lt,r:as,mt:re,mc:j,pc:D,pbc:b,n:ln,o:e};let zn,Qn;return t&&([zn,Qn]=t(bt)),{render:fs,hydrate:zn,createApp:Tc(fs,zn)}}function or({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function ct({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function po(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function rs(e,t,n=!1){const r=e.children,s=t.children;if(K(r)&&K(s))for(let i=0;i>1,e[n[l]]0&&(t[r]=n[i-1]),n[i]=r)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function go(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:go(t)}function Is(e){if(e)for(let t=0;tMt(Hc);function ss(e,t){return qn(e,null,t)}function Uf(e,t){return qn(e,null,{flush:"post"})}function ke(e,t,n){return qn(e,t,n)}function qn(e,t,n=ee){const{immediate:r,deep:s,flush:i,once:o}=n,l=fe({},n);let c;if(sn)if(i==="sync"){const g=$c();c=g.__watcherHandles||(g.__watcherHandles=[])}else if(!t||r)l.once=!0;else{const g=()=>{};return g.stop=Ue,g.resume=Ue,g.pause=Ue,g}const f=ue;l.call=(g,v,_)=>Fe(g,f,v,_);let a=!1;i==="post"?l.scheduler=g=>{Ee(g,f&&f.suspense)}:i!=="sync"&&(a=!0,l.scheduler=(g,v)=>{v?g():Qr(g)}),l.augmentJob=g=>{t&&(g.flags|=4),a&&(g.flags|=2,f&&(g.id=f.uid,g.i=f))};const h=Kl(e,t,l);return c&&c.push(h),h}function Dc(e,t,n){const r=this.proxy,s=se(e)?e.includes(".")?mo(r,e):()=>r[e]:e.bind(r,r);let i;q(t)?i=t:(i=t.handler,n=t);const o=rn(this),l=qn(s,i.bind(r),n);return o(),l}function mo(e,t){const n=t.split(".");return()=>{let r=e;for(let s=0;st==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ne(t)}Modifiers`]||e[`${st(t)}Modifiers`];function Vc(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||ee;let s=n;const i=t.startsWith("update:"),o=i&&jc(r,t.slice(7));o&&(o.trim&&(s=n.map(a=>se(a)?a.trim():a)),o.number&&(s=n.map(wr)));let l,c=r[l=wn(t)]||r[l=wn(Ne(t))];!c&&i&&(c=r[l=wn(st(t))]),c&&Fe(c,e,6,s);const f=r[l+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Fe(f,e,6,s)}}function yo(e,t,n=!1){const r=t.emitsCache,s=r.get(e);if(s!==void 0)return s;const i=e.emits;let o={},l=!1;if(!q(e)){const c=f=>{const a=yo(f,t,!0);a&&(l=!0,fe(o,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(ne(e)&&r.set(e,null),null):(K(i)?i.forEach(c=>o[c]=null):fe(o,i),ne(e)&&r.set(e,o),o)}function Gn(e,t){return!e||!Zt(t)?!1:(t=t.slice(2).replace(/Once$/,""),z(e,t[0].toLowerCase()+t.slice(1))||z(e,st(t))||z(e,t))}function lr(e){const{type:t,vnode:n,proxy:r,withProxy:s,propsOptions:[i],slots:o,attrs:l,emit:c,render:f,renderCache:a,props:h,data:g,setupState:v,ctx:_,inheritAttrs:S}=e,U=Mn(e);let N,k;try{if(n.shapeFlag&4){const m=s||r,M=m;N=Me(f.call(M,m,a,h,v,g,_)),k=l}else{const m=t;N=Me(m.length>1?m(h,{attrs:l,slots:o,emit:c}):m(h,null)),k=t.props?l:Uc(l)}}catch(m){kt.length=0,tn(m,e,1),N=le(ye)}let p=N;if(k&&S!==!1){const m=Object.keys(k),{shapeFlag:M}=p;m.length&&M&7&&(i&&m.some($r)&&(k=kc(k,i)),p=nt(p,k,!1,!0))}return n.dirs&&(p=nt(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&Jt(p,n.transition),N=p,Mn(U),N}const Uc=e=>{let t;for(const n in e)(n==="class"||n==="style"||Zt(n))&&((t||(t={}))[n]=e[n]);return t},kc=(e,t)=>{const n={};for(const r in e)(!$r(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Bc(e,t,n){const{props:r,children:s,component:i}=e,{props:o,children:l,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return r?Ls(r,o,f):!!o;if(c&8){const a=t.dynamicProps;for(let h=0;he.__isSuspense;function bo(e,t){t&&t.pendingBranch?K(e)?t.effects.push(...e):t.effects.push(e):Yl(e)}const Se=Symbol.for("v-fgt"),mt=Symbol.for("v-txt"),ye=Symbol.for("v-cmt"),Ut=Symbol.for("v-stc"),kt=[];let Ae=null;function Pr(e=!1){kt.push(Ae=e?null:[])}function Kc(){kt.pop(),Ae=kt[kt.length-1]||null}let Xt=1;function Ns(e){Xt+=e,e<0&&Ae&&(Ae.hasOnce=!0)}function _o(e){return e.dynamicChildren=Xt>0?Ae||Tt:null,Kc(),Xt>0&&Ae&&Ae.push(e),e}function kf(e,t,n,r,s,i){return _o(So(e,t,n,r,s,i,!0))}function Ir(e,t,n,r,s){return _o(le(e,t,n,r,s,!0))}function Ln(e){return e?e.__v_isVNode===!0:!1}function dt(e,t){return e.type===t.type&&e.key===t.key}const wo=({key:e})=>e??null,Tn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?se(e)||ae(e)||q(e)?{i:de,r:e,k:t,f:!!n}:e:null);function So(e,t=null,n=null,r=0,s=null,i=e===Se?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&wo(t),ref:t&&Tn(t),scopeId:Vi,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:de};return l?(is(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=se(n)?8:16),Xt>0&&!o&&Ae&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Ae.push(c),c}const le=qc;function qc(e,t=null,n=null,r=0,s=null,i=!1){if((!e||e===Qi)&&(e=ye),Ln(e)){const l=nt(e,t,!0);return n&&is(l,n),Xt>0&&!i&&Ae&&(l.shapeFlag&6?Ae[Ae.indexOf(e)]=l:Ae.push(l)),l.patchFlag=-2,l}if(na(e)&&(e=e.__vccOpts),t){t=Gc(t);let{class:l,style:c}=t;l&&!se(l)&&(t.class=Ur(l)),ne(c)&&(Yr(c)&&!K(c)&&(c=fe({},c)),t.style=Vr(c))}const o=se(e)?1:vo(e)?128:ki(e)?64:ne(e)?4:q(e)?2:0;return So(e,t,n,r,s,o,i,!0)}function Gc(e){return e?Yr(e)||io(e)?fe({},e):e:null}function nt(e,t,n=!1,r=!1){const{props:s,ref:i,patchFlag:o,children:l,transition:c}=e,f=t?Yc(s||{},t):s,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&wo(f),ref:t&&t.ref?n&&i?K(i)?i.concat(Tn(t)):[i,Tn(t)]:Tn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Se?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&nt(e.ssContent),ssFallback:e.ssFallback&&nt(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&r&&Jt(a,c.clone(a)),a}function Eo(e=" ",t=0){return le(mt,null,e,t)}function Bf(e,t){const n=le(Ut,null,e);return n.staticCount=t,n}function Wf(e="",t=!1){return t?(Pr(),Ir(ye,null,e)):le(ye,null,e)}function Me(e){return e==null||typeof e=="boolean"?le(ye):K(e)?le(Se,null,e.slice()):typeof e=="object"?et(e):le(mt,null,String(e))}function et(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:nt(e)}function is(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(K(t))n=16;else if(typeof t=="object")if(r&65){const s=t.default;s&&(s._c&&(s._d=!1),is(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!io(t)?t._ctx=de:s===3&&de&&(de.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else q(t)?(t={default:t,_ctx:de},n=32):(t=String(t),r&64?(n=16,t=[Eo(t)]):n=8);e.children=t,e.shapeFlag|=n}function Yc(...e){const t={};for(let n=0;nue||de;let Nn,Lr;{const e=gi(),t=(n,r)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(r),i=>{s.length>1?s.forEach(o=>o(i)):s[0](i)}};Nn=t("__VUE_INSTANCE_SETTERS__",n=>ue=n),Lr=t("__VUE_SSR_SETTERS__",n=>sn=n)}const rn=e=>{const t=ue;return Nn(e),e.scope.on(),()=>{e.scope.off(),Nn(t)}},Fs=()=>{ue&&ue.scope.off(),Nn(null)};function xo(e){return e.vnode.shapeFlag&4}let sn=!1;function Qc(e,t=!1,n=!1){t&&Lr(t);const{props:r,children:s}=e.vnode,i=xo(e);Ac(e,r,i,t),Pc(e,s,n);const o=i?Zc(e,t):void 0;return t&&Lr(!1),o}function Zc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,yc);const{setup:r}=n;if(r){const s=e.setupContext=r.length>1?Co(e):null,i=rn(e);it();const o=en(r,e,0,[e.props,s]);if(ot(),i(),ui(o)){if(gt(e)||es(e),o.then(Fs,Fs),t)return o.then(l=>{Hs(e,l,t)}).catch(l=>{tn(l,e,0)});e.asyncDep=o}else Hs(e,o,t)}else To(e,t)}function Hs(e,t,n){q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ne(t)&&(e.setupState=Hi(t)),To(e,n)}let $s;function To(e,t,n){const r=e.type;if(!e.render){if(!t&&$s&&!r.render){const s=r.template||ts(e).template;if(s){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:c}=r,f=fe(fe({isCustomElement:i,delimiters:l},o),c);r.render=$s(s,f)}}e.render=r.render||Ue}{const s=rn(e);it();try{bc(e)}finally{ot(),s()}}}const ea={get(e,t){return ve(e,"get",""),e[t]}};function Co(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,ea),slots:e.slots,emit:e.emit,expose:t}}function Jn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Hi(En(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Vt)return Vt[n](e)},has(t,n){return n in t||n in Vt}})):e.proxy}function ta(e,t=!0){return q(e)?e.displayName||e.name:e.name||t&&e.__name}function na(e){return q(e)&&"__vccOpts"in e}const ie=(e,t)=>Bl(e,t,sn);function Nr(e,t,n){const r=arguments.length;return r===2?ne(t)&&!K(t)?Ln(t)?le(e,null,[t]):le(e,t):le(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Ln(n)&&(n=[n]),le(e,t,n))}const ra="3.5.8";/** -* @vue/runtime-dom v3.5.8 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let Fr;const Ds=typeof window<"u"&&window.trustedTypes;if(Ds)try{Fr=Ds.createPolicy("vue",{createHTML:e=>e})}catch{}const Ao=Fr?e=>Fr.createHTML(e):e=>e,sa="http://www.w3.org/2000/svg",ia="http://www.w3.org/1998/Math/MathML",Ke=typeof document<"u"?document:null,js=Ke&&Ke.createElement("template"),oa={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const s=t==="svg"?Ke.createElementNS(sa,e):t==="mathml"?Ke.createElementNS(ia,e):n?Ke.createElement(e,{is:n}):Ke.createElement(e);return e==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:e=>Ke.createTextNode(e),createComment:e=>Ke.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ke.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,s,i){const o=n?n.previousSibling:t.lastChild;if(s&&(s===i||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===i||!(s=s.nextSibling)););else{js.innerHTML=Ao(r==="svg"?`${e}`:r==="mathml"?`${e}`:e);const l=js.content;if(r==="svg"||r==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Xe="transition",Ht="animation",zt=Symbol("_vtc"),Ro={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},la=fe({},Wi,Ro),ca=e=>(e.displayName="Transition",e.props=la,e),Kf=ca((e,{slots:t})=>Nr(tc,aa(e),t)),at=(e,t=[])=>{K(e)?e.forEach(n=>n(...t)):e&&e(...t)},Vs=e=>e?K(e)?e.some(t=>t.length>1):e.length>1:!1;function aa(e){const t={};for(const x in e)x in Ro||(t[x]=e[x]);if(e.css===!1)return t;const{name:n="v",type:r,duration:s,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:f=o,appearToClass:a=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:g=`${n}-leave-active`,leaveToClass:v=`${n}-leave-to`}=e,_=fa(s),S=_&&_[0],U=_&&_[1],{onBeforeEnter:N,onEnter:k,onEnterCancelled:p,onLeave:m,onLeaveCancelled:M,onBeforeAppear:F=N,onAppear:$=k,onAppearCancelled:j=p}=t,R=(x,W,re)=>{ft(x,W?a:l),ft(x,W?f:o),re&&re()},b=(x,W)=>{x._isLeaving=!1,ft(x,h),ft(x,v),ft(x,g),W&&W()},L=x=>(W,re)=>{const ce=x?$:k,V=()=>R(W,x,re);at(ce,[W,V]),Us(()=>{ft(W,x?c:i),ze(W,x?a:l),Vs(ce)||ks(W,r,S,V)})};return fe(t,{onBeforeEnter(x){at(N,[x]),ze(x,i),ze(x,o)},onBeforeAppear(x){at(F,[x]),ze(x,c),ze(x,f)},onEnter:L(!1),onAppear:L(!0),onLeave(x,W){x._isLeaving=!0;const re=()=>b(x,W);ze(x,h),ze(x,g),ha(),Us(()=>{x._isLeaving&&(ft(x,h),ze(x,v),Vs(m)||ks(x,r,U,re))}),at(m,[x,re])},onEnterCancelled(x){R(x,!1),at(p,[x])},onAppearCancelled(x){R(x,!0),at(j,[x])},onLeaveCancelled(x){b(x),at(M,[x])}})}function fa(e){if(e==null)return null;if(ne(e))return[cr(e.enter),cr(e.leave)];{const t=cr(e);return[t,t]}}function cr(e){return tl(e)}function ze(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[zt]||(e[zt]=new Set)).add(t)}function ft(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[zt];n&&(n.delete(t),n.size||(e[zt]=void 0))}function Us(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let ua=0;function ks(e,t,n,r){const s=e._endId=++ua,i=()=>{s===e._endId&&r()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=da(e,t);if(!o)return r();const f=o+"end";let a=0;const h=()=>{e.removeEventListener(f,g),i()},g=v=>{v.target===e&&++a>=c&&h()};setTimeout(()=>{a(n[_]||"").split(", "),s=r(`${Xe}Delay`),i=r(`${Xe}Duration`),o=Bs(s,i),l=r(`${Ht}Delay`),c=r(`${Ht}Duration`),f=Bs(l,c);let a=null,h=0,g=0;t===Xe?o>0&&(a=Xe,h=o,g=i.length):t===Ht?f>0&&(a=Ht,h=f,g=c.length):(h=Math.max(o,f),a=h>0?o>f?Xe:Ht:null,g=a?a===Xe?i.length:c.length:0);const v=a===Xe&&/\b(transform|all)(,|$)/.test(r(`${Xe}Property`).toString());return{type:a,timeout:h,propCount:g,hasTransform:v}}function Bs(e,t){for(;e.lengthWs(n)+Ws(e[r])))}function Ws(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function ha(){return document.body.offsetHeight}function pa(e,t,n){const r=e[zt];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Ks=Symbol("_vod"),ga=Symbol("_vsh"),ma=Symbol(""),ya=/(^|;)\s*display\s*:/;function va(e,t,n){const r=e.style,s=se(n);let i=!1;if(n&&!s){if(t)if(se(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&Cn(r,l,"")}else for(const o in t)n[o]==null&&Cn(r,o,"");for(const o in n)o==="display"&&(i=!0),Cn(r,o,n[o])}else if(s){if(t!==n){const o=r[ma];o&&(n+=";"+o),r.cssText=n,i=ya.test(n)}}else t&&e.removeAttribute("style");Ks in e&&(e[Ks]=i?r.display:"",e[ga]&&(r.display="none"))}const qs=/\s*!important$/;function Cn(e,t,n){if(K(n))n.forEach(r=>Cn(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=ba(e,t);qs.test(n)?e.setProperty(st(r),n.replace(qs,""),"important"):e[r]=n}}const Gs=["Webkit","Moz","ms"],ar={};function ba(e,t){const n=ar[t];if(n)return n;let r=Ne(t);if(r!=="filter"&&r in e)return ar[t]=r;r=$n(r);for(let s=0;sfr||(xa.then(()=>fr=0),fr=Date.now());function Ca(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;Fe(Aa(r,n.value),t,5,[r])};return n.value=e,n.attached=Ta(),n}function Aa(e,t){if(K(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>s=>!s._stopped&&r&&r(s))}else return t}const Qs=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ra=(e,t,n,r,s,i)=>{const o=s==="svg";t==="class"?pa(e,r,o):t==="style"?va(e,n,r):Zt(t)?$r(t)||Sa(e,t,n,r,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Oa(e,t,r,o))?(_a(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Js(e,t,r,o,i,t!=="value")):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Js(e,t,r,o))};function Oa(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&Qs(t)&&q(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const s=e.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return Qs(t)&&se(n)?!1:!!(t in e||e._isVueCE&&(/[A-Z]/.test(t)||!se(n)))}const Zs=e=>{const t=e.props["onUpdate:modelValue"]||!1;return K(t)?n=>Sn(t,n):t};function Ma(e){e.target.composing=!0}function ei(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const ur=Symbol("_assign"),qf={created(e,{modifiers:{lazy:t,trim:n,number:r}},s){e[ur]=Zs(s);const i=r||s.props&&s.props.type==="number";Et(e,t?"change":"input",o=>{if(o.target.composing)return;let l=e.value;n&&(l=l.trim()),i&&(l=wr(l)),e[ur](l)}),n&&Et(e,"change",()=>{e.value=e.value.trim()}),t||(Et(e,"compositionstart",Ma),Et(e,"compositionend",ei),Et(e,"change",ei))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:s,number:i}},o){if(e[ur]=Zs(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?wr(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(r&&t===n||s&&e.value.trim()===c)||(e.value=c))}},Pa=["ctrl","shift","alt","meta"],Ia={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Pa.some(n=>e[`${n}Key`]&&!t.includes(n))},Gf=(e,t)=>{const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=(s,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=s=>{if(!("key"in s))return;const i=st(s.key);if(t.some(o=>o===i||La[o]===i))return e(s)})},Oo=fe({patchProp:Ra},oa);let Bt,ti=!1;function Na(){return Bt||(Bt=Lc(Oo))}function Fa(){return Bt=ti?Bt:Nc(Oo),ti=!0,Bt}const Jf=(...e)=>{const t=Na().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=Po(r);if(!s)return;const i=t._component;!q(i)&&!i.render&&!i.template&&(i.template=s.innerHTML),s.nodeType===1&&(s.textContent="");const o=n(s,!1,Mo(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),o},t},Xf=(...e)=>{const t=Fa().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=Po(r);if(s)return n(s,!0,Mo(s))},t};function Mo(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Po(e){return se(e)?document.querySelector(e):e}const zf=(e,t)=>{const n=e.__vccOpts||e;for(const[r,s]of t)n[r]=s;return n},Ha=window.__VP_SITE_DATA__;function os(e){return bi()?(fl(e),!0):!1}function Be(e){return typeof e=="function"?e():Fi(e)}const Io=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Qf=e=>e!=null,$a=Object.prototype.toString,Da=e=>$a.call(e)==="[object Object]",Qt=()=>{},ni=ja();function ja(){var e,t;return Io&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function Va(e,t){function n(...r){return new Promise((s,i)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(s).catch(i)})}return n}const Lo=e=>e();function Ua(e,t={}){let n,r,s=Qt;const i=l=>{clearTimeout(l),s(),s=Qt};return l=>{const c=Be(e),f=Be(t.maxWait);return n&&i(n),c<=0||f!==void 0&&f<=0?(r&&(i(r),r=null),Promise.resolve(l())):new Promise((a,h)=>{s=t.rejectOnCancel?h:a,f&&!r&&(r=setTimeout(()=>{n&&i(n),r=null,a(l())},f)),n=setTimeout(()=>{r&&i(r),r=null,a(l())},c)})}}function ka(e=Lo){const t=oe(!0);function n(){t.value=!1}function r(){t.value=!0}const s=(...i)=>{t.value&&e(...i)};return{isActive:kn(t),pause:n,resume:r,eventFilter:s}}function Ba(e){return Yn()}function No(...e){if(e.length!==1)return Vl(...e);const t=e[0];return typeof t=="function"?kn($l(()=>({get:t,set:Qt}))):oe(t)}function Fo(e,t,n={}){const{eventFilter:r=Lo,...s}=n;return ke(e,Va(r,t),s)}function Wa(e,t,n={}){const{eventFilter:r,...s}=n,{eventFilter:i,pause:o,resume:l,isActive:c}=ka(r);return{stop:Fo(e,t,{...s,eventFilter:i}),pause:o,resume:l,isActive:c}}function ls(e,t=!0,n){Ba()?It(e,n):t?e():Bn(e)}function Zf(e,t,n={}){const{debounce:r=0,maxWait:s=void 0,...i}=n;return Fo(e,t,{...i,eventFilter:Ua(r,{maxWait:s})})}function eu(e,t,n){let r;ae(n)?r={evaluating:n}:r={};const{lazy:s=!1,evaluating:i=void 0,shallow:o=!0,onError:l=Qt}=r,c=oe(!s),f=o?Xr(t):oe(t);let a=0;return ss(async h=>{if(!c.value)return;a++;const g=a;let v=!1;i&&Promise.resolve().then(()=>{i.value=!0});try{const _=await e(S=>{h(()=>{i&&(i.value=!1),v||S()})});g===a&&(f.value=_)}catch(_){l(_)}finally{i&&g===a&&(i.value=!1),v=!0}}),s?ie(()=>(c.value=!0,f.value)):f}const He=Io?window:void 0;function Ho(e){var t;const n=Be(e);return(t=n==null?void 0:n.$el)!=null?t:n}function Pt(...e){let t,n,r,s;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,s]=e,t=He):[t,n,r,s]=e,!t)return Qt;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const i=[],o=()=>{i.forEach(a=>a()),i.length=0},l=(a,h,g,v)=>(a.addEventListener(h,g,v),()=>a.removeEventListener(h,g,v)),c=ke(()=>[Ho(t),Be(s)],([a,h])=>{if(o(),!a)return;const g=Da(h)?{...h}:h;i.push(...n.flatMap(v=>r.map(_=>l(a,v,_,g))))},{immediate:!0,flush:"post"}),f=()=>{c(),o()};return os(f),f}function Ka(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function tu(...e){let t,n,r={};e.length===3?(t=e[0],n=e[1],r=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],r=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:s=He,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=r,c=Ka(t);return Pt(s,i,a=>{a.repeat&&Be(l)||c(a)&&n(a)},o)}function qa(){const e=oe(!1),t=Yn();return t&&It(()=>{e.value=!0},t),e}function Ga(e){const t=qa();return ie(()=>(t.value,!!e()))}function $o(e,t={}){const{window:n=He}=t,r=Ga(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let s;const i=oe(!1),o=f=>{i.value=f.matches},l=()=>{s&&("removeEventListener"in s?s.removeEventListener("change",o):s.removeListener(o))},c=ss(()=>{r.value&&(l(),s=n.matchMedia(Be(e)),"addEventListener"in s?s.addEventListener("change",o):s.addListener(o),i.value=s.matches)});return os(()=>{c(),l(),s=void 0}),i}const vn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},bn="__vueuse_ssr_handlers__",Ya=Ja();function Ja(){return bn in vn||(vn[bn]=vn[bn]||{}),vn[bn]}function Do(e,t){return Ya[e]||t}function jo(e){return $o("(prefers-color-scheme: dark)",e)}function Xa(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const za={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},ri="vueuse-storage";function cs(e,t,n,r={}){var s;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:f=!1,shallow:a,window:h=He,eventFilter:g,onError:v=b=>{console.error(b)},initOnMounted:_}=r,S=(a?Xr:oe)(typeof t=="function"?t():t);if(!n)try{n=Do("getDefaultStorage",()=>{var b;return(b=He)==null?void 0:b.localStorage})()}catch(b){v(b)}if(!n)return S;const U=Be(t),N=Xa(U),k=(s=r.serializer)!=null?s:za[N],{pause:p,resume:m}=Wa(S,()=>F(S.value),{flush:i,deep:o,eventFilter:g});h&&l&&ls(()=>{n instanceof Storage?Pt(h,"storage",j):Pt(h,ri,R),_&&j()}),_||j();function M(b,L){if(h){const x={key:e,oldValue:b,newValue:L,storageArea:n};h.dispatchEvent(n instanceof Storage?new StorageEvent("storage",x):new CustomEvent(ri,{detail:x}))}}function F(b){try{const L=n.getItem(e);if(b==null)M(L,null),n.removeItem(e);else{const x=k.write(b);L!==x&&(n.setItem(e,x),M(L,x))}}catch(L){v(L)}}function $(b){const L=b?b.newValue:n.getItem(e);if(L==null)return c&&U!=null&&n.setItem(e,k.write(U)),U;if(!b&&f){const x=k.read(L);return typeof f=="function"?f(x,U):N==="object"&&!Array.isArray(x)?{...U,...x}:x}else return typeof L!="string"?L:k.read(L)}function j(b){if(!(b&&b.storageArea!==n)){if(b&&b.key==null){S.value=U;return}if(!(b&&b.key!==e)){p();try{(b==null?void 0:b.newValue)!==k.write(S.value)&&(S.value=$(b))}catch(L){v(L)}finally{b?Bn(m):m()}}}}function R(b){j(b.detail)}return S}const Qa="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function Za(e={}){const{selector:t="html",attribute:n="class",initialValue:r="auto",window:s=He,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:f,disableTransition:a=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},g=jo({window:s}),v=ie(()=>g.value?"dark":"light"),_=c||(o==null?No(r):cs(o,r,i,{window:s,listenToStorageChanges:l})),S=ie(()=>_.value==="auto"?v.value:_.value),U=Do("updateHTMLAttrs",(m,M,F)=>{const $=typeof m=="string"?s==null?void 0:s.document.querySelector(m):Ho(m);if(!$)return;const j=new Set,R=new Set;let b=null;if(M==="class"){const x=F.split(/\s/g);Object.values(h).flatMap(W=>(W||"").split(/\s/g)).filter(Boolean).forEach(W=>{x.includes(W)?j.add(W):R.add(W)})}else b={key:M,value:F};if(j.size===0&&R.size===0&&b===null)return;let L;a&&(L=s.document.createElement("style"),L.appendChild(document.createTextNode(Qa)),s.document.head.appendChild(L));for(const x of j)$.classList.add(x);for(const x of R)$.classList.remove(x);b&&$.setAttribute(b.key,b.value),a&&(s.getComputedStyle(L).opacity,document.head.removeChild(L))});function N(m){var M;U(t,n,(M=h[m])!=null?M:m)}function k(m){e.onChanged?e.onChanged(m,N):N(m)}ke(S,k,{flush:"post",immediate:!0}),ls(()=>k(S.value));const p=ie({get(){return f?_.value:S.value},set(m){_.value=m}});try{return Object.assign(p,{store:_,system:v,state:S})}catch{return p}}function ef(e={}){const{valueDark:t="dark",valueLight:n="",window:r=He}=e,s=Za({...e,onChanged:(l,c)=>{var f;e.onChanged?(f=e.onChanged)==null||f.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),i=ie(()=>s.system?s.system.value:jo({window:r}).value?"dark":"light");return ie({get(){return s.value==="dark"},set(l){const c=l?"dark":"light";i.value===c?s.value="auto":s.value=c}})}function dr(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function nu(e,t,n={}){const{window:r=He}=n;return cs(e,t,r==null?void 0:r.localStorage,n)}function Vo(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const hr=new WeakMap;function ru(e,t=!1){const n=oe(t);let r=null,s="";ke(No(e),l=>{const c=dr(Be(l));if(c){const f=c;if(hr.get(f)||hr.set(f,f.style.overflow),f.style.overflow!=="hidden"&&(s=f.style.overflow),f.style.overflow==="hidden")return n.value=!0;if(n.value)return f.style.overflow="hidden"}},{immediate:!0});const i=()=>{const l=dr(Be(e));!l||n.value||(ni&&(r=Pt(l,"touchmove",c=>{tf(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{const l=dr(Be(e));!l||!n.value||(ni&&(r==null||r()),l.style.overflow=s,hr.delete(l),n.value=!1)};return os(o),ie({get(){return n.value},set(l){l?i():o()}})}function su(e,t,n={}){const{window:r=He}=n;return cs(e,t,r==null?void 0:r.sessionStorage,n)}function iu(e={}){const{window:t=He,behavior:n="auto"}=e;if(!t)return{x:oe(0),y:oe(0)};const r=oe(t.scrollX),s=oe(t.scrollY),i=ie({get(){return r.value},set(l){scrollTo({left:l,behavior:n})}}),o=ie({get(){return s.value},set(l){scrollTo({top:l,behavior:n})}});return Pt(t,"scroll",()=>{r.value=t.scrollX,s.value=t.scrollY},{capture:!1,passive:!0}),{x:i,y:o}}function ou(e={}){const{window:t=He,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:s=!0,includeScrollbar:i=!0,type:o="inner"}=e,l=oe(n),c=oe(r),f=()=>{t&&(o==="outer"?(l.value=t.outerWidth,c.value=t.outerHeight):i?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight))};if(f(),ls(f),Pt("resize",f,{passive:!0}),s){const a=$o("(orientation: portrait)");ke(a,()=>f())}return{width:l,height:c}}const pr={BASE_URL:"/JetReconstruction.jl/dev/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};var gr={};const Uo=/^(?:[a-z]+:|\/\/)/i,nf="vitepress-theme-appearance",rf=/#.*$/,sf=/[?#].*$/,of=/(?:(^|\/)index)?\.(?:md|html)$/,ge=typeof document<"u",ko={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function lf(e,t,n=!1){if(t===void 0)return!1;if(e=si(`/${e}`),n)return new RegExp(t).test(e);if(si(t)!==e)return!1;const r=t.match(rf);return r?(ge?location.hash:"")===r[0]:!0}function si(e){return decodeURI(e).replace(sf,"").replace(of,"$1")}function cf(e){return Uo.test(e)}function af(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!cf(n)&&lf(t,`/${n}/`,!0))||"root"}function ff(e,t){var r,s,i,o,l,c,f;const n=af(e,t);return Object.assign({},e,{localeIndex:n,lang:((r=e.locales[n])==null?void 0:r.lang)??e.lang,dir:((s=e.locales[n])==null?void 0:s.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:Wo(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(f=e.locales[n])==null?void 0:f.themeConfig}})}function Bo(e,t){const n=t.title||e.title,r=t.titleTemplate??e.titleTemplate;if(typeof r=="string"&&r.includes(":title"))return r.replace(/:title/g,n);const s=uf(e.title,r);return n===s.slice(3)?n:`${n}${s}`}function uf(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function df(e,t){const[n,r]=t;if(n!=="meta")return!1;const s=Object.entries(r)[0];return s==null?!1:e.some(([i,o])=>i===n&&o[s[0]]===s[1])}function Wo(e,t){return[...e.filter(n=>!df(t,n)),...t]}const hf=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,pf=/^[a-z]:/i;function ii(e){const t=pf.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(hf,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const mr=new Set;function gf(e){if(mr.size===0){const n=typeof process=="object"&&(gr==null?void 0:gr.VITE_EXTRA_EXTENSIONS)||(pr==null?void 0:pr.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(r=>mr.add(r))}const t=e.split(".").pop();return t==null||!mr.has(t.toLowerCase())}function lu(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const mf=Symbol(),yt=Xr(Ha);function cu(e){const t=ie(()=>ff(yt.value,e.data.relativePath)),n=t.value.appearance,r=n==="force-dark"?oe(!0):n?ef({storageKey:nf,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):oe(!1),s=oe(ge?location.hash:"");return ge&&window.addEventListener("hashchange",()=>{s.value=location.hash}),ke(()=>e.data,()=>{s.value=ge?location.hash:""}),{site:t,theme:ie(()=>t.value.themeConfig),page:ie(()=>e.data),frontmatter:ie(()=>e.data.frontmatter),params:ie(()=>e.data.params),lang:ie(()=>t.value.lang),dir:ie(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:ie(()=>t.value.localeIndex||"root"),title:ie(()=>Bo(t.value,e.data)),description:ie(()=>e.data.description||t.value.description),isDark:r,hash:ie(()=>s.value)}}function yf(){const e=Mt(mf);if(!e)throw new Error("vitepress data not properly injected in app");return e}function vf(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function oi(e){return Uo.test(e)||!e.startsWith("/")?e:vf(yt.value.base,e)}function bf(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),ge){const n="/JetReconstruction.jl/dev/";t=ii(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let r=__VP_HASH_MAP__[t.toLowerCase()];if(r||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",r=__VP_HASH_MAP__[t.toLowerCase()]),!r)return null;t=`${n}assets/${t}.${r}.js`}else t=`./${ii(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let An=[];function au(e){An.push(e),Kn(()=>{An=An.filter(t=>t!==e)})}function _f(){let e=yt.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=li(e,n);else if(Array.isArray(e))for(const r of e){const s=li(r,n);if(s){t=s;break}}return t}function li(e,t){const n=document.querySelector(e);if(!n)return 0;const r=n.getBoundingClientRect().bottom;return r<0?0:r+t}const wf=Symbol(),Ko="http://a.com",Sf=()=>({path:"/",component:null,data:ko});function fu(e,t){const n=Un(Sf()),r={route:n,go:s};async function s(l=ge?location.href:"/"){var c,f;l=yr(l),await((c=r.onBeforeRouteChange)==null?void 0:c.call(r,l))!==!1&&(ge&&l!==yr(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await o(l),await((f=r.onAfterRouteChanged)==null?void 0:f.call(r,l)))}let i=null;async function o(l,c=0,f=!1){var g;if(await((g=r.onBeforePageLoad)==null?void 0:g.call(r,l))===!1)return;const a=new URL(l,Ko),h=i=a.pathname;try{let v=await e(h);if(!v)throw new Error(`Page not found: ${h}`);if(i===h){i=null;const{default:_,__pageData:S}=v;if(!_)throw new Error(`Invalid route component: ${_}`);n.path=ge?h:oi(h),n.component=En(_),n.data=En(S),ge&&Bn(()=>{let U=yt.value.base+S.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!yt.value.cleanUrls&&!U.endsWith("/")&&(U+=".html"),U!==a.pathname&&(a.pathname=U,l=U+a.search+a.hash,history.replaceState({},"",l)),a.hash&&!c){let N=null;try{N=document.getElementById(decodeURIComponent(a.hash).slice(1))}catch(k){console.warn(k)}if(N){ci(N,a.hash);return}}window.scrollTo(0,c)})}}catch(v){if(!/fetch|Page not found/.test(v.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(v),!f)try{const _=await fetch(yt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await _.json(),await o(l,c,!0);return}catch{}if(i===h){i=null,n.path=ge?h:oi(h),n.component=t?En(t):null;const _=ge?h.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...ko,relativePath:_}}}}return ge&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const f=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(f==null)return;const{href:a,origin:h,pathname:g,hash:v,search:_}=new URL(f,c.baseURI),S=new URL(location.href);h===S.origin&&gf(g)&&(l.preventDefault(),g===S.pathname&&_===S.search?(v!==S.hash&&(history.pushState({},"",a),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:S.href,newURL:a}))),v?ci(c,v,c.classList.contains("header-anchor")):window.scrollTo(0,0)):s(a))},{capture:!0}),window.addEventListener("popstate",async l=>{var c;l.state!==null&&(await o(yr(location.href),l.state&&l.state.scrollPosition||0),(c=r.onAfterRouteChanged)==null||c.call(r,location.href))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),r}function Ef(){const e=Mt(wf);if(!e)throw new Error("useRouter() is called without provider.");return e}function qo(){return Ef().route}function ci(e,t,n=!1){let r=null;try{r=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(s){console.warn(s)}if(r){let s=function(){!n||Math.abs(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(r).paddingTop,10),o=window.scrollY+r.getBoundingClientRect().top-_f()+i;requestAnimationFrame(s)}}function yr(e){const t=new URL(e,Ko);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),yt.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const vr=()=>An.forEach(e=>e()),uu=Zr({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=qo(),{site:n}=yf();return()=>Nr(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?Nr(t.component,{onVnodeMounted:vr,onVnodeUpdated:vr,onVnodeUnmounted:vr}):"404 Page Not Found"])}}),xf="modulepreload",Tf=function(e){return"/JetReconstruction.jl/dev/"+e},ai={},du=function(t,n,r){let s=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));s=Promise.allSettled(n.map(c=>{if(c=Tf(c),c in ai)return;ai[c]=!0;const f=c.endsWith(".css"),a=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${a}`))return;const h=document.createElement("link");if(h.rel=f?"stylesheet":xf,f||(h.as="script"),h.crossOrigin="",h.href=c,l&&h.setAttribute("nonce",l),document.head.appendChild(h),f)return new Promise((g,v)=>{h.addEventListener("load",g),h.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return s.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},hu=Zr({setup(e,{slots:t}){const n=oe(!1);return It(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function pu(){ge&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const r=(n=t.parentElement)==null?void 0:n.parentElement;if(!r)return;const s=Array.from(r.querySelectorAll("input")).indexOf(t);if(s<0)return;const i=r.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(f=>f.classList.contains("active"));if(!o)return;const l=i.children[s];if(!l||o===l)return;o.classList.remove("active"),l.classList.add("active");const c=r==null?void 0:r.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function gu(){if(ge){const e=new WeakMap;window.addEventListener("click",t=>{var r;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const s=n.parentElement,i=(r=n.nextElementSibling)==null?void 0:r.nextElementSibling;if(!s||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(s.className),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(a=>a.remove());let f=c.textContent||"";o&&(f=f.replace(/^ *(\$|>) /gm,"").trim()),Cf(f).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const a=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,a)})}})}}async function Cf(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const r=document.getSelection(),s=r?r.rangeCount>0&&r.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),s&&(r.removeAllRanges(),r.addRange(s)),n&&n.focus()}}function mu(e,t){let n=!0,r=[];const s=i=>{if(n){n=!1,i.forEach(l=>{const c=br(l);for(const f of document.head.children)if(f.isEqualNode(c)){r.push(f);return}});return}const o=i.map(br);r.forEach((l,c)=>{const f=o.findIndex(a=>a==null?void 0:a.isEqualNode(l??null));f!==-1?delete o[f]:(l==null||l.remove(),delete r[c])}),o.forEach(l=>l&&document.head.appendChild(l)),r=[...r,...o].filter(Boolean)};ss(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],f=Bo(o,i);f!==document.title&&(document.title=f);const a=l||o.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==a&&h.setAttribute("content",a):br(["meta",{name:"description",content:a}]),s(Wo(o.head,Rf(c)))})}function br([e,t,n]){const r=document.createElement(e);for(const s in t)r.setAttribute(s,t[s]);return n&&(r.innerHTML=n),e==="script"&&!t.async&&(r.async=!1),r}function Af(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Rf(e){return e.filter(t=>!Af(t))}const _r=new Set,Go=()=>document.createElement("link"),Of=e=>{const t=Go();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Mf=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let _n;const Pf=ge&&(_n=Go())&&_n.relList&&_n.relList.supports&&_n.relList.supports("prefetch")?Of:Mf;function yu(){if(!ge||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const r=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!_r.has(c)){_r.add(c);const f=bf(c);f&&Pf(f)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):_r.add(l))})})};It(r);const s=qo();ke(()=>s.path,r),Kn(()=>{n&&n.disconnect()})}export{Xi as $,_f as A,Ff as B,$f as C,Xr as D,au as E,Se as F,le as G,Hf as H,Uo as I,qo as J,Yc as K,Mt as L,ou as M,Vr as N,tu as O,Bn as P,iu as Q,ge as R,kn as S,Kf as T,Nf as U,du as V,ru as W,Cc as X,Yf as Y,jf as Z,zf as _,Eo as a,Gf as a0,Vf as a1,Un as a2,Vl as a3,Nr as a4,Bf as a5,mu as a6,wf as a7,cu as a8,mf as a9,uu as aa,hu as ab,yt as ac,Xf as ad,fu as ae,bf as af,yu as ag,gu as ah,pu as ai,Be as aj,Ho as ak,Qf as al,os as am,eu as an,su as ao,nu as ap,Zf as aq,Ef as ar,Pt as as,If as at,qf as au,ae as av,Lf as aw,En as ax,Jf as ay,lu as az,Ir as b,kf as c,Zr as d,Wf as e,gf as f,oi as g,ie as h,cf as i,So as j,Fi as k,lf as l,$o as m,Ur as n,Pr as o,oe as p,ke as q,Df as r,ss as s,cl as t,yf as u,It as v,Jl as w,Kn as x,Uf as y,dc as z}; diff --git a/dev/assets/chunks/framework.BtBDBbTG.js b/dev/assets/chunks/framework.BtBDBbTG.js new file mode 100644 index 0000000..7715d60 --- /dev/null +++ b/dev/assets/chunks/framework.BtBDBbTG.js @@ -0,0 +1,18 @@ +/** +* @vue/shared v3.5.10 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function Hs(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Z={},Ct=[],Ue=()=>{},zo=()=>!1,Zt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),$s=e=>e.startsWith("onUpdate:"),fe=Object.assign,Ds=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Qo=Object.prototype.hasOwnProperty,z=(e,t)=>Qo.call(e,t),K=Array.isArray,At=e=>Fn(e)==="[object Map]",ui=e=>Fn(e)==="[object Set]",q=e=>typeof e=="function",re=e=>typeof e=="string",st=e=>typeof e=="symbol",ne=e=>e!==null&&typeof e=="object",di=e=>(ne(e)||q(e))&&q(e.then)&&q(e.catch),hi=Object.prototype.toString,Fn=e=>hi.call(e),Zo=e=>Fn(e).slice(8,-1),pi=e=>Fn(e)==="[object Object]",js=e=>re(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Rt=Hs(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Hn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},el=/-(\w)/g,Ie=Hn(e=>e.replace(el,(t,n)=>n?n.toUpperCase():"")),tl=/\B([A-Z])/g,rt=Hn(e=>e.replace(tl,"-$1").toLowerCase()),$n=Hn(e=>e.charAt(0).toUpperCase()+e.slice(1)),wn=Hn(e=>e?`on${$n(e)}`:""),tt=(e,t)=>!Object.is(e,t),Sn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},ws=e=>{const t=parseFloat(e);return isNaN(t)?e:t},nl=e=>{const t=re(e)?Number(e):NaN;return isNaN(t)?e:t};let hr;const mi=()=>hr||(hr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Vs(e){if(K(e)){const t={};for(let n=0;n{if(n){const s=n.split(rl);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Us(e){let t="";if(re(e))t=e;else if(K(e))for(let n=0;n!!(e&&e.__v_isRef===!0),al=e=>re(e)?e:e==null?"":K(e)||ne(e)&&(e.toString===hi||!q(e.toString))?vi(e)?al(e.value):JSON.stringify(e,bi,2):String(e),bi=(e,t)=>vi(t)?bi(e,t.value):At(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[Zn(s,i)+" =>"]=r,n),{})}:ui(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Zn(n))}:st(t)?Zn(t):ne(t)&&!K(t)&&!pi(t)?String(t):t,Zn=(e,t="")=>{var n;return st(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.10 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let _e;class fl{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=_e,!t&&_e&&(this.index=(_e.scopes||(_e.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0)return;let e;for(;xt;){let t=xt,n;for(;t;)t.flags&1||(t.flags&=-9),t=t.next;for(t=xt,xt=void 0;t;){if(n=t.next,t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function xi(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Ti(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),Ws(s),dl(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Ss(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ci(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ci(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Wt))return;e.globalVersion=Wt;const t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&e.deps&&!Ss(e)){e.flags&=-3;return}const n=te,s=Ne;te=e,Ne=!0;try{xi(e);const r=e.fn(e._value);(t.version===0||tt(r,e._value))&&(e._value=r,t.version++)}catch(r){throw t.version++,r}finally{te=n,Ne=s,Ti(e),e.flags&=-3}}function Ws(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s),!n.subs&&n.computed){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Ws(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function dl(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Ne=!0;const Ai=[];function it(){Ai.push(Ne),Ne=!1}function ot(){const e=Ai.pop();Ne=e===void 0?!0:e}function pr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=te;te=void 0;try{t()}finally{te=n}}}let Wt=0;class hl{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Dn{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.target=void 0,this.map=void 0,this.key=void 0,this.sc=0}track(t){if(!te||!Ne||te===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==te)n=this.activeLink=new hl(te,this),te.deps?(n.prevDep=te.depsTail,te.depsTail.nextDep=n,te.depsTail=n):te.deps=te.depsTail=n,Ri(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=te.depsTail,n.nextDep=void 0,te.depsTail.nextDep=n,te.depsTail=n,te.deps===n&&(te.deps=s)}return n}trigger(t){this.version++,Wt++,this.notify(t)}notify(t){Bs();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{ks()}}}function Ri(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Ri(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Rn=new WeakMap,ht=Symbol(""),Es=Symbol(""),Kt=Symbol("");function ve(e,t,n){if(Ne&&te){let s=Rn.get(e);s||Rn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Dn),r.target=e,r.map=s,r.key=n),r.track()}}function Ge(e,t,n,s,r,i){const o=Rn.get(e);if(!o){Wt++;return}const l=c=>{c&&c.trigger()};if(Bs(),t==="clear")o.forEach(l);else{const c=K(e),f=c&&js(n);if(c&&n==="length"){const a=Number(s);o.forEach((h,g)=>{(g==="length"||g===Kt||!st(g)&&g>=a)&&l(h)})}else switch(n!==void 0&&l(o.get(n)),f&&l(o.get(Kt)),t){case"add":c?f&&l(o.get("length")):(l(o.get(ht)),At(e)&&l(o.get(Es)));break;case"delete":c||(l(o.get(ht)),At(e)&&l(o.get(Es)));break;case"set":At(e)&&l(o.get(ht));break}}ks()}function pl(e,t){const n=Rn.get(e);return n&&n.get(t)}function _t(e){const t=X(e);return t===e?t:(ve(t,"iterate",Kt),Pe(e)?t:t.map(me))}function jn(e){return ve(e=X(e),"iterate",Kt),e}const gl={__proto__:null,[Symbol.iterator](){return ts(this,Symbol.iterator,me)},concat(...e){return _t(this).concat(...e.map(t=>K(t)?_t(t):t))},entries(){return ts(this,"entries",e=>(e[1]=me(e[1]),e))},every(e,t){return We(this,"every",e,t,void 0,arguments)},filter(e,t){return We(this,"filter",e,t,n=>n.map(me),arguments)},find(e,t){return We(this,"find",e,t,me,arguments)},findIndex(e,t){return We(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return We(this,"findLast",e,t,me,arguments)},findLastIndex(e,t){return We(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return We(this,"forEach",e,t,void 0,arguments)},includes(...e){return ns(this,"includes",e)},indexOf(...e){return ns(this,"indexOf",e)},join(e){return _t(this).join(e)},lastIndexOf(...e){return ns(this,"lastIndexOf",e)},map(e,t){return We(this,"map",e,t,void 0,arguments)},pop(){return Ht(this,"pop")},push(...e){return Ht(this,"push",e)},reduce(e,...t){return gr(this,"reduce",e,t)},reduceRight(e,...t){return gr(this,"reduceRight",e,t)},shift(){return Ht(this,"shift")},some(e,t){return We(this,"some",e,t,void 0,arguments)},splice(...e){return Ht(this,"splice",e)},toReversed(){return _t(this).toReversed()},toSorted(e){return _t(this).toSorted(e)},toSpliced(...e){return _t(this).toSpliced(...e)},unshift(...e){return Ht(this,"unshift",e)},values(){return ts(this,"values",me)}};function ts(e,t,n){const s=jn(e),r=s[t]();return s!==e&&!Pe(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.value&&(i.value=n(i.value)),i}),r}const ml=Array.prototype;function We(e,t,n,s,r,i){const o=jn(e),l=o!==e&&!Pe(e),c=o[t];if(c!==ml[t]){const h=c.apply(e,i);return l?me(h):h}let f=n;o!==e&&(l?f=function(h,g){return n.call(this,me(h),g,e)}:n.length>2&&(f=function(h,g){return n.call(this,h,g,e)}));const a=c.call(o,f,s);return l&&r?r(a):a}function gr(e,t,n,s){const r=jn(e);let i=n;return r!==e&&(Pe(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,me(l),c,e)}),r[t](i,...s)}function ns(e,t,n){const s=X(e);ve(s,"iterate",Kt);const r=s[t](...n);return(r===-1||r===!1)&&Ys(n[0])?(n[0]=X(n[0]),s[t](...n)):r}function Ht(e,t,n=[]){it(),Bs();const s=X(e)[t].apply(e,n);return ks(),ot(),s}const yl=Hs("__proto__,__v_isRef,__isVue"),Oi=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(st));function vl(e){st(e)||(e=String(e));const t=X(this);return ve(t,"has",e),t.hasOwnProperty(e)}class Mi{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Pl:Ni:i?Li:Ii).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=K(t);if(!r){let c;if(o&&(c=gl[n]))return c;if(n==="hasOwnProperty")return vl}const l=Reflect.get(t,n,ae(t)?t:s);return(st(n)?Oi.has(n):yl(n))||(r||ve(t,"get",n),i)?l:ae(l)?o&&js(n)?l:l.value:ne(l)?r?Bn(l):Un(l):l}}class Pi extends Mi{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=vt(i);if(!Pe(s)&&!vt(s)&&(i=X(i),s=X(s)),!K(t)&&ae(i)&&!ae(s))return c?!1:(i.value=s,!0)}const o=K(t)&&js(n)?Number(n)e,Vn=e=>Reflect.getPrototypeOf(e);function cn(e,t,n=!1,s=!1){e=e.__v_raw;const r=X(e),i=X(t);n||(tt(t,i)&&ve(r,"get",t),ve(r,"get",i));const{has:o}=Vn(r),l=s?Ks:n?Js:me;if(o.call(r,t))return l(e.get(t));if(o.call(r,i))return l(e.get(i));e!==r&&e.get(t)}function an(e,t=!1){const n=this.__v_raw,s=X(n),r=X(e);return t||(tt(e,r)&&ve(s,"has",e),ve(s,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function fn(e,t=!1){return e=e.__v_raw,!t&&ve(X(e),"iterate",ht),Reflect.get(e,"size",e)}function mr(e,t=!1){!t&&!Pe(e)&&!vt(e)&&(e=X(e));const n=X(this);return Vn(n).has.call(n,e)||(n.add(e),Ge(n,"add",e,e)),this}function yr(e,t,n=!1){!n&&!Pe(t)&&!vt(t)&&(t=X(t));const s=X(this),{has:r,get:i}=Vn(s);let o=r.call(s,e);o||(e=X(e),o=r.call(s,e));const l=i.call(s,e);return s.set(e,t),o?tt(t,l)&&Ge(s,"set",e,t):Ge(s,"add",e,t),this}function vr(e){const t=X(this),{has:n,get:s}=Vn(t);let r=n.call(t,e);r||(e=X(e),r=n.call(t,e)),s&&s.call(t,e);const i=t.delete(e);return r&&Ge(t,"delete",e,void 0),i}function br(){const e=X(this),t=e.size!==0,n=e.clear();return t&&Ge(e,"clear",void 0,void 0),n}function un(e,t){return function(s,r){const i=this,o=i.__v_raw,l=X(o),c=t?Ks:e?Js:me;return!e&&ve(l,"iterate",ht),o.forEach((f,a)=>s.call(r,c(f),c(a),i))}}function dn(e,t,n){return function(...s){const r=this.__v_raw,i=X(r),o=At(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,f=r[e](...s),a=n?Ks:t?Js:me;return!t&&ve(i,"iterate",c?Es:ht),{next(){const{value:h,done:g}=f.next();return g?{value:h,done:g}:{value:l?[a(h[0]),a(h[1])]:a(h),done:g}},[Symbol.iterator](){return this}}}}function Je(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function El(){const e={get(i){return cn(this,i)},get size(){return fn(this)},has:an,add:mr,set:yr,delete:vr,clear:br,forEach:un(!1,!1)},t={get(i){return cn(this,i,!1,!0)},get size(){return fn(this)},has:an,add(i){return mr.call(this,i,!0)},set(i,o){return yr.call(this,i,o,!0)},delete:vr,clear:br,forEach:un(!1,!0)},n={get(i){return cn(this,i,!0)},get size(){return fn(this,!0)},has(i){return an.call(this,i,!0)},add:Je("add"),set:Je("set"),delete:Je("delete"),clear:Je("clear"),forEach:un(!0,!1)},s={get(i){return cn(this,i,!0,!0)},get size(){return fn(this,!0)},has(i){return an.call(this,i,!0)},add:Je("add"),set:Je("set"),delete:Je("delete"),clear:Je("clear"),forEach:un(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=dn(i,!1,!1),n[i]=dn(i,!0,!1),t[i]=dn(i,!1,!0),s[i]=dn(i,!0,!0)}),[e,n,t,s]}const[xl,Tl,Cl,Al]=El();function qs(e,t){const n=t?e?Al:Cl:e?Tl:xl;return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(z(n,r)&&r in s?n:s,r,i)}const Rl={get:qs(!1,!1)},Ol={get:qs(!1,!0)},Ml={get:qs(!0,!1)};const Ii=new WeakMap,Li=new WeakMap,Ni=new WeakMap,Pl=new WeakMap;function Il(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Ll(e){return e.__v_skip||!Object.isExtensible(e)?0:Il(Zo(e))}function Un(e){return vt(e)?e:Gs(e,!1,_l,Rl,Ii)}function Nl(e){return Gs(e,!1,Sl,Ol,Li)}function Bn(e){return Gs(e,!0,wl,Ml,Ni)}function Gs(e,t,n,s,r){if(!ne(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=Ll(e);if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function pt(e){return vt(e)?pt(e.__v_raw):!!(e&&e.__v_isReactive)}function vt(e){return!!(e&&e.__v_isReadonly)}function Pe(e){return!!(e&&e.__v_isShallow)}function Ys(e){return e?!!e.__v_raw:!1}function X(e){const t=e&&e.__v_raw;return t?X(t):e}function En(e){return!z(e,"__v_skip")&&Object.isExtensible(e)&&gi(e,"__v_skip",!0),e}const me=e=>ne(e)?Un(e):e,Js=e=>ne(e)?Bn(e):e;function ae(e){return e?e.__v_isRef===!0:!1}function oe(e){return Fi(e,!1)}function Xs(e){return Fi(e,!0)}function Fi(e,t){return ae(e)?e:new Fl(e,t)}class Fl{constructor(t,n){this.dep=new Dn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:X(t),this._value=n?t:me(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Pe(t)||vt(t);t=s?t:X(t),tt(t,n)&&(this._rawValue=t,this._value=s?t:me(t),this.dep.trigger())}}function Hi(e){return ae(e)?e.value:e}const Hl={get:(e,t,n)=>t==="__v_raw"?e:Hi(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return ae(r)&&!ae(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function $i(e){return pt(e)?e:new Proxy(e,Hl)}class $l{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Dn,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function Dl(e){return new $l(e)}class jl{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return pl(X(this._object),this._key)}}class Vl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Ul(e,t,n){return ae(e)?e:q(e)?new Vl(e):ne(e)&&arguments.length>1?Bl(e,t,n):oe(e)}function Bl(e,t,n){const s=e[t];return ae(s)?s:new jl(e,t,n)}class kl{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Dn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Wt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&te!==this)return Ei(this),!0}get value(){const t=this.dep.track();return Ci(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Wl(e,t,n=!1){let s,r;return q(e)?s=e:(s=e.get,r=e.set),new kl(s,r,n)}const hn={},On=new WeakMap;let ut;function Kl(e,t=!1,n=ut){if(n){let s=On.get(n);s||On.set(n,s=[]),s.push(e)}}function ql(e,t,n=Z){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,f=m=>r?m:Pe(m)||r===!1||r===0?qe(m,1):qe(m);let a,h,g,v,_=!1,S=!1;if(ae(e)?(h=()=>e.value,_=Pe(e)):pt(e)?(h=()=>f(e),_=!0):K(e)?(S=!0,_=e.some(m=>pt(m)||Pe(m)),h=()=>e.map(m=>{if(ae(m))return m.value;if(pt(m))return f(m);if(q(m))return c?c(m,2):m()})):q(e)?t?h=c?()=>c(e,2):e:h=()=>{if(g){it();try{g()}finally{ot()}}const m=ut;ut=a;try{return c?c(e,3,[v]):e(v)}finally{ut=m}}:h=Ue,t&&r){const m=h,M=r===!0?1/0:r;h=()=>qe(m(),M)}const U=_i(),N=()=>{a.stop(),U&&Ds(U.effects,a)};if(i&&t){const m=t;t=(...M)=>{m(...M),N()}}let B=S?new Array(e.length).fill(hn):hn;const p=m=>{if(!(!(a.flags&1)||!a.dirty&&!m))if(t){const M=a.run();if(r||_||(S?M.some((F,$)=>tt(F,B[$])):tt(M,B))){g&&g();const F=ut;ut=a;try{const $=[M,B===hn?void 0:S&&B[0]===hn?[]:B,v];c?c(t,3,$):t(...$),B=M}finally{ut=F}}}else a.run()};return l&&l(p),a=new wi(h),a.scheduler=o?()=>o(p,!1):p,v=m=>Kl(m,!1,a),g=a.onStop=()=>{const m=On.get(a);if(m){if(c)c(m,4);else for(const M of m)M();On.delete(a)}},t?s?p(!0):B=a.run():o?o(p.bind(null,!0),!0):a.run(),N.pause=a.pause.bind(a),N.resume=a.resume.bind(a),N.stop=N,N}function qe(e,t=1/0,n){if(t<=0||!ne(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,ae(e))qe(e.value,t,n);else if(K(e))for(let s=0;s{qe(s,t,n)});else if(pi(e)){for(const s in e)qe(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&qe(e[s],t,n)}return e}/** +* @vue/runtime-core v3.5.10 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function en(e,t,n,s){try{return s?e(...s):e()}catch(r){tn(r,t,n)}}function Fe(e,t,n,s){if(q(e)){const r=en(e,t,n,s);return r&&di(r)&&r.catch(i=>{tn(i,t,n)}),r}if(K(e)){const r=[];for(let i=0;i>>1,r=we[s],i=Gt(r);i=Gt(n)?we.push(e):we.splice(Yl(t),0,e),e.flags|=1,ji()}}function ji(){!qt&&!xs&&(xs=!0,zs=Di.then(Vi))}function Jl(e){K(e)?Ot.push(...e):Qe&&e.id===-1?Qe.splice(St+1,0,e):e.flags&1||(Ot.push(e),e.flags|=1),ji()}function _r(e,t,n=qt?je+1:0){for(;nGt(n)-Gt(s));if(Ot.length=0,Qe){Qe.push(...t);return}for(Qe=t,St=0;Ste.id==null?e.flags&2?-1:1/0:e.id;function Vi(e){xs=!1,qt=!0;try{for(je=0;je{s._d&&Nr(-1);const i=Pn(t);let o;try{o=e(...r)}finally{Pn(i),s._d&&Nr(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function If(e,t){if(de===null)return e;const n=Jn(de),s=e.dirs||(e.dirs=[]);for(let r=0;re.__isTeleport,jt=e=>e&&(e.disabled||e.disabled===""),zl=e=>e&&(e.defer||e.defer===""),wr=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Sr=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Ts=(e,t)=>{const n=e&&e.to;return re(n)?t?t(n):null:n},Ql={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,i,o,l,c,f){const{mc:a,pc:h,pbc:g,o:{insert:v,querySelector:_,createText:S,createComment:U}}=f,N=jt(t.props);let{shapeFlag:B,children:p,dynamicChildren:m}=t;if(e==null){const M=t.el=S(""),F=t.anchor=S("");v(M,n,s),v(F,n,s);const $=(R,b)=>{B&16&&(r&&r.isCE&&(r.ce._teleportTarget=R),a(p,R,b,r,i,o,l,c))},j=()=>{const R=t.target=Ts(t.props,_),b=Wi(R,t,S,v);R&&(o!=="svg"&&wr(R)?o="svg":o!=="mathml"&&Sr(R)&&(o="mathml"),N||($(R,b),xn(t)))};N&&($(n,F),xn(t)),zl(t.props)?Ee(j,i):j()}else{t.el=e.el,t.targetStart=e.targetStart;const M=t.anchor=e.anchor,F=t.target=e.target,$=t.targetAnchor=e.targetAnchor,j=jt(e.props),R=j?n:F,b=j?M:$;if(o==="svg"||wr(F)?o="svg":(o==="mathml"||Sr(F))&&(o="mathml"),m?(g(e.dynamicChildren,m,R,r,i,o,l),sr(e,t,!0)):c||h(e,t,R,b,r,i,o,l,!1),N)j?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):pn(t,n,M,f,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const L=t.target=Ts(t.props,_);L&&pn(t,L,null,f,0)}else j&&pn(t,F,$,f,1);xn(t)}},remove(e,t,n,{um:s,o:{remove:r}},i){const{shapeFlag:o,children:l,anchor:c,targetStart:f,targetAnchor:a,target:h,props:g}=e;if(h&&(r(f),r(a)),i&&r(c),o&16){const v=i||!jt(g);for(let _=0;_{e.isMounted=!0}),zi(()=>{e.isUnmounting=!0}),e}const Re=[Function,Array],Ki={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Re,onEnter:Re,onAfterEnter:Re,onEnterCancelled:Re,onBeforeLeave:Re,onLeave:Re,onAfterLeave:Re,onLeaveCancelled:Re,onBeforeAppear:Re,onAppear:Re,onAfterAppear:Re,onAppearCancelled:Re},qi=e=>{const t=e.subTree;return t.component?qi(t.component):t},tc={name:"BaseTransition",props:Ki,setup(e,{slots:t}){const n=Yn(),s=ec();return()=>{const r=t.default&&Ji(t.default(),!0);if(!r||!r.length)return;const i=Gi(r),o=X(e),{mode:l}=o;if(s.isLeaving)return ss(i);const c=Er(i);if(!c)return ss(i);let f=Cs(c,o,s,n,g=>f=g);c.type!==ye&&Yt(c,f);const a=n.subTree,h=a&&Er(a);if(h&&h.type!==ye&&!dt(c,h)&&qi(n).type!==ye){const g=Cs(h,o,s,n);if(Yt(h,g),l==="out-in"&&c.type!==ye)return s.isLeaving=!0,g.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete g.afterLeave},ss(i);l==="in-out"&&c.type!==ye&&(g.delayLeave=(v,_,S)=>{const U=Yi(s,h);U[String(h.key)]=h,v[Ze]=()=>{_(),v[Ze]=void 0,delete f.delayedLeave},f.delayedLeave=S})}return i}}};function Gi(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==ye){t=n;break}}return t}const nc=tc;function Yi(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Cs(e,t,n,s,r){const{appear:i,mode:o,persisted:l=!1,onBeforeEnter:c,onEnter:f,onAfterEnter:a,onEnterCancelled:h,onBeforeLeave:g,onLeave:v,onAfterLeave:_,onLeaveCancelled:S,onBeforeAppear:U,onAppear:N,onAfterAppear:B,onAppearCancelled:p}=t,m=String(e.key),M=Yi(n,e),F=(R,b)=>{R&&Fe(R,s,9,b)},$=(R,b)=>{const L=b[1];F(R,b),K(R)?R.every(x=>x.length<=1)&&L():R.length<=1&&L()},j={mode:o,persisted:l,beforeEnter(R){let b=c;if(!n.isMounted)if(i)b=U||c;else return;R[Ze]&&R[Ze](!0);const L=M[m];L&&dt(e,L)&&L.el[Ze]&&L.el[Ze](),F(b,[R])},enter(R){let b=f,L=a,x=h;if(!n.isMounted)if(i)b=N||f,L=B||a,x=p||h;else return;let W=!1;const se=R[gn]=ce=>{W||(W=!0,ce?F(x,[R]):F(L,[R]),j.delayedLeave&&j.delayedLeave(),R[gn]=void 0)};b?$(b,[R,se]):se()},leave(R,b){const L=String(e.key);if(R[gn]&&R[gn](!0),n.isUnmounting)return b();F(g,[R]);let x=!1;const W=R[Ze]=se=>{x||(x=!0,b(),se?F(S,[R]):F(_,[R]),R[Ze]=void 0,M[L]===e&&delete M[L])};M[L]=e,v?$(v,[R,W]):W()},clone(R){const b=Cs(R,t,n,s,r);return r&&r(b),b}};return j}function ss(e){if(nn(e))return e=nt(e),e.children=null,e}function Er(e){if(!nn(e))return ki(e.type)&&e.children?Gi(e.children):e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&q(n.default))return n.default()}}function Yt(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Yt(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Ji(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;iIn(_,t&&(K(t)?t[S]:t),n,s,r));return}if(gt(s)&&!r)return;const i=s.shapeFlag&4?Jn(s.component):s.el,o=r?null:i,{i:l,r:c}=e,f=t&&t.r,a=l.refs===Z?l.refs={}:l.refs,h=l.setupState,g=X(h),v=h===Z?()=>!1:_=>z(g,_);if(f!=null&&f!==c&&(re(f)?(a[f]=null,v(f)&&(h[f]=null)):ae(f)&&(f.value=null)),q(c))en(c,l,12,[o,a]);else{const _=re(c),S=ae(c);if(_||S){const U=()=>{if(e.f){const N=_?v(c)?h[c]:a[c]:c.value;r?K(N)&&Ds(N,i):K(N)?N.includes(i)||N.push(i):_?(a[c]=[i],v(c)&&(h[c]=a[c])):(c.value=[i],e.k&&(a[e.k]=c.value))}else _?(a[c]=o,v(c)&&(h[c]=o)):S&&(c.value=o,e.k&&(a[e.k]=o))};o?(U.id=-1,Ee(U,n)):U()}}}let xr=!1;const wt=()=>{xr||(console.error("Hydration completed but contains mismatches."),xr=!0)},sc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",rc=e=>e.namespaceURI.includes("MathML"),mn=e=>{if(e.nodeType===1){if(sc(e))return"svg";if(rc(e))return"mathml"}},Tt=e=>e.nodeType===8;function ic(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:f}}=e,a=(p,m)=>{if(!m.hasChildNodes()){n(null,p,m),Mn(),m._vnode=p;return}h(m.firstChild,p,null,null,null),Mn(),m._vnode=p},h=(p,m,M,F,$,j=!1)=>{j=j||!!m.dynamicChildren;const R=Tt(p)&&p.data==="[",b=()=>S(p,m,M,F,$,R),{type:L,ref:x,shapeFlag:W,patchFlag:se}=m;let ce=p.nodeType;m.el=p,se===-2&&(j=!1,m.dynamicChildren=null);let V=null;switch(L){case mt:ce!==3?m.children===""?(c(m.el=r(""),o(p),p),V=p):V=b():(p.data!==m.children&&(wt(),p.data=m.children),V=i(p));break;case ye:B(p)?(V=i(p),N(m.el=p.content.firstChild,p,M)):ce!==8||R?V=b():V=i(p);break;case Ut:if(R&&(p=i(p),ce=p.nodeType),ce===1||ce===3){V=p;const Y=!m.children.length;for(let D=0;D{j=j||!!m.dynamicChildren;const{type:R,props:b,patchFlag:L,shapeFlag:x,dirs:W,transition:se}=m,ce=R==="input"||R==="option";if(ce||L!==-1){W&&Ve(m,null,M,"created");let V=!1;if(B(p)){V=go(F,se)&&M&&M.vnode.props&&M.vnode.props.appear;const D=p.content.firstChild;V&&se.beforeEnter(D),N(D,p,M),m.el=p=D}if(x&16&&!(b&&(b.innerHTML||b.textContent))){let D=v(p.firstChild,m,p,M,F,$,j);for(;D;){yn(p,1)||wt();const he=D;D=D.nextSibling,l(he)}}else if(x&8){let D=m.children;D[0]===` +`&&(p.tagName==="PRE"||p.tagName==="TEXTAREA")&&(D=D.slice(1)),p.textContent!==D&&(yn(p,0)||wt(),p.textContent=m.children)}if(b){if(ce||!j||L&48){const D=p.tagName.includes("-");for(const he in b)(ce&&(he.endsWith("value")||he==="indeterminate")||Zt(he)&&!Rt(he)||he[0]==="."||D)&&s(p,he,null,b[he],void 0,M)}else if(b.onClick)s(p,"onClick",null,b.onClick,void 0,M);else if(L&4&&pt(b.style))for(const D in b.style)b.style[D]}let Y;(Y=b&&b.onVnodeBeforeMount)&&Oe(Y,M,m),W&&Ve(m,null,M,"beforeMount"),((Y=b&&b.onVnodeMounted)||W||V)&&_o(()=>{Y&&Oe(Y,M,m),V&&se.enter(p),W&&Ve(m,null,M,"mounted")},F)}return p.nextSibling},v=(p,m,M,F,$,j,R)=>{R=R||!!m.dynamicChildren;const b=m.children,L=b.length;for(let x=0;x{const{slotScopeIds:R}=m;R&&($=$?$.concat(R):R);const b=o(p),L=v(i(p),m,b,M,F,$,j);return L&&Tt(L)&&L.data==="]"?i(m.anchor=L):(wt(),c(m.anchor=f("]"),b,L),L)},S=(p,m,M,F,$,j)=>{if(yn(p.parentElement,1)||wt(),m.el=null,j){const L=U(p);for(;;){const x=i(p);if(x&&x!==L)l(x);else break}}const R=i(p),b=o(p);return l(p),n(null,m,b,R,M,F,mn(b),$),R},U=(p,m="[",M="]")=>{let F=0;for(;p;)if(p=i(p),p&&Tt(p)&&(p.data===m&&F++,p.data===M)){if(F===0)return i(p);F--}return p},N=(p,m,M)=>{const F=m.parentNode;F&&F.replaceChild(p,m);let $=M;for(;$;)$.vnode.el===m&&($.vnode.el=$.subTree.el=p),$=$.parent},B=p=>p.nodeType===1&&p.tagName==="TEMPLATE";return[a,h]}const Tr="data-allow-mismatch",oc={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function yn(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(Tr);)e=e.parentElement;const n=e&&e.getAttribute(Tr);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:n.split(",").includes(oc[t])}}function lc(e,t){if(Tt(e)&&e.data==="["){let n=1,s=e.nextSibling;for(;s;){if(s.nodeType===1){if(t(s)===!1)break}else if(Tt(s))if(s.data==="]"){if(--n===0)break}else s.data==="["&&n++;s=s.nextSibling}}else t(e)}const gt=e=>!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function Nf(e){q(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:r=200,hydrate:i,timeout:o,suspensible:l=!0,onError:c}=e;let f=null,a,h=0;const g=()=>(h++,f=null,v()),v=()=>{let _;return f||(_=f=t().catch(S=>{if(S=S instanceof Error?S:new Error(String(S)),c)return new Promise((U,N)=>{c(S,()=>U(g()),()=>N(S),h+1)});throw S}).then(S=>_!==f&&f?f:(S&&(S.__esModule||S[Symbol.toStringTag]==="Module")&&(S=S.default),a=S,S)))};return Zs({name:"AsyncComponentWrapper",__asyncLoader:v,__asyncHydrate(_,S,U){const N=i?()=>{const B=i(U,p=>lc(_,p));B&&(S.bum||(S.bum=[])).push(B)}:U;a?N():v().then(()=>!S.isUnmounted&&N())},get __asyncResolved(){return a},setup(){const _=ue;if(er(_),a)return()=>rs(a,_);const S=p=>{f=null,tn(p,_,13,!s)};if(l&&_.suspense||rn)return v().then(p=>()=>rs(p,_)).catch(p=>(S(p),()=>s?le(s,{error:p}):null));const U=oe(!1),N=oe(),B=oe(!!r);return r&&setTimeout(()=>{B.value=!1},r),o!=null&&setTimeout(()=>{if(!U.value&&!N.value){const p=new Error(`Async component timed out after ${o}ms.`);S(p),N.value=p}},o),v().then(()=>{U.value=!0,_.parent&&nn(_.parent.vnode)&&_.parent.update()}).catch(p=>{S(p),N.value=p}),()=>{if(U.value&&a)return rs(a,_);if(N.value&&s)return le(s,{error:N.value});if(n&&!B.value)return le(n)}}})}function rs(e,t){const{ref:n,props:s,children:r,ce:i}=t.vnode,o=le(e,s,r);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const nn=e=>e.type.__isKeepAlive;function cc(e,t){Xi(e,"a",t)}function ac(e,t){Xi(e,"da",t)}function Xi(e,t,n=ue){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Wn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)nn(r.parent.vnode)&&fc(s,t,n,r),r=r.parent}}function fc(e,t,n,s){const r=Wn(t,e,s,!0);Kn(()=>{Ds(s[t],r)},n)}function Wn(e,t,n=ue,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{it();const l=sn(n),c=Fe(t,n,e,o);return l(),ot(),c});return s?r.unshift(i):r.push(i),i}}const Ye=e=>(t,n=ue)=>{(!rn||e==="sp")&&Wn(e,(...s)=>t(...s),n)},uc=Ye("bm"),Lt=Ye("m"),dc=Ye("bu"),hc=Ye("u"),zi=Ye("bum"),Kn=Ye("um"),pc=Ye("sp"),gc=Ye("rtg"),mc=Ye("rtc");function yc(e,t=ue){Wn("ec",e,t)}const Qi="components";function Ff(e,t){return eo(Qi,e,!0,t)||e}const Zi=Symbol.for("v-ndc");function Hf(e){return re(e)?eo(Qi,e,!1)||e:e||Zi}function eo(e,t,n=!0,s=!1){const r=de||ue;if(r){const i=r.type;{const l=na(i,!1);if(l&&(l===t||l===Ie(t)||l===$n(Ie(t))))return i}const o=Cr(r[e]||i[e],t)||Cr(r.appContext[e],t);return!o&&s?i:o}}function Cr(e,t){return e&&(e[t]||e[Ie(t)]||e[$n(Ie(t))])}function $f(e,t,n,s){let r;const i=n,o=K(e);if(o||re(e)){const l=o&&pt(e);let c=!1;l&&(c=!Pe(e),e=jn(e)),r=new Array(e.length);for(let f=0,a=e.length;ft(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,f=l.length;cXt(t)?!(t.type===ye||t.type===Se&&!to(t.children)):!0)?e:null}function jf(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:wn(s)]=e[s];return n}const As=e=>e?To(e)?Jn(e):As(e.parent):null,Vt=fe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>As(e.parent),$root:e=>As(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>tr(e),$forceUpdate:e=>e.f||(e.f=()=>{Qs(e.update)}),$nextTick:e=>e.n||(e.n=kn.bind(e.proxy)),$watch:e=>jc.bind(e)}),is=(e,t)=>e!==Z&&!e.__isScriptSetup&&z(e,t),vc={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let f;if(t[0]!=="$"){const v=o[t];if(v!==void 0)switch(v){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(is(s,t))return o[t]=1,s[t];if(r!==Z&&z(r,t))return o[t]=2,r[t];if((f=e.propsOptions[0])&&z(f,t))return o[t]=3,i[t];if(n!==Z&&z(n,t))return o[t]=4,n[t];Rs&&(o[t]=0)}}const a=Vt[t];let h,g;if(a)return t==="$attrs"&&ve(e.attrs,"get",""),a(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==Z&&z(n,t))return o[t]=4,n[t];if(g=c.config.globalProperties,z(g,t))return g[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return is(r,t)?(r[t]=n,!0):s!==Z&&z(s,t)?(s[t]=n,!0):z(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==Z&&z(e,o)||is(t,o)||(l=i[0])&&z(l,o)||z(s,o)||z(Vt,o)||z(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:z(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Vf(){return bc().slots}function bc(){const e=Yn();return e.setupContext||(e.setupContext=Ao(e))}function Ar(e){return K(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Rs=!0;function _c(e){const t=tr(e),n=e.proxy,s=e.ctx;Rs=!1,t.beforeCreate&&Rr(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:f,created:a,beforeMount:h,mounted:g,beforeUpdate:v,updated:_,activated:S,deactivated:U,beforeDestroy:N,beforeUnmount:B,destroyed:p,unmounted:m,render:M,renderTracked:F,renderTriggered:$,errorCaptured:j,serverPrefetch:R,expose:b,inheritAttrs:L,components:x,directives:W,filters:se}=t;if(f&&wc(f,s,null),o)for(const Y in o){const D=o[Y];q(D)&&(s[Y]=D.bind(n))}if(r){const Y=r.call(n,n);ne(Y)&&(e.data=Un(Y))}if(Rs=!0,i)for(const Y in i){const D=i[Y],he=q(D)?D.bind(n,n):q(D.get)?D.get.bind(n,n):Ue,on=!q(D)&&q(D.set)?D.set.bind(n):Ue,lt=ie({get:he,set:on});Object.defineProperty(s,Y,{enumerable:!0,configurable:!0,get:()=>lt.value,set:$e=>lt.value=$e})}if(l)for(const Y in l)no(l[Y],s,n,Y);if(c){const Y=q(c)?c.call(n):c;Reflect.ownKeys(Y).forEach(D=>{Ac(D,Y[D])})}a&&Rr(a,e,"c");function V(Y,D){K(D)?D.forEach(he=>Y(he.bind(n))):D&&Y(D.bind(n))}if(V(uc,h),V(Lt,g),V(dc,v),V(hc,_),V(cc,S),V(ac,U),V(yc,j),V(mc,F),V(gc,$),V(zi,B),V(Kn,m),V(pc,R),K(b))if(b.length){const Y=e.exposed||(e.exposed={});b.forEach(D=>{Object.defineProperty(Y,D,{get:()=>n[D],set:he=>n[D]=he})})}else e.exposed||(e.exposed={});M&&e.render===Ue&&(e.render=M),L!=null&&(e.inheritAttrs=L),x&&(e.components=x),W&&(e.directives=W),R&&er(e)}function wc(e,t,n=Ue){K(e)&&(e=Os(e));for(const s in e){const r=e[s];let i;ne(r)?"default"in r?i=Pt(r.from||s,r.default,!0):i=Pt(r.from||s):i=Pt(r),ae(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Rr(e,t,n){Fe(K(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function no(e,t,n,s){let r=s.includes(".")?yo(n,s):()=>n[s];if(re(e)){const i=t[e];q(i)&&Be(r,i)}else if(q(e))Be(r,e.bind(n));else if(ne(e))if(K(e))e.forEach(i=>no(i,t,n,s));else{const i=q(e.handler)?e.handler.bind(n):t[e.handler];q(i)&&Be(r,i,e)}}function tr(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(f=>Ln(c,f,o,!0)),Ln(c,t,o)),ne(t)&&i.set(t,c),c}function Ln(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Ln(e,i,n,!0),r&&r.forEach(o=>Ln(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=Sc[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Sc={data:Or,props:Mr,emits:Mr,methods:Dt,computed:Dt,beforeCreate:be,created:be,beforeMount:be,mounted:be,beforeUpdate:be,updated:be,beforeDestroy:be,beforeUnmount:be,destroyed:be,unmounted:be,activated:be,deactivated:be,errorCaptured:be,serverPrefetch:be,components:Dt,directives:Dt,watch:xc,provide:Or,inject:Ec};function Or(e,t){return t?e?function(){return fe(q(e)?e.call(this,this):e,q(t)?t.call(this,this):t)}:t:e}function Ec(e,t){return Dt(Os(e),Os(t))}function Os(e){if(K(e)){const t={};for(let n=0;n1)return n&&q(t)?t.call(s&&s.proxy):t}}const ro={},io=()=>Object.create(ro),oo=e=>Object.getPrototypeOf(e)===ro;function Rc(e,t,n,s=!1){const r={},i=io();e.propsDefaults=Object.create(null),lo(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Nl(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function Oc(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=X(r),[c]=e.propsOptions;let f=!1;if((s||o>0)&&!(o&16)){if(o&8){const a=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[g,v]=co(h,t,!0);fe(o,g),v&&l.push(...v)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!c)return ne(e)&&s.set(e,Ct),Ct;if(K(i))for(let a=0;ae[0]==="_"||e==="$stable",nr=e=>K(e)?e.map(Me):[Me(e)],Pc=(e,t,n)=>{if(t._n)return t;const s=Xl((...r)=>nr(t(...r)),n);return s._c=!1,s},fo=(e,t,n)=>{const s=e._ctx;for(const r in e){if(ao(r))continue;const i=e[r];if(q(i))t[r]=Pc(r,i,s);else if(i!=null){const o=nr(i);t[r]=()=>o}}},uo=(e,t)=>{const n=nr(t);e.slots.default=()=>n},ho=(e,t,n)=>{for(const s in t)(n||s!=="_")&&(e[s]=t[s])},Ic=(e,t,n)=>{const s=e.slots=io();if(e.vnode.shapeFlag&32){const r=t._;r?(ho(s,t,n),n&&gi(s,"_",r,!0)):fo(t,s)}else t&&uo(e,t)},Lc=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=Z;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:ho(r,t,n):(i=!t.$stable,fo(t,r)),o=t}else t&&(uo(e,t),o={default:1});if(i)for(const l in r)!ao(l)&&o[l]==null&&delete r[l]},Ee=_o;function Nc(e){return po(e)}function Fc(e){return po(e,ic)}function po(e,t){const n=mi();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:f,setElementText:a,parentNode:h,nextSibling:g,setScopeId:v=Ue,insertStaticContent:_}=e,S=(u,d,y,T=null,w=null,E=null,P=void 0,O=null,A=!!d.dynamicChildren)=>{if(u===d)return;u&&!dt(u,d)&&(T=ln(u),$e(u,w,E,!0),u=null),d.patchFlag===-2&&(A=!1,d.dynamicChildren=null);const{type:C,ref:k,shapeFlag:I}=d;switch(C){case mt:U(u,d,y,T);break;case ye:N(u,d,y,T);break;case Ut:u==null&&B(d,y,T,P);break;case Se:x(u,d,y,T,w,E,P,O,A);break;default:I&1?M(u,d,y,T,w,E,P,O,A):I&6?W(u,d,y,T,w,E,P,O,A):(I&64||I&128)&&C.process(u,d,y,T,w,E,P,O,A,bt)}k!=null&&w&&In(k,u&&u.ref,E,d||u,!d)},U=(u,d,y,T)=>{if(u==null)s(d.el=l(d.children),y,T);else{const w=d.el=u.el;d.children!==u.children&&f(w,d.children)}},N=(u,d,y,T)=>{u==null?s(d.el=c(d.children||""),y,T):d.el=u.el},B=(u,d,y,T)=>{[u.el,u.anchor]=_(u.children,d,y,T,u.el,u.anchor)},p=({el:u,anchor:d},y,T)=>{let w;for(;u&&u!==d;)w=g(u),s(u,y,T),u=w;s(d,y,T)},m=({el:u,anchor:d})=>{let y;for(;u&&u!==d;)y=g(u),r(u),u=y;r(d)},M=(u,d,y,T,w,E,P,O,A)=>{d.type==="svg"?P="svg":d.type==="math"&&(P="mathml"),u==null?F(d,y,T,w,E,P,O,A):R(u,d,w,E,P,O,A)},F=(u,d,y,T,w,E,P,O)=>{let A,C;const{props:k,shapeFlag:I,transition:H,dirs:G}=u;if(A=u.el=o(u.type,E,k&&k.is,k),I&8?a(A,u.children):I&16&&j(u.children,A,null,T,w,os(u,E),P,O),G&&Ve(u,null,T,"created"),$(A,u,u.scopeId,P,T),k){for(const ee in k)ee!=="value"&&!Rt(ee)&&i(A,ee,null,k[ee],E,T);"value"in k&&i(A,"value",null,k.value,E),(C=k.onVnodeBeforeMount)&&Oe(C,T,u)}G&&Ve(u,null,T,"beforeMount");const J=go(w,H);J&&H.beforeEnter(A),s(A,d,y),((C=k&&k.onVnodeMounted)||J||G)&&Ee(()=>{C&&Oe(C,T,u),J&&H.enter(A),G&&Ve(u,null,T,"mounted")},w)},$=(u,d,y,T,w)=>{if(y&&v(u,y),T)for(let E=0;E{for(let C=A;C{const O=d.el=u.el;let{patchFlag:A,dynamicChildren:C,dirs:k}=d;A|=u.patchFlag&16;const I=u.props||Z,H=d.props||Z;let G;if(y&&ct(y,!1),(G=H.onVnodeBeforeUpdate)&&Oe(G,y,d,u),k&&Ve(d,u,y,"beforeUpdate"),y&&ct(y,!0),(I.innerHTML&&H.innerHTML==null||I.textContent&&H.textContent==null)&&a(O,""),C?b(u.dynamicChildren,C,O,y,T,os(d,w),E):P||D(u,d,O,null,y,T,os(d,w),E,!1),A>0){if(A&16)L(O,I,H,y,w);else if(A&2&&I.class!==H.class&&i(O,"class",null,H.class,w),A&4&&i(O,"style",I.style,H.style,w),A&8){const J=d.dynamicProps;for(let ee=0;ee{G&&Oe(G,y,d,u),k&&Ve(d,u,y,"updated")},T)},b=(u,d,y,T,w,E,P)=>{for(let O=0;O{if(d!==y){if(d!==Z)for(const E in d)!Rt(E)&&!(E in y)&&i(u,E,d[E],null,w,T);for(const E in y){if(Rt(E))continue;const P=y[E],O=d[E];P!==O&&E!=="value"&&i(u,E,O,P,w,T)}"value"in y&&i(u,"value",d.value,y.value,w)}},x=(u,d,y,T,w,E,P,O,A)=>{const C=d.el=u?u.el:l(""),k=d.anchor=u?u.anchor:l("");let{patchFlag:I,dynamicChildren:H,slotScopeIds:G}=d;G&&(O=O?O.concat(G):G),u==null?(s(C,y,T),s(k,y,T),j(d.children||[],y,k,w,E,P,O,A)):I>0&&I&64&&H&&u.dynamicChildren?(b(u.dynamicChildren,H,y,w,E,P,O),(d.key!=null||w&&d===w.subTree)&&sr(u,d,!0)):D(u,d,y,k,w,E,P,O,A)},W=(u,d,y,T,w,E,P,O,A)=>{d.slotScopeIds=O,u==null?d.shapeFlag&512?w.ctx.activate(d,y,T,P,A):se(d,y,T,w,E,P,A):ce(u,d,A)},se=(u,d,y,T,w,E,P)=>{const O=u.component=Qc(u,T,w);if(nn(u)&&(O.ctx.renderer=bt),Zc(O,!1,P),O.asyncDep){if(w&&w.registerDep(O,V,P),!u.el){const A=O.subTree=le(ye);N(null,A,d,y)}}else V(O,u,d,y,w,E,P)},ce=(u,d,y)=>{const T=d.component=u.component;if(Wc(u,d,y))if(T.asyncDep&&!T.asyncResolved){Y(T,d,y);return}else T.next=d,T.update();else d.el=u.el,T.vnode=d},V=(u,d,y,T,w,E,P)=>{const O=()=>{if(u.isMounted){let{next:I,bu:H,u:G,parent:J,vnode:ee}=u;{const Te=mo(u);if(Te){I&&(I.el=ee.el,Y(u,I,P)),Te.asyncDep.then(()=>{u.isUnmounted||O()});return}}let Q=I,xe;ct(u,!1),I?(I.el=ee.el,Y(u,I,P)):I=ee,H&&Sn(H),(xe=I.props&&I.props.onVnodeBeforeUpdate)&&Oe(xe,J,I,ee),ct(u,!0);const pe=ls(u),Le=u.subTree;u.subTree=pe,S(Le,pe,h(Le.el),ln(Le),u,w,E),I.el=pe.el,Q===null&&Kc(u,pe.el),G&&Ee(G,w),(xe=I.props&&I.props.onVnodeUpdated)&&Ee(()=>Oe(xe,J,I,ee),w)}else{let I;const{el:H,props:G}=d,{bm:J,m:ee,parent:Q,root:xe,type:pe}=u,Le=gt(d);if(ct(u,!1),J&&Sn(J),!Le&&(I=G&&G.onVnodeBeforeMount)&&Oe(I,Q,d),ct(u,!0),H&&Qn){const Te=()=>{u.subTree=ls(u),Qn(H,u.subTree,u,w,null)};Le&&pe.__asyncHydrate?pe.__asyncHydrate(H,u,Te):Te()}else{xe.ce&&xe.ce._injectChildStyle(pe);const Te=u.subTree=ls(u);S(null,Te,y,T,u,w,E),d.el=Te.el}if(ee&&Ee(ee,w),!Le&&(I=G&&G.onVnodeMounted)){const Te=d;Ee(()=>Oe(I,Q,Te),w)}(d.shapeFlag&256||Q&>(Q.vnode)&&Q.vnode.shapeFlag&256)&&u.a&&Ee(u.a,w),u.isMounted=!0,d=y=T=null}};u.scope.on();const A=u.effect=new wi(O);u.scope.off();const C=u.update=A.run.bind(A),k=u.job=A.runIfDirty.bind(A);k.i=u,k.id=u.uid,A.scheduler=()=>Qs(k),ct(u,!0),C()},Y=(u,d,y)=>{d.component=u;const T=u.vnode.props;u.vnode=d,u.next=null,Oc(u,d.props,T,y),Lc(u,d.children,y),it(),_r(u),ot()},D=(u,d,y,T,w,E,P,O,A=!1)=>{const C=u&&u.children,k=u?u.shapeFlag:0,I=d.children,{patchFlag:H,shapeFlag:G}=d;if(H>0){if(H&128){on(C,I,y,T,w,E,P,O,A);return}else if(H&256){he(C,I,y,T,w,E,P,O,A);return}}G&8?(k&16&&Nt(C,w,E),I!==C&&a(y,I)):k&16?G&16?on(C,I,y,T,w,E,P,O,A):Nt(C,w,E,!0):(k&8&&a(y,""),G&16&&j(I,y,T,w,E,P,O,A))},he=(u,d,y,T,w,E,P,O,A)=>{u=u||Ct,d=d||Ct;const C=u.length,k=d.length,I=Math.min(C,k);let H;for(H=0;Hk?Nt(u,w,E,!0,!1,I):j(d,y,T,w,E,P,O,A,I)},on=(u,d,y,T,w,E,P,O,A)=>{let C=0;const k=d.length;let I=u.length-1,H=k-1;for(;C<=I&&C<=H;){const G=u[C],J=d[C]=A?et(d[C]):Me(d[C]);if(dt(G,J))S(G,J,y,null,w,E,P,O,A);else break;C++}for(;C<=I&&C<=H;){const G=u[I],J=d[H]=A?et(d[H]):Me(d[H]);if(dt(G,J))S(G,J,y,null,w,E,P,O,A);else break;I--,H--}if(C>I){if(C<=H){const G=H+1,J=GH)for(;C<=I;)$e(u[C],w,E,!0),C++;else{const G=C,J=C,ee=new Map;for(C=J;C<=H;C++){const Ce=d[C]=A?et(d[C]):Me(d[C]);Ce.key!=null&&ee.set(Ce.key,C)}let Q,xe=0;const pe=H-J+1;let Le=!1,Te=0;const Ft=new Array(pe);for(C=0;C=pe){$e(Ce,w,E,!0);continue}let De;if(Ce.key!=null)De=ee.get(Ce.key);else for(Q=J;Q<=H;Q++)if(Ft[Q-J]===0&&dt(Ce,d[Q])){De=Q;break}De===void 0?$e(Ce,w,E,!0):(Ft[De-J]=C+1,De>=Te?Te=De:Le=!0,S(Ce,d[De],y,null,w,E,P,O,A),xe++)}const ur=Le?Hc(Ft):Ct;for(Q=ur.length-1,C=pe-1;C>=0;C--){const Ce=J+C,De=d[Ce],dr=Ce+1{const{el:E,type:P,transition:O,children:A,shapeFlag:C}=u;if(C&6){lt(u.component.subTree,d,y,T);return}if(C&128){u.suspense.move(d,y,T);return}if(C&64){P.move(u,d,y,bt);return}if(P===Se){s(E,d,y);for(let I=0;IO.enter(E),w);else{const{leave:I,delayLeave:H,afterLeave:G}=O,J=()=>s(E,d,y),ee=()=>{I(E,()=>{J(),G&&G()})};H?H(E,J,ee):ee()}else s(E,d,y)},$e=(u,d,y,T=!1,w=!1)=>{const{type:E,props:P,ref:O,children:A,dynamicChildren:C,shapeFlag:k,patchFlag:I,dirs:H,cacheIndex:G}=u;if(I===-2&&(w=!1),O!=null&&In(O,null,y,u,!0),G!=null&&(d.renderCache[G]=void 0),k&256){d.ctx.deactivate(u);return}const J=k&1&&H,ee=!gt(u);let Q;if(ee&&(Q=P&&P.onVnodeBeforeUnmount)&&Oe(Q,d,u),k&6)Xo(u.component,y,T);else{if(k&128){u.suspense.unmount(y,T);return}J&&Ve(u,null,d,"beforeUnmount"),k&64?u.type.remove(u,d,y,bt,T):C&&!C.hasOnce&&(E!==Se||I>0&&I&64)?Nt(C,d,y,!1,!0):(E===Se&&I&384||!w&&k&16)&&Nt(A,d,y),T&&ar(u)}(ee&&(Q=P&&P.onVnodeUnmounted)||J)&&Ee(()=>{Q&&Oe(Q,d,u),J&&Ve(u,null,d,"unmounted")},y)},ar=u=>{const{type:d,el:y,anchor:T,transition:w}=u;if(d===Se){Jo(y,T);return}if(d===Ut){m(u);return}const E=()=>{r(y),w&&!w.persisted&&w.afterLeave&&w.afterLeave()};if(u.shapeFlag&1&&w&&!w.persisted){const{leave:P,delayLeave:O}=w,A=()=>P(y,E);O?O(u.el,E,A):A()}else E()},Jo=(u,d)=>{let y;for(;u!==d;)y=g(u),r(u),u=y;r(d)},Xo=(u,d,y)=>{const{bum:T,scope:w,job:E,subTree:P,um:O,m:A,a:C}=u;Ir(A),Ir(C),T&&Sn(T),w.stop(),E&&(E.flags|=8,$e(P,u,d,y)),O&&Ee(O,d),Ee(()=>{u.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},Nt=(u,d,y,T=!1,w=!1,E=0)=>{for(let P=E;P{if(u.shapeFlag&6)return ln(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const d=g(u.anchor||u.el),y=d&&d[Bi];return y?g(y):d};let Xn=!1;const fr=(u,d,y)=>{u==null?d._vnode&&$e(d._vnode,null,null,!0):S(d._vnode||null,u,d,null,null,null,y),d._vnode=u,Xn||(Xn=!0,_r(),Mn(),Xn=!1)},bt={p:S,um:$e,m:lt,r:ar,mt:se,mc:j,pc:D,pbc:b,n:ln,o:e};let zn,Qn;return t&&([zn,Qn]=t(bt)),{render:fr,hydrate:zn,createApp:Cc(fr,zn)}}function os({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function ct({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function go(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function sr(e,t,n=!1){const s=e.children,r=t.children;if(K(s)&&K(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function mo(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:mo(t)}function Ir(e){if(e)for(let t=0;tPt($c);function rr(e,t){return qn(e,null,t)}function Uf(e,t){return qn(e,null,{flush:"post"})}function Be(e,t,n){return qn(e,t,n)}function qn(e,t,n=Z){const{immediate:s,deep:r,flush:i,once:o}=n,l=fe({},n);let c;if(rn)if(i==="sync"){const g=Dc();c=g.__watcherHandles||(g.__watcherHandles=[])}else if(!t||s)l.once=!0;else{const g=()=>{};return g.stop=Ue,g.resume=Ue,g.pause=Ue,g}const f=ue;l.call=(g,v,_)=>Fe(g,f,v,_);let a=!1;i==="post"?l.scheduler=g=>{Ee(g,f&&f.suspense)}:i!=="sync"&&(a=!0,l.scheduler=(g,v)=>{v?g():Qs(g)}),l.augmentJob=g=>{t&&(g.flags|=4),a&&(g.flags|=2,f&&(g.id=f.uid,g.i=f))};const h=ql(e,t,l);return c&&c.push(h),h}function jc(e,t,n){const s=this.proxy,r=re(e)?e.includes(".")?yo(s,e):()=>s[e]:e.bind(s,s);let i;q(t)?i=t:(i=t.handler,n=t);const o=sn(this),l=qn(r,i.bind(s),n);return o(),l}function yo(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ie(t)}Modifiers`]||e[`${rt(t)}Modifiers`];function Uc(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Z;let r=n;const i=t.startsWith("update:"),o=i&&Vc(s,t.slice(7));o&&(o.trim&&(r=n.map(a=>re(a)?a.trim():a)),o.number&&(r=n.map(ws)));let l,c=s[l=wn(t)]||s[l=wn(Ie(t))];!c&&i&&(c=s[l=wn(rt(t))]),c&&Fe(c,e,6,r);const f=s[l+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Fe(f,e,6,r)}}function vo(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!q(e)){const c=f=>{const a=vo(f,t,!0);a&&(l=!0,fe(o,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(ne(e)&&s.set(e,null),null):(K(i)?i.forEach(c=>o[c]=null):fe(o,i),ne(e)&&s.set(e,o),o)}function Gn(e,t){return!e||!Zt(t)?!1:(t=t.slice(2).replace(/Once$/,""),z(e,t[0].toLowerCase()+t.slice(1))||z(e,rt(t))||z(e,t))}function ls(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:f,renderCache:a,props:h,data:g,setupState:v,ctx:_,inheritAttrs:S}=e,U=Pn(e);let N,B;try{if(n.shapeFlag&4){const m=r||s,M=m;N=Me(f.call(M,m,a,h,v,g,_)),B=l}else{const m=t;N=Me(m.length>1?m(h,{attrs:l,slots:o,emit:c}):m(h,null)),B=t.props?l:Bc(l)}}catch(m){Bt.length=0,tn(m,e,1),N=le(ye)}let p=N;if(B&&S!==!1){const m=Object.keys(B),{shapeFlag:M}=p;m.length&&M&7&&(i&&m.some($s)&&(B=kc(B,i)),p=nt(p,B,!1,!0))}return n.dirs&&(p=nt(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&Yt(p,n.transition),N=p,Pn(U),N}const Bc=e=>{let t;for(const n in e)(n==="class"||n==="style"||Zt(n))&&((t||(t={}))[n]=e[n]);return t},kc=(e,t)=>{const n={};for(const s in e)(!$s(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Wc(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Lr(s,o,f):!!o;if(c&8){const a=t.dynamicProps;for(let h=0;he.__isSuspense;function _o(e,t){t&&t.pendingBranch?K(e)?t.effects.push(...e):t.effects.push(e):Jl(e)}const Se=Symbol.for("v-fgt"),mt=Symbol.for("v-txt"),ye=Symbol.for("v-cmt"),Ut=Symbol.for("v-stc"),Bt=[];let Ae=null;function Ps(e=!1){Bt.push(Ae=e?null:[])}function qc(){Bt.pop(),Ae=Bt[Bt.length-1]||null}let Jt=1;function Nr(e){Jt+=e,e<0&&Ae&&(Ae.hasOnce=!0)}function wo(e){return e.dynamicChildren=Jt>0?Ae||Ct:null,qc(),Jt>0&&Ae&&Ae.push(e),e}function Bf(e,t,n,s,r,i){return wo(Eo(e,t,n,s,r,i,!0))}function Is(e,t,n,s,r){return wo(le(e,t,n,s,r,!0))}function Xt(e){return e?e.__v_isVNode===!0:!1}function dt(e,t){return e.type===t.type&&e.key===t.key}const So=({key:e})=>e??null,Tn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?re(e)||ae(e)||q(e)?{i:de,r:e,k:t,f:!!n}:e:null);function Eo(e,t=null,n=null,s=0,r=null,i=e===Se?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&So(t),ref:t&&Tn(t),scopeId:Ui,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:de};return l?(ir(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=re(n)?8:16),Jt>0&&!o&&Ae&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Ae.push(c),c}const le=Gc;function Gc(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===Zi)&&(e=ye),Xt(e)){const l=nt(e,t,!0);return n&&ir(l,n),Jt>0&&!i&&Ae&&(l.shapeFlag&6?Ae[Ae.indexOf(e)]=l:Ae.push(l)),l.patchFlag=-2,l}if(sa(e)&&(e=e.__vccOpts),t){t=Yc(t);let{class:l,style:c}=t;l&&!re(l)&&(t.class=Us(l)),ne(c)&&(Ys(c)&&!K(c)&&(c=fe({},c)),t.style=Vs(c))}const o=re(e)?1:bo(e)?128:ki(e)?64:ne(e)?4:q(e)?2:0;return Eo(e,t,n,s,r,o,i,!0)}function Yc(e){return e?Ys(e)||oo(e)?fe({},e):e:null}function nt(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,f=t?Jc(r||{},t):r,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&So(f),ref:t&&t.ref?n&&i?K(i)?i.concat(Tn(t)):[i,Tn(t)]:Tn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Se?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&nt(e.ssContent),ssFallback:e.ssFallback&&nt(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&Yt(a,c.clone(a)),a}function xo(e=" ",t=0){return le(mt,null,e,t)}function kf(e,t){const n=le(Ut,null,e);return n.staticCount=t,n}function Wf(e="",t=!1){return t?(Ps(),Is(ye,null,e)):le(ye,null,e)}function Me(e){return e==null||typeof e=="boolean"?le(ye):K(e)?le(Se,null,e.slice()):Xt(e)?et(e):le(mt,null,String(e))}function et(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:nt(e)}function ir(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(K(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),ir(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!oo(t)?t._ctx=de:r===3&&de&&(de.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else q(t)?(t={default:t,_ctx:de},n=32):(t=String(t),s&64?(n=16,t=[xo(t)]):n=8);e.children=t,e.shapeFlag|=n}function Jc(...e){const t={};for(let n=0;nue||de;let Nn,Ls;{const e=mi(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};Nn=t("__VUE_INSTANCE_SETTERS__",n=>ue=n),Ls=t("__VUE_SSR_SETTERS__",n=>rn=n)}const sn=e=>{const t=ue;return Nn(e),e.scope.on(),()=>{e.scope.off(),Nn(t)}},Fr=()=>{ue&&ue.scope.off(),Nn(null)};function To(e){return e.vnode.shapeFlag&4}let rn=!1;function Zc(e,t=!1,n=!1){t&&Ls(t);const{props:s,children:r}=e.vnode,i=To(e);Rc(e,s,i,t),Ic(e,r,n);const o=i?ea(e,t):void 0;return t&&Ls(!1),o}function ea(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,vc);const{setup:s}=n;if(s){const r=e.setupContext=s.length>1?Ao(e):null,i=sn(e);it();const o=en(s,e,0,[e.props,r]);if(ot(),i(),di(o)){if(gt(e)||er(e),o.then(Fr,Fr),t)return o.then(l=>{Hr(e,l,t)}).catch(l=>{tn(l,e,0)});e.asyncDep=o}else Hr(e,o,t)}else Co(e,t)}function Hr(e,t,n){q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ne(t)&&(e.setupState=$i(t)),Co(e,n)}let $r;function Co(e,t,n){const s=e.type;if(!e.render){if(!t&&$r&&!s.render){const r=s.template||tr(e).template;if(r){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:c}=s,f=fe(fe({isCustomElement:i,delimiters:l},o),c);s.render=$r(r,f)}}e.render=s.render||Ue}{const r=sn(e);it();try{_c(e)}finally{ot(),r()}}}const ta={get(e,t){return ve(e,"get",""),e[t]}};function Ao(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,ta),slots:e.slots,emit:e.emit,expose:t}}function Jn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy($i(En(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Vt)return Vt[n](e)},has(t,n){return n in t||n in Vt}})):e.proxy}function na(e,t=!0){return q(e)?e.displayName||e.name:e.name||t&&e.__name}function sa(e){return q(e)&&"__vccOpts"in e}const ie=(e,t)=>Wl(e,t,rn);function Ns(e,t,n){const s=arguments.length;return s===2?ne(t)&&!K(t)?Xt(t)?le(e,null,[t]):le(e,t):le(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Xt(n)&&(n=[n]),le(e,t,n))}const ra="3.5.10";/** +* @vue/runtime-dom v3.5.10 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Fs;const Dr=typeof window<"u"&&window.trustedTypes;if(Dr)try{Fs=Dr.createPolicy("vue",{createHTML:e=>e})}catch{}const Ro=Fs?e=>Fs.createHTML(e):e=>e,ia="http://www.w3.org/2000/svg",oa="http://www.w3.org/1998/Math/MathML",Ke=typeof document<"u"?document:null,jr=Ke&&Ke.createElement("template"),la={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Ke.createElementNS(ia,e):t==="mathml"?Ke.createElementNS(oa,e):n?Ke.createElement(e,{is:n}):Ke.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Ke.createTextNode(e),createComment:e=>Ke.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ke.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{jr.innerHTML=Ro(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=jr.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Xe="transition",$t="animation",zt=Symbol("_vtc"),Oo={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},ca=fe({},Ki,Oo),aa=e=>(e.displayName="Transition",e.props=ca,e),Kf=aa((e,{slots:t})=>Ns(nc,fa(e),t)),at=(e,t=[])=>{K(e)?e.forEach(n=>n(...t)):e&&e(...t)},Vr=e=>e?K(e)?e.some(t=>t.length>1):e.length>1:!1;function fa(e){const t={};for(const x in e)x in Oo||(t[x]=e[x]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:f=o,appearToClass:a=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:g=`${n}-leave-active`,leaveToClass:v=`${n}-leave-to`}=e,_=ua(r),S=_&&_[0],U=_&&_[1],{onBeforeEnter:N,onEnter:B,onEnterCancelled:p,onLeave:m,onLeaveCancelled:M,onBeforeAppear:F=N,onAppear:$=B,onAppearCancelled:j=p}=t,R=(x,W,se)=>{ft(x,W?a:l),ft(x,W?f:o),se&&se()},b=(x,W)=>{x._isLeaving=!1,ft(x,h),ft(x,v),ft(x,g),W&&W()},L=x=>(W,se)=>{const ce=x?$:B,V=()=>R(W,x,se);at(ce,[W,V]),Ur(()=>{ft(W,x?c:i),ze(W,x?a:l),Vr(ce)||Br(W,s,S,V)})};return fe(t,{onBeforeEnter(x){at(N,[x]),ze(x,i),ze(x,o)},onBeforeAppear(x){at(F,[x]),ze(x,c),ze(x,f)},onEnter:L(!1),onAppear:L(!0),onLeave(x,W){x._isLeaving=!0;const se=()=>b(x,W);ze(x,h),ze(x,g),pa(),Ur(()=>{x._isLeaving&&(ft(x,h),ze(x,v),Vr(m)||Br(x,s,U,se))}),at(m,[x,se])},onEnterCancelled(x){R(x,!1),at(p,[x])},onAppearCancelled(x){R(x,!0),at(j,[x])},onLeaveCancelled(x){b(x),at(M,[x])}})}function ua(e){if(e==null)return null;if(ne(e))return[cs(e.enter),cs(e.leave)];{const t=cs(e);return[t,t]}}function cs(e){return nl(e)}function ze(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[zt]||(e[zt]=new Set)).add(t)}function ft(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[zt];n&&(n.delete(t),n.size||(e[zt]=void 0))}function Ur(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let da=0;function Br(e,t,n,s){const r=e._endId=++da,i=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=ha(e,t);if(!o)return s();const f=o+"end";let a=0;const h=()=>{e.removeEventListener(f,g),i()},g=v=>{v.target===e&&++a>=c&&h()};setTimeout(()=>{a(n[_]||"").split(", "),r=s(`${Xe}Delay`),i=s(`${Xe}Duration`),o=kr(r,i),l=s(`${$t}Delay`),c=s(`${$t}Duration`),f=kr(l,c);let a=null,h=0,g=0;t===Xe?o>0&&(a=Xe,h=o,g=i.length):t===$t?f>0&&(a=$t,h=f,g=c.length):(h=Math.max(o,f),a=h>0?o>f?Xe:$t:null,g=a?a===Xe?i.length:c.length:0);const v=a===Xe&&/\b(transform|all)(,|$)/.test(s(`${Xe}Property`).toString());return{type:a,timeout:h,propCount:g,hasTransform:v}}function kr(e,t){for(;e.lengthWr(n)+Wr(e[s])))}function Wr(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function pa(){return document.body.offsetHeight}function ga(e,t,n){const s=e[zt];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Kr=Symbol("_vod"),ma=Symbol("_vsh"),ya=Symbol(""),va=/(^|;)\s*display\s*:/;function ba(e,t,n){const s=e.style,r=re(n);let i=!1;if(n&&!r){if(t)if(re(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&Cn(s,l,"")}else for(const o in t)n[o]==null&&Cn(s,o,"");for(const o in n)o==="display"&&(i=!0),Cn(s,o,n[o])}else if(r){if(t!==n){const o=s[ya];o&&(n+=";"+o),s.cssText=n,i=va.test(n)}}else t&&e.removeAttribute("style");Kr in e&&(e[Kr]=i?s.display:"",e[ma]&&(s.display="none"))}const qr=/\s*!important$/;function Cn(e,t,n){if(K(n))n.forEach(s=>Cn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=_a(e,t);qr.test(n)?e.setProperty(rt(s),n.replace(qr,""),"important"):e[s]=n}}const Gr=["Webkit","Moz","ms"],as={};function _a(e,t){const n=as[t];if(n)return n;let s=Ie(t);if(s!=="filter"&&s in e)return as[t]=s;s=$n(s);for(let r=0;rfs||(xa.then(()=>fs=0),fs=Date.now());function Ca(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Fe(Aa(s,n.value),t,5,[s])};return n.value=e,n.attached=Ta(),n}function Aa(e,t){if(K(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const Zr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ra=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?ga(e,s,o):t==="style"?ba(e,n,s):Zt(t)?$s(t)||Sa(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Oa(e,t,s,o))?(Xr(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Jr(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!re(s))?Xr(e,Ie(t),s):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Jr(e,t,s,o))};function Oa(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Zr(t)&&q(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Zr(t)&&re(n)?!1:t in e}const ei=e=>{const t=e.props["onUpdate:modelValue"]||!1;return K(t)?n=>Sn(t,n):t};function Ma(e){e.target.composing=!0}function ti(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const us=Symbol("_assign"),qf={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[us]=ei(r);const i=s||r.props&&r.props.type==="number";Et(e,t?"change":"input",o=>{if(o.target.composing)return;let l=e.value;n&&(l=l.trim()),i&&(l=ws(l)),e[us](l)}),n&&Et(e,"change",()=>{e.value=e.value.trim()}),t||(Et(e,"compositionstart",Ma),Et(e,"compositionend",ti),Et(e,"change",ti))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[us]=ei(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?ws(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c))}},Pa=["ctrl","shift","alt","meta"],Ia={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Pa.some(n=>e[`${n}Key`]&&!t.includes(n))},Gf=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=rt(r.key);if(t.some(o=>o===i||La[o]===i))return e(r)})},Mo=fe({patchProp:Ra},la);let kt,ni=!1;function Na(){return kt||(kt=Nc(Mo))}function Fa(){return kt=ni?kt:Fc(Mo),ni=!0,kt}const Jf=(...e)=>{const t=Na().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Io(s);if(!r)return;const i=t._component;!q(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,Po(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t},Xf=(...e)=>{const t=Fa().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Io(s);if(r)return n(r,!0,Po(r))},t};function Po(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Io(e){return re(e)?document.querySelector(e):e}const zf=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Ha=window.__VP_SITE_DATA__;function or(e){return _i()?(ul(e),!0):!1}function ke(e){return typeof e=="function"?e():Hi(e)}const Lo=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Qf=e=>e!=null,$a=Object.prototype.toString,Da=e=>$a.call(e)==="[object Object]",Qt=()=>{},si=ja();function ja(){var e,t;return Lo&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function Va(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const No=e=>e();function Ua(e,t={}){let n,s,r=Qt;const i=l=>{clearTimeout(l),r(),r=Qt};return l=>{const c=ke(e),f=ke(t.maxWait);return n&&i(n),c<=0||f!==void 0&&f<=0?(s&&(i(s),s=null),Promise.resolve(l())):new Promise((a,h)=>{r=t.rejectOnCancel?h:a,f&&!s&&(s=setTimeout(()=>{n&&i(n),s=null,a(l())},f)),n=setTimeout(()=>{s&&i(s),s=null,a(l())},c)})}}function Ba(e=No){const t=oe(!0);function n(){t.value=!1}function s(){t.value=!0}const r=(...i)=>{t.value&&e(...i)};return{isActive:Bn(t),pause:n,resume:s,eventFilter:r}}function ka(e){return Yn()}function Fo(...e){if(e.length!==1)return Ul(...e);const t=e[0];return typeof t=="function"?Bn(Dl(()=>({get:t,set:Qt}))):oe(t)}function Ho(e,t,n={}){const{eventFilter:s=No,...r}=n;return Be(e,Va(s,t),r)}function Wa(e,t,n={}){const{eventFilter:s,...r}=n,{eventFilter:i,pause:o,resume:l,isActive:c}=Ba(s);return{stop:Ho(e,t,{...r,eventFilter:i}),pause:o,resume:l,isActive:c}}function lr(e,t=!0,n){ka()?Lt(e,n):t?e():kn(e)}function Zf(e,t,n={}){const{debounce:s=0,maxWait:r=void 0,...i}=n;return Ho(e,t,{...i,eventFilter:Ua(s,{maxWait:r})})}function eu(e,t,n){let s;ae(n)?s={evaluating:n}:s={};const{lazy:r=!1,evaluating:i=void 0,shallow:o=!0,onError:l=Qt}=s,c=oe(!r),f=o?Xs(t):oe(t);let a=0;return rr(async h=>{if(!c.value)return;a++;const g=a;let v=!1;i&&Promise.resolve().then(()=>{i.value=!0});try{const _=await e(S=>{h(()=>{i&&(i.value=!1),v||S()})});g===a&&(f.value=_)}catch(_){l(_)}finally{i&&g===a&&(i.value=!1),v=!0}}),r?ie(()=>(c.value=!0,f.value)):f}const He=Lo?window:void 0;function $o(e){var t;const n=ke(e);return(t=n==null?void 0:n.$el)!=null?t:n}function It(...e){let t,n,s,r;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,s,r]=e,t=He):[t,n,s,r]=e,!t)return Qt;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const i=[],o=()=>{i.forEach(a=>a()),i.length=0},l=(a,h,g,v)=>(a.addEventListener(h,g,v),()=>a.removeEventListener(h,g,v)),c=Be(()=>[$o(t),ke(r)],([a,h])=>{if(o(),!a)return;const g=Da(h)?{...h}:h;i.push(...n.flatMap(v=>s.map(_=>l(a,v,_,g))))},{immediate:!0,flush:"post"}),f=()=>{c(),o()};return or(f),f}function Ka(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function tu(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=He,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=Ka(t);return It(r,i,a=>{a.repeat&&ke(l)||c(a)&&n(a)},o)}function qa(){const e=oe(!1),t=Yn();return t&&Lt(()=>{e.value=!0},t),e}function Ga(e){const t=qa();return ie(()=>(t.value,!!e()))}function Do(e,t={}){const{window:n=He}=t,s=Ga(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let r;const i=oe(!1),o=f=>{i.value=f.matches},l=()=>{r&&("removeEventListener"in r?r.removeEventListener("change",o):r.removeListener(o))},c=rr(()=>{s.value&&(l(),r=n.matchMedia(ke(e)),"addEventListener"in r?r.addEventListener("change",o):r.addListener(o),i.value=r.matches)});return or(()=>{c(),l(),r=void 0}),i}const vn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},bn="__vueuse_ssr_handlers__",Ya=Ja();function Ja(){return bn in vn||(vn[bn]=vn[bn]||{}),vn[bn]}function jo(e,t){return Ya[e]||t}function Vo(e){return Do("(prefers-color-scheme: dark)",e)}function Xa(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const za={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},ri="vueuse-storage";function cr(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:f=!1,shallow:a,window:h=He,eventFilter:g,onError:v=b=>{console.error(b)},initOnMounted:_}=s,S=(a?Xs:oe)(typeof t=="function"?t():t);if(!n)try{n=jo("getDefaultStorage",()=>{var b;return(b=He)==null?void 0:b.localStorage})()}catch(b){v(b)}if(!n)return S;const U=ke(t),N=Xa(U),B=(r=s.serializer)!=null?r:za[N],{pause:p,resume:m}=Wa(S,()=>F(S.value),{flush:i,deep:o,eventFilter:g});h&&l&&lr(()=>{n instanceof Storage?It(h,"storage",j):It(h,ri,R),_&&j()}),_||j();function M(b,L){if(h){const x={key:e,oldValue:b,newValue:L,storageArea:n};h.dispatchEvent(n instanceof Storage?new StorageEvent("storage",x):new CustomEvent(ri,{detail:x}))}}function F(b){try{const L=n.getItem(e);if(b==null)M(L,null),n.removeItem(e);else{const x=B.write(b);L!==x&&(n.setItem(e,x),M(L,x))}}catch(L){v(L)}}function $(b){const L=b?b.newValue:n.getItem(e);if(L==null)return c&&U!=null&&n.setItem(e,B.write(U)),U;if(!b&&f){const x=B.read(L);return typeof f=="function"?f(x,U):N==="object"&&!Array.isArray(x)?{...U,...x}:x}else return typeof L!="string"?L:B.read(L)}function j(b){if(!(b&&b.storageArea!==n)){if(b&&b.key==null){S.value=U;return}if(!(b&&b.key!==e)){p();try{(b==null?void 0:b.newValue)!==B.write(S.value)&&(S.value=$(b))}catch(L){v(L)}finally{b?kn(m):m()}}}}function R(b){j(b.detail)}return S}const Qa="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function Za(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=He,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:f,disableTransition:a=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},g=Vo({window:r}),v=ie(()=>g.value?"dark":"light"),_=c||(o==null?Fo(s):cr(o,s,i,{window:r,listenToStorageChanges:l})),S=ie(()=>_.value==="auto"?v.value:_.value),U=jo("updateHTMLAttrs",(m,M,F)=>{const $=typeof m=="string"?r==null?void 0:r.document.querySelector(m):$o(m);if(!$)return;const j=new Set,R=new Set;let b=null;if(M==="class"){const x=F.split(/\s/g);Object.values(h).flatMap(W=>(W||"").split(/\s/g)).filter(Boolean).forEach(W=>{x.includes(W)?j.add(W):R.add(W)})}else b={key:M,value:F};if(j.size===0&&R.size===0&&b===null)return;let L;a&&(L=r.document.createElement("style"),L.appendChild(document.createTextNode(Qa)),r.document.head.appendChild(L));for(const x of j)$.classList.add(x);for(const x of R)$.classList.remove(x);b&&$.setAttribute(b.key,b.value),a&&(r.getComputedStyle(L).opacity,document.head.removeChild(L))});function N(m){var M;U(t,n,(M=h[m])!=null?M:m)}function B(m){e.onChanged?e.onChanged(m,N):N(m)}Be(S,B,{flush:"post",immediate:!0}),lr(()=>B(S.value));const p=ie({get(){return f?_.value:S.value},set(m){_.value=m}});try{return Object.assign(p,{store:_,system:v,state:S})}catch{return p}}function ef(e={}){const{valueDark:t="dark",valueLight:n="",window:s=He}=e,r=Za({...e,onChanged:(l,c)=>{var f;e.onChanged?(f=e.onChanged)==null||f.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),i=ie(()=>r.system?r.system.value:Vo({window:s}).value?"dark":"light");return ie({get(){return r.value==="dark"},set(l){const c=l?"dark":"light";i.value===c?r.value="auto":r.value=c}})}function ds(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function nu(e,t,n={}){const{window:s=He}=n;return cr(e,t,s==null?void 0:s.localStorage,n)}function Uo(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const hs=new WeakMap;function su(e,t=!1){const n=oe(t);let s=null,r="";Be(Fo(e),l=>{const c=ds(ke(l));if(c){const f=c;if(hs.get(f)||hs.set(f,f.style.overflow),f.style.overflow!=="hidden"&&(r=f.style.overflow),f.style.overflow==="hidden")return n.value=!0;if(n.value)return f.style.overflow="hidden"}},{immediate:!0});const i=()=>{const l=ds(ke(e));!l||n.value||(si&&(s=It(l,"touchmove",c=>{tf(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{const l=ds(ke(e));!l||!n.value||(si&&(s==null||s()),l.style.overflow=r,hs.delete(l),n.value=!1)};return or(o),ie({get(){return n.value},set(l){l?i():o()}})}function ru(e,t,n={}){const{window:s=He}=n;return cr(e,t,s==null?void 0:s.sessionStorage,n)}function iu(e={}){const{window:t=He,behavior:n="auto"}=e;if(!t)return{x:oe(0),y:oe(0)};const s=oe(t.scrollX),r=oe(t.scrollY),i=ie({get(){return s.value},set(l){scrollTo({left:l,behavior:n})}}),o=ie({get(){return r.value},set(l){scrollTo({top:l,behavior:n})}});return It(t,"scroll",()=>{s.value=t.scrollX,r.value=t.scrollY},{capture:!1,passive:!0}),{x:i,y:o}}function ou(e={}){const{window:t=He,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0,type:o="inner"}=e,l=oe(n),c=oe(s),f=()=>{t&&(o==="outer"?(l.value=t.outerWidth,c.value=t.outerHeight):i?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight))};if(f(),lr(f),It("resize",f,{passive:!0}),r){const a=Do("(orientation: portrait)");Be(a,()=>f())}return{width:l,height:c}}const ps={BASE_URL:"/JetReconstruction.jl/dev/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};var gs={};const Bo=/^(?:[a-z]+:|\/\/)/i,nf="vitepress-theme-appearance",sf=/#.*$/,rf=/[?#].*$/,of=/(?:(^|\/)index)?\.(?:md|html)$/,ge=typeof document<"u",ko={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function lf(e,t,n=!1){if(t===void 0)return!1;if(e=ii(`/${e}`),n)return new RegExp(t).test(e);if(ii(t)!==e)return!1;const s=t.match(sf);return s?(ge?location.hash:"")===s[0]:!0}function ii(e){return decodeURI(e).replace(rf,"").replace(of,"$1")}function cf(e){return Bo.test(e)}function af(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!cf(n)&&lf(t,`/${n}/`,!0))||"root"}function ff(e,t){var s,r,i,o,l,c,f;const n=af(e,t);return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:Ko(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(f=e.locales[n])==null?void 0:f.themeConfig}})}function Wo(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=uf(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function uf(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function df(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,o])=>i===n&&o[r[0]]===r[1])}function Ko(e,t){return[...e.filter(n=>!df(t,n)),...t]}const hf=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,pf=/^[a-z]:/i;function oi(e){const t=pf.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(hf,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const ms=new Set;function gf(e){if(ms.size===0){const n=typeof process=="object"&&(gs==null?void 0:gs.VITE_EXTRA_EXTENSIONS)||(ps==null?void 0:ps.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>ms.add(s))}const t=e.split(".").pop();return t==null||!ms.has(t.toLowerCase())}function lu(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const mf=Symbol(),yt=Xs(Ha);function cu(e){const t=ie(()=>ff(yt.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?oe(!0):n?ef({storageKey:nf,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):oe(!1),r=oe(ge?location.hash:"");return ge&&window.addEventListener("hashchange",()=>{r.value=location.hash}),Be(()=>e.data,()=>{r.value=ge?location.hash:""}),{site:t,theme:ie(()=>t.value.themeConfig),page:ie(()=>e.data),frontmatter:ie(()=>e.data.frontmatter),params:ie(()=>e.data.params),lang:ie(()=>t.value.lang),dir:ie(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:ie(()=>t.value.localeIndex||"root"),title:ie(()=>Wo(t.value,e.data)),description:ie(()=>e.data.description||t.value.description),isDark:s,hash:ie(()=>r.value)}}function yf(){const e=Pt(mf);if(!e)throw new Error("vitepress data not properly injected in app");return e}function vf(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function li(e){return Bo.test(e)||!e.startsWith("/")?e:vf(yt.value.base,e)}function bf(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),ge){const n="/JetReconstruction.jl/dev/";t=oi(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${oi(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let An=[];function au(e){An.push(e),Kn(()=>{An=An.filter(t=>t!==e)})}function _f(){let e=yt.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=ci(e,n);else if(Array.isArray(e))for(const s of e){const r=ci(s,n);if(r){t=r;break}}return t}function ci(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const wf=Symbol(),qo="http://a.com",Sf=()=>({path:"/",component:null,data:ko});function fu(e,t){const n=Un(Sf()),s={route:n,go:r};async function r(l=ge?location.href:"/"){var c,f;l=ys(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(ge&&l!==ys(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await o(l),await((f=s.onAfterRouteChanged)==null?void 0:f.call(s,l)))}let i=null;async function o(l,c=0,f=!1){var g;if(await((g=s.onBeforePageLoad)==null?void 0:g.call(s,l))===!1)return;const a=new URL(l,qo),h=i=a.pathname;try{let v=await e(h);if(!v)throw new Error(`Page not found: ${h}`);if(i===h){i=null;const{default:_,__pageData:S}=v;if(!_)throw new Error(`Invalid route component: ${_}`);n.path=ge?h:li(h),n.component=En(_),n.data=En(S),ge&&kn(()=>{let U=yt.value.base+S.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!yt.value.cleanUrls&&!U.endsWith("/")&&(U+=".html"),U!==a.pathname&&(a.pathname=U,l=U+a.search+a.hash,history.replaceState({},"",l)),a.hash&&!c){let N=null;try{N=document.getElementById(decodeURIComponent(a.hash).slice(1))}catch(B){console.warn(B)}if(N){ai(N,a.hash);return}}window.scrollTo(0,c)})}}catch(v){if(!/fetch|Page not found/.test(v.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(v),!f)try{const _=await fetch(yt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await _.json(),await o(l,c,!0);return}catch{}if(i===h){i=null,n.path=ge?h:li(h),n.component=t?En(t):null;const _=ge?h.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...ko,relativePath:_}}}}return ge&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const f=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(f==null)return;const{href:a,origin:h,pathname:g,hash:v,search:_}=new URL(f,c.baseURI),S=new URL(location.href);h===S.origin&&gf(g)&&(l.preventDefault(),g===S.pathname&&_===S.search?(v!==S.hash&&(history.pushState({},"",a),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:S.href,newURL:a}))),v?ai(c,v,c.classList.contains("header-anchor")):window.scrollTo(0,0)):r(a))},{capture:!0}),window.addEventListener("popstate",async l=>{var c;l.state!==null&&(await o(ys(location.href),l.state&&l.state.scrollPosition||0),(c=s.onAfterRouteChanged)==null||c.call(s,location.href))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function Ef(){const e=Pt(wf);if(!e)throw new Error("useRouter() is called without provider.");return e}function Go(){return Ef().route}function ai(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let r=function(){!n||Math.abs(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(s).paddingTop,10),o=window.scrollY+s.getBoundingClientRect().top-_f()+i;requestAnimationFrame(r)}}function ys(e){const t=new URL(e,qo);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),yt.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const vs=()=>An.forEach(e=>e()),uu=Zs({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Go(),{site:n}=yf();return()=>Ns(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?Ns(t.component,{onVnodeMounted:vs,onVnodeUpdated:vs,onVnodeUnmounted:vs}):"404 Page Not Found"])}}),xf="modulepreload",Tf=function(e){return"/JetReconstruction.jl/dev/"+e},fi={},du=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.allSettled(n.map(c=>{if(c=Tf(c),c in fi)return;fi[c]=!0;const f=c.endsWith(".css"),a=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${a}`))return;const h=document.createElement("link");if(h.rel=f?"stylesheet":xf,f||(h.as="script"),h.crossOrigin="",h.href=c,l&&h.setAttribute("nonce",l),document.head.appendChild(h),f)return new Promise((g,v)=>{h.addEventListener("load",g),h.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},hu=Zs({setup(e,{slots:t}){const n=oe(!1);return Lt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function pu(){ge&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const i=s.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(f=>f.classList.contains("active"));if(!o)return;const l=i.children[r];if(!l||o===l)return;o.classList.remove("active"),l.classList.add("active");const c=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function gu(){if(ge){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(a=>a.remove());let f=c.textContent||"";o&&(f=f.replace(/^ *(\$|>) /gm,"").trim()),Cf(f).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const a=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,a)})}})}}async function Cf(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function mu(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=bs(l);for(const f of document.head.children)if(f.isEqualNode(c)){s.push(f);return}});return}const o=i.map(bs);s.forEach((l,c)=>{const f=o.findIndex(a=>a==null?void 0:a.isEqualNode(l??null));f!==-1?delete o[f]:(l==null||l.remove(),delete s[c])}),o.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...o].filter(Boolean)};rr(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],f=Wo(o,i);f!==document.title&&(document.title=f);const a=l||o.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==a&&h.setAttribute("content",a):bs(["meta",{name:"description",content:a}]),r(Ko(o.head,Rf(c)))})}function bs([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&!t.async&&(s.async=!1),s}function Af(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Rf(e){return e.filter(t=>!Af(t))}const _s=new Set,Yo=()=>document.createElement("link"),Of=e=>{const t=Yo();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Mf=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let _n;const Pf=ge&&(_n=Yo())&&_n.relList&&_n.relList.supports&&_n.relList.supports("prefetch")?Of:Mf;function yu(){if(!ge||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!_s.has(c)){_s.add(c);const f=bf(c);f&&Pf(f)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):_s.add(l))})})};Lt(s);const r=Go();Be(()=>r.path,s),Kn(()=>{n&&n.disconnect()})}export{zi as $,_f as A,Ff as B,$f as C,Xs as D,au as E,Se as F,le as G,Hf as H,Bo as I,Go as J,Jc as K,Pt as L,ou as M,Vs as N,tu as O,kn as P,iu as Q,ge as R,Bn as S,Kf as T,Nf as U,du as V,su as W,Ac as X,Yf as Y,jf as Z,zf as _,xo as a,Gf as a0,Vf as a1,Un as a2,Ul as a3,Ns as a4,kf as a5,mu as a6,wf as a7,cu as a8,mf as a9,uu as aa,hu as ab,yt as ac,Xf as ad,fu as ae,bf as af,yu as ag,gu as ah,pu as ai,ke as aj,$o as ak,Qf as al,or as am,eu as an,ru as ao,nu as ap,Zf as aq,Ef as ar,It as as,If as at,qf as au,ae as av,Lf as aw,En as ax,Jf as ay,lu as az,Is as b,Bf as c,Zs as d,Wf as e,gf as f,li as g,ie as h,cf as i,Eo as j,Hi as k,lf as l,Do as m,Us as n,Ps as o,oe as p,Be as q,Df as r,rr as s,al as t,yf as u,Lt as v,Xl as w,Kn as x,Uf as y,hc as z}; diff --git a/dev/assets/chunks/theme.EB_RjJjX.js b/dev/assets/chunks/theme.DKvruQCF.js similarity index 99% rename from dev/assets/chunks/theme.EB_RjJjX.js rename to dev/assets/chunks/theme.DKvruQCF.js index 9048e5b..c2421c9 100644 --- a/dev/assets/chunks/theme.EB_RjJjX.js +++ b/dev/assets/chunks/theme.DKvruQCF.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.CH-hHDaQ.js","assets/chunks/framework.BonP4S8S.js"])))=>i.map(i=>d[i]); -import{d as m,o as a,c as u,r as c,n as I,a as O,t as w,b as g,w as f,e as h,T as de,_ as $,u as je,i as Ge,f as ze,g as ve,h as y,j as p,k as r,l as K,m as re,p as T,q as F,s as Z,v as z,x as pe,y as fe,z as Ke,A as Re,B as R,F as M,C as B,D as Ve,E as x,G as k,H as E,I as Le,J as ee,K as G,L as q,M as We,N as Te,O as ie,P as Ne,Q as we,R as te,S as qe,U as Je,V as Ye,W as Ie,X as he,Y as Xe,Z as Qe,$ as Ze,a0 as xe,a1 as Me,a2 as et,a3 as tt,a4 as nt}from"./framework.BonP4S8S.js";const st=m({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(o){return(e,t)=>(a(),u("span",{class:I(["VPBadge",e.type])},[c(e.$slots,"default",{},()=>[O(w(e.text),1)])],2))}}),ot={key:0,class:"VPBackdrop"},at=m({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(a(),g(de,{name:"fade"},{default:f(()=>[e.show?(a(),u("div",ot)):h("",!0)]),_:1}))}}),rt=$(at,[["__scopeId","data-v-b06cdb19"]]),L=je;function it(o,e){let t,s=!1;return()=>{t&&clearTimeout(t),s?t=setTimeout(o,e):(o(),(s=!0)&&setTimeout(()=>s=!1,e))}}function le(o){return/^\//.test(o)?o:`/${o}`}function me(o){const{pathname:e,search:t,hash:s,protocol:n}=new URL(o,"http://a.com");if(Ge(o)||o.startsWith("#")||!n.startsWith("http")||!ze(e))return o;const{site:i}=L(),l=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${s}`);return ve(l)}function Y({correspondingLink:o=!1}={}){const{site:e,localeIndex:t,page:s,theme:n,hash:i}=L(),l=y(()=>{var d,_;return{label:(d=e.value.locales[t.value])==null?void 0:d.label,link:((_=e.value.locales[t.value])==null?void 0:_.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:y(()=>Object.entries(e.value.locales).flatMap(([d,_])=>l.value.label===_.label?[]:{text:_.label,link:lt(_.link||(d==="root"?"/":`/${d}/`),n.value.i18nRouting!==!1&&o,s.value.relativePath.slice(l.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:l}}function lt(o,e,t,s){return e?o.replace(/\/$/,"")+le(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):o}const ct={class:"NotFound"},ut={class:"code"},dt={class:"title"},vt={class:"quote"},pt={class:"action"},ft=["href","aria-label"],ht=m({__name:"NotFound",setup(o){const{theme:e}=L(),{currentLang:t}=Y();return(s,n)=>{var i,l,v,d,_;return a(),u("div",ct,[p("p",ut,w(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),p("h1",dt,w(((l=r(e).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),n[0]||(n[0]=p("div",{class:"divider"},null,-1)),p("blockquote",vt,w(((v=r(e).notFound)==null?void 0:v.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),p("div",pt,[p("a",{class:"link",href:r(ve)(r(t).link),"aria-label":((d=r(e).notFound)==null?void 0:d.linkLabel)??"go to home"},w(((_=r(e).notFound)==null?void 0:_.linkText)??"Take me home"),9,ft)])])}}}),mt=$(ht,[["__scopeId","data-v-951cab6c"]]);function Ae(o,e){if(Array.isArray(o))return X(o);if(o==null)return[];e=le(e);const t=Object.keys(o).sort((n,i)=>i.split("/").length-n.split("/").length).find(n=>e.startsWith(le(n))),s=t?o[t]:[];return Array.isArray(s)?X(s):X(s.items,s.base)}function _t(o){const e=[];let t=0;for(const s in o){const n=o[s];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function bt(o){const e=[];function t(s){for(const n of s)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(o),e}function ce(o,e){return Array.isArray(e)?e.some(t=>ce(o,t)):K(o,e.link)?!0:e.items?ce(o,e.items):!1}function X(o,e){return[...o].map(t=>{const s={...t},n=s.base||e;return n&&s.link&&(s.link=n+s.link),s.items&&(s.items=X(s.items,n)),s})}function U(){const{frontmatter:o,page:e,theme:t}=L(),s=re("(min-width: 960px)"),n=T(!1),i=y(()=>{const C=t.value.sidebar,N=e.value.relativePath;return C?Ae(C,N):[]}),l=T(i.value);F(i,(C,N)=>{JSON.stringify(C)!==JSON.stringify(N)&&(l.value=i.value)});const v=y(()=>o.value.sidebar!==!1&&l.value.length>0&&o.value.layout!=="home"),d=y(()=>_?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),_=y(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),V=y(()=>v.value&&s.value),b=y(()=>v.value?_t(l.value):[]);function P(){n.value=!0}function S(){n.value=!1}function A(){n.value?S():P()}return{isOpen:n,sidebar:l,sidebarGroups:b,hasSidebar:v,hasAside:_,leftAside:d,isSidebarEnabled:V,open:P,close:S,toggle:A}}function kt(o,e){let t;Z(()=>{t=o.value?document.activeElement:void 0}),z(()=>{window.addEventListener("keyup",s)}),pe(()=>{window.removeEventListener("keyup",s)});function s(n){n.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function gt(o){const{page:e,hash:t}=L(),s=T(!1),n=y(()=>o.value.collapsed!=null),i=y(()=>!!o.value.link),l=T(!1),v=()=>{l.value=K(e.value.relativePath,o.value.link)};F([e,o,t],v),z(v);const d=y(()=>l.value?!0:o.value.items?ce(e.value.relativePath,o.value.items):!1),_=y(()=>!!(o.value.items&&o.value.items.length));Z(()=>{s.value=!!(n.value&&o.value.collapsed)}),fe(()=>{(l.value||d.value)&&(s.value=!1)});function V(){n.value&&(s.value=!s.value)}return{collapsed:s,collapsible:n,isLink:i,isActiveLink:l,hasActiveLink:d,hasChildren:_,toggle:V}}function $t(){const{hasSidebar:o}=U(),e=re("(min-width: 960px)"),t=re("(min-width: 1280px)");return{isAsideEnabled:y(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const ue=[];function Ce(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function _e(o){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const s=Number(t.tagName[1]);return{element:t,title:yt(t),link:"#"+t.id,level:s}});return Pt(e,o)}function yt(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function Pt(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[s,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;o=o.filter(l=>l.level>=s&&l.level<=n),ue.length=0;for(const{element:l,link:v}of o)ue.push({element:l,link:v});const i=[];e:for(let l=0;l=0;d--){const _=o[d];if(_.level{requestAnimationFrame(i),window.addEventListener("scroll",s)}),Ke(()=>{l(location.hash)}),pe(()=>{window.removeEventListener("scroll",s)});function i(){if(!t.value)return;const v=window.scrollY,d=window.innerHeight,_=document.body.offsetHeight,V=Math.abs(v+d-_)<1,b=ue.map(({element:S,link:A})=>({link:A,top:Vt(S)})).filter(({top:S})=>!Number.isNaN(S)).sort((S,A)=>S.top-A.top);if(!b.length){l(null);return}if(v<1){l(null);return}if(V){l(b[b.length-1].link);return}let P=null;for(const{link:S,top:A}of b){if(A>v+Re()+4)break;P=S}l(P)}function l(v){n&&n.classList.remove("active"),v==null?n=null:n=o.value.querySelector(`a[href="${decodeURIComponent(v)}"]`);const d=n;d?(d.classList.add("active"),e.value.style.top=d.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Vt(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}const Lt=["href","title"],Tt=m({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(o){function e({target:t}){const s=t.href.split("#")[1],n=document.getElementById(decodeURIComponent(s));n==null||n.focus({preventScroll:!0})}return(t,s)=>{const n=R("VPDocOutlineItem",!0);return a(),u("ul",{class:I(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),u(M,null,B(t.headers,({children:i,link:l,title:v})=>(a(),u("li",null,[p("a",{class:"outline-link",href:l,onClick:e,title:v},w(v),9,Lt),i!=null&&i.length?(a(),g(n,{key:0,headers:i},null,8,["headers"])):h("",!0)]))),256))],2)}}}),Be=$(Tt,[["__scopeId","data-v-3f927ebe"]]),Nt={class:"content"},wt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},It=m({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=L(),s=Ve([]);x(()=>{s.value=_e(e.value.outline??t.value.outline)});const n=T(),i=T();return St(n,i),(l,v)=>(a(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:I(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:n},[p("div",Nt,[p("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),p("div",wt,w(r(Ce)(r(t))),1),k(Be,{headers:s.value,root:!0},null,8,["headers"])])],2))}}),Mt=$(It,[["__scopeId","data-v-b38bf2ff"]]),At={class:"VPDocAsideCarbonAds"},Ct=m({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,s)=>(a(),u("div",At,[k(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Bt={class:"VPDocAside"},Ht=m({__name:"VPDocAside",setup(o){const{theme:e}=L();return(t,s)=>(a(),u("div",Bt,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),k(Mt),c(t.$slots,"aside-outline-after",{},void 0,!0),s[0]||(s[0]=p("div",{class:"spacer"},null,-1)),c(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),g(Ct,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):h("",!0),c(t.$slots,"aside-ads-after",{},void 0,!0),c(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Et=$(Ht,[["__scopeId","data-v-6d7b3c46"]]);function Dt(){const{theme:o,page:e}=L();return y(()=>{const{text:t="Edit this page",pattern:s=""}=o.value.editLink||{};let n;return typeof s=="function"?n=s(e.value):n=s.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function Ft(){const{page:o,theme:e,frontmatter:t}=L();return y(()=>{var _,V,b,P,S,A,C,N;const s=Ae(e.value.sidebar,o.value.relativePath),n=bt(s),i=Ot(n,H=>H.link.replace(/[?#].*$/,"")),l=i.findIndex(H=>K(o.value.relativePath,H.link)),v=((_=e.value.docFooter)==null?void 0:_.prev)===!1&&!t.value.prev||t.value.prev===!1,d=((V=e.value.docFooter)==null?void 0:V.next)===!1&&!t.value.next||t.value.next===!1;return{prev:v?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((b=i[l-1])==null?void 0:b.docFooterText)??((P=i[l-1])==null?void 0:P.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((S=i[l-1])==null?void 0:S.link)},next:d?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=i[l+1])==null?void 0:A.docFooterText)??((C=i[l+1])==null?void 0:C.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((N=i[l+1])==null?void 0:N.link)}}})}function Ot(o,e){const t=new Set;return o.filter(s=>{const n=e(s);return t.has(n)?!1:t.add(n)})}const D=m({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.tag??(e.href?"a":"span")),s=y(()=>e.href&&Le.test(e.href)||e.target==="_blank");return(n,i)=>(a(),g(E(t.value),{class:I(["VPLink",{link:n.href,"vp-external-link-icon":s.value,"no-icon":n.noIcon}]),href:n.href?r(me)(n.href):void 0,target:n.target??(s.value?"_blank":void 0),rel:n.rel??(s.value?"noreferrer":void 0)},{default:f(()=>[c(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Ut={class:"VPLastUpdated"},jt=["datetime"],Gt=m({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,lang:s}=L(),n=y(()=>new Date(t.value.lastUpdated)),i=y(()=>n.value.toISOString()),l=T("");return z(()=>{Z(()=>{var v,d,_;l.value=new Intl.DateTimeFormat((d=(v=e.value.lastUpdated)==null?void 0:v.formatOptions)!=null&&d.forceLocale?s.value:void 0,((_=e.value.lastUpdated)==null?void 0:_.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(n.value)})}),(v,d)=>{var _;return a(),u("p",Ut,[O(w(((_=r(e).lastUpdated)==null?void 0:_.text)||r(e).lastUpdatedText||"Last updated")+": ",1),p("time",{datetime:i.value},w(l.value),9,jt)])}}}),zt=$(Gt,[["__scopeId","data-v-475f71b8"]]),Kt={key:0,class:"VPDocFooter"},Rt={key:0,class:"edit-info"},Wt={key:0,class:"edit-link"},qt={key:1,class:"last-updated"},Jt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Yt={class:"pager"},Xt=["innerHTML"],Qt=["innerHTML"],Zt={class:"pager"},xt=["innerHTML"],en=["innerHTML"],tn=m({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:s}=L(),n=Dt(),i=Ft(),l=y(()=>e.value.editLink&&s.value.editLink!==!1),v=y(()=>t.value.lastUpdated),d=y(()=>l.value||v.value||i.value.prev||i.value.next);return(_,V)=>{var b,P,S,A;return d.value?(a(),u("footer",Kt,[c(_.$slots,"doc-footer-before",{},void 0,!0),l.value||v.value?(a(),u("div",Rt,[l.value?(a(),u("div",Wt,[k(D,{class:"edit-link-button",href:r(n).url,"no-icon":!0},{default:f(()=>[V[0]||(V[0]=p("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),O(" "+w(r(n).text),1)]),_:1},8,["href"])])):h("",!0),v.value?(a(),u("div",qt,[k(zt)])):h("",!0)])):h("",!0),(b=r(i).prev)!=null&&b.link||(P=r(i).next)!=null&&P.link?(a(),u("nav",Jt,[V[1]||(V[1]=p("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),p("div",Yt,[(S=r(i).prev)!=null&&S.link?(a(),g(D,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:f(()=>{var C;return[p("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,Xt),p("span",{class:"title",innerHTML:r(i).prev.text},null,8,Qt)]}),_:1},8,["href"])):h("",!0)]),p("div",Zt,[(A=r(i).next)!=null&&A.link?(a(),g(D,{key:0,class:"pager-link next",href:r(i).next.link},{default:f(()=>{var C;return[p("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.next)||"Next page"},null,8,xt),p("span",{class:"title",innerHTML:r(i).next.text},null,8,en)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),nn=$(tn,[["__scopeId","data-v-4f9813fa"]]),sn={class:"container"},on={class:"aside-container"},an={class:"aside-content"},rn={class:"content"},ln={class:"content-container"},cn={class:"main"},un=m({__name:"VPDoc",setup(o){const{theme:e}=L(),t=ee(),{hasSidebar:s,hasAside:n,leftAside:i}=U(),l=y(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(v,d)=>{const _=R("Content");return a(),u("div",{class:I(["VPDoc",{"has-sidebar":r(s),"has-aside":r(n)}])},[c(v.$slots,"doc-top",{},void 0,!0),p("div",sn,[r(n)?(a(),u("div",{key:0,class:I(["aside",{"left-aside":r(i)}])},[d[0]||(d[0]=p("div",{class:"aside-curtain"},null,-1)),p("div",on,[p("div",an,[k(Et,null,{"aside-top":f(()=>[c(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),p("div",rn,[p("div",ln,[c(v.$slots,"doc-before",{},void 0,!0),p("main",cn,[k(_,{class:I(["vp-doc",[l.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),k(nn,null,{"doc-footer-before":f(()=>[c(v.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(v.$slots,"doc-after",{},void 0,!0)])])]),c(v.$slots,"doc-bottom",{},void 0,!0)],2)}}}),dn=$(un,[["__scopeId","data-v-83890dd9"]]),vn=m({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.href&&Le.test(e.href)),s=y(()=>e.tag||e.href?"a":"button");return(n,i)=>(a(),g(E(s.value),{class:I(["VPButton",[n.size,n.theme]]),href:n.href?r(me)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:f(()=>[O(w(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),pn=$(vn,[["__scopeId","data-v-14206e74"]]),fn=["src","alt"],hn=m({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const s=R("VPImage",!0);return e.image?(a(),u(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),u("img",G({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(ve)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,fn)):(a(),u(M,{key:1},[k(s,G({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),k(s,G({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),Q=$(hn,[["__scopeId","data-v-35a7d0b8"]]),mn={class:"container"},_n={class:"main"},bn={key:0,class:"name"},kn=["innerHTML"],gn=["innerHTML"],$n=["innerHTML"],yn={key:0,class:"actions"},Pn={key:0,class:"image"},Sn={class:"image-container"},Vn=m({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=q("hero-image-slot-exists");return(t,s)=>(a(),u("div",{class:I(["VPHero",{"has-image":t.image||r(e)}])},[p("div",mn,[p("div",_n,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[t.name?(a(),u("h1",bn,[p("span",{innerHTML:t.name,class:"clip"},null,8,kn)])):h("",!0),t.text?(a(),u("p",{key:1,innerHTML:t.text,class:"text"},null,8,gn)):h("",!0),t.tagline?(a(),u("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,$n)):h("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),u("div",yn,[(a(!0),u(M,null,B(t.actions,n=>(a(),u("div",{key:n.link,class:"action"},[k(pn,{tag:"a",size:"medium",theme:n.theme,text:n.text,href:n.link,target:n.target,rel:n.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),u("div",Pn,[p("div",Sn,[s[0]||(s[0]=p("div",{class:"image-bg"},null,-1)),c(t.$slots,"home-hero-image",{},()=>[t.image?(a(),g(Q,{key:0,class:"image-src",image:t.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),Ln=$(Vn,[["__scopeId","data-v-955009fc"]]),Tn=m({__name:"VPHomeHero",setup(o){const{frontmatter:e}=L();return(t,s)=>r(e).hero?(a(),g(Ln,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":f(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":f(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":f(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":f(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":f(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),Nn={class:"box"},wn={key:0,class:"icon"},In=["innerHTML"],Mn=["innerHTML"],An=["innerHTML"],Cn={key:4,class:"link-text"},Bn={class:"link-text-value"},Hn=m({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(a(),g(D,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:f(()=>[p("article",Nn,[typeof e.icon=="object"&&e.icon.wrap?(a(),u("div",wn,[k(Q,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),g(Q,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,In)):h("",!0),p("h2",{class:"title",innerHTML:e.title},null,8,Mn),e.details?(a(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,An)):h("",!0),e.linkText?(a(),u("div",Cn,[p("p",Bn,[O(w(e.linkText)+" ",1),t[0]||(t[0]=p("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),En=$(Hn,[["__scopeId","data-v-f5e9645b"]]),Dn={key:0,class:"VPFeatures"},Fn={class:"container"},On={class:"items"},Un=m({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=y(()=>{const s=e.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,n)=>s.features?(a(),u("div",Dn,[p("div",Fn,[p("div",On,[(a(!0),u(M,null,B(s.features,i=>(a(),u("div",{key:i.title,class:I(["item",[t.value]])},[k(En,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):h("",!0)}}),jn=$(Un,[["__scopeId","data-v-d0a190d7"]]),Gn=m({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=L();return(t,s)=>r(e).features?(a(),g(jn,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):h("",!0)}}),zn=m({__name:"VPHomeContent",setup(o){const{width:e}=We({initialWidth:0,includeScrollbar:!1});return(t,s)=>(a(),u("div",{class:"vp-doc container",style:Te(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),Kn=$(zn,[["__scopeId","data-v-7a48a447"]]),Rn={class:"VPHome"},Wn=m({__name:"VPHome",setup(o){const{frontmatter:e}=L();return(t,s)=>{const n=R("Content");return a(),u("div",Rn,[c(t.$slots,"home-hero-before",{},void 0,!0),k(Tn,null,{"home-hero-info-before":f(()=>[c(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(t.$slots,"home-hero-after",{},void 0,!0),c(t.$slots,"home-features-before",{},void 0,!0),k(Gn),c(t.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),g(Kn,{key:0},{default:f(()=>[k(n)]),_:1})):(a(),g(n,{key:1}))])}}}),qn=$(Wn,[["__scopeId","data-v-cbb6ec48"]]),Jn={},Yn={class:"VPPage"};function Xn(o,e){const t=R("Content");return a(),u("div",Yn,[c(o.$slots,"page-top"),k(t),c(o.$slots,"page-bottom")])}const Qn=$(Jn,[["render",Xn]]),Zn=m({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=L(),{hasSidebar:s}=U();return(n,i)=>(a(),u("div",{class:I(["VPContent",{"has-sidebar":r(s),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?c(n.$slots,"not-found",{key:0},()=>[k(mt)],!0):r(t).layout==="page"?(a(),g(Qn,{key:1},{"page-top":f(()=>[c(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),g(qn,{key:2},{"home-hero-before":f(()=>[c(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),g(E(r(t).layout),{key:3})):(a(),g(dn,{key:4},{"doc-top":f(()=>[c(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":f(()=>[c(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":f(()=>[c(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":f(()=>[c(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":f(()=>[c(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),xn=$(Zn,[["__scopeId","data-v-91765379"]]),es={class:"container"},ts=["innerHTML"],ns=["innerHTML"],ss=m({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=L(),{hasSidebar:s}=U();return(n,i)=>r(e).footer&&r(t).footer!==!1?(a(),u("footer",{key:0,class:I(["VPFooter",{"has-sidebar":r(s)}])},[p("div",es,[r(e).footer.message?(a(),u("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,ts)):h("",!0),r(e).footer.copyright?(a(),u("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,ns)):h("",!0)])],2)):h("",!0)}}),os=$(ss,[["__scopeId","data-v-c970a860"]]);function as(){const{theme:o,frontmatter:e}=L(),t=Ve([]),s=y(()=>t.value.length>0);return x(()=>{t.value=_e(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:s}}const rs={class:"menu-text"},is={class:"header"},ls={class:"outline"},cs=m({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=L(),s=T(!1),n=T(0),i=T(),l=T();function v(b){var P;(P=i.value)!=null&&P.contains(b.target)||(s.value=!1)}F(s,b=>{if(b){document.addEventListener("click",v);return}document.removeEventListener("click",v)}),ie("Escape",()=>{s.value=!1}),x(()=>{s.value=!1});function d(){s.value=!s.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function _(b){b.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Ne(()=>{s.value=!1}))}function V(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(b,P)=>(a(),u("div",{class:"VPLocalNavOutlineDropdown",style:Te({"--vp-vh":n.value+"px"}),ref_key:"main",ref:i},[b.headers.length>0?(a(),u("button",{key:0,onClick:d,class:I({open:s.value})},[p("span",rs,w(r(Ce)(r(t))),1),P[0]||(P[0]=p("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(a(),u("button",{key:1,onClick:V},w(r(t).returnToTopLabel||"Return to top"),1)),k(de,{name:"flyout"},{default:f(()=>[s.value?(a(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:_},[p("div",is,[p("a",{class:"top-link",href:"#",onClick:V},w(r(t).returnToTopLabel||"Return to top"),1)]),p("div",ls,[k(Be,{headers:b.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),us=$(cs,[["__scopeId","data-v-bc9dc845"]]),ds={class:"container"},vs=["aria-expanded"],ps={class:"menu-text"},fs=m({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=L(),{hasSidebar:s}=U(),{headers:n}=as(),{y:i}=we(),l=T(0);z(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),x(()=>{n.value=_e(t.value.outline??e.value.outline)});const v=y(()=>n.value.length===0),d=y(()=>v.value&&!s.value),_=y(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:v.value,fixed:d.value}));return(V,b)=>r(t).layout!=="home"&&(!d.value||r(i)>=l.value)?(a(),u("div",{key:0,class:I(_.value)},[p("div",ds,[r(s)?(a(),u("button",{key:0,class:"menu","aria-expanded":V.open,"aria-controls":"VPSidebarNav",onClick:b[0]||(b[0]=P=>V.$emit("open-menu"))},[b[1]||(b[1]=p("span",{class:"vpi-align-left menu-icon"},null,-1)),p("span",ps,w(r(e).sidebarMenuLabel||"Menu"),1)],8,vs)):h("",!0),k(us,{headers:r(n),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),hs=$(fs,[["__scopeId","data-v-070ab83d"]]);function ms(){const o=T(!1);function e(){o.value=!0,window.addEventListener("resize",n)}function t(){o.value=!1,window.removeEventListener("resize",n)}function s(){o.value?t():e()}function n(){window.outerWidth>=768&&t()}const i=ee();return F(()=>i.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:s}}const _s={},bs={class:"VPSwitch",type:"button",role:"switch"},ks={class:"check"},gs={key:0,class:"icon"};function $s(o,e){return a(),u("button",bs,[p("span",ks,[o.$slots.default?(a(),u("span",gs,[c(o.$slots,"default",{},void 0,!0)])):h("",!0)])])}const ys=$(_s,[["render",$s],["__scopeId","data-v-4a1c76db"]]),Ps=m({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=L(),s=q("toggle-appearance",()=>{e.value=!e.value}),n=T("");return fe(()=>{n.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,l)=>(a(),g(ys,{title:n.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(s)},{default:f(()=>l[0]||(l[0]=[p("span",{class:"vpi-sun sun"},null,-1),p("span",{class:"vpi-moon moon"},null,-1)])),_:1},8,["title","aria-checked","onClick"]))}}),be=$(Ps,[["__scopeId","data-v-e40a8bb6"]]),Ss={key:0,class:"VPNavBarAppearance"},Vs=m({__name:"VPNavBarAppearance",setup(o){const{site:e}=L();return(t,s)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Ss,[k(be)])):h("",!0)}}),Ls=$(Vs,[["__scopeId","data-v-af096f4a"]]),ke=T();let He=!1,ae=0;function Ts(o){const e=T(!1);if(te){!He&&Ns(),ae++;const t=F(ke,s=>{var n,i,l;s===o.el.value||(n=o.el.value)!=null&&n.contains(s)?(e.value=!0,(i=o.onFocus)==null||i.call(o)):(e.value=!1,(l=o.onBlur)==null||l.call(o))});pe(()=>{t(),ae--,ae||ws()})}return qe(e)}function Ns(){document.addEventListener("focusin",Ee),He=!0,ke.value=document.activeElement}function ws(){document.removeEventListener("focusin",Ee)}function Ee(){ke.value=document.activeElement}const Is={class:"VPMenuLink"},Ms=m({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=L();return(t,s)=>(a(),u("div",Is,[k(D,{class:I({active:r(K)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:f(()=>[O(w(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),ne=$(Ms,[["__scopeId","data-v-8b74d055"]]),As={class:"VPMenuGroup"},Cs={key:0,class:"title"},Bs=m({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),u("div",As,[e.text?(a(),u("p",Cs,w(e.text),1)):h("",!0),(a(!0),u(M,null,B(e.items,s=>(a(),u(M,null,["link"in s?(a(),g(ne,{key:0,item:s},null,8,["item"])):h("",!0)],64))),256))]))}}),Hs=$(Bs,[["__scopeId","data-v-48c802d0"]]),Es={class:"VPMenu"},Ds={key:0,class:"items"},Fs=m({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(a(),u("div",Es,[e.items?(a(),u("div",Ds,[(a(!0),u(M,null,B(e.items,s=>(a(),u(M,{key:JSON.stringify(s)},["link"in s?(a(),g(ne,{key:0,item:s},null,8,["item"])):"component"in s?(a(),g(E(s.component),G({key:1,ref_for:!0},s.props),null,16)):(a(),g(Hs,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):h("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),Os=$(Fs,[["__scopeId","data-v-7dd3104a"]]),Us=["aria-expanded","aria-label"],js={key:0,class:"text"},Gs=["innerHTML"],zs={key:1,class:"vpi-more-horizontal icon"},Ks={class:"menu"},Rs=m({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=T(!1),t=T();Ts({el:t,onBlur:s});function s(){e.value=!1}return(n,i)=>(a(),u("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=l=>e.value=!0),onMouseleave:i[2]||(i[2]=l=>e.value=!1)},[p("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":n.label,onClick:i[0]||(i[0]=l=>e.value=!e.value)},[n.button||n.icon?(a(),u("span",js,[n.icon?(a(),u("span",{key:0,class:I([n.icon,"option-icon"])},null,2)):h("",!0),n.button?(a(),u("span",{key:1,innerHTML:n.button},null,8,Gs)):h("",!0),i[3]||(i[3]=p("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(a(),u("span",zs))],8,Us),p("div",Ks,[k(Os,{items:n.items},{default:f(()=>[c(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),ge=$(Rs,[["__scopeId","data-v-e5380155"]]),Ws=["href","aria-label","innerHTML"],qs=m({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=y(()=>typeof e.icon=="object"?e.icon.svg:``);return(s,n)=>(a(),u("a",{class:"VPSocialLink no-icon",href:s.link,"aria-label":s.ariaLabel??(typeof s.icon=="string"?s.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,Ws))}}),Js=$(qs,[["__scopeId","data-v-717b8b75"]]),Ys={class:"VPSocialLinks"},Xs=m({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(a(),u("div",Ys,[(a(!0),u(M,null,B(e.links,({link:s,icon:n,ariaLabel:i})=>(a(),g(Js,{key:s,icon:n,link:s,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),$e=$(Xs,[["__scopeId","data-v-ee7a9424"]]),Qs={key:0,class:"group translations"},Zs={class:"trans-title"},xs={key:1,class:"group"},eo={class:"item appearance"},to={class:"label"},no={class:"appearance-action"},so={key:2,class:"group"},oo={class:"item social-links"},ao=m({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=L(),{localeLinks:s,currentLang:n}=Y({correspondingLink:!0}),i=y(()=>s.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(l,v)=>i.value?(a(),g(ge,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:f(()=>[r(s).length&&r(n).label?(a(),u("div",Qs,[p("p",Zs,w(r(n).label),1),(a(!0),u(M,null,B(r(s),d=>(a(),g(ne,{key:d.link,item:d},null,8,["item"]))),128))])):h("",!0),r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",xs,[p("div",eo,[p("p",to,w(r(t).darkModeSwitchLabel||"Appearance"),1),p("div",no,[k(be)])])])):h("",!0),r(t).socialLinks?(a(),u("div",so,[p("div",oo,[k($e,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),ro=$(ao,[["__scopeId","data-v-925effce"]]),io=["aria-expanded"],lo=m({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(a(),u("button",{type:"button",class:I(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=s=>e.$emit("click"))},t[1]||(t[1]=[p("span",{class:"container"},[p("span",{class:"top"}),p("span",{class:"middle"}),p("span",{class:"bottom"})],-1)]),10,io))}}),co=$(lo,[["__scopeId","data-v-5dea55bf"]]),uo=["innerHTML"],vo=m({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=L();return(t,s)=>(a(),g(D,{class:I({VPNavBarMenuLink:!0,active:r(K)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,noIcon:t.item.noIcon,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:f(()=>[p("span",{innerHTML:t.item.text},null,8,uo)]),_:1},8,["class","href","noIcon","target","rel"]))}}),po=$(vo,[["__scopeId","data-v-ed5ac1f6"]]),fo=m({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=L(),s=i=>"component"in i?!1:"link"in i?K(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(s),n=y(()=>s(e.item));return(i,l)=>(a(),g(ge,{class:I({VPNavBarMenuGroup:!0,active:r(K)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||n.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),ho={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},mo=m({__name:"VPNavBarMenu",setup(o){const{theme:e}=L();return(t,s)=>r(e).nav?(a(),u("nav",ho,[s[0]||(s[0]=p("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(a(!0),u(M,null,B(r(e).nav,n=>(a(),u(M,{key:JSON.stringify(n)},["link"in n?(a(),g(po,{key:0,item:n},null,8,["item"])):"component"in n?(a(),g(E(n.component),G({key:1,ref_for:!0},n.props),null,16)):(a(),g(fo,{key:2,item:n},null,8,["item"]))],64))),128))])):h("",!0)}}),_o=$(mo,[["__scopeId","data-v-e6d46098"]]);function bo(o){const{localeIndex:e,theme:t}=L();function s(n){var A,C,N;const i=n.split("."),l=(A=t.value.search)==null?void 0:A.options,v=l&&typeof l=="object",d=v&&((N=(C=l.locales)==null?void 0:C[e.value])==null?void 0:N.translations)||null,_=v&&l.translations||null;let V=d,b=_,P=o;const S=i.pop();for(const H of i){let j=null;const W=P==null?void 0:P[H];W&&(j=P=W);const se=b==null?void 0:b[H];se&&(j=b=se);const oe=V==null?void 0:V[H];oe&&(j=V=oe),W||(P=j),se||(b=j),oe||(V=j)}return(V==null?void 0:V[S])??(b==null?void 0:b[S])??(P==null?void 0:P[S])??""}return s}const ko=["aria-label"],go={class:"DocSearch-Button-Container"},$o={class:"DocSearch-Button-Placeholder"},ye=m({__name:"VPNavBarSearchButton",setup(o){const t=bo({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(s,n)=>(a(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[p("span",go,[n[0]||(n[0]=p("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),p("span",$o,w(r(t)("button.buttonText")),1)]),n[1]||(n[1]=p("span",{class:"DocSearch-Button-Keys"},[p("kbd",{class:"DocSearch-Button-Key"}),p("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,ko))}}),yo={class:"VPNavBarSearch"},Po={id:"local-search"},So={key:1,id:"docsearch"},Vo=m({__name:"VPNavBarSearch",setup(o){const e=Je(()=>Ye(()=>import("./VPLocalSearchBox.CH-hHDaQ.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:s}=L(),n=T(!1),i=T(!1);z(()=>{});function l(){n.value||(n.value=!0,setTimeout(v,16))}function v(){const b=new Event("keydown");b.key="k",b.metaKey=!0,window.dispatchEvent(b),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||v()},16)}function d(b){const P=b.target,S=P.tagName;return P.isContentEditable||S==="INPUT"||S==="SELECT"||S==="TEXTAREA"}const _=T(!1);ie("k",b=>{(b.ctrlKey||b.metaKey)&&(b.preventDefault(),_.value=!0)}),ie("/",b=>{d(b)||(b.preventDefault(),_.value=!0)});const V="local";return(b,P)=>{var S;return a(),u("div",yo,[r(V)==="local"?(a(),u(M,{key:0},[_.value?(a(),g(r(e),{key:0,onClose:P[0]||(P[0]=A=>_.value=!1)})):h("",!0),p("div",Po,[k(ye,{onClick:P[1]||(P[1]=A=>_.value=!0)})])],64)):r(V)==="algolia"?(a(),u(M,{key:1},[n.value?(a(),g(r(t),{key:0,algolia:((S=r(s).search)==null?void 0:S.options)??r(s).algolia,onVnodeBeforeMount:P[2]||(P[2]=A=>i.value=!0)},null,8,["algolia"])):h("",!0),i.value?h("",!0):(a(),u("div",So,[k(ye,{onClick:l})]))],64)):h("",!0)])}}}),Lo=m({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=L();return(t,s)=>r(e).socialLinks?(a(),g($e,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),To=$(Lo,[["__scopeId","data-v-164c457f"]]),No=["href","rel","target"],wo={key:1},Io={key:2},Mo=m({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=L(),{hasSidebar:s}=U(),{currentLang:n}=Y(),i=y(()=>{var d;return typeof t.value.logoLink=="string"?t.value.logoLink:(d=t.value.logoLink)==null?void 0:d.link}),l=y(()=>{var d;return typeof t.value.logoLink=="string"||(d=t.value.logoLink)==null?void 0:d.rel}),v=y(()=>{var d;return typeof t.value.logoLink=="string"||(d=t.value.logoLink)==null?void 0:d.target});return(d,_)=>(a(),u("div",{class:I(["VPNavBarTitle",{"has-sidebar":r(s)}])},[p("a",{class:"title",href:i.value??r(me)(r(n).link),rel:l.value,target:v.value},[c(d.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),g(Q,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):h("",!0),r(t).siteTitle?(a(),u("span",wo,w(r(t).siteTitle),1)):r(t).siteTitle===void 0?(a(),u("span",Io,w(r(e).title),1)):h("",!0),c(d.$slots,"nav-bar-title-after",{},void 0,!0)],8,No)],2))}}),Ao=$(Mo,[["__scopeId","data-v-28a961f9"]]),Co={class:"items"},Bo={class:"title"},Ho=m({__name:"VPNavBarTranslations",setup(o){const{theme:e}=L(),{localeLinks:t,currentLang:s}=Y({correspondingLink:!0});return(n,i)=>r(t).length&&r(s).label?(a(),g(ge,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:f(()=>[p("div",Co,[p("p",Bo,w(r(s).label),1),(a(!0),u(M,null,B(r(t),l=>(a(),g(ne,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}}),Eo=$(Ho,[["__scopeId","data-v-c80d9ad0"]]),Do={class:"wrapper"},Fo={class:"container"},Oo={class:"title"},Uo={class:"content"},jo={class:"content-body"},Go=m({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const e=o,{y:t}=we(),{hasSidebar:s}=U(),{frontmatter:n}=L(),i=T({});return fe(()=>{i.value={"has-sidebar":s.value,home:n.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(l,v)=>(a(),u("div",{class:I(["VPNavBar",i.value])},[p("div",Do,[p("div",Fo,[p("div",Oo,[k(Ao,null,{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),p("div",Uo,[p("div",jo,[c(l.$slots,"nav-bar-content-before",{},void 0,!0),k(Vo,{class:"search"}),k(_o,{class:"menu"}),k(Eo,{class:"translations"}),k(Ls,{class:"appearance"}),k(To,{class:"social-links"}),k(ro,{class:"extra"}),c(l.$slots,"nav-bar-content-after",{},void 0,!0),k(co,{class:"hamburger",active:l.isScreenOpen,onClick:v[0]||(v[0]=d=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),v[1]||(v[1]=p("div",{class:"divider"},[p("div",{class:"divider-line"})],-1))],2))}}),zo=$(Go,[["__scopeId","data-v-822684d1"]]),Ko={key:0,class:"VPNavScreenAppearance"},Ro={class:"text"},Wo=m({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=L();return(s,n)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Ko,[p("p",Ro,w(r(t).darkModeSwitchLabel||"Appearance"),1),k(be)])):h("",!0)}}),qo=$(Wo,[["__scopeId","data-v-ffb44008"]]),Jo=m({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=q("close-screen");return(t,s)=>(a(),g(D,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),Yo=$(Jo,[["__scopeId","data-v-27d04aeb"]]),Xo=m({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=q("close-screen");return(t,s)=>(a(),g(D,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e)},{default:f(()=>[O(w(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),De=$(Xo,[["__scopeId","data-v-7179dbb7"]]),Qo={class:"VPNavScreenMenuGroupSection"},Zo={key:0,class:"title"},xo=m({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),u("div",Qo,[e.text?(a(),u("p",Zo,w(e.text),1)):h("",!0),(a(!0),u(M,null,B(e.items,s=>(a(),g(De,{key:s.text,item:s},null,8,["item"]))),128))]))}}),ea=$(xo,[["__scopeId","data-v-4b8941ac"]]),ta=["aria-controls","aria-expanded"],na=["innerHTML"],sa=["id"],oa={key:0,class:"item"},aa={key:1,class:"item"},ra={key:2,class:"group"},ia=m({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=T(!1),s=y(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(i,l)=>(a(),u("div",{class:I(["VPNavScreenMenuGroup",{open:t.value}])},[p("button",{class:"button","aria-controls":s.value,"aria-expanded":t.value,onClick:n},[p("span",{class:"button-text",innerHTML:i.text},null,8,na),l[0]||(l[0]=p("span",{class:"vpi-plus button-icon"},null,-1))],8,ta),p("div",{id:s.value,class:"items"},[(a(!0),u(M,null,B(i.items,v=>(a(),u(M,{key:JSON.stringify(v)},["link"in v?(a(),u("div",oa,[k(De,{item:v},null,8,["item"])])):"component"in v?(a(),u("div",aa,[(a(),g(E(v.component),G({ref_for:!0},v.props,{"screen-menu":""}),null,16))])):(a(),u("div",ra,[k(ea,{text:v.text,items:v.items},null,8,["text","items"])]))],64))),128))],8,sa)],2))}}),la=$(ia,[["__scopeId","data-v-875057a5"]]),ca={key:0,class:"VPNavScreenMenu"},ua=m({__name:"VPNavScreenMenu",setup(o){const{theme:e}=L();return(t,s)=>r(e).nav?(a(),u("nav",ca,[(a(!0),u(M,null,B(r(e).nav,n=>(a(),u(M,{key:JSON.stringify(n)},["link"in n?(a(),g(Yo,{key:0,item:n},null,8,["item"])):"component"in n?(a(),g(E(n.component),G({key:1,ref_for:!0},n.props,{"screen-menu":""}),null,16)):(a(),g(la,{key:2,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),da=m({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=L();return(t,s)=>r(e).socialLinks?(a(),g($e,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),va={class:"list"},pa=m({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=Y({correspondingLink:!0}),s=T(!1);function n(){s.value=!s.value}return(i,l)=>r(e).length&&r(t).label?(a(),u("div",{key:0,class:I(["VPNavScreenTranslations",{open:s.value}])},[p("button",{class:"title",onClick:n},[l[0]||(l[0]=p("span",{class:"vpi-languages icon lang"},null,-1)),O(" "+w(r(t).label)+" ",1),l[1]||(l[1]=p("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),p("ul",va,[(a(!0),u(M,null,B(r(e),v=>(a(),u("li",{key:v.link,class:"item"},[k(D,{class:"link",href:v.link},{default:f(()=>[O(w(v.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),fa=$(pa,[["__scopeId","data-v-362991c2"]]),ha={class:"container"},ma=m({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=T(null),t=Ie(te?document.body:null);return(s,n)=>(a(),g(de,{name:"fade",onEnter:n[0]||(n[0]=i=>t.value=!0),onAfterLeave:n[1]||(n[1]=i=>t.value=!1)},{default:f(()=>[s.open?(a(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[p("div",ha,[c(s.$slots,"nav-screen-content-before",{},void 0,!0),k(ua,{class:"menu"}),k(fa,{class:"translations"}),k(qo,{class:"appearance"}),k(da,{class:"social-links"}),c(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),_a=$(ma,[["__scopeId","data-v-833aabba"]]),ba={key:0,class:"VPNav"},ka=m({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:s}=ms(),{frontmatter:n}=L(),i=y(()=>n.value.navbar!==!1);return he("close-screen",t),Z(()=>{te&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(l,v)=>i.value?(a(),u("header",ba,[k(zo,{"is-screen-open":r(e),onToggleScreen:r(s)},{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),k(_a,{open:r(e)},{"nav-screen-content-before":f(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),ga=$(ka,[["__scopeId","data-v-f1e365da"]]),$a=["role","tabindex"],ya={key:1,class:"items"},Pa=m({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:s,isLink:n,isActiveLink:i,hasActiveLink:l,hasChildren:v,toggle:d}=gt(y(()=>e.item)),_=y(()=>v.value?"section":"div"),V=y(()=>n.value?"a":"div"),b=y(()=>v.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),P=y(()=>n.value?void 0:"button"),S=y(()=>[[`level-${e.depth}`],{collapsible:s.value},{collapsed:t.value},{"is-link":n.value},{"is-active":i.value},{"has-active":l.value}]);function A(N){"key"in N&&N.key!=="Enter"||!e.item.link&&d()}function C(){e.item.link&&d()}return(N,H)=>{const j=R("VPSidebarItem",!0);return a(),g(E(_.value),{class:I(["VPSidebarItem",S.value])},{default:f(()=>[N.item.text?(a(),u("div",G({key:0,class:"item",role:P.value},Qe(N.item.items?{click:A,keydown:A}:{},!0),{tabindex:N.item.items&&0}),[H[1]||(H[1]=p("div",{class:"indicator"},null,-1)),N.item.link?(a(),g(D,{key:0,tag:V.value,class:"link",href:N.item.link,rel:N.item.rel,target:N.item.target},{default:f(()=>[(a(),g(E(b.value),{class:"text",innerHTML:N.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),g(E(b.value),{key:1,class:"text",innerHTML:N.item.text},null,8,["innerHTML"])),N.item.collapsed!=null&&N.item.items&&N.item.items.length?(a(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:C,onKeydown:Xe(C,["enter"]),tabindex:"0"},H[0]||(H[0]=[p("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):h("",!0)],16,$a)):h("",!0),N.item.items&&N.item.items.length?(a(),u("div",ya,[N.depth<5?(a(!0),u(M,{key:0},B(N.item.items,W=>(a(),g(j,{key:W.text,item:W,depth:N.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),Sa=$(Pa,[["__scopeId","data-v-196b2e5f"]]),Va=m({__name:"VPSidebarGroup",props:{items:{}},setup(o){const e=T(!0);let t=null;return z(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),Ze(()=>{t!=null&&(clearTimeout(t),t=null)}),(s,n)=>(a(!0),u(M,null,B(s.items,i=>(a(),u("div",{key:i.text,class:I(["group",{"no-transition":e.value}])},[k(Sa,{item:i,depth:0},null,8,["item"])],2))),128))}}),La=$(Va,[["__scopeId","data-v-9e426adc"]]),Ta={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Na=m({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const{sidebarGroups:e,hasSidebar:t}=U(),s=o,n=T(null),i=Ie(te?document.body:null);F([s,n],()=>{var v;s.open?(i.value=!0,(v=n.value)==null||v.focus()):i.value=!1},{immediate:!0,flush:"post"});const l=T(0);return F(e,()=>{l.value+=1},{deep:!0}),(v,d)=>r(t)?(a(),u("aside",{key:0,class:I(["VPSidebar",{open:v.open}]),ref_key:"navEl",ref:n,onClick:d[0]||(d[0]=xe(()=>{},["stop"]))},[d[2]||(d[2]=p("div",{class:"curtain"},null,-1)),p("nav",Ta,[d[1]||(d[1]=p("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),c(v.$slots,"sidebar-nav-before",{},void 0,!0),(a(),g(La,{items:r(e),key:l.value},null,8,["items"])),c(v.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),wa=$(Na,[["__scopeId","data-v-18756405"]]),Ia=m({__name:"VPSkipLink",setup(o){const e=ee(),t=T();F(()=>e.path,()=>t.value.focus());function s({target:n}){const i=document.getElementById(decodeURIComponent(n.hash).slice(1));if(i){const l=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",l)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",l),i.focus(),window.scrollTo(0,0)}}return(n,i)=>(a(),u(M,null,[p("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),p("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}}),Ma=$(Ia,[["__scopeId","data-v-c3508ec8"]]),Aa=m({__name:"Layout",setup(o){const{isOpen:e,open:t,close:s}=U(),n=ee();F(()=>n.path,s),kt(e,s);const{frontmatter:i}=L(),l=Me(),v=y(()=>!!l["home-hero-image"]);return he("hero-image-slot-exists",v),(d,_)=>{const V=R("Content");return r(i).layout!==!1?(a(),u("div",{key:0,class:I(["Layout",r(i).pageClass])},[c(d.$slots,"layout-top",{},void 0,!0),k(Ma),k(rt,{class:"backdrop",show:r(e),onClick:r(s)},null,8,["show","onClick"]),k(ga,null,{"nav-bar-title-before":f(()=>[c(d.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(d.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(d.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(d.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":f(()=>[c(d.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(d.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),k(hs,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),k(wa,{open:r(e)},{"sidebar-nav-before":f(()=>[c(d.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":f(()=>[c(d.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),k(xn,null,{"page-top":f(()=>[c(d.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(d.$slots,"page-bottom",{},void 0,!0)]),"not-found":f(()=>[c(d.$slots,"not-found",{},void 0,!0)]),"home-hero-before":f(()=>[c(d.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(d.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(d.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(d.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(d.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(d.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(d.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(d.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(d.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":f(()=>[c(d.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(d.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(d.$slots,"doc-after",{},void 0,!0)]),"doc-top":f(()=>[c(d.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(d.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":f(()=>[c(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),k(os),c(d.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),g(V,{key:1}))}}}),Ca=$(Aa,[["__scopeId","data-v-a9a9e638"]]),Pe={Layout:Ca,enhanceApp:({app:o})=>{o.component("Badge",st)}},Ba=o=>{if(typeof document>"u")return{stabilizeScrollPosition:n=>async(...i)=>n(...i)};const e=document.documentElement;return{stabilizeScrollPosition:s=>async(...n)=>{const i=s(...n),l=o.value;if(!l)return i;const v=l.offsetTop-e.scrollTop;return await Ne(),e.scrollTop=l.offsetTop-v,i}}},Fe="vitepress:tabSharedState",J=typeof localStorage<"u"?localStorage:null,Oe="vitepress:tabsSharedState",Ha=()=>{const o=J==null?void 0:J.getItem(Oe);if(o)try{return JSON.parse(o)}catch{}return{}},Ea=o=>{J&&J.setItem(Oe,JSON.stringify(o))},Da=o=>{const e=et({});F(()=>e.content,(t,s)=>{t&&s&&Ea(t)},{deep:!0}),o.provide(Fe,e)},Fa=(o,e)=>{const t=q(Fe);if(!t)throw new Error("[vitepress-plugin-tabs] TabsSharedState should be injected");z(()=>{t.content||(t.content=Ha())});const s=T(),n=y({get(){var d;const l=e.value,v=o.value;if(l){const _=(d=t.content)==null?void 0:d[l];if(_&&v.includes(_))return _}else{const _=s.value;if(_)return _}return v[0]},set(l){const v=e.value;v?t.content&&(t.content[v]=l):s.value=l}});return{selected:n,select:l=>{n.value=l}}};let Se=0;const Oa=()=>(Se++,""+Se);function Ua(){const o=Me();return y(()=>{var s;const t=(s=o.default)==null?void 0:s.call(o);return t?t.filter(n=>typeof n.type=="object"&&"__name"in n.type&&n.type.__name==="PluginTabsTab"&&n.props).map(n=>{var i;return(i=n.props)==null?void 0:i.label}):[]})}const Ue="vitepress:tabSingleState",ja=o=>{he(Ue,o)},Ga=()=>{const o=q(Ue);if(!o)throw new Error("[vitepress-plugin-tabs] TabsSingleState should be injected");return o},za={class:"plugin-tabs"},Ka=["id","aria-selected","aria-controls","tabindex","onClick"],Ra=m({__name:"PluginTabs",props:{sharedStateKey:{}},setup(o){const e=o,t=Ua(),{selected:s,select:n}=Fa(t,tt(e,"sharedStateKey")),i=T(),{stabilizeScrollPosition:l}=Ba(i),v=l(n),d=T([]),_=b=>{var A;const P=t.value.indexOf(s.value);let S;b.key==="ArrowLeft"?S=P>=1?P-1:t.value.length-1:b.key==="ArrowRight"&&(S=P(a(),u("div",za,[p("div",{ref_key:"tablist",ref:i,class:"plugin-tabs--tab-list",role:"tablist",onKeydown:_},[(a(!0),u(M,null,B(r(t),S=>(a(),u("button",{id:`tab-${S}-${r(V)}`,ref_for:!0,ref_key:"buttonRefs",ref:d,key:S,role:"tab",class:"plugin-tabs--tab","aria-selected":S===r(s),"aria-controls":`panel-${S}-${r(V)}`,tabindex:S===r(s)?0:-1,onClick:()=>r(v)(S)},w(S),9,Ka))),128))],544),c(b.$slots,"default")]))}}),Wa=["id","aria-labelledby"],qa=m({__name:"PluginTabsTab",props:{label:{}},setup(o){const{uid:e,selected:t}=Ga();return(s,n)=>r(t)===s.label?(a(),u("div",{key:0,id:`panel-${s.label}-${r(e)}`,class:"plugin-tabs--content",role:"tabpanel",tabindex:"0","aria-labelledby":`tab-${s.label}-${r(e)}`},[c(s.$slots,"default",{},void 0,!0)],8,Wa)):h("",!0)}}),Ja=$(qa,[["__scopeId","data-v-9b0d03d2"]]),Ya=o=>{Da(o),o.component("PluginTabs",Ra),o.component("PluginTabsTab",Ja)},Qa={extends:Pe,Layout(){return nt(Pe.Layout,null,{})},enhanceApp({app:o,router:e,siteData:t}){Ya(o)}};export{Qa as R,bo as c,L as u}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.Dk9VxXMu.js","assets/chunks/framework.BtBDBbTG.js"])))=>i.map(i=>d[i]); +import{d as m,o as a,c as u,r as c,n as I,a as O,t as w,b as g,w as f,e as h,T as de,_ as $,u as je,i as Ge,f as ze,g as ve,h as y,j as p,k as r,l as K,m as re,p as T,q as F,s as Z,v as z,x as pe,y as fe,z as Ke,A as Re,B as R,F as M,C as B,D as Ve,E as x,G as k,H as E,I as Le,J as ee,K as G,L as q,M as We,N as Te,O as ie,P as Ne,Q as we,R as te,S as qe,U as Je,V as Ye,W as Ie,X as he,Y as Xe,Z as Qe,$ as Ze,a0 as xe,a1 as Me,a2 as et,a3 as tt,a4 as nt}from"./framework.BtBDBbTG.js";const st=m({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(o){return(e,t)=>(a(),u("span",{class:I(["VPBadge",e.type])},[c(e.$slots,"default",{},()=>[O(w(e.text),1)])],2))}}),ot={key:0,class:"VPBackdrop"},at=m({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(a(),g(de,{name:"fade"},{default:f(()=>[e.show?(a(),u("div",ot)):h("",!0)]),_:1}))}}),rt=$(at,[["__scopeId","data-v-b06cdb19"]]),L=je;function it(o,e){let t,s=!1;return()=>{t&&clearTimeout(t),s?t=setTimeout(o,e):(o(),(s=!0)&&setTimeout(()=>s=!1,e))}}function le(o){return/^\//.test(o)?o:`/${o}`}function me(o){const{pathname:e,search:t,hash:s,protocol:n}=new URL(o,"http://a.com");if(Ge(o)||o.startsWith("#")||!n.startsWith("http")||!ze(e))return o;const{site:i}=L(),l=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${s}`);return ve(l)}function Y({correspondingLink:o=!1}={}){const{site:e,localeIndex:t,page:s,theme:n,hash:i}=L(),l=y(()=>{var d,_;return{label:(d=e.value.locales[t.value])==null?void 0:d.label,link:((_=e.value.locales[t.value])==null?void 0:_.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:y(()=>Object.entries(e.value.locales).flatMap(([d,_])=>l.value.label===_.label?[]:{text:_.label,link:lt(_.link||(d==="root"?"/":`/${d}/`),n.value.i18nRouting!==!1&&o,s.value.relativePath.slice(l.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:l}}function lt(o,e,t,s){return e?o.replace(/\/$/,"")+le(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):o}const ct={class:"NotFound"},ut={class:"code"},dt={class:"title"},vt={class:"quote"},pt={class:"action"},ft=["href","aria-label"],ht=m({__name:"NotFound",setup(o){const{theme:e}=L(),{currentLang:t}=Y();return(s,n)=>{var i,l,v,d,_;return a(),u("div",ct,[p("p",ut,w(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),p("h1",dt,w(((l=r(e).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),n[0]||(n[0]=p("div",{class:"divider"},null,-1)),p("blockquote",vt,w(((v=r(e).notFound)==null?void 0:v.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),p("div",pt,[p("a",{class:"link",href:r(ve)(r(t).link),"aria-label":((d=r(e).notFound)==null?void 0:d.linkLabel)??"go to home"},w(((_=r(e).notFound)==null?void 0:_.linkText)??"Take me home"),9,ft)])])}}}),mt=$(ht,[["__scopeId","data-v-951cab6c"]]);function Ae(o,e){if(Array.isArray(o))return X(o);if(o==null)return[];e=le(e);const t=Object.keys(o).sort((n,i)=>i.split("/").length-n.split("/").length).find(n=>e.startsWith(le(n))),s=t?o[t]:[];return Array.isArray(s)?X(s):X(s.items,s.base)}function _t(o){const e=[];let t=0;for(const s in o){const n=o[s];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function bt(o){const e=[];function t(s){for(const n of s)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(o),e}function ce(o,e){return Array.isArray(e)?e.some(t=>ce(o,t)):K(o,e.link)?!0:e.items?ce(o,e.items):!1}function X(o,e){return[...o].map(t=>{const s={...t},n=s.base||e;return n&&s.link&&(s.link=n+s.link),s.items&&(s.items=X(s.items,n)),s})}function U(){const{frontmatter:o,page:e,theme:t}=L(),s=re("(min-width: 960px)"),n=T(!1),i=y(()=>{const C=t.value.sidebar,N=e.value.relativePath;return C?Ae(C,N):[]}),l=T(i.value);F(i,(C,N)=>{JSON.stringify(C)!==JSON.stringify(N)&&(l.value=i.value)});const v=y(()=>o.value.sidebar!==!1&&l.value.length>0&&o.value.layout!=="home"),d=y(()=>_?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),_=y(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),V=y(()=>v.value&&s.value),b=y(()=>v.value?_t(l.value):[]);function P(){n.value=!0}function S(){n.value=!1}function A(){n.value?S():P()}return{isOpen:n,sidebar:l,sidebarGroups:b,hasSidebar:v,hasAside:_,leftAside:d,isSidebarEnabled:V,open:P,close:S,toggle:A}}function kt(o,e){let t;Z(()=>{t=o.value?document.activeElement:void 0}),z(()=>{window.addEventListener("keyup",s)}),pe(()=>{window.removeEventListener("keyup",s)});function s(n){n.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function gt(o){const{page:e,hash:t}=L(),s=T(!1),n=y(()=>o.value.collapsed!=null),i=y(()=>!!o.value.link),l=T(!1),v=()=>{l.value=K(e.value.relativePath,o.value.link)};F([e,o,t],v),z(v);const d=y(()=>l.value?!0:o.value.items?ce(e.value.relativePath,o.value.items):!1),_=y(()=>!!(o.value.items&&o.value.items.length));Z(()=>{s.value=!!(n.value&&o.value.collapsed)}),fe(()=>{(l.value||d.value)&&(s.value=!1)});function V(){n.value&&(s.value=!s.value)}return{collapsed:s,collapsible:n,isLink:i,isActiveLink:l,hasActiveLink:d,hasChildren:_,toggle:V}}function $t(){const{hasSidebar:o}=U(),e=re("(min-width: 960px)"),t=re("(min-width: 1280px)");return{isAsideEnabled:y(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const ue=[];function Ce(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function _e(o){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const s=Number(t.tagName[1]);return{element:t,title:yt(t),link:"#"+t.id,level:s}});return Pt(e,o)}function yt(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function Pt(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[s,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;o=o.filter(l=>l.level>=s&&l.level<=n),ue.length=0;for(const{element:l,link:v}of o)ue.push({element:l,link:v});const i=[];e:for(let l=0;l=0;d--){const _=o[d];if(_.level{requestAnimationFrame(i),window.addEventListener("scroll",s)}),Ke(()=>{l(location.hash)}),pe(()=>{window.removeEventListener("scroll",s)});function i(){if(!t.value)return;const v=window.scrollY,d=window.innerHeight,_=document.body.offsetHeight,V=Math.abs(v+d-_)<1,b=ue.map(({element:S,link:A})=>({link:A,top:Vt(S)})).filter(({top:S})=>!Number.isNaN(S)).sort((S,A)=>S.top-A.top);if(!b.length){l(null);return}if(v<1){l(null);return}if(V){l(b[b.length-1].link);return}let P=null;for(const{link:S,top:A}of b){if(A>v+Re()+4)break;P=S}l(P)}function l(v){n&&n.classList.remove("active"),v==null?n=null:n=o.value.querySelector(`a[href="${decodeURIComponent(v)}"]`);const d=n;d?(d.classList.add("active"),e.value.style.top=d.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Vt(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}const Lt=["href","title"],Tt=m({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(o){function e({target:t}){const s=t.href.split("#")[1],n=document.getElementById(decodeURIComponent(s));n==null||n.focus({preventScroll:!0})}return(t,s)=>{const n=R("VPDocOutlineItem",!0);return a(),u("ul",{class:I(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),u(M,null,B(t.headers,({children:i,link:l,title:v})=>(a(),u("li",null,[p("a",{class:"outline-link",href:l,onClick:e,title:v},w(v),9,Lt),i!=null&&i.length?(a(),g(n,{key:0,headers:i},null,8,["headers"])):h("",!0)]))),256))],2)}}}),Be=$(Tt,[["__scopeId","data-v-3f927ebe"]]),Nt={class:"content"},wt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},It=m({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=L(),s=Ve([]);x(()=>{s.value=_e(e.value.outline??t.value.outline)});const n=T(),i=T();return St(n,i),(l,v)=>(a(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:I(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:n},[p("div",Nt,[p("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),p("div",wt,w(r(Ce)(r(t))),1),k(Be,{headers:s.value,root:!0},null,8,["headers"])])],2))}}),Mt=$(It,[["__scopeId","data-v-b38bf2ff"]]),At={class:"VPDocAsideCarbonAds"},Ct=m({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,s)=>(a(),u("div",At,[k(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Bt={class:"VPDocAside"},Ht=m({__name:"VPDocAside",setup(o){const{theme:e}=L();return(t,s)=>(a(),u("div",Bt,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),k(Mt),c(t.$slots,"aside-outline-after",{},void 0,!0),s[0]||(s[0]=p("div",{class:"spacer"},null,-1)),c(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),g(Ct,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):h("",!0),c(t.$slots,"aside-ads-after",{},void 0,!0),c(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Et=$(Ht,[["__scopeId","data-v-6d7b3c46"]]);function Dt(){const{theme:o,page:e}=L();return y(()=>{const{text:t="Edit this page",pattern:s=""}=o.value.editLink||{};let n;return typeof s=="function"?n=s(e.value):n=s.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function Ft(){const{page:o,theme:e,frontmatter:t}=L();return y(()=>{var _,V,b,P,S,A,C,N;const s=Ae(e.value.sidebar,o.value.relativePath),n=bt(s),i=Ot(n,H=>H.link.replace(/[?#].*$/,"")),l=i.findIndex(H=>K(o.value.relativePath,H.link)),v=((_=e.value.docFooter)==null?void 0:_.prev)===!1&&!t.value.prev||t.value.prev===!1,d=((V=e.value.docFooter)==null?void 0:V.next)===!1&&!t.value.next||t.value.next===!1;return{prev:v?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((b=i[l-1])==null?void 0:b.docFooterText)??((P=i[l-1])==null?void 0:P.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((S=i[l-1])==null?void 0:S.link)},next:d?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=i[l+1])==null?void 0:A.docFooterText)??((C=i[l+1])==null?void 0:C.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((N=i[l+1])==null?void 0:N.link)}}})}function Ot(o,e){const t=new Set;return o.filter(s=>{const n=e(s);return t.has(n)?!1:t.add(n)})}const D=m({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.tag??(e.href?"a":"span")),s=y(()=>e.href&&Le.test(e.href)||e.target==="_blank");return(n,i)=>(a(),g(E(t.value),{class:I(["VPLink",{link:n.href,"vp-external-link-icon":s.value,"no-icon":n.noIcon}]),href:n.href?r(me)(n.href):void 0,target:n.target??(s.value?"_blank":void 0),rel:n.rel??(s.value?"noreferrer":void 0)},{default:f(()=>[c(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Ut={class:"VPLastUpdated"},jt=["datetime"],Gt=m({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,lang:s}=L(),n=y(()=>new Date(t.value.lastUpdated)),i=y(()=>n.value.toISOString()),l=T("");return z(()=>{Z(()=>{var v,d,_;l.value=new Intl.DateTimeFormat((d=(v=e.value.lastUpdated)==null?void 0:v.formatOptions)!=null&&d.forceLocale?s.value:void 0,((_=e.value.lastUpdated)==null?void 0:_.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(n.value)})}),(v,d)=>{var _;return a(),u("p",Ut,[O(w(((_=r(e).lastUpdated)==null?void 0:_.text)||r(e).lastUpdatedText||"Last updated")+": ",1),p("time",{datetime:i.value},w(l.value),9,jt)])}}}),zt=$(Gt,[["__scopeId","data-v-475f71b8"]]),Kt={key:0,class:"VPDocFooter"},Rt={key:0,class:"edit-info"},Wt={key:0,class:"edit-link"},qt={key:1,class:"last-updated"},Jt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Yt={class:"pager"},Xt=["innerHTML"],Qt=["innerHTML"],Zt={class:"pager"},xt=["innerHTML"],en=["innerHTML"],tn=m({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:s}=L(),n=Dt(),i=Ft(),l=y(()=>e.value.editLink&&s.value.editLink!==!1),v=y(()=>t.value.lastUpdated),d=y(()=>l.value||v.value||i.value.prev||i.value.next);return(_,V)=>{var b,P,S,A;return d.value?(a(),u("footer",Kt,[c(_.$slots,"doc-footer-before",{},void 0,!0),l.value||v.value?(a(),u("div",Rt,[l.value?(a(),u("div",Wt,[k(D,{class:"edit-link-button",href:r(n).url,"no-icon":!0},{default:f(()=>[V[0]||(V[0]=p("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),O(" "+w(r(n).text),1)]),_:1},8,["href"])])):h("",!0),v.value?(a(),u("div",qt,[k(zt)])):h("",!0)])):h("",!0),(b=r(i).prev)!=null&&b.link||(P=r(i).next)!=null&&P.link?(a(),u("nav",Jt,[V[1]||(V[1]=p("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),p("div",Yt,[(S=r(i).prev)!=null&&S.link?(a(),g(D,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:f(()=>{var C;return[p("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,Xt),p("span",{class:"title",innerHTML:r(i).prev.text},null,8,Qt)]}),_:1},8,["href"])):h("",!0)]),p("div",Zt,[(A=r(i).next)!=null&&A.link?(a(),g(D,{key:0,class:"pager-link next",href:r(i).next.link},{default:f(()=>{var C;return[p("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.next)||"Next page"},null,8,xt),p("span",{class:"title",innerHTML:r(i).next.text},null,8,en)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),nn=$(tn,[["__scopeId","data-v-4f9813fa"]]),sn={class:"container"},on={class:"aside-container"},an={class:"aside-content"},rn={class:"content"},ln={class:"content-container"},cn={class:"main"},un=m({__name:"VPDoc",setup(o){const{theme:e}=L(),t=ee(),{hasSidebar:s,hasAside:n,leftAside:i}=U(),l=y(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(v,d)=>{const _=R("Content");return a(),u("div",{class:I(["VPDoc",{"has-sidebar":r(s),"has-aside":r(n)}])},[c(v.$slots,"doc-top",{},void 0,!0),p("div",sn,[r(n)?(a(),u("div",{key:0,class:I(["aside",{"left-aside":r(i)}])},[d[0]||(d[0]=p("div",{class:"aside-curtain"},null,-1)),p("div",on,[p("div",an,[k(Et,null,{"aside-top":f(()=>[c(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),p("div",rn,[p("div",ln,[c(v.$slots,"doc-before",{},void 0,!0),p("main",cn,[k(_,{class:I(["vp-doc",[l.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),k(nn,null,{"doc-footer-before":f(()=>[c(v.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(v.$slots,"doc-after",{},void 0,!0)])])]),c(v.$slots,"doc-bottom",{},void 0,!0)],2)}}}),dn=$(un,[["__scopeId","data-v-83890dd9"]]),vn=m({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.href&&Le.test(e.href)),s=y(()=>e.tag||e.href?"a":"button");return(n,i)=>(a(),g(E(s.value),{class:I(["VPButton",[n.size,n.theme]]),href:n.href?r(me)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:f(()=>[O(w(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),pn=$(vn,[["__scopeId","data-v-14206e74"]]),fn=["src","alt"],hn=m({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const s=R("VPImage",!0);return e.image?(a(),u(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),u("img",G({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(ve)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,fn)):(a(),u(M,{key:1},[k(s,G({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),k(s,G({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),Q=$(hn,[["__scopeId","data-v-35a7d0b8"]]),mn={class:"container"},_n={class:"main"},bn={key:0,class:"name"},kn=["innerHTML"],gn=["innerHTML"],$n=["innerHTML"],yn={key:0,class:"actions"},Pn={key:0,class:"image"},Sn={class:"image-container"},Vn=m({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=q("hero-image-slot-exists");return(t,s)=>(a(),u("div",{class:I(["VPHero",{"has-image":t.image||r(e)}])},[p("div",mn,[p("div",_n,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[t.name?(a(),u("h1",bn,[p("span",{innerHTML:t.name,class:"clip"},null,8,kn)])):h("",!0),t.text?(a(),u("p",{key:1,innerHTML:t.text,class:"text"},null,8,gn)):h("",!0),t.tagline?(a(),u("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,$n)):h("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),u("div",yn,[(a(!0),u(M,null,B(t.actions,n=>(a(),u("div",{key:n.link,class:"action"},[k(pn,{tag:"a",size:"medium",theme:n.theme,text:n.text,href:n.link,target:n.target,rel:n.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),u("div",Pn,[p("div",Sn,[s[0]||(s[0]=p("div",{class:"image-bg"},null,-1)),c(t.$slots,"home-hero-image",{},()=>[t.image?(a(),g(Q,{key:0,class:"image-src",image:t.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),Ln=$(Vn,[["__scopeId","data-v-955009fc"]]),Tn=m({__name:"VPHomeHero",setup(o){const{frontmatter:e}=L();return(t,s)=>r(e).hero?(a(),g(Ln,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":f(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":f(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":f(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":f(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":f(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),Nn={class:"box"},wn={key:0,class:"icon"},In=["innerHTML"],Mn=["innerHTML"],An=["innerHTML"],Cn={key:4,class:"link-text"},Bn={class:"link-text-value"},Hn=m({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(a(),g(D,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:f(()=>[p("article",Nn,[typeof e.icon=="object"&&e.icon.wrap?(a(),u("div",wn,[k(Q,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),g(Q,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,In)):h("",!0),p("h2",{class:"title",innerHTML:e.title},null,8,Mn),e.details?(a(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,An)):h("",!0),e.linkText?(a(),u("div",Cn,[p("p",Bn,[O(w(e.linkText)+" ",1),t[0]||(t[0]=p("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),En=$(Hn,[["__scopeId","data-v-f5e9645b"]]),Dn={key:0,class:"VPFeatures"},Fn={class:"container"},On={class:"items"},Un=m({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=y(()=>{const s=e.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,n)=>s.features?(a(),u("div",Dn,[p("div",Fn,[p("div",On,[(a(!0),u(M,null,B(s.features,i=>(a(),u("div",{key:i.title,class:I(["item",[t.value]])},[k(En,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):h("",!0)}}),jn=$(Un,[["__scopeId","data-v-d0a190d7"]]),Gn=m({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=L();return(t,s)=>r(e).features?(a(),g(jn,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):h("",!0)}}),zn=m({__name:"VPHomeContent",setup(o){const{width:e}=We({initialWidth:0,includeScrollbar:!1});return(t,s)=>(a(),u("div",{class:"vp-doc container",style:Te(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),Kn=$(zn,[["__scopeId","data-v-7a48a447"]]),Rn={class:"VPHome"},Wn=m({__name:"VPHome",setup(o){const{frontmatter:e}=L();return(t,s)=>{const n=R("Content");return a(),u("div",Rn,[c(t.$slots,"home-hero-before",{},void 0,!0),k(Tn,null,{"home-hero-info-before":f(()=>[c(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(t.$slots,"home-hero-after",{},void 0,!0),c(t.$slots,"home-features-before",{},void 0,!0),k(Gn),c(t.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),g(Kn,{key:0},{default:f(()=>[k(n)]),_:1})):(a(),g(n,{key:1}))])}}}),qn=$(Wn,[["__scopeId","data-v-cbb6ec48"]]),Jn={},Yn={class:"VPPage"};function Xn(o,e){const t=R("Content");return a(),u("div",Yn,[c(o.$slots,"page-top"),k(t),c(o.$slots,"page-bottom")])}const Qn=$(Jn,[["render",Xn]]),Zn=m({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=L(),{hasSidebar:s}=U();return(n,i)=>(a(),u("div",{class:I(["VPContent",{"has-sidebar":r(s),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?c(n.$slots,"not-found",{key:0},()=>[k(mt)],!0):r(t).layout==="page"?(a(),g(Qn,{key:1},{"page-top":f(()=>[c(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),g(qn,{key:2},{"home-hero-before":f(()=>[c(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),g(E(r(t).layout),{key:3})):(a(),g(dn,{key:4},{"doc-top":f(()=>[c(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":f(()=>[c(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":f(()=>[c(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":f(()=>[c(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":f(()=>[c(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),xn=$(Zn,[["__scopeId","data-v-91765379"]]),es={class:"container"},ts=["innerHTML"],ns=["innerHTML"],ss=m({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=L(),{hasSidebar:s}=U();return(n,i)=>r(e).footer&&r(t).footer!==!1?(a(),u("footer",{key:0,class:I(["VPFooter",{"has-sidebar":r(s)}])},[p("div",es,[r(e).footer.message?(a(),u("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,ts)):h("",!0),r(e).footer.copyright?(a(),u("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,ns)):h("",!0)])],2)):h("",!0)}}),os=$(ss,[["__scopeId","data-v-c970a860"]]);function as(){const{theme:o,frontmatter:e}=L(),t=Ve([]),s=y(()=>t.value.length>0);return x(()=>{t.value=_e(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:s}}const rs={class:"menu-text"},is={class:"header"},ls={class:"outline"},cs=m({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=L(),s=T(!1),n=T(0),i=T(),l=T();function v(b){var P;(P=i.value)!=null&&P.contains(b.target)||(s.value=!1)}F(s,b=>{if(b){document.addEventListener("click",v);return}document.removeEventListener("click",v)}),ie("Escape",()=>{s.value=!1}),x(()=>{s.value=!1});function d(){s.value=!s.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function _(b){b.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Ne(()=>{s.value=!1}))}function V(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(b,P)=>(a(),u("div",{class:"VPLocalNavOutlineDropdown",style:Te({"--vp-vh":n.value+"px"}),ref_key:"main",ref:i},[b.headers.length>0?(a(),u("button",{key:0,onClick:d,class:I({open:s.value})},[p("span",rs,w(r(Ce)(r(t))),1),P[0]||(P[0]=p("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(a(),u("button",{key:1,onClick:V},w(r(t).returnToTopLabel||"Return to top"),1)),k(de,{name:"flyout"},{default:f(()=>[s.value?(a(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:_},[p("div",is,[p("a",{class:"top-link",href:"#",onClick:V},w(r(t).returnToTopLabel||"Return to top"),1)]),p("div",ls,[k(Be,{headers:b.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),us=$(cs,[["__scopeId","data-v-bc9dc845"]]),ds={class:"container"},vs=["aria-expanded"],ps={class:"menu-text"},fs=m({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=L(),{hasSidebar:s}=U(),{headers:n}=as(),{y:i}=we(),l=T(0);z(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),x(()=>{n.value=_e(t.value.outline??e.value.outline)});const v=y(()=>n.value.length===0),d=y(()=>v.value&&!s.value),_=y(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:v.value,fixed:d.value}));return(V,b)=>r(t).layout!=="home"&&(!d.value||r(i)>=l.value)?(a(),u("div",{key:0,class:I(_.value)},[p("div",ds,[r(s)?(a(),u("button",{key:0,class:"menu","aria-expanded":V.open,"aria-controls":"VPSidebarNav",onClick:b[0]||(b[0]=P=>V.$emit("open-menu"))},[b[1]||(b[1]=p("span",{class:"vpi-align-left menu-icon"},null,-1)),p("span",ps,w(r(e).sidebarMenuLabel||"Menu"),1)],8,vs)):h("",!0),k(us,{headers:r(n),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),hs=$(fs,[["__scopeId","data-v-070ab83d"]]);function ms(){const o=T(!1);function e(){o.value=!0,window.addEventListener("resize",n)}function t(){o.value=!1,window.removeEventListener("resize",n)}function s(){o.value?t():e()}function n(){window.outerWidth>=768&&t()}const i=ee();return F(()=>i.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:s}}const _s={},bs={class:"VPSwitch",type:"button",role:"switch"},ks={class:"check"},gs={key:0,class:"icon"};function $s(o,e){return a(),u("button",bs,[p("span",ks,[o.$slots.default?(a(),u("span",gs,[c(o.$slots,"default",{},void 0,!0)])):h("",!0)])])}const ys=$(_s,[["render",$s],["__scopeId","data-v-4a1c76db"]]),Ps=m({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=L(),s=q("toggle-appearance",()=>{e.value=!e.value}),n=T("");return fe(()=>{n.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,l)=>(a(),g(ys,{title:n.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(s)},{default:f(()=>l[0]||(l[0]=[p("span",{class:"vpi-sun sun"},null,-1),p("span",{class:"vpi-moon moon"},null,-1)])),_:1},8,["title","aria-checked","onClick"]))}}),be=$(Ps,[["__scopeId","data-v-e40a8bb6"]]),Ss={key:0,class:"VPNavBarAppearance"},Vs=m({__name:"VPNavBarAppearance",setup(o){const{site:e}=L();return(t,s)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Ss,[k(be)])):h("",!0)}}),Ls=$(Vs,[["__scopeId","data-v-af096f4a"]]),ke=T();let He=!1,ae=0;function Ts(o){const e=T(!1);if(te){!He&&Ns(),ae++;const t=F(ke,s=>{var n,i,l;s===o.el.value||(n=o.el.value)!=null&&n.contains(s)?(e.value=!0,(i=o.onFocus)==null||i.call(o)):(e.value=!1,(l=o.onBlur)==null||l.call(o))});pe(()=>{t(),ae--,ae||ws()})}return qe(e)}function Ns(){document.addEventListener("focusin",Ee),He=!0,ke.value=document.activeElement}function ws(){document.removeEventListener("focusin",Ee)}function Ee(){ke.value=document.activeElement}const Is={class:"VPMenuLink"},Ms=m({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=L();return(t,s)=>(a(),u("div",Is,[k(D,{class:I({active:r(K)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:f(()=>[O(w(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),ne=$(Ms,[["__scopeId","data-v-8b74d055"]]),As={class:"VPMenuGroup"},Cs={key:0,class:"title"},Bs=m({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),u("div",As,[e.text?(a(),u("p",Cs,w(e.text),1)):h("",!0),(a(!0),u(M,null,B(e.items,s=>(a(),u(M,null,["link"in s?(a(),g(ne,{key:0,item:s},null,8,["item"])):h("",!0)],64))),256))]))}}),Hs=$(Bs,[["__scopeId","data-v-48c802d0"]]),Es={class:"VPMenu"},Ds={key:0,class:"items"},Fs=m({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(a(),u("div",Es,[e.items?(a(),u("div",Ds,[(a(!0),u(M,null,B(e.items,s=>(a(),u(M,{key:JSON.stringify(s)},["link"in s?(a(),g(ne,{key:0,item:s},null,8,["item"])):"component"in s?(a(),g(E(s.component),G({key:1,ref_for:!0},s.props),null,16)):(a(),g(Hs,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):h("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),Os=$(Fs,[["__scopeId","data-v-7dd3104a"]]),Us=["aria-expanded","aria-label"],js={key:0,class:"text"},Gs=["innerHTML"],zs={key:1,class:"vpi-more-horizontal icon"},Ks={class:"menu"},Rs=m({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=T(!1),t=T();Ts({el:t,onBlur:s});function s(){e.value=!1}return(n,i)=>(a(),u("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=l=>e.value=!0),onMouseleave:i[2]||(i[2]=l=>e.value=!1)},[p("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":n.label,onClick:i[0]||(i[0]=l=>e.value=!e.value)},[n.button||n.icon?(a(),u("span",js,[n.icon?(a(),u("span",{key:0,class:I([n.icon,"option-icon"])},null,2)):h("",!0),n.button?(a(),u("span",{key:1,innerHTML:n.button},null,8,Gs)):h("",!0),i[3]||(i[3]=p("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(a(),u("span",zs))],8,Us),p("div",Ks,[k(Os,{items:n.items},{default:f(()=>[c(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),ge=$(Rs,[["__scopeId","data-v-e5380155"]]),Ws=["href","aria-label","innerHTML"],qs=m({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=y(()=>typeof e.icon=="object"?e.icon.svg:``);return(s,n)=>(a(),u("a",{class:"VPSocialLink no-icon",href:s.link,"aria-label":s.ariaLabel??(typeof s.icon=="string"?s.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,Ws))}}),Js=$(qs,[["__scopeId","data-v-717b8b75"]]),Ys={class:"VPSocialLinks"},Xs=m({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(a(),u("div",Ys,[(a(!0),u(M,null,B(e.links,({link:s,icon:n,ariaLabel:i})=>(a(),g(Js,{key:s,icon:n,link:s,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),$e=$(Xs,[["__scopeId","data-v-ee7a9424"]]),Qs={key:0,class:"group translations"},Zs={class:"trans-title"},xs={key:1,class:"group"},eo={class:"item appearance"},to={class:"label"},no={class:"appearance-action"},so={key:2,class:"group"},oo={class:"item social-links"},ao=m({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=L(),{localeLinks:s,currentLang:n}=Y({correspondingLink:!0}),i=y(()=>s.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(l,v)=>i.value?(a(),g(ge,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:f(()=>[r(s).length&&r(n).label?(a(),u("div",Qs,[p("p",Zs,w(r(n).label),1),(a(!0),u(M,null,B(r(s),d=>(a(),g(ne,{key:d.link,item:d},null,8,["item"]))),128))])):h("",!0),r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",xs,[p("div",eo,[p("p",to,w(r(t).darkModeSwitchLabel||"Appearance"),1),p("div",no,[k(be)])])])):h("",!0),r(t).socialLinks?(a(),u("div",so,[p("div",oo,[k($e,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),ro=$(ao,[["__scopeId","data-v-925effce"]]),io=["aria-expanded"],lo=m({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(a(),u("button",{type:"button",class:I(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=s=>e.$emit("click"))},t[1]||(t[1]=[p("span",{class:"container"},[p("span",{class:"top"}),p("span",{class:"middle"}),p("span",{class:"bottom"})],-1)]),10,io))}}),co=$(lo,[["__scopeId","data-v-5dea55bf"]]),uo=["innerHTML"],vo=m({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=L();return(t,s)=>(a(),g(D,{class:I({VPNavBarMenuLink:!0,active:r(K)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,noIcon:t.item.noIcon,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:f(()=>[p("span",{innerHTML:t.item.text},null,8,uo)]),_:1},8,["class","href","noIcon","target","rel"]))}}),po=$(vo,[["__scopeId","data-v-ed5ac1f6"]]),fo=m({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=L(),s=i=>"component"in i?!1:"link"in i?K(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(s),n=y(()=>s(e.item));return(i,l)=>(a(),g(ge,{class:I({VPNavBarMenuGroup:!0,active:r(K)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||n.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),ho={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},mo=m({__name:"VPNavBarMenu",setup(o){const{theme:e}=L();return(t,s)=>r(e).nav?(a(),u("nav",ho,[s[0]||(s[0]=p("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(a(!0),u(M,null,B(r(e).nav,n=>(a(),u(M,{key:JSON.stringify(n)},["link"in n?(a(),g(po,{key:0,item:n},null,8,["item"])):"component"in n?(a(),g(E(n.component),G({key:1,ref_for:!0},n.props),null,16)):(a(),g(fo,{key:2,item:n},null,8,["item"]))],64))),128))])):h("",!0)}}),_o=$(mo,[["__scopeId","data-v-e6d46098"]]);function bo(o){const{localeIndex:e,theme:t}=L();function s(n){var A,C,N;const i=n.split("."),l=(A=t.value.search)==null?void 0:A.options,v=l&&typeof l=="object",d=v&&((N=(C=l.locales)==null?void 0:C[e.value])==null?void 0:N.translations)||null,_=v&&l.translations||null;let V=d,b=_,P=o;const S=i.pop();for(const H of i){let j=null;const W=P==null?void 0:P[H];W&&(j=P=W);const se=b==null?void 0:b[H];se&&(j=b=se);const oe=V==null?void 0:V[H];oe&&(j=V=oe),W||(P=j),se||(b=j),oe||(V=j)}return(V==null?void 0:V[S])??(b==null?void 0:b[S])??(P==null?void 0:P[S])??""}return s}const ko=["aria-label"],go={class:"DocSearch-Button-Container"},$o={class:"DocSearch-Button-Placeholder"},ye=m({__name:"VPNavBarSearchButton",setup(o){const t=bo({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(s,n)=>(a(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[p("span",go,[n[0]||(n[0]=p("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),p("span",$o,w(r(t)("button.buttonText")),1)]),n[1]||(n[1]=p("span",{class:"DocSearch-Button-Keys"},[p("kbd",{class:"DocSearch-Button-Key"}),p("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,ko))}}),yo={class:"VPNavBarSearch"},Po={id:"local-search"},So={key:1,id:"docsearch"},Vo=m({__name:"VPNavBarSearch",setup(o){const e=Je(()=>Ye(()=>import("./VPLocalSearchBox.Dk9VxXMu.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:s}=L(),n=T(!1),i=T(!1);z(()=>{});function l(){n.value||(n.value=!0,setTimeout(v,16))}function v(){const b=new Event("keydown");b.key="k",b.metaKey=!0,window.dispatchEvent(b),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||v()},16)}function d(b){const P=b.target,S=P.tagName;return P.isContentEditable||S==="INPUT"||S==="SELECT"||S==="TEXTAREA"}const _=T(!1);ie("k",b=>{(b.ctrlKey||b.metaKey)&&(b.preventDefault(),_.value=!0)}),ie("/",b=>{d(b)||(b.preventDefault(),_.value=!0)});const V="local";return(b,P)=>{var S;return a(),u("div",yo,[r(V)==="local"?(a(),u(M,{key:0},[_.value?(a(),g(r(e),{key:0,onClose:P[0]||(P[0]=A=>_.value=!1)})):h("",!0),p("div",Po,[k(ye,{onClick:P[1]||(P[1]=A=>_.value=!0)})])],64)):r(V)==="algolia"?(a(),u(M,{key:1},[n.value?(a(),g(r(t),{key:0,algolia:((S=r(s).search)==null?void 0:S.options)??r(s).algolia,onVnodeBeforeMount:P[2]||(P[2]=A=>i.value=!0)},null,8,["algolia"])):h("",!0),i.value?h("",!0):(a(),u("div",So,[k(ye,{onClick:l})]))],64)):h("",!0)])}}}),Lo=m({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=L();return(t,s)=>r(e).socialLinks?(a(),g($e,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),To=$(Lo,[["__scopeId","data-v-164c457f"]]),No=["href","rel","target"],wo={key:1},Io={key:2},Mo=m({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=L(),{hasSidebar:s}=U(),{currentLang:n}=Y(),i=y(()=>{var d;return typeof t.value.logoLink=="string"?t.value.logoLink:(d=t.value.logoLink)==null?void 0:d.link}),l=y(()=>{var d;return typeof t.value.logoLink=="string"||(d=t.value.logoLink)==null?void 0:d.rel}),v=y(()=>{var d;return typeof t.value.logoLink=="string"||(d=t.value.logoLink)==null?void 0:d.target});return(d,_)=>(a(),u("div",{class:I(["VPNavBarTitle",{"has-sidebar":r(s)}])},[p("a",{class:"title",href:i.value??r(me)(r(n).link),rel:l.value,target:v.value},[c(d.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),g(Q,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):h("",!0),r(t).siteTitle?(a(),u("span",wo,w(r(t).siteTitle),1)):r(t).siteTitle===void 0?(a(),u("span",Io,w(r(e).title),1)):h("",!0),c(d.$slots,"nav-bar-title-after",{},void 0,!0)],8,No)],2))}}),Ao=$(Mo,[["__scopeId","data-v-28a961f9"]]),Co={class:"items"},Bo={class:"title"},Ho=m({__name:"VPNavBarTranslations",setup(o){const{theme:e}=L(),{localeLinks:t,currentLang:s}=Y({correspondingLink:!0});return(n,i)=>r(t).length&&r(s).label?(a(),g(ge,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:f(()=>[p("div",Co,[p("p",Bo,w(r(s).label),1),(a(!0),u(M,null,B(r(t),l=>(a(),g(ne,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}}),Eo=$(Ho,[["__scopeId","data-v-c80d9ad0"]]),Do={class:"wrapper"},Fo={class:"container"},Oo={class:"title"},Uo={class:"content"},jo={class:"content-body"},Go=m({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const e=o,{y:t}=we(),{hasSidebar:s}=U(),{frontmatter:n}=L(),i=T({});return fe(()=>{i.value={"has-sidebar":s.value,home:n.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(l,v)=>(a(),u("div",{class:I(["VPNavBar",i.value])},[p("div",Do,[p("div",Fo,[p("div",Oo,[k(Ao,null,{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),p("div",Uo,[p("div",jo,[c(l.$slots,"nav-bar-content-before",{},void 0,!0),k(Vo,{class:"search"}),k(_o,{class:"menu"}),k(Eo,{class:"translations"}),k(Ls,{class:"appearance"}),k(To,{class:"social-links"}),k(ro,{class:"extra"}),c(l.$slots,"nav-bar-content-after",{},void 0,!0),k(co,{class:"hamburger",active:l.isScreenOpen,onClick:v[0]||(v[0]=d=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),v[1]||(v[1]=p("div",{class:"divider"},[p("div",{class:"divider-line"})],-1))],2))}}),zo=$(Go,[["__scopeId","data-v-822684d1"]]),Ko={key:0,class:"VPNavScreenAppearance"},Ro={class:"text"},Wo=m({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=L();return(s,n)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Ko,[p("p",Ro,w(r(t).darkModeSwitchLabel||"Appearance"),1),k(be)])):h("",!0)}}),qo=$(Wo,[["__scopeId","data-v-ffb44008"]]),Jo=m({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=q("close-screen");return(t,s)=>(a(),g(D,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),Yo=$(Jo,[["__scopeId","data-v-27d04aeb"]]),Xo=m({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=q("close-screen");return(t,s)=>(a(),g(D,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e)},{default:f(()=>[O(w(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),De=$(Xo,[["__scopeId","data-v-7179dbb7"]]),Qo={class:"VPNavScreenMenuGroupSection"},Zo={key:0,class:"title"},xo=m({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),u("div",Qo,[e.text?(a(),u("p",Zo,w(e.text),1)):h("",!0),(a(!0),u(M,null,B(e.items,s=>(a(),g(De,{key:s.text,item:s},null,8,["item"]))),128))]))}}),ea=$(xo,[["__scopeId","data-v-4b8941ac"]]),ta=["aria-controls","aria-expanded"],na=["innerHTML"],sa=["id"],oa={key:0,class:"item"},aa={key:1,class:"item"},ra={key:2,class:"group"},ia=m({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=T(!1),s=y(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(i,l)=>(a(),u("div",{class:I(["VPNavScreenMenuGroup",{open:t.value}])},[p("button",{class:"button","aria-controls":s.value,"aria-expanded":t.value,onClick:n},[p("span",{class:"button-text",innerHTML:i.text},null,8,na),l[0]||(l[0]=p("span",{class:"vpi-plus button-icon"},null,-1))],8,ta),p("div",{id:s.value,class:"items"},[(a(!0),u(M,null,B(i.items,v=>(a(),u(M,{key:JSON.stringify(v)},["link"in v?(a(),u("div",oa,[k(De,{item:v},null,8,["item"])])):"component"in v?(a(),u("div",aa,[(a(),g(E(v.component),G({ref_for:!0},v.props,{"screen-menu":""}),null,16))])):(a(),u("div",ra,[k(ea,{text:v.text,items:v.items},null,8,["text","items"])]))],64))),128))],8,sa)],2))}}),la=$(ia,[["__scopeId","data-v-875057a5"]]),ca={key:0,class:"VPNavScreenMenu"},ua=m({__name:"VPNavScreenMenu",setup(o){const{theme:e}=L();return(t,s)=>r(e).nav?(a(),u("nav",ca,[(a(!0),u(M,null,B(r(e).nav,n=>(a(),u(M,{key:JSON.stringify(n)},["link"in n?(a(),g(Yo,{key:0,item:n},null,8,["item"])):"component"in n?(a(),g(E(n.component),G({key:1,ref_for:!0},n.props,{"screen-menu":""}),null,16)):(a(),g(la,{key:2,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),da=m({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=L();return(t,s)=>r(e).socialLinks?(a(),g($e,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),va={class:"list"},pa=m({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=Y({correspondingLink:!0}),s=T(!1);function n(){s.value=!s.value}return(i,l)=>r(e).length&&r(t).label?(a(),u("div",{key:0,class:I(["VPNavScreenTranslations",{open:s.value}])},[p("button",{class:"title",onClick:n},[l[0]||(l[0]=p("span",{class:"vpi-languages icon lang"},null,-1)),O(" "+w(r(t).label)+" ",1),l[1]||(l[1]=p("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),p("ul",va,[(a(!0),u(M,null,B(r(e),v=>(a(),u("li",{key:v.link,class:"item"},[k(D,{class:"link",href:v.link},{default:f(()=>[O(w(v.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),fa=$(pa,[["__scopeId","data-v-362991c2"]]),ha={class:"container"},ma=m({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=T(null),t=Ie(te?document.body:null);return(s,n)=>(a(),g(de,{name:"fade",onEnter:n[0]||(n[0]=i=>t.value=!0),onAfterLeave:n[1]||(n[1]=i=>t.value=!1)},{default:f(()=>[s.open?(a(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[p("div",ha,[c(s.$slots,"nav-screen-content-before",{},void 0,!0),k(ua,{class:"menu"}),k(fa,{class:"translations"}),k(qo,{class:"appearance"}),k(da,{class:"social-links"}),c(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),_a=$(ma,[["__scopeId","data-v-833aabba"]]),ba={key:0,class:"VPNav"},ka=m({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:s}=ms(),{frontmatter:n}=L(),i=y(()=>n.value.navbar!==!1);return he("close-screen",t),Z(()=>{te&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(l,v)=>i.value?(a(),u("header",ba,[k(zo,{"is-screen-open":r(e),onToggleScreen:r(s)},{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),k(_a,{open:r(e)},{"nav-screen-content-before":f(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),ga=$(ka,[["__scopeId","data-v-f1e365da"]]),$a=["role","tabindex"],ya={key:1,class:"items"},Pa=m({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:s,isLink:n,isActiveLink:i,hasActiveLink:l,hasChildren:v,toggle:d}=gt(y(()=>e.item)),_=y(()=>v.value?"section":"div"),V=y(()=>n.value?"a":"div"),b=y(()=>v.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),P=y(()=>n.value?void 0:"button"),S=y(()=>[[`level-${e.depth}`],{collapsible:s.value},{collapsed:t.value},{"is-link":n.value},{"is-active":i.value},{"has-active":l.value}]);function A(N){"key"in N&&N.key!=="Enter"||!e.item.link&&d()}function C(){e.item.link&&d()}return(N,H)=>{const j=R("VPSidebarItem",!0);return a(),g(E(_.value),{class:I(["VPSidebarItem",S.value])},{default:f(()=>[N.item.text?(a(),u("div",G({key:0,class:"item",role:P.value},Qe(N.item.items?{click:A,keydown:A}:{},!0),{tabindex:N.item.items&&0}),[H[1]||(H[1]=p("div",{class:"indicator"},null,-1)),N.item.link?(a(),g(D,{key:0,tag:V.value,class:"link",href:N.item.link,rel:N.item.rel,target:N.item.target},{default:f(()=>[(a(),g(E(b.value),{class:"text",innerHTML:N.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),g(E(b.value),{key:1,class:"text",innerHTML:N.item.text},null,8,["innerHTML"])),N.item.collapsed!=null&&N.item.items&&N.item.items.length?(a(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:C,onKeydown:Xe(C,["enter"]),tabindex:"0"},H[0]||(H[0]=[p("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):h("",!0)],16,$a)):h("",!0),N.item.items&&N.item.items.length?(a(),u("div",ya,[N.depth<5?(a(!0),u(M,{key:0},B(N.item.items,W=>(a(),g(j,{key:W.text,item:W,depth:N.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),Sa=$(Pa,[["__scopeId","data-v-196b2e5f"]]),Va=m({__name:"VPSidebarGroup",props:{items:{}},setup(o){const e=T(!0);let t=null;return z(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),Ze(()=>{t!=null&&(clearTimeout(t),t=null)}),(s,n)=>(a(!0),u(M,null,B(s.items,i=>(a(),u("div",{key:i.text,class:I(["group",{"no-transition":e.value}])},[k(Sa,{item:i,depth:0},null,8,["item"])],2))),128))}}),La=$(Va,[["__scopeId","data-v-9e426adc"]]),Ta={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Na=m({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const{sidebarGroups:e,hasSidebar:t}=U(),s=o,n=T(null),i=Ie(te?document.body:null);F([s,n],()=>{var v;s.open?(i.value=!0,(v=n.value)==null||v.focus()):i.value=!1},{immediate:!0,flush:"post"});const l=T(0);return F(e,()=>{l.value+=1},{deep:!0}),(v,d)=>r(t)?(a(),u("aside",{key:0,class:I(["VPSidebar",{open:v.open}]),ref_key:"navEl",ref:n,onClick:d[0]||(d[0]=xe(()=>{},["stop"]))},[d[2]||(d[2]=p("div",{class:"curtain"},null,-1)),p("nav",Ta,[d[1]||(d[1]=p("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),c(v.$slots,"sidebar-nav-before",{},void 0,!0),(a(),g(La,{items:r(e),key:l.value},null,8,["items"])),c(v.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),wa=$(Na,[["__scopeId","data-v-18756405"]]),Ia=m({__name:"VPSkipLink",setup(o){const e=ee(),t=T();F(()=>e.path,()=>t.value.focus());function s({target:n}){const i=document.getElementById(decodeURIComponent(n.hash).slice(1));if(i){const l=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",l)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",l),i.focus(),window.scrollTo(0,0)}}return(n,i)=>(a(),u(M,null,[p("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),p("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}}),Ma=$(Ia,[["__scopeId","data-v-c3508ec8"]]),Aa=m({__name:"Layout",setup(o){const{isOpen:e,open:t,close:s}=U(),n=ee();F(()=>n.path,s),kt(e,s);const{frontmatter:i}=L(),l=Me(),v=y(()=>!!l["home-hero-image"]);return he("hero-image-slot-exists",v),(d,_)=>{const V=R("Content");return r(i).layout!==!1?(a(),u("div",{key:0,class:I(["Layout",r(i).pageClass])},[c(d.$slots,"layout-top",{},void 0,!0),k(Ma),k(rt,{class:"backdrop",show:r(e),onClick:r(s)},null,8,["show","onClick"]),k(ga,null,{"nav-bar-title-before":f(()=>[c(d.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(d.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(d.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(d.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":f(()=>[c(d.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(d.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),k(hs,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),k(wa,{open:r(e)},{"sidebar-nav-before":f(()=>[c(d.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":f(()=>[c(d.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),k(xn,null,{"page-top":f(()=>[c(d.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(d.$slots,"page-bottom",{},void 0,!0)]),"not-found":f(()=>[c(d.$slots,"not-found",{},void 0,!0)]),"home-hero-before":f(()=>[c(d.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(d.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(d.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(d.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(d.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(d.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(d.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(d.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(d.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":f(()=>[c(d.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(d.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(d.$slots,"doc-after",{},void 0,!0)]),"doc-top":f(()=>[c(d.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(d.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":f(()=>[c(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),k(os),c(d.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),g(V,{key:1}))}}}),Ca=$(Aa,[["__scopeId","data-v-a9a9e638"]]),Pe={Layout:Ca,enhanceApp:({app:o})=>{o.component("Badge",st)}},Ba=o=>{if(typeof document>"u")return{stabilizeScrollPosition:n=>async(...i)=>n(...i)};const e=document.documentElement;return{stabilizeScrollPosition:s=>async(...n)=>{const i=s(...n),l=o.value;if(!l)return i;const v=l.offsetTop-e.scrollTop;return await Ne(),e.scrollTop=l.offsetTop-v,i}}},Fe="vitepress:tabSharedState",J=typeof localStorage<"u"?localStorage:null,Oe="vitepress:tabsSharedState",Ha=()=>{const o=J==null?void 0:J.getItem(Oe);if(o)try{return JSON.parse(o)}catch{}return{}},Ea=o=>{J&&J.setItem(Oe,JSON.stringify(o))},Da=o=>{const e=et({});F(()=>e.content,(t,s)=>{t&&s&&Ea(t)},{deep:!0}),o.provide(Fe,e)},Fa=(o,e)=>{const t=q(Fe);if(!t)throw new Error("[vitepress-plugin-tabs] TabsSharedState should be injected");z(()=>{t.content||(t.content=Ha())});const s=T(),n=y({get(){var d;const l=e.value,v=o.value;if(l){const _=(d=t.content)==null?void 0:d[l];if(_&&v.includes(_))return _}else{const _=s.value;if(_)return _}return v[0]},set(l){const v=e.value;v?t.content&&(t.content[v]=l):s.value=l}});return{selected:n,select:l=>{n.value=l}}};let Se=0;const Oa=()=>(Se++,""+Se);function Ua(){const o=Me();return y(()=>{var s;const t=(s=o.default)==null?void 0:s.call(o);return t?t.filter(n=>typeof n.type=="object"&&"__name"in n.type&&n.type.__name==="PluginTabsTab"&&n.props).map(n=>{var i;return(i=n.props)==null?void 0:i.label}):[]})}const Ue="vitepress:tabSingleState",ja=o=>{he(Ue,o)},Ga=()=>{const o=q(Ue);if(!o)throw new Error("[vitepress-plugin-tabs] TabsSingleState should be injected");return o},za={class:"plugin-tabs"},Ka=["id","aria-selected","aria-controls","tabindex","onClick"],Ra=m({__name:"PluginTabs",props:{sharedStateKey:{}},setup(o){const e=o,t=Ua(),{selected:s,select:n}=Fa(t,tt(e,"sharedStateKey")),i=T(),{stabilizeScrollPosition:l}=Ba(i),v=l(n),d=T([]),_=b=>{var A;const P=t.value.indexOf(s.value);let S;b.key==="ArrowLeft"?S=P>=1?P-1:t.value.length-1:b.key==="ArrowRight"&&(S=P(a(),u("div",za,[p("div",{ref_key:"tablist",ref:i,class:"plugin-tabs--tab-list",role:"tablist",onKeydown:_},[(a(!0),u(M,null,B(r(t),S=>(a(),u("button",{id:`tab-${S}-${r(V)}`,ref_for:!0,ref_key:"buttonRefs",ref:d,key:S,role:"tab",class:"plugin-tabs--tab","aria-selected":S===r(s),"aria-controls":`panel-${S}-${r(V)}`,tabindex:S===r(s)?0:-1,onClick:()=>r(v)(S)},w(S),9,Ka))),128))],544),c(b.$slots,"default")]))}}),Wa=["id","aria-labelledby"],qa=m({__name:"PluginTabsTab",props:{label:{}},setup(o){const{uid:e,selected:t}=Ga();return(s,n)=>r(t)===s.label?(a(),u("div",{key:0,id:`panel-${s.label}-${r(e)}`,class:"plugin-tabs--content",role:"tabpanel",tabindex:"0","aria-labelledby":`tab-${s.label}-${r(e)}`},[c(s.$slots,"default",{},void 0,!0)],8,Wa)):h("",!0)}}),Ja=$(qa,[["__scopeId","data-v-9b0d03d2"]]),Ya=o=>{Da(o),o.component("PluginTabs",Ra),o.component("PluginTabsTab",Ja)},Qa={extends:Pe,Layout(){return nt(Pe.Layout,null,{})},enhanceApp({app:o,router:e,siteData:t}){Ya(o)}};export{Qa as R,bo as c,L as u}; diff --git a/dev/assets/examples.md.CtIAv1Hv.js b/dev/assets/examples.md.0mYAaYCb.js similarity index 98% rename from dev/assets/examples.md.CtIAv1Hv.js rename to dev/assets/examples.md.0mYAaYCb.js index 3238129..b1b1894 100644 --- a/dev/assets/examples.md.CtIAv1Hv.js +++ b/dev/assets/examples.md.0mYAaYCb.js @@ -1 +1 @@ -import{_ as s,c as i,a5 as t,o as a}from"./chunks/framework.BonP4S8S.js";const k=JSON.parse('{"title":"Jet Reconstruction Examples","description":"","frontmatter":{},"headers":[],"relativePath":"examples.md","filePath":"examples.md","lastUpdated":null}'),n={name:"examples.md"};function l(h,e,o,r,p,c){return a(),i("div",null,e[0]||(e[0]=[t('

Jet Reconstruction Examples

The Jet Reconstruction package has a number of example files that show how to usage.

Note: because of extra dependencies in these scripts, one must use the Project.toml file in the examples directory.

jetreco.jl

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.

sh
julia --project=examples examples/jetreco.jl --algorithm=AntiKt test/data/events.pp13TeV.hepmc3.gz\n...\njulia --project=examples examples/jetreco.jl --algorithm=Durham test/data/events.eeH.hepmc3.gz\n...\njulia --project=examples examples/jetreco.jl --maxevents=10 --strategy=N2Plain --algorithm=Kt --exclusive-njets=3 test/data/events.pp13TeV.hepmc3.gz\n...

There are options to explicitly set the algorithm (use --help to see these).

instrumented-jetreco.jl

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

visualise-jets.jl

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.

visualise-jets.ipynb

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.

animate-reconstruction.jl

Performs jet reconstruction and then produces and animation of the process, showing how the jets merge from their different constituents.

',16)]))}const u=s(n,[["render",l]]);export{k as __pageData,u as default}; +import{_ as s,c as i,a5 as t,o as a}from"./chunks/framework.BtBDBbTG.js";const k=JSON.parse('{"title":"Jet Reconstruction Examples","description":"","frontmatter":{},"headers":[],"relativePath":"examples.md","filePath":"examples.md","lastUpdated":null}'),n={name:"examples.md"};function l(h,e,o,r,p,c){return a(),i("div",null,e[0]||(e[0]=[t('

Jet Reconstruction Examples

The Jet Reconstruction package has a number of example files that show how to usage.

Note: because of extra dependencies in these scripts, one must use the Project.toml file in the examples directory.

jetreco.jl

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.

sh
julia --project=examples examples/jetreco.jl --algorithm=AntiKt test/data/events.pp13TeV.hepmc3.gz\n...\njulia --project=examples examples/jetreco.jl --algorithm=Durham test/data/events.eeH.hepmc3.gz\n...\njulia --project=examples examples/jetreco.jl --maxevents=10 --strategy=N2Plain --algorithm=Kt --exclusive-njets=3 test/data/events.pp13TeV.hepmc3.gz\n...

There are options to explicitly set the algorithm (use --help to see these).

instrumented-jetreco.jl

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

visualise-jets.jl

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.

visualise-jets.ipynb

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.

animate-reconstruction.jl

Performs jet reconstruction and then produces and animation of the process, showing how the jets merge from their different constituents.

',16)]))}const u=s(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/dev/assets/examples.md.CtIAv1Hv.lean.js b/dev/assets/examples.md.0mYAaYCb.lean.js similarity index 98% rename from dev/assets/examples.md.CtIAv1Hv.lean.js rename to dev/assets/examples.md.0mYAaYCb.lean.js index 3238129..b1b1894 100644 --- a/dev/assets/examples.md.CtIAv1Hv.lean.js +++ b/dev/assets/examples.md.0mYAaYCb.lean.js @@ -1 +1 @@ -import{_ as s,c as i,a5 as t,o as a}from"./chunks/framework.BonP4S8S.js";const k=JSON.parse('{"title":"Jet Reconstruction Examples","description":"","frontmatter":{},"headers":[],"relativePath":"examples.md","filePath":"examples.md","lastUpdated":null}'),n={name:"examples.md"};function l(h,e,o,r,p,c){return a(),i("div",null,e[0]||(e[0]=[t('

Jet Reconstruction Examples

The Jet Reconstruction package has a number of example files that show how to usage.

Note: because of extra dependencies in these scripts, one must use the Project.toml file in the examples directory.

jetreco.jl

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.

sh
julia --project=examples examples/jetreco.jl --algorithm=AntiKt test/data/events.pp13TeV.hepmc3.gz\n...\njulia --project=examples examples/jetreco.jl --algorithm=Durham test/data/events.eeH.hepmc3.gz\n...\njulia --project=examples examples/jetreco.jl --maxevents=10 --strategy=N2Plain --algorithm=Kt --exclusive-njets=3 test/data/events.pp13TeV.hepmc3.gz\n...

There are options to explicitly set the algorithm (use --help to see these).

instrumented-jetreco.jl

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

visualise-jets.jl

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.

visualise-jets.ipynb

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.

animate-reconstruction.jl

Performs jet reconstruction and then produces and animation of the process, showing how the jets merge from their different constituents.

',16)]))}const u=s(n,[["render",l]]);export{k as __pageData,u as default}; +import{_ as s,c as i,a5 as t,o as a}from"./chunks/framework.BtBDBbTG.js";const k=JSON.parse('{"title":"Jet Reconstruction Examples","description":"","frontmatter":{},"headers":[],"relativePath":"examples.md","filePath":"examples.md","lastUpdated":null}'),n={name:"examples.md"};function l(h,e,o,r,p,c){return a(),i("div",null,e[0]||(e[0]=[t('

Jet Reconstruction Examples

The Jet Reconstruction package has a number of example files that show how to usage.

Note: because of extra dependencies in these scripts, one must use the Project.toml file in the examples directory.

jetreco.jl

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.

sh
julia --project=examples examples/jetreco.jl --algorithm=AntiKt test/data/events.pp13TeV.hepmc3.gz\n...\njulia --project=examples examples/jetreco.jl --algorithm=Durham test/data/events.eeH.hepmc3.gz\n...\njulia --project=examples examples/jetreco.jl --maxevents=10 --strategy=N2Plain --algorithm=Kt --exclusive-njets=3 test/data/events.pp13TeV.hepmc3.gz\n...

There are options to explicitly set the algorithm (use --help to see these).

instrumented-jetreco.jl

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

visualise-jets.jl

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.

visualise-jets.ipynb

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.

animate-reconstruction.jl

Performs jet reconstruction and then produces and animation of the process, showing how the jets merge from their different constituents.

',16)]))}const u=s(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/dev/assets/index.md.D4zfwJ4T.js b/dev/assets/index.md.CDGdS60h.js similarity index 99% rename from dev/assets/index.md.D4zfwJ4T.js rename to dev/assets/index.md.CDGdS60h.js index e064bb5..4f23496 100644 --- a/dev/assets/index.md.D4zfwJ4T.js +++ b/dev/assets/index.md.CDGdS60h.js @@ -1,4 +1,4 @@ -import{_ as n,c as i,j as t,a as s,a5 as l,o as a}from"./chunks/framework.BonP4S8S.js";const o="/JetReconstruction.jl/dev/assets/jetvis.Bpiv-g6k.png",L1=JSON.parse('{"title":"Jet Reconstruction","description":"","frontmatter":{"layout":"home","hero":{"name":"JetReconstruction.jl","tagline":"Jet reconstruction (reclustering) with Julia","image":{"src":"/logo.png","alt":"DocumenterVitepress"},"actions":[{"theme":"brand","text":"Examples","link":"/examples"},{"theme":"alt","text":"Public APIs","link":"/lib/public"}]}},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),r={name:"index.md"},p={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},d={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},Q={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},h={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.973ex",height:"1.779ex",role:"img",focusable:"false",viewBox:"0 -775.2 2198.3 786.2","aria-hidden":"true"},T={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},m={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},g={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},u={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},k={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},x={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},w={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},c={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},y={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},b={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},E={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},v={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.973ex",height:"1.779ex",role:"img",focusable:"false",viewBox:"0 -775.2 2198.3 786.2","aria-hidden":"true"},f={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},H={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.493ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1101.8 844","aria-hidden":"true"},M={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},C={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},F={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},V={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.973ex",height:"1.779ex",role:"img",focusable:"false",viewBox:"0 -775.2 2198.3 786.2","aria-hidden":"true"},j={tabindex:"0"},L={style:{"text-align":"right"}},B={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},Z={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},D={style:{"text-align":"right"}},A={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},J={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},S={style:{"text-align":"right"}},R={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},G={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},P={style:{"text-align":"right"}},z={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},q={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},I={style:{"text-align":"right"}},N={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},K={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.186ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.301ex",height:"1.939ex",role:"img",focusable:"false",viewBox:"0 -775.2 2343.1 857.2","aria-hidden":"true"},O={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},X={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},$={style:{"text-align":"right"}},U={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},W={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.186ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.301ex",height:"1.939ex",role:"img",focusable:"false",viewBox:"0 -775.2 2343.1 857.2","aria-hidden":"true"},Y={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},_={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},t1={style:{"text-align":"right"}},e1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},s1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.973ex",height:"1.779ex",role:"img",focusable:"false",viewBox:"0 -775.2 2198.3 786.2","aria-hidden":"true"},i1={id:"pp-Algorithms",tabindex:"-1"},l1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},a1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},n1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},o1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},r1={tabindex:"0"},p1={style:{"text-align":"right"}},d1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},Q1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"0"},xmlns:"http://www.w3.org/2000/svg",width:"2.009ex",height:"1.545ex",role:"img",focusable:"false",viewBox:"0 -683 888 683","aria-hidden":"true"},h1={style:{"text-align":"right"}},T1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},m1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.048ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.717ex",height:"1.593ex",role:"img",focusable:"false",viewBox:"0 -683 759 704","aria-hidden":"true"},g1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},u1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"0"},xmlns:"http://www.w3.org/2000/svg",width:"2.009ex",height:"1.545ex",role:"img",focusable:"false",viewBox:"0 -683 888 683","aria-hidden":"true"},k1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},x1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.452ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1083.8 636","aria-hidden":"true"},w1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},c1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.666ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.278ex",height:"1.666ex",role:"img",focusable:"false",viewBox:"0 -442 1890.7 736.2","aria-hidden":"true"},y1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},b1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.666ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.575ex",height:"2.236ex",role:"img",focusable:"false",viewBox:"0 -694 1138.3 988.2","aria-hidden":"true"},E1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},v1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.09ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.28ex",height:"1.597ex",role:"img",focusable:"false",viewBox:"0 -666 2333.8 706","aria-hidden":"true"};function f1(H1,e,M1,C1,F1,V1){return a(),i("div",null,[e[132]||(e[132]=t("h1",{id:"Jet-Reconstruction",tabindex:"-1"},[s("Jet Reconstruction "),t("a",{class:"header-anchor",href:"#Jet-Reconstruction","aria-label":'Permalink to "Jet Reconstruction {#Jet-Reconstruction}"'},"​")],-1)),t("p",null,[e[4]||(e[4]=s("This package implements sequential Jet Reconstruction (clustering) algorithms, which are used in high-energy physics as part of event reconstruction for ")),t("mjx-container",p,[(a(),i("svg",d,e[0]||(e[0]=[l('',1)]))),e[1]||(e[1]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[5]||(e[5]=s(" and ")),t("mjx-container",Q,[(a(),i("svg",h,e[2]||(e[2]=[l('',1)]))),e[3]||(e[3]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("msup",null,[t("mi",null,"e"),t("mo",null,"−")])])],-1))]),e[6]||(e[6]=s(" colliders."))]),e[133]||(e[133]=l('

Algorithms

Algorithms used are based on the C++ FastJet package (https://fastjet.fr, hep-ph/0512210, arXiv:1111.6097), reimplemented natively in Julia.

',2)),t("p",null,[e[19]||(e[19]=s("The algorithms include anti-")),t("mjx-container",T,[(a(),i("svg",m,e[7]||(e[7]=[l('',1)]))),e[8]||(e[8]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"k")]),t("mtext",null,"T")])])],-1))]),e[20]||(e[20]=s(", Cambridge/Aachen, inclusive ")),t("mjx-container",g,[(a(),i("svg",u,e[9]||(e[9]=[l('',1)]))),e[10]||(e[10]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))]),e[21]||(e[21]=s(", generalised ")),t("mjx-container",k,[(a(),i("svg",x,e[11]||(e[11]=[l('',1)]))),e[12]||(e[12]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))]),e[22]||(e[22]=s(" for ")),t("mjx-container",w,[(a(),i("svg",c,e[13]||(e[13]=[l('',1)]))),e[14]||(e[14]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[23]||(e[23]=s(" events; and the Durham algorithm and generalised ")),t("mjx-container",y,[(a(),i("svg",b,e[15]||(e[15]=[l('',1)]))),e[16]||(e[16]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))]),e[24]||(e[24]=s(" for ")),t("mjx-container",E,[(a(),i("svg",v,e[17]||(e[17]=[l('',1)]))),e[18]||(e[18]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("msup",null,[t("mi",null,"e"),t("mo",null,"−")])])],-1))]),e[25]||(e[25]=s("."))]),e[134]||(e[134]=l('

Reconstruction Interface

The main interface for reconstruction is jet_reconstruct, called as, e.g.,

julia
jet_reconstruct(particles; algorithm = JetAlgorithm.AntiKt, R = 1.0)

or with some of the optional arguments,

julia
jet_reconstruct(particles; algorithm = JetAlgorithm.GenKt, R = 0.4, p = 0.5, recombine = +, strategy = RecoStrategy.Best)
',5)),t("p",null,[e[32]||(e[32]=s("Where ")),e[33]||(e[33]=t("code",null,"particles",-1)),e[34]||(e[34]=s(" is a collection of 4-vector objects to reconstruct and the algorithm is either given explicitly or implied by the power value. For the case of generalised ")),t("mjx-container",f,[(a(),i("svg",H,e[26]||(e[26]=[l('',1)]))),e[27]||(e[27]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mi",null,"T")])])],-1))]),e[35]||(e[35]=s(" (for ")),t("mjx-container",M,[(a(),i("svg",C,e[28]||(e[28]=[l('',1)]))),e[29]||(e[29]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[36]||(e[36]=s(" and ")),t("mjx-container",F,[(a(),i("svg",V,e[30]||(e[30]=[l('',1)]))),e[31]||(e[31]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("msup",null,[t("mi",null,"e"),t("mo",null,"−")])])],-1))]),e[37]||(e[37]=s(") both the algorithm (")),e[38]||(e[38]=t("code",null,"JetAlgorithm.GenKt",-1)),e[39]||(e[39]=s(") and ")),e[40]||(e[40]=t("code",null,"p",-1)),e[41]||(e[41]=s(" are needed. For the case of the Durham algorithm the ")),e[42]||(e[42]=t("code",null,"R",-1)),e[43]||(e[43]=s(" value is ignored."))]),e[135]||(e[135]=t("p",null,[s("The object returned is a "),t("a",{href:"/JetReconstruction.jl/dev/lib/public#JetReconstruction.ClusterSequence"},[t("code",null,"ClusterSequence")]),s(", which internally tracks all merge steps.")],-1)),e[136]||(e[136]=t("h3",{id:"Algorithm-Types",tabindex:"-1"},[s("Algorithm Types "),t("a",{class:"header-anchor",href:"#Algorithm-Types","aria-label":'Permalink to "Algorithm Types {#Algorithm-Types}"'},"​")],-1)),e[137]||(e[137]=t("p",null,[s("Each known algorithm is referenced using a "),t("code",null,"JetAlgorithm"),s(" scoped enum value.")],-1)),t("table",j,[e[86]||(e[86]=t("thead",null,[t("tr",null,[t("th",{style:{"text-align":"right"}},"Algorithm"),t("th",{style:{"text-align":"right"}},"Type name"),t("th",{style:{"text-align":"right"}},"Notes")])],-1)),t("tbody",null,[t("tr",null,[t("td",L,[e[46]||(e[46]=s("anti-")),t("mjx-container",B,[(a(),i("svg",Z,e[44]||(e[44]=[l('',1)]))),e[45]||(e[45]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"k")]),t("mtext",null,"T")])])],-1))])]),e[47]||(e[47]=t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.AntiKt")],-1)),e[48]||(e[48]=t("td",{style:{"text-align":"right"}},[s("Implies "),t("code",null,"p=-1")],-1))]),e[85]||(e[85]=t("tr",null,[t("td",{style:{"text-align":"right"}},"Cambridge/Aachen"),t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.CA")]),t("td",{style:{"text-align":"right"}},[s("Implies "),t("code",null,"p=0")])],-1)),t("tr",null,[t("td",D,[e[51]||(e[51]=s("inclusive ")),t("mjx-container",A,[(a(),i("svg",J,e[49]||(e[49]=[l('',1)]))),e[50]||(e[50]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))])]),e[52]||(e[52]=t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.Kt")],-1)),e[53]||(e[53]=t("td",{style:{"text-align":"right"}},[s("Implies "),t("code",null,"p=1")],-1))]),t("tr",null,[t("td",S,[e[56]||(e[56]=s("generalised ")),t("mjx-container",R,[(a(),i("svg",G,e[54]||(e[54]=[l('',1)]))),e[55]||(e[55]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))])]),e[63]||(e[63]=t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.GenKt")],-1)),t("td",P,[e[59]||(e[59]=s("For ")),t("mjx-container",z,[(a(),i("svg",q,e[57]||(e[57]=[l('',1)]))),e[58]||(e[58]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[60]||(e[60]=s(", value of ")),e[61]||(e[61]=t("code",null,"p",-1)),e[62]||(e[62]=s(" must also be specified"))])]),t("tr",null,[t("td",I,[t("mjx-container",N,[(a(),i("svg",K,e[64]||(e[64]=[l('',1)]))),e[65]||(e[65]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("mi",null,"e"),t("mo",null,"−")])],-1))]),e[68]||(e[68]=s()),t("mjx-container",O,[(a(),i("svg",X,e[66]||(e[66]=[l('',1)]))),e[67]||(e[67]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))]),e[69]||(e[69]=s(" / Durham"))]),e[70]||(e[70]=t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.Durham")],-1)),e[71]||(e[71]=t("td",{style:{"text-align":"right"}},[t("code",null,"R"),s(" value ignored and can be omitted")],-1))]),t("tr",null,[t("td",$,[e[76]||(e[76]=s("generalised ")),t("mjx-container",U,[(a(),i("svg",W,e[72]||(e[72]=[l('',1)]))),e[73]||(e[73]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("mi",null,"e"),t("mo",null,"−")])],-1))]),e[77]||(e[77]=s()),t("mjx-container",Y,[(a(),i("svg",_,e[74]||(e[74]=[l('',1)]))),e[75]||(e[75]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))])]),e[84]||(e[84]=t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.EEKt")],-1)),t("td",t1,[e[80]||(e[80]=s("For ")),t("mjx-container",e1,[(a(),i("svg",s1,e[78]||(e[78]=[l('',1)]))),e[79]||(e[79]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("msup",null,[t("mi",null,"e"),t("mo",null,"−")])])],-1))]),e[81]||(e[81]=s(", value of ")),e[82]||(e[82]=t("code",null,"p",-1)),e[83]||(e[83]=s(" must also be specified"))])])])]),t("h3",i1,[t("mjx-container",l1,[(a(),i("svg",a1,e[87]||(e[87]=[l('',1)]))),e[88]||(e[88]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[89]||(e[89]=s(" Algorithms ")),e[90]||(e[90]=t("a",{class:"header-anchor",href:"#pp-Algorithms","aria-label":'Permalink to "$pp$ Algorithms {#pp-Algorithms}"'},"​",-1))]),t("p",null,[e[93]||(e[93]=s("For the three ")),t("mjx-container",n1,[(a(),i("svg",o1,e[91]||(e[91]=[l('',1)]))),e[92]||(e[92]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[94]||(e[94]=s(" algorithms with fixed ")),e[95]||(e[95]=t("code",null,"p",-1)),e[96]||(e[96]=s(" values, the ")),e[97]||(e[97]=t("code",null,"p",-1)),e[98]||(e[98]=s(" value can be given instead of the algorithm name. However, this should be considered ")),e[99]||(e[99]=t("em",null,"deprecated",-1)),e[100]||(e[100]=s(" and will be removed in a future release."))]),e[138]||(e[138]=t("h2",{id:"strategy",tabindex:"-1"},[s("Strategy "),t("a",{class:"header-anchor",href:"#strategy","aria-label":'Permalink to "Strategy"'},"​")],-1)),e[139]||(e[139]=t("p",null,[s("Three strategies are available for the different algorithms, which can be specified by passing the named argument "),t("code",null,"strategy=..."),s(".")],-1)),t("table",r1,[e[117]||(e[117]=t("thead",null,[t("tr",null,[t("th",{style:{"text-align":"right"}},"Strategy Name"),t("th",{style:{"text-align":"right"}},"Notes"),t("th",{style:{"text-align":"right"}},"Interface")])],-1)),t("tbody",null,[e[116]||(e[116]=t("tr",null,[t("td",{style:{"text-align":"right"}},[t("code",null,"RecoStrategy.Best")]),t("td",{style:{"text-align":"right"}},"Dynamically switch strategy based on input particle density"),t("td",{style:{"text-align":"right"}},[t("code",null,"jet_reconstruct")])],-1)),t("tr",null,[e[105]||(e[105]=t("td",{style:{"text-align":"right"}},[t("code",null,"RecoStrategy.N2Plain")],-1)),t("td",p1,[e[103]||(e[103]=s("Global matching of particles at each interation (works well for low ")),t("mjx-container",d1,[(a(),i("svg",Q1,e[101]||(e[101]=[t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D441",d:"M234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637Z",style:{"stroke-width":"3"}})])])],-1)]))),e[102]||(e[102]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"N")])],-1))]),e[104]||(e[104]=s(")"))]),e[106]||(e[106]=t("td",{style:{"text-align":"right"}},[t("code",null,"plain_jet_reconstruct")],-1))]),t("tr",null,[e[114]||(e[114]=t("td",{style:{"text-align":"right"}},[t("code",null,"RecoStrategy.N2Tiled")],-1)),t("td",h1,[e[111]||(e[111]=s("Use tiles of radius ")),t("mjx-container",T1,[(a(),i("svg",m1,e[107]||(e[107]=[t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D445",d:"M230 637Q203 637 198 638T193 649Q193 676 204 682Q206 683 378 683Q550 682 564 680Q620 672 658 652T712 606T733 563T739 529Q739 484 710 445T643 385T576 351T538 338L545 333Q612 295 612 223Q612 212 607 162T602 80V71Q602 53 603 43T614 25T640 16Q668 16 686 38T712 85Q717 99 720 102T735 105Q755 105 755 93Q755 75 731 36Q693 -21 641 -21H632Q571 -21 531 4T487 82Q487 109 502 166T517 239Q517 290 474 313Q459 320 449 321T378 323H309L277 193Q244 61 244 59Q244 55 245 54T252 50T269 48T302 46H333Q339 38 339 37T336 19Q332 6 326 0H311Q275 2 180 2Q146 2 117 2T71 2T50 1Q33 1 33 10Q33 12 36 24Q41 43 46 45Q50 46 61 46H67Q94 46 127 49Q141 52 146 61Q149 65 218 339T287 628Q287 635 230 637ZM630 554Q630 586 609 608T523 636Q521 636 500 636T462 637H440Q393 637 386 627Q385 624 352 494T319 361Q319 360 388 360Q466 361 492 367Q556 377 592 426Q608 449 619 486T630 554Z",style:{"stroke-width":"3"}})])])],-1)]))),e[108]||(e[108]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"R")])],-1))]),e[112]||(e[112]=s(" to limit search space (works well for higher ")),t("mjx-container",g1,[(a(),i("svg",u1,e[109]||(e[109]=[t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D441",d:"M234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637Z",style:{"stroke-width":"3"}})])])],-1)]))),e[110]||(e[110]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"N")])],-1))]),e[113]||(e[113]=s(")"))]),e[115]||(e[115]=t("td",{style:{"text-align":"right"}},[t("code",null,"tiled_jet_reconstruct")],-1))])])]),e[140]||(e[140]=l(`

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
+import{_ as n,c as i,j as t,a as s,a5 as l,o as a}from"./chunks/framework.BtBDBbTG.js";const o="/JetReconstruction.jl/dev/assets/jetvis.Bpiv-g6k.png",L1=JSON.parse('{"title":"Jet Reconstruction","description":"","frontmatter":{"layout":"home","hero":{"name":"JetReconstruction.jl","tagline":"Jet reconstruction (reclustering) with Julia","image":{"src":"/logo.png","alt":"DocumenterVitepress"},"actions":[{"theme":"brand","text":"Examples","link":"/examples"},{"theme":"alt","text":"Public APIs","link":"/lib/public"}]}},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),r={name:"index.md"},p={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},d={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},Q={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},h={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.973ex",height:"1.779ex",role:"img",focusable:"false",viewBox:"0 -775.2 2198.3 786.2","aria-hidden":"true"},T={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},m={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},g={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},u={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},k={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},x={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},w={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},c={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},y={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},b={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},E={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},v={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.973ex",height:"1.779ex",role:"img",focusable:"false",viewBox:"0 -775.2 2198.3 786.2","aria-hidden":"true"},f={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},H={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.493ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1101.8 844","aria-hidden":"true"},M={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},C={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},F={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},V={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.973ex",height:"1.779ex",role:"img",focusable:"false",viewBox:"0 -775.2 2198.3 786.2","aria-hidden":"true"},j={tabindex:"0"},L={style:{"text-align":"right"}},B={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},Z={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},D={style:{"text-align":"right"}},A={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},J={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},S={style:{"text-align":"right"}},R={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},G={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},P={style:{"text-align":"right"}},z={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},q={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},I={style:{"text-align":"right"}},N={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},K={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.186ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.301ex",height:"1.939ex",role:"img",focusable:"false",viewBox:"0 -775.2 2343.1 857.2","aria-hidden":"true"},O={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},X={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},$={style:{"text-align":"right"}},U={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},W={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.186ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.301ex",height:"1.939ex",role:"img",focusable:"false",viewBox:"0 -775.2 2343.1 857.2","aria-hidden":"true"},Y={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},_={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},t1={style:{"text-align":"right"}},e1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},s1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.973ex",height:"1.779ex",role:"img",focusable:"false",viewBox:"0 -775.2 2198.3 786.2","aria-hidden":"true"},i1={id:"pp-Algorithms",tabindex:"-1"},l1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},a1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},n1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},o1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},r1={tabindex:"0"},p1={style:{"text-align":"right"}},d1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},Q1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"0"},xmlns:"http://www.w3.org/2000/svg",width:"2.009ex",height:"1.545ex",role:"img",focusable:"false",viewBox:"0 -683 888 683","aria-hidden":"true"},h1={style:{"text-align":"right"}},T1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},m1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.048ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.717ex",height:"1.593ex",role:"img",focusable:"false",viewBox:"0 -683 759 704","aria-hidden":"true"},g1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},u1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"0"},xmlns:"http://www.w3.org/2000/svg",width:"2.009ex",height:"1.545ex",role:"img",focusable:"false",viewBox:"0 -683 888 683","aria-hidden":"true"},k1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},x1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.452ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1083.8 636","aria-hidden":"true"},w1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},c1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.666ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.278ex",height:"1.666ex",role:"img",focusable:"false",viewBox:"0 -442 1890.7 736.2","aria-hidden":"true"},y1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},b1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.666ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.575ex",height:"2.236ex",role:"img",focusable:"false",viewBox:"0 -694 1138.3 988.2","aria-hidden":"true"},E1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},v1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.09ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.28ex",height:"1.597ex",role:"img",focusable:"false",viewBox:"0 -666 2333.8 706","aria-hidden":"true"};function f1(H1,e,M1,C1,F1,V1){return a(),i("div",null,[e[132]||(e[132]=t("h1",{id:"Jet-Reconstruction",tabindex:"-1"},[s("Jet Reconstruction "),t("a",{class:"header-anchor",href:"#Jet-Reconstruction","aria-label":'Permalink to "Jet Reconstruction {#Jet-Reconstruction}"'},"​")],-1)),t("p",null,[e[4]||(e[4]=s("This package implements sequential Jet Reconstruction (clustering) algorithms, which are used in high-energy physics as part of event reconstruction for ")),t("mjx-container",p,[(a(),i("svg",d,e[0]||(e[0]=[l('',1)]))),e[1]||(e[1]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[5]||(e[5]=s(" and ")),t("mjx-container",Q,[(a(),i("svg",h,e[2]||(e[2]=[l('',1)]))),e[3]||(e[3]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("msup",null,[t("mi",null,"e"),t("mo",null,"−")])])],-1))]),e[6]||(e[6]=s(" colliders."))]),e[133]||(e[133]=l('

Algorithms

Algorithms used are based on the C++ FastJet package (https://fastjet.fr, hep-ph/0512210, arXiv:1111.6097), reimplemented natively in Julia.

',2)),t("p",null,[e[19]||(e[19]=s("The algorithms include anti-")),t("mjx-container",T,[(a(),i("svg",m,e[7]||(e[7]=[l('',1)]))),e[8]||(e[8]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"k")]),t("mtext",null,"T")])])],-1))]),e[20]||(e[20]=s(", Cambridge/Aachen, inclusive ")),t("mjx-container",g,[(a(),i("svg",u,e[9]||(e[9]=[l('',1)]))),e[10]||(e[10]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))]),e[21]||(e[21]=s(", generalised ")),t("mjx-container",k,[(a(),i("svg",x,e[11]||(e[11]=[l('',1)]))),e[12]||(e[12]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))]),e[22]||(e[22]=s(" for ")),t("mjx-container",w,[(a(),i("svg",c,e[13]||(e[13]=[l('',1)]))),e[14]||(e[14]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[23]||(e[23]=s(" events; and the Durham algorithm and generalised ")),t("mjx-container",y,[(a(),i("svg",b,e[15]||(e[15]=[l('',1)]))),e[16]||(e[16]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))]),e[24]||(e[24]=s(" for ")),t("mjx-container",E,[(a(),i("svg",v,e[17]||(e[17]=[l('',1)]))),e[18]||(e[18]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("msup",null,[t("mi",null,"e"),t("mo",null,"−")])])],-1))]),e[25]||(e[25]=s("."))]),e[134]||(e[134]=l('

Reconstruction Interface

The main interface for reconstruction is jet_reconstruct, called as, e.g.,

julia
jet_reconstruct(particles; algorithm = JetAlgorithm.AntiKt, R = 1.0)

or with some of the optional arguments,

julia
jet_reconstruct(particles; algorithm = JetAlgorithm.GenKt, R = 0.4, p = 0.5, recombine = +, strategy = RecoStrategy.Best)
',5)),t("p",null,[e[32]||(e[32]=s("Where ")),e[33]||(e[33]=t("code",null,"particles",-1)),e[34]||(e[34]=s(" is a collection of 4-vector objects to reconstruct and the algorithm is either given explicitly or implied by the power value. For the case of generalised ")),t("mjx-container",f,[(a(),i("svg",H,e[26]||(e[26]=[l('',1)]))),e[27]||(e[27]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mi",null,"T")])])],-1))]),e[35]||(e[35]=s(" (for ")),t("mjx-container",M,[(a(),i("svg",C,e[28]||(e[28]=[l('',1)]))),e[29]||(e[29]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[36]||(e[36]=s(" and ")),t("mjx-container",F,[(a(),i("svg",V,e[30]||(e[30]=[l('',1)]))),e[31]||(e[31]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("msup",null,[t("mi",null,"e"),t("mo",null,"−")])])],-1))]),e[37]||(e[37]=s(") both the algorithm (")),e[38]||(e[38]=t("code",null,"JetAlgorithm.GenKt",-1)),e[39]||(e[39]=s(") and ")),e[40]||(e[40]=t("code",null,"p",-1)),e[41]||(e[41]=s(" are needed. For the case of the Durham algorithm the ")),e[42]||(e[42]=t("code",null,"R",-1)),e[43]||(e[43]=s(" value is ignored."))]),e[135]||(e[135]=t("p",null,[s("The object returned is a "),t("a",{href:"/JetReconstruction.jl/dev/lib/public#JetReconstruction.ClusterSequence"},[t("code",null,"ClusterSequence")]),s(", which internally tracks all merge steps.")],-1)),e[136]||(e[136]=t("h3",{id:"Algorithm-Types",tabindex:"-1"},[s("Algorithm Types "),t("a",{class:"header-anchor",href:"#Algorithm-Types","aria-label":'Permalink to "Algorithm Types {#Algorithm-Types}"'},"​")],-1)),e[137]||(e[137]=t("p",null,[s("Each known algorithm is referenced using a "),t("code",null,"JetAlgorithm"),s(" scoped enum value.")],-1)),t("table",j,[e[86]||(e[86]=t("thead",null,[t("tr",null,[t("th",{style:{"text-align":"right"}},"Algorithm"),t("th",{style:{"text-align":"right"}},"Type name"),t("th",{style:{"text-align":"right"}},"Notes")])],-1)),t("tbody",null,[t("tr",null,[t("td",L,[e[46]||(e[46]=s("anti-")),t("mjx-container",B,[(a(),i("svg",Z,e[44]||(e[44]=[l('',1)]))),e[45]||(e[45]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"k")]),t("mtext",null,"T")])])],-1))])]),e[47]||(e[47]=t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.AntiKt")],-1)),e[48]||(e[48]=t("td",{style:{"text-align":"right"}},[s("Implies "),t("code",null,"p=-1")],-1))]),e[85]||(e[85]=t("tr",null,[t("td",{style:{"text-align":"right"}},"Cambridge/Aachen"),t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.CA")]),t("td",{style:{"text-align":"right"}},[s("Implies "),t("code",null,"p=0")])],-1)),t("tr",null,[t("td",D,[e[51]||(e[51]=s("inclusive ")),t("mjx-container",A,[(a(),i("svg",J,e[49]||(e[49]=[l('',1)]))),e[50]||(e[50]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))])]),e[52]||(e[52]=t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.Kt")],-1)),e[53]||(e[53]=t("td",{style:{"text-align":"right"}},[s("Implies "),t("code",null,"p=1")],-1))]),t("tr",null,[t("td",S,[e[56]||(e[56]=s("generalised ")),t("mjx-container",R,[(a(),i("svg",G,e[54]||(e[54]=[l('',1)]))),e[55]||(e[55]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))])]),e[63]||(e[63]=t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.GenKt")],-1)),t("td",P,[e[59]||(e[59]=s("For ")),t("mjx-container",z,[(a(),i("svg",q,e[57]||(e[57]=[l('',1)]))),e[58]||(e[58]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[60]||(e[60]=s(", value of ")),e[61]||(e[61]=t("code",null,"p",-1)),e[62]||(e[62]=s(" must also be specified"))])]),t("tr",null,[t("td",I,[t("mjx-container",N,[(a(),i("svg",K,e[64]||(e[64]=[l('',1)]))),e[65]||(e[65]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("mi",null,"e"),t("mo",null,"−")])],-1))]),e[68]||(e[68]=s()),t("mjx-container",O,[(a(),i("svg",X,e[66]||(e[66]=[l('',1)]))),e[67]||(e[67]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))]),e[69]||(e[69]=s(" / Durham"))]),e[70]||(e[70]=t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.Durham")],-1)),e[71]||(e[71]=t("td",{style:{"text-align":"right"}},[t("code",null,"R"),s(" value ignored and can be omitted")],-1))]),t("tr",null,[t("td",$,[e[76]||(e[76]=s("generalised ")),t("mjx-container",U,[(a(),i("svg",W,e[72]||(e[72]=[l('',1)]))),e[73]||(e[73]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("mi",null,"e"),t("mo",null,"−")])],-1))]),e[77]||(e[77]=s()),t("mjx-container",Y,[(a(),i("svg",_,e[74]||(e[74]=[l('',1)]))),e[75]||(e[75]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))])]),e[84]||(e[84]=t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.EEKt")],-1)),t("td",t1,[e[80]||(e[80]=s("For ")),t("mjx-container",e1,[(a(),i("svg",s1,e[78]||(e[78]=[l('',1)]))),e[79]||(e[79]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("msup",null,[t("mi",null,"e"),t("mo",null,"−")])])],-1))]),e[81]||(e[81]=s(", value of ")),e[82]||(e[82]=t("code",null,"p",-1)),e[83]||(e[83]=s(" must also be specified"))])])])]),t("h3",i1,[t("mjx-container",l1,[(a(),i("svg",a1,e[87]||(e[87]=[l('',1)]))),e[88]||(e[88]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[89]||(e[89]=s(" Algorithms ")),e[90]||(e[90]=t("a",{class:"header-anchor",href:"#pp-Algorithms","aria-label":'Permalink to "$pp$ Algorithms {#pp-Algorithms}"'},"​",-1))]),t("p",null,[e[93]||(e[93]=s("For the three ")),t("mjx-container",n1,[(a(),i("svg",o1,e[91]||(e[91]=[l('',1)]))),e[92]||(e[92]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[94]||(e[94]=s(" algorithms with fixed ")),e[95]||(e[95]=t("code",null,"p",-1)),e[96]||(e[96]=s(" values, the ")),e[97]||(e[97]=t("code",null,"p",-1)),e[98]||(e[98]=s(" value can be given instead of the algorithm name. However, this should be considered ")),e[99]||(e[99]=t("em",null,"deprecated",-1)),e[100]||(e[100]=s(" and will be removed in a future release."))]),e[138]||(e[138]=t("h2",{id:"strategy",tabindex:"-1"},[s("Strategy "),t("a",{class:"header-anchor",href:"#strategy","aria-label":'Permalink to "Strategy"'},"​")],-1)),e[139]||(e[139]=t("p",null,[s("Three strategies are available for the different algorithms, which can be specified by passing the named argument "),t("code",null,"strategy=..."),s(".")],-1)),t("table",r1,[e[117]||(e[117]=t("thead",null,[t("tr",null,[t("th",{style:{"text-align":"right"}},"Strategy Name"),t("th",{style:{"text-align":"right"}},"Notes"),t("th",{style:{"text-align":"right"}},"Interface")])],-1)),t("tbody",null,[e[116]||(e[116]=t("tr",null,[t("td",{style:{"text-align":"right"}},[t("code",null,"RecoStrategy.Best")]),t("td",{style:{"text-align":"right"}},"Dynamically switch strategy based on input particle density"),t("td",{style:{"text-align":"right"}},[t("code",null,"jet_reconstruct")])],-1)),t("tr",null,[e[105]||(e[105]=t("td",{style:{"text-align":"right"}},[t("code",null,"RecoStrategy.N2Plain")],-1)),t("td",p1,[e[103]||(e[103]=s("Global matching of particles at each interation (works well for low ")),t("mjx-container",d1,[(a(),i("svg",Q1,e[101]||(e[101]=[t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D441",d:"M234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637Z",style:{"stroke-width":"3"}})])])],-1)]))),e[102]||(e[102]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"N")])],-1))]),e[104]||(e[104]=s(")"))]),e[106]||(e[106]=t("td",{style:{"text-align":"right"}},[t("code",null,"plain_jet_reconstruct")],-1))]),t("tr",null,[e[114]||(e[114]=t("td",{style:{"text-align":"right"}},[t("code",null,"RecoStrategy.N2Tiled")],-1)),t("td",h1,[e[111]||(e[111]=s("Use tiles of radius ")),t("mjx-container",T1,[(a(),i("svg",m1,e[107]||(e[107]=[t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D445",d:"M230 637Q203 637 198 638T193 649Q193 676 204 682Q206 683 378 683Q550 682 564 680Q620 672 658 652T712 606T733 563T739 529Q739 484 710 445T643 385T576 351T538 338L545 333Q612 295 612 223Q612 212 607 162T602 80V71Q602 53 603 43T614 25T640 16Q668 16 686 38T712 85Q717 99 720 102T735 105Q755 105 755 93Q755 75 731 36Q693 -21 641 -21H632Q571 -21 531 4T487 82Q487 109 502 166T517 239Q517 290 474 313Q459 320 449 321T378 323H309L277 193Q244 61 244 59Q244 55 245 54T252 50T269 48T302 46H333Q339 38 339 37T336 19Q332 6 326 0H311Q275 2 180 2Q146 2 117 2T71 2T50 1Q33 1 33 10Q33 12 36 24Q41 43 46 45Q50 46 61 46H67Q94 46 127 49Q141 52 146 61Q149 65 218 339T287 628Q287 635 230 637ZM630 554Q630 586 609 608T523 636Q521 636 500 636T462 637H440Q393 637 386 627Q385 624 352 494T319 361Q319 360 388 360Q466 361 492 367Q556 377 592 426Q608 449 619 486T630 554Z",style:{"stroke-width":"3"}})])])],-1)]))),e[108]||(e[108]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"R")])],-1))]),e[112]||(e[112]=s(" to limit search space (works well for higher ")),t("mjx-container",g1,[(a(),i("svg",u1,e[109]||(e[109]=[t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D441",d:"M234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637Z",style:{"stroke-width":"3"}})])])],-1)]))),e[110]||(e[110]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"N")])],-1))]),e[113]||(e[113]=s(")"))]),e[115]||(e[115]=t("td",{style:{"text-align":"right"}},[t("code",null,"tiled_jet_reconstruct")],-1))])])]),e[140]||(e[140]=l(`

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}; algorithm = JetAlgorithm.AntiKt, R = 1.0, recombine = +)

(There is no strategy option in these interfaces.)

Inclusive and Exclusive Selections

`,5)),t("p",null,[e[124]||(e[124]=s("To obtain final jets both inclusive (")),t("mjx-container",k1,[(a(),i("svg",x1,e[118]||(e[118]=[l('',1)]))),e[119]||(e[119]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"p"),t("mi",null,"T")])])],-1))]),e[125]||(e[125]=s(" cut) and exclusive (")),t("mjx-container",w1,[(a(),i("svg",c1,e[120]||(e[120]=[l('',1)]))),e[121]||(e[121]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"n"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"j"),t("mi",null,"e"),t("mi",null,"t"),t("mi",null,"s")])])])],-1))]),e[126]||(e[126]=s(" or ")),t("mjx-container",y1,[(a(),i("svg",b1,e[122]||(e[122]=[l('',1)]))),e[123]||(e[123]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"d"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"j")])])])],-1))]),e[127]||(e[127]=s(" cut) selections are supported:"))]),e[141]||(e[141]=t("ul",null,[t("li",null,[t("p",null,[t("a",{href:"/JetReconstruction.jl/dev/lib/public#JetReconstruction.inclusive_jets-Tuple{ClusterSequence}"},"inclusive_jets(clusterseq::ClusterSequence, ptmin = 0.0)")])]),t("li",null,[t("p",null,[t("a",{href:"/JetReconstruction.jl/dev/lib/public#JetReconstruction.exclusive_jets-Tuple{ClusterSequence}"},"exclusive_jets(clusterseq::ClusterSequence; dcut = nothing, njets = nothing)")])])],-1)),e[142]||(e[142]=t("h3",{id:"sorting",tabindex:"-1"},[s("Sorting "),t("a",{class:"header-anchor",href:"#sorting","aria-label":'Permalink to "Sorting"'},"​")],-1)),t("p",null,[e[130]||(e[130]=s("Sorting vectors is trivial in Julia, no special sorting methods are provided. As an example, to sort exclusive jets of ")),t("mjx-container",E1,[(a(),i("svg",v1,e[128]||(e[128]=[l('',1)]))),e[129]||(e[129]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mo",null,">"),t("mn",null,"5.0")])],-1))]),e[131]||(e[131]=s(" (usually GeV, depending on your EDM) from highest energy to lowest:"))]),e[143]||(e[143]=l(`
julia
sorted_jets = sort!(inclusive_jets(cs::ClusterSequence; ptmin=5.0), 
   by=JetReconstruction.energy, rev=true)

Plotting and Animation

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.

Serialisation

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.

Reference

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}},
diff --git a/dev/assets/index.md.D4zfwJ4T.lean.js b/dev/assets/index.md.CDGdS60h.lean.js
similarity index 99%
rename from dev/assets/index.md.D4zfwJ4T.lean.js
rename to dev/assets/index.md.CDGdS60h.lean.js
index e064bb5..4f23496 100644
--- a/dev/assets/index.md.D4zfwJ4T.lean.js
+++ b/dev/assets/index.md.CDGdS60h.lean.js
@@ -1,4 +1,4 @@
-import{_ as n,c as i,j as t,a as s,a5 as l,o as a}from"./chunks/framework.BonP4S8S.js";const o="/JetReconstruction.jl/dev/assets/jetvis.Bpiv-g6k.png",L1=JSON.parse('{"title":"Jet Reconstruction","description":"","frontmatter":{"layout":"home","hero":{"name":"JetReconstruction.jl","tagline":"Jet reconstruction (reclustering) with Julia","image":{"src":"/logo.png","alt":"DocumenterVitepress"},"actions":[{"theme":"brand","text":"Examples","link":"/examples"},{"theme":"alt","text":"Public APIs","link":"/lib/public"}]}},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),r={name:"index.md"},p={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},d={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},Q={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},h={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.973ex",height:"1.779ex",role:"img",focusable:"false",viewBox:"0 -775.2 2198.3 786.2","aria-hidden":"true"},T={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},m={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},g={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},u={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},k={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},x={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},w={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},c={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},y={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},b={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},E={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},v={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.973ex",height:"1.779ex",role:"img",focusable:"false",viewBox:"0 -775.2 2198.3 786.2","aria-hidden":"true"},f={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},H={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.493ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1101.8 844","aria-hidden":"true"},M={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},C={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},F={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},V={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.973ex",height:"1.779ex",role:"img",focusable:"false",viewBox:"0 -775.2 2198.3 786.2","aria-hidden":"true"},j={tabindex:"0"},L={style:{"text-align":"right"}},B={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},Z={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},D={style:{"text-align":"right"}},A={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},J={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},S={style:{"text-align":"right"}},R={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},G={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},P={style:{"text-align":"right"}},z={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},q={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},I={style:{"text-align":"right"}},N={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},K={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.186ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.301ex",height:"1.939ex",role:"img",focusable:"false",viewBox:"0 -775.2 2343.1 857.2","aria-hidden":"true"},O={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},X={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},$={style:{"text-align":"right"}},U={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},W={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.186ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.301ex",height:"1.939ex",role:"img",focusable:"false",viewBox:"0 -775.2 2343.1 857.2","aria-hidden":"true"},Y={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},_={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},t1={style:{"text-align":"right"}},e1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},s1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.973ex",height:"1.779ex",role:"img",focusable:"false",viewBox:"0 -775.2 2198.3 786.2","aria-hidden":"true"},i1={id:"pp-Algorithms",tabindex:"-1"},l1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},a1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},n1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},o1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},r1={tabindex:"0"},p1={style:{"text-align":"right"}},d1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},Q1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"0"},xmlns:"http://www.w3.org/2000/svg",width:"2.009ex",height:"1.545ex",role:"img",focusable:"false",viewBox:"0 -683 888 683","aria-hidden":"true"},h1={style:{"text-align":"right"}},T1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},m1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.048ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.717ex",height:"1.593ex",role:"img",focusable:"false",viewBox:"0 -683 759 704","aria-hidden":"true"},g1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},u1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"0"},xmlns:"http://www.w3.org/2000/svg",width:"2.009ex",height:"1.545ex",role:"img",focusable:"false",viewBox:"0 -683 888 683","aria-hidden":"true"},k1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},x1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.452ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1083.8 636","aria-hidden":"true"},w1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},c1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.666ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.278ex",height:"1.666ex",role:"img",focusable:"false",viewBox:"0 -442 1890.7 736.2","aria-hidden":"true"},y1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},b1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.666ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.575ex",height:"2.236ex",role:"img",focusable:"false",viewBox:"0 -694 1138.3 988.2","aria-hidden":"true"},E1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},v1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.09ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.28ex",height:"1.597ex",role:"img",focusable:"false",viewBox:"0 -666 2333.8 706","aria-hidden":"true"};function f1(H1,e,M1,C1,F1,V1){return a(),i("div",null,[e[132]||(e[132]=t("h1",{id:"Jet-Reconstruction",tabindex:"-1"},[s("Jet Reconstruction "),t("a",{class:"header-anchor",href:"#Jet-Reconstruction","aria-label":'Permalink to "Jet Reconstruction {#Jet-Reconstruction}"'},"​")],-1)),t("p",null,[e[4]||(e[4]=s("This package implements sequential Jet Reconstruction (clustering) algorithms, which are used in high-energy physics as part of event reconstruction for ")),t("mjx-container",p,[(a(),i("svg",d,e[0]||(e[0]=[l('',1)]))),e[1]||(e[1]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[5]||(e[5]=s(" and ")),t("mjx-container",Q,[(a(),i("svg",h,e[2]||(e[2]=[l('',1)]))),e[3]||(e[3]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("msup",null,[t("mi",null,"e"),t("mo",null,"−")])])],-1))]),e[6]||(e[6]=s(" colliders."))]),e[133]||(e[133]=l('

Algorithms

Algorithms used are based on the C++ FastJet package (https://fastjet.fr, hep-ph/0512210, arXiv:1111.6097), reimplemented natively in Julia.

',2)),t("p",null,[e[19]||(e[19]=s("The algorithms include anti-")),t("mjx-container",T,[(a(),i("svg",m,e[7]||(e[7]=[l('',1)]))),e[8]||(e[8]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"k")]),t("mtext",null,"T")])])],-1))]),e[20]||(e[20]=s(", Cambridge/Aachen, inclusive ")),t("mjx-container",g,[(a(),i("svg",u,e[9]||(e[9]=[l('',1)]))),e[10]||(e[10]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))]),e[21]||(e[21]=s(", generalised ")),t("mjx-container",k,[(a(),i("svg",x,e[11]||(e[11]=[l('',1)]))),e[12]||(e[12]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))]),e[22]||(e[22]=s(" for ")),t("mjx-container",w,[(a(),i("svg",c,e[13]||(e[13]=[l('',1)]))),e[14]||(e[14]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[23]||(e[23]=s(" events; and the Durham algorithm and generalised ")),t("mjx-container",y,[(a(),i("svg",b,e[15]||(e[15]=[l('',1)]))),e[16]||(e[16]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))]),e[24]||(e[24]=s(" for ")),t("mjx-container",E,[(a(),i("svg",v,e[17]||(e[17]=[l('',1)]))),e[18]||(e[18]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("msup",null,[t("mi",null,"e"),t("mo",null,"−")])])],-1))]),e[25]||(e[25]=s("."))]),e[134]||(e[134]=l('

Reconstruction Interface

The main interface for reconstruction is jet_reconstruct, called as, e.g.,

julia
jet_reconstruct(particles; algorithm = JetAlgorithm.AntiKt, R = 1.0)

or with some of the optional arguments,

julia
jet_reconstruct(particles; algorithm = JetAlgorithm.GenKt, R = 0.4, p = 0.5, recombine = +, strategy = RecoStrategy.Best)
',5)),t("p",null,[e[32]||(e[32]=s("Where ")),e[33]||(e[33]=t("code",null,"particles",-1)),e[34]||(e[34]=s(" is a collection of 4-vector objects to reconstruct and the algorithm is either given explicitly or implied by the power value. For the case of generalised ")),t("mjx-container",f,[(a(),i("svg",H,e[26]||(e[26]=[l('',1)]))),e[27]||(e[27]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mi",null,"T")])])],-1))]),e[35]||(e[35]=s(" (for ")),t("mjx-container",M,[(a(),i("svg",C,e[28]||(e[28]=[l('',1)]))),e[29]||(e[29]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[36]||(e[36]=s(" and ")),t("mjx-container",F,[(a(),i("svg",V,e[30]||(e[30]=[l('',1)]))),e[31]||(e[31]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("msup",null,[t("mi",null,"e"),t("mo",null,"−")])])],-1))]),e[37]||(e[37]=s(") both the algorithm (")),e[38]||(e[38]=t("code",null,"JetAlgorithm.GenKt",-1)),e[39]||(e[39]=s(") and ")),e[40]||(e[40]=t("code",null,"p",-1)),e[41]||(e[41]=s(" are needed. For the case of the Durham algorithm the ")),e[42]||(e[42]=t("code",null,"R",-1)),e[43]||(e[43]=s(" value is ignored."))]),e[135]||(e[135]=t("p",null,[s("The object returned is a "),t("a",{href:"/JetReconstruction.jl/dev/lib/public#JetReconstruction.ClusterSequence"},[t("code",null,"ClusterSequence")]),s(", which internally tracks all merge steps.")],-1)),e[136]||(e[136]=t("h3",{id:"Algorithm-Types",tabindex:"-1"},[s("Algorithm Types "),t("a",{class:"header-anchor",href:"#Algorithm-Types","aria-label":'Permalink to "Algorithm Types {#Algorithm-Types}"'},"​")],-1)),e[137]||(e[137]=t("p",null,[s("Each known algorithm is referenced using a "),t("code",null,"JetAlgorithm"),s(" scoped enum value.")],-1)),t("table",j,[e[86]||(e[86]=t("thead",null,[t("tr",null,[t("th",{style:{"text-align":"right"}},"Algorithm"),t("th",{style:{"text-align":"right"}},"Type name"),t("th",{style:{"text-align":"right"}},"Notes")])],-1)),t("tbody",null,[t("tr",null,[t("td",L,[e[46]||(e[46]=s("anti-")),t("mjx-container",B,[(a(),i("svg",Z,e[44]||(e[44]=[l('',1)]))),e[45]||(e[45]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"k")]),t("mtext",null,"T")])])],-1))])]),e[47]||(e[47]=t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.AntiKt")],-1)),e[48]||(e[48]=t("td",{style:{"text-align":"right"}},[s("Implies "),t("code",null,"p=-1")],-1))]),e[85]||(e[85]=t("tr",null,[t("td",{style:{"text-align":"right"}},"Cambridge/Aachen"),t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.CA")]),t("td",{style:{"text-align":"right"}},[s("Implies "),t("code",null,"p=0")])],-1)),t("tr",null,[t("td",D,[e[51]||(e[51]=s("inclusive ")),t("mjx-container",A,[(a(),i("svg",J,e[49]||(e[49]=[l('',1)]))),e[50]||(e[50]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))])]),e[52]||(e[52]=t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.Kt")],-1)),e[53]||(e[53]=t("td",{style:{"text-align":"right"}},[s("Implies "),t("code",null,"p=1")],-1))]),t("tr",null,[t("td",S,[e[56]||(e[56]=s("generalised ")),t("mjx-container",R,[(a(),i("svg",G,e[54]||(e[54]=[l('',1)]))),e[55]||(e[55]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))])]),e[63]||(e[63]=t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.GenKt")],-1)),t("td",P,[e[59]||(e[59]=s("For ")),t("mjx-container",z,[(a(),i("svg",q,e[57]||(e[57]=[l('',1)]))),e[58]||(e[58]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[60]||(e[60]=s(", value of ")),e[61]||(e[61]=t("code",null,"p",-1)),e[62]||(e[62]=s(" must also be specified"))])]),t("tr",null,[t("td",I,[t("mjx-container",N,[(a(),i("svg",K,e[64]||(e[64]=[l('',1)]))),e[65]||(e[65]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("mi",null,"e"),t("mo",null,"−")])],-1))]),e[68]||(e[68]=s()),t("mjx-container",O,[(a(),i("svg",X,e[66]||(e[66]=[l('',1)]))),e[67]||(e[67]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))]),e[69]||(e[69]=s(" / Durham"))]),e[70]||(e[70]=t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.Durham")],-1)),e[71]||(e[71]=t("td",{style:{"text-align":"right"}},[t("code",null,"R"),s(" value ignored and can be omitted")],-1))]),t("tr",null,[t("td",$,[e[76]||(e[76]=s("generalised ")),t("mjx-container",U,[(a(),i("svg",W,e[72]||(e[72]=[l('',1)]))),e[73]||(e[73]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("mi",null,"e"),t("mo",null,"−")])],-1))]),e[77]||(e[77]=s()),t("mjx-container",Y,[(a(),i("svg",_,e[74]||(e[74]=[l('',1)]))),e[75]||(e[75]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))])]),e[84]||(e[84]=t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.EEKt")],-1)),t("td",t1,[e[80]||(e[80]=s("For ")),t("mjx-container",e1,[(a(),i("svg",s1,e[78]||(e[78]=[l('',1)]))),e[79]||(e[79]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("msup",null,[t("mi",null,"e"),t("mo",null,"−")])])],-1))]),e[81]||(e[81]=s(", value of ")),e[82]||(e[82]=t("code",null,"p",-1)),e[83]||(e[83]=s(" must also be specified"))])])])]),t("h3",i1,[t("mjx-container",l1,[(a(),i("svg",a1,e[87]||(e[87]=[l('',1)]))),e[88]||(e[88]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[89]||(e[89]=s(" Algorithms ")),e[90]||(e[90]=t("a",{class:"header-anchor",href:"#pp-Algorithms","aria-label":'Permalink to "$pp$ Algorithms {#pp-Algorithms}"'},"​",-1))]),t("p",null,[e[93]||(e[93]=s("For the three ")),t("mjx-container",n1,[(a(),i("svg",o1,e[91]||(e[91]=[l('',1)]))),e[92]||(e[92]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[94]||(e[94]=s(" algorithms with fixed ")),e[95]||(e[95]=t("code",null,"p",-1)),e[96]||(e[96]=s(" values, the ")),e[97]||(e[97]=t("code",null,"p",-1)),e[98]||(e[98]=s(" value can be given instead of the algorithm name. However, this should be considered ")),e[99]||(e[99]=t("em",null,"deprecated",-1)),e[100]||(e[100]=s(" and will be removed in a future release."))]),e[138]||(e[138]=t("h2",{id:"strategy",tabindex:"-1"},[s("Strategy "),t("a",{class:"header-anchor",href:"#strategy","aria-label":'Permalink to "Strategy"'},"​")],-1)),e[139]||(e[139]=t("p",null,[s("Three strategies are available for the different algorithms, which can be specified by passing the named argument "),t("code",null,"strategy=..."),s(".")],-1)),t("table",r1,[e[117]||(e[117]=t("thead",null,[t("tr",null,[t("th",{style:{"text-align":"right"}},"Strategy Name"),t("th",{style:{"text-align":"right"}},"Notes"),t("th",{style:{"text-align":"right"}},"Interface")])],-1)),t("tbody",null,[e[116]||(e[116]=t("tr",null,[t("td",{style:{"text-align":"right"}},[t("code",null,"RecoStrategy.Best")]),t("td",{style:{"text-align":"right"}},"Dynamically switch strategy based on input particle density"),t("td",{style:{"text-align":"right"}},[t("code",null,"jet_reconstruct")])],-1)),t("tr",null,[e[105]||(e[105]=t("td",{style:{"text-align":"right"}},[t("code",null,"RecoStrategy.N2Plain")],-1)),t("td",p1,[e[103]||(e[103]=s("Global matching of particles at each interation (works well for low ")),t("mjx-container",d1,[(a(),i("svg",Q1,e[101]||(e[101]=[t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D441",d:"M234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637Z",style:{"stroke-width":"3"}})])])],-1)]))),e[102]||(e[102]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"N")])],-1))]),e[104]||(e[104]=s(")"))]),e[106]||(e[106]=t("td",{style:{"text-align":"right"}},[t("code",null,"plain_jet_reconstruct")],-1))]),t("tr",null,[e[114]||(e[114]=t("td",{style:{"text-align":"right"}},[t("code",null,"RecoStrategy.N2Tiled")],-1)),t("td",h1,[e[111]||(e[111]=s("Use tiles of radius ")),t("mjx-container",T1,[(a(),i("svg",m1,e[107]||(e[107]=[t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D445",d:"M230 637Q203 637 198 638T193 649Q193 676 204 682Q206 683 378 683Q550 682 564 680Q620 672 658 652T712 606T733 563T739 529Q739 484 710 445T643 385T576 351T538 338L545 333Q612 295 612 223Q612 212 607 162T602 80V71Q602 53 603 43T614 25T640 16Q668 16 686 38T712 85Q717 99 720 102T735 105Q755 105 755 93Q755 75 731 36Q693 -21 641 -21H632Q571 -21 531 4T487 82Q487 109 502 166T517 239Q517 290 474 313Q459 320 449 321T378 323H309L277 193Q244 61 244 59Q244 55 245 54T252 50T269 48T302 46H333Q339 38 339 37T336 19Q332 6 326 0H311Q275 2 180 2Q146 2 117 2T71 2T50 1Q33 1 33 10Q33 12 36 24Q41 43 46 45Q50 46 61 46H67Q94 46 127 49Q141 52 146 61Q149 65 218 339T287 628Q287 635 230 637ZM630 554Q630 586 609 608T523 636Q521 636 500 636T462 637H440Q393 637 386 627Q385 624 352 494T319 361Q319 360 388 360Q466 361 492 367Q556 377 592 426Q608 449 619 486T630 554Z",style:{"stroke-width":"3"}})])])],-1)]))),e[108]||(e[108]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"R")])],-1))]),e[112]||(e[112]=s(" to limit search space (works well for higher ")),t("mjx-container",g1,[(a(),i("svg",u1,e[109]||(e[109]=[t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D441",d:"M234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637Z",style:{"stroke-width":"3"}})])])],-1)]))),e[110]||(e[110]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"N")])],-1))]),e[113]||(e[113]=s(")"))]),e[115]||(e[115]=t("td",{style:{"text-align":"right"}},[t("code",null,"tiled_jet_reconstruct")],-1))])])]),e[140]||(e[140]=l(`

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
+import{_ as n,c as i,j as t,a as s,a5 as l,o as a}from"./chunks/framework.BtBDBbTG.js";const o="/JetReconstruction.jl/dev/assets/jetvis.Bpiv-g6k.png",L1=JSON.parse('{"title":"Jet Reconstruction","description":"","frontmatter":{"layout":"home","hero":{"name":"JetReconstruction.jl","tagline":"Jet reconstruction (reclustering) with Julia","image":{"src":"/logo.png","alt":"DocumenterVitepress"},"actions":[{"theme":"brand","text":"Examples","link":"/examples"},{"theme":"alt","text":"Public APIs","link":"/lib/public"}]}},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),r={name:"index.md"},p={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},d={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},Q={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},h={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.973ex",height:"1.779ex",role:"img",focusable:"false",viewBox:"0 -775.2 2198.3 786.2","aria-hidden":"true"},T={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},m={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},g={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},u={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},k={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},x={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},w={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},c={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},y={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},b={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},E={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},v={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.973ex",height:"1.779ex",role:"img",focusable:"false",viewBox:"0 -775.2 2198.3 786.2","aria-hidden":"true"},f={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},H={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.493ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1101.8 844","aria-hidden":"true"},M={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},C={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},F={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},V={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.973ex",height:"1.779ex",role:"img",focusable:"false",viewBox:"0 -775.2 2198.3 786.2","aria-hidden":"true"},j={tabindex:"0"},L={style:{"text-align":"right"}},B={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},Z={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},D={style:{"text-align":"right"}},A={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},J={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},S={style:{"text-align":"right"}},R={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},G={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},P={style:{"text-align":"right"}},z={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},q={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},I={style:{"text-align":"right"}},N={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},K={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.186ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.301ex",height:"1.939ex",role:"img",focusable:"false",viewBox:"0 -775.2 2343.1 857.2","aria-hidden":"true"},O={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},X={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},$={style:{"text-align":"right"}},U={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},W={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.186ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.301ex",height:"1.939ex",role:"img",focusable:"false",viewBox:"0 -775.2 2343.1 857.2","aria-hidden":"true"},Y={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},_={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.339ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.522ex",height:"1.91ex",role:"img",focusable:"false",viewBox:"0 -694 1114.5 844","aria-hidden":"true"},t1={style:{"text-align":"right"}},e1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},s1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.973ex",height:"1.779ex",role:"img",focusable:"false",viewBox:"0 -775.2 2198.3 786.2","aria-hidden":"true"},i1={id:"pp-Algorithms",tabindex:"-1"},l1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},a1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},n1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},o1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.276ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1006 636","aria-hidden":"true"},r1={tabindex:"0"},p1={style:{"text-align":"right"}},d1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},Q1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"0"},xmlns:"http://www.w3.org/2000/svg",width:"2.009ex",height:"1.545ex",role:"img",focusable:"false",viewBox:"0 -683 888 683","aria-hidden":"true"},h1={style:{"text-align":"right"}},T1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},m1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.048ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.717ex",height:"1.593ex",role:"img",focusable:"false",viewBox:"0 -683 759 704","aria-hidden":"true"},g1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},u1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"0"},xmlns:"http://www.w3.org/2000/svg",width:"2.009ex",height:"1.545ex",role:"img",focusable:"false",viewBox:"0 -683 888 683","aria-hidden":"true"},k1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},x1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.439ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.452ex",height:"1.439ex",role:"img",focusable:"false",viewBox:"0 -442 1083.8 636","aria-hidden":"true"},w1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},c1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.666ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.278ex",height:"1.666ex",role:"img",focusable:"false",viewBox:"0 -442 1890.7 736.2","aria-hidden":"true"},y1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},b1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.666ex"},xmlns:"http://www.w3.org/2000/svg",width:"2.575ex",height:"2.236ex",role:"img",focusable:"false",viewBox:"0 -694 1138.3 988.2","aria-hidden":"true"},E1={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},v1={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.09ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.28ex",height:"1.597ex",role:"img",focusable:"false",viewBox:"0 -666 2333.8 706","aria-hidden":"true"};function f1(H1,e,M1,C1,F1,V1){return a(),i("div",null,[e[132]||(e[132]=t("h1",{id:"Jet-Reconstruction",tabindex:"-1"},[s("Jet Reconstruction "),t("a",{class:"header-anchor",href:"#Jet-Reconstruction","aria-label":'Permalink to "Jet Reconstruction {#Jet-Reconstruction}"'},"​")],-1)),t("p",null,[e[4]||(e[4]=s("This package implements sequential Jet Reconstruction (clustering) algorithms, which are used in high-energy physics as part of event reconstruction for ")),t("mjx-container",p,[(a(),i("svg",d,e[0]||(e[0]=[l('',1)]))),e[1]||(e[1]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[5]||(e[5]=s(" and ")),t("mjx-container",Q,[(a(),i("svg",h,e[2]||(e[2]=[l('',1)]))),e[3]||(e[3]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("msup",null,[t("mi",null,"e"),t("mo",null,"−")])])],-1))]),e[6]||(e[6]=s(" colliders."))]),e[133]||(e[133]=l('

Algorithms

Algorithms used are based on the C++ FastJet package (https://fastjet.fr, hep-ph/0512210, arXiv:1111.6097), reimplemented natively in Julia.

',2)),t("p",null,[e[19]||(e[19]=s("The algorithms include anti-")),t("mjx-container",T,[(a(),i("svg",m,e[7]||(e[7]=[l('',1)]))),e[8]||(e[8]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"k")]),t("mtext",null,"T")])])],-1))]),e[20]||(e[20]=s(", Cambridge/Aachen, inclusive ")),t("mjx-container",g,[(a(),i("svg",u,e[9]||(e[9]=[l('',1)]))),e[10]||(e[10]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))]),e[21]||(e[21]=s(", generalised ")),t("mjx-container",k,[(a(),i("svg",x,e[11]||(e[11]=[l('',1)]))),e[12]||(e[12]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))]),e[22]||(e[22]=s(" for ")),t("mjx-container",w,[(a(),i("svg",c,e[13]||(e[13]=[l('',1)]))),e[14]||(e[14]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[23]||(e[23]=s(" events; and the Durham algorithm and generalised ")),t("mjx-container",y,[(a(),i("svg",b,e[15]||(e[15]=[l('',1)]))),e[16]||(e[16]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))]),e[24]||(e[24]=s(" for ")),t("mjx-container",E,[(a(),i("svg",v,e[17]||(e[17]=[l('',1)]))),e[18]||(e[18]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("msup",null,[t("mi",null,"e"),t("mo",null,"−")])])],-1))]),e[25]||(e[25]=s("."))]),e[134]||(e[134]=l('

Reconstruction Interface

The main interface for reconstruction is jet_reconstruct, called as, e.g.,

julia
jet_reconstruct(particles; algorithm = JetAlgorithm.AntiKt, R = 1.0)

or with some of the optional arguments,

julia
jet_reconstruct(particles; algorithm = JetAlgorithm.GenKt, R = 0.4, p = 0.5, recombine = +, strategy = RecoStrategy.Best)
',5)),t("p",null,[e[32]||(e[32]=s("Where ")),e[33]||(e[33]=t("code",null,"particles",-1)),e[34]||(e[34]=s(" is a collection of 4-vector objects to reconstruct and the algorithm is either given explicitly or implied by the power value. For the case of generalised ")),t("mjx-container",f,[(a(),i("svg",H,e[26]||(e[26]=[l('',1)]))),e[27]||(e[27]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mi",null,"T")])])],-1))]),e[35]||(e[35]=s(" (for ")),t("mjx-container",M,[(a(),i("svg",C,e[28]||(e[28]=[l('',1)]))),e[29]||(e[29]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[36]||(e[36]=s(" and ")),t("mjx-container",F,[(a(),i("svg",V,e[30]||(e[30]=[l('',1)]))),e[31]||(e[31]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("msup",null,[t("mi",null,"e"),t("mo",null,"−")])])],-1))]),e[37]||(e[37]=s(") both the algorithm (")),e[38]||(e[38]=t("code",null,"JetAlgorithm.GenKt",-1)),e[39]||(e[39]=s(") and ")),e[40]||(e[40]=t("code",null,"p",-1)),e[41]||(e[41]=s(" are needed. For the case of the Durham algorithm the ")),e[42]||(e[42]=t("code",null,"R",-1)),e[43]||(e[43]=s(" value is ignored."))]),e[135]||(e[135]=t("p",null,[s("The object returned is a "),t("a",{href:"/JetReconstruction.jl/dev/lib/public#JetReconstruction.ClusterSequence"},[t("code",null,"ClusterSequence")]),s(", which internally tracks all merge steps.")],-1)),e[136]||(e[136]=t("h3",{id:"Algorithm-Types",tabindex:"-1"},[s("Algorithm Types "),t("a",{class:"header-anchor",href:"#Algorithm-Types","aria-label":'Permalink to "Algorithm Types {#Algorithm-Types}"'},"​")],-1)),e[137]||(e[137]=t("p",null,[s("Each known algorithm is referenced using a "),t("code",null,"JetAlgorithm"),s(" scoped enum value.")],-1)),t("table",j,[e[86]||(e[86]=t("thead",null,[t("tr",null,[t("th",{style:{"text-align":"right"}},"Algorithm"),t("th",{style:{"text-align":"right"}},"Type name"),t("th",{style:{"text-align":"right"}},"Notes")])],-1)),t("tbody",null,[t("tr",null,[t("td",L,[e[46]||(e[46]=s("anti-")),t("mjx-container",B,[(a(),i("svg",Z,e[44]||(e[44]=[l('',1)]))),e[45]||(e[45]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"k")]),t("mtext",null,"T")])])],-1))])]),e[47]||(e[47]=t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.AntiKt")],-1)),e[48]||(e[48]=t("td",{style:{"text-align":"right"}},[s("Implies "),t("code",null,"p=-1")],-1))]),e[85]||(e[85]=t("tr",null,[t("td",{style:{"text-align":"right"}},"Cambridge/Aachen"),t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.CA")]),t("td",{style:{"text-align":"right"}},[s("Implies "),t("code",null,"p=0")])],-1)),t("tr",null,[t("td",D,[e[51]||(e[51]=s("inclusive ")),t("mjx-container",A,[(a(),i("svg",J,e[49]||(e[49]=[l('',1)]))),e[50]||(e[50]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))])]),e[52]||(e[52]=t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.Kt")],-1)),e[53]||(e[53]=t("td",{style:{"text-align":"right"}},[s("Implies "),t("code",null,"p=1")],-1))]),t("tr",null,[t("td",S,[e[56]||(e[56]=s("generalised ")),t("mjx-container",R,[(a(),i("svg",G,e[54]||(e[54]=[l('',1)]))),e[55]||(e[55]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))])]),e[63]||(e[63]=t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.GenKt")],-1)),t("td",P,[e[59]||(e[59]=s("For ")),t("mjx-container",z,[(a(),i("svg",q,e[57]||(e[57]=[l('',1)]))),e[58]||(e[58]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[60]||(e[60]=s(", value of ")),e[61]||(e[61]=t("code",null,"p",-1)),e[62]||(e[62]=s(" must also be specified"))])]),t("tr",null,[t("td",I,[t("mjx-container",N,[(a(),i("svg",K,e[64]||(e[64]=[l('',1)]))),e[65]||(e[65]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("mi",null,"e"),t("mo",null,"−")])],-1))]),e[68]||(e[68]=s()),t("mjx-container",O,[(a(),i("svg",X,e[66]||(e[66]=[l('',1)]))),e[67]||(e[67]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))]),e[69]||(e[69]=s(" / Durham"))]),e[70]||(e[70]=t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.Durham")],-1)),e[71]||(e[71]=t("td",{style:{"text-align":"right"}},[t("code",null,"R"),s(" value ignored and can be omitted")],-1))]),t("tr",null,[t("td",$,[e[76]||(e[76]=s("generalised ")),t("mjx-container",U,[(a(),i("svg",W,e[72]||(e[72]=[l('',1)]))),e[73]||(e[73]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("mi",null,"e"),t("mo",null,"−")])],-1))]),e[77]||(e[77]=s()),t("mjx-container",Y,[(a(),i("svg",_,e[74]||(e[74]=[l('',1)]))),e[75]||(e[75]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"k"),t("mtext",null,"T")])])],-1))])]),e[84]||(e[84]=t("td",{style:{"text-align":"right"}},[t("code",null,"JetAlgorithm.EEKt")],-1)),t("td",t1,[e[80]||(e[80]=s("For ")),t("mjx-container",e1,[(a(),i("svg",s1,e[78]||(e[78]=[l('',1)]))),e[79]||(e[79]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("msup",null,[t("mi",null,"e"),t("mo",null,"−")])])],-1))]),e[81]||(e[81]=s(", value of ")),e[82]||(e[82]=t("code",null,"p",-1)),e[83]||(e[83]=s(" must also be specified"))])])])]),t("h3",i1,[t("mjx-container",l1,[(a(),i("svg",a1,e[87]||(e[87]=[l('',1)]))),e[88]||(e[88]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[89]||(e[89]=s(" Algorithms ")),e[90]||(e[90]=t("a",{class:"header-anchor",href:"#pp-Algorithms","aria-label":'Permalink to "$pp$ Algorithms {#pp-Algorithms}"'},"​",-1))]),t("p",null,[e[93]||(e[93]=s("For the three ")),t("mjx-container",n1,[(a(),i("svg",o1,e[91]||(e[91]=[l('',1)]))),e[92]||(e[92]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"p"),t("mi",null,"p")])],-1))]),e[94]||(e[94]=s(" algorithms with fixed ")),e[95]||(e[95]=t("code",null,"p",-1)),e[96]||(e[96]=s(" values, the ")),e[97]||(e[97]=t("code",null,"p",-1)),e[98]||(e[98]=s(" value can be given instead of the algorithm name. However, this should be considered ")),e[99]||(e[99]=t("em",null,"deprecated",-1)),e[100]||(e[100]=s(" and will be removed in a future release."))]),e[138]||(e[138]=t("h2",{id:"strategy",tabindex:"-1"},[s("Strategy "),t("a",{class:"header-anchor",href:"#strategy","aria-label":'Permalink to "Strategy"'},"​")],-1)),e[139]||(e[139]=t("p",null,[s("Three strategies are available for the different algorithms, which can be specified by passing the named argument "),t("code",null,"strategy=..."),s(".")],-1)),t("table",r1,[e[117]||(e[117]=t("thead",null,[t("tr",null,[t("th",{style:{"text-align":"right"}},"Strategy Name"),t("th",{style:{"text-align":"right"}},"Notes"),t("th",{style:{"text-align":"right"}},"Interface")])],-1)),t("tbody",null,[e[116]||(e[116]=t("tr",null,[t("td",{style:{"text-align":"right"}},[t("code",null,"RecoStrategy.Best")]),t("td",{style:{"text-align":"right"}},"Dynamically switch strategy based on input particle density"),t("td",{style:{"text-align":"right"}},[t("code",null,"jet_reconstruct")])],-1)),t("tr",null,[e[105]||(e[105]=t("td",{style:{"text-align":"right"}},[t("code",null,"RecoStrategy.N2Plain")],-1)),t("td",p1,[e[103]||(e[103]=s("Global matching of particles at each interation (works well for low ")),t("mjx-container",d1,[(a(),i("svg",Q1,e[101]||(e[101]=[t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D441",d:"M234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637Z",style:{"stroke-width":"3"}})])])],-1)]))),e[102]||(e[102]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"N")])],-1))]),e[104]||(e[104]=s(")"))]),e[106]||(e[106]=t("td",{style:{"text-align":"right"}},[t("code",null,"plain_jet_reconstruct")],-1))]),t("tr",null,[e[114]||(e[114]=t("td",{style:{"text-align":"right"}},[t("code",null,"RecoStrategy.N2Tiled")],-1)),t("td",h1,[e[111]||(e[111]=s("Use tiles of radius ")),t("mjx-container",T1,[(a(),i("svg",m1,e[107]||(e[107]=[t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D445",d:"M230 637Q203 637 198 638T193 649Q193 676 204 682Q206 683 378 683Q550 682 564 680Q620 672 658 652T712 606T733 563T739 529Q739 484 710 445T643 385T576 351T538 338L545 333Q612 295 612 223Q612 212 607 162T602 80V71Q602 53 603 43T614 25T640 16Q668 16 686 38T712 85Q717 99 720 102T735 105Q755 105 755 93Q755 75 731 36Q693 -21 641 -21H632Q571 -21 531 4T487 82Q487 109 502 166T517 239Q517 290 474 313Q459 320 449 321T378 323H309L277 193Q244 61 244 59Q244 55 245 54T252 50T269 48T302 46H333Q339 38 339 37T336 19Q332 6 326 0H311Q275 2 180 2Q146 2 117 2T71 2T50 1Q33 1 33 10Q33 12 36 24Q41 43 46 45Q50 46 61 46H67Q94 46 127 49Q141 52 146 61Q149 65 218 339T287 628Q287 635 230 637ZM630 554Q630 586 609 608T523 636Q521 636 500 636T462 637H440Q393 637 386 627Q385 624 352 494T319 361Q319 360 388 360Q466 361 492 367Q556 377 592 426Q608 449 619 486T630 554Z",style:{"stroke-width":"3"}})])])],-1)]))),e[108]||(e[108]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"R")])],-1))]),e[112]||(e[112]=s(" to limit search space (works well for higher ")),t("mjx-container",g1,[(a(),i("svg",u1,e[109]||(e[109]=[t("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[t("g",{"data-mml-node":"math"},[t("g",{"data-mml-node":"mi"},[t("path",{"data-c":"1D441",d:"M234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637Z",style:{"stroke-width":"3"}})])])],-1)]))),e[110]||(e[110]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mi",null,"N")])],-1))]),e[113]||(e[113]=s(")"))]),e[115]||(e[115]=t("td",{style:{"text-align":"right"}},[t("code",null,"tiled_jet_reconstruct")],-1))])])]),e[140]||(e[140]=l(`

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}; algorithm = JetAlgorithm.AntiKt, R = 1.0, recombine = +)

(There is no strategy option in these interfaces.)

Inclusive and Exclusive Selections

`,5)),t("p",null,[e[124]||(e[124]=s("To obtain final jets both inclusive (")),t("mjx-container",k1,[(a(),i("svg",x1,e[118]||(e[118]=[l('',1)]))),e[119]||(e[119]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"p"),t("mi",null,"T")])])],-1))]),e[125]||(e[125]=s(" cut) and exclusive (")),t("mjx-container",w1,[(a(),i("svg",c1,e[120]||(e[120]=[l('',1)]))),e[121]||(e[121]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"n"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"j"),t("mi",null,"e"),t("mi",null,"t"),t("mi",null,"s")])])])],-1))]),e[126]||(e[126]=s(" or ")),t("mjx-container",y1,[(a(),i("svg",b1,e[122]||(e[122]=[l('',1)]))),e[123]||(e[123]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msub",null,[t("mi",null,"d"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"j")])])])],-1))]),e[127]||(e[127]=s(" cut) selections are supported:"))]),e[141]||(e[141]=t("ul",null,[t("li",null,[t("p",null,[t("a",{href:"/JetReconstruction.jl/dev/lib/public#JetReconstruction.inclusive_jets-Tuple{ClusterSequence}"},"inclusive_jets(clusterseq::ClusterSequence, ptmin = 0.0)")])]),t("li",null,[t("p",null,[t("a",{href:"/JetReconstruction.jl/dev/lib/public#JetReconstruction.exclusive_jets-Tuple{ClusterSequence}"},"exclusive_jets(clusterseq::ClusterSequence; dcut = nothing, njets = nothing)")])])],-1)),e[142]||(e[142]=t("h3",{id:"sorting",tabindex:"-1"},[s("Sorting "),t("a",{class:"header-anchor",href:"#sorting","aria-label":'Permalink to "Sorting"'},"​")],-1)),t("p",null,[e[130]||(e[130]=s("Sorting vectors is trivial in Julia, no special sorting methods are provided. As an example, to sort exclusive jets of ")),t("mjx-container",E1,[(a(),i("svg",v1,e[128]||(e[128]=[l('',1)]))),e[129]||(e[129]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mo",null,">"),t("mn",null,"5.0")])],-1))]),e[131]||(e[131]=s(" (usually GeV, depending on your EDM) from highest energy to lowest:"))]),e[143]||(e[143]=l(`
julia
sorted_jets = sort!(inclusive_jets(cs::ClusterSequence; ptmin=5.0), 
   by=JetReconstruction.energy, rev=true)

Plotting and Animation

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.

Serialisation

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.

Reference

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}},
diff --git a/dev/assets/lib_internal.md.Bsq32pz1.lean.js b/dev/assets/lib_internal.md.oZWVn3YV.js
similarity index 94%
rename from dev/assets/lib_internal.md.Bsq32pz1.lean.js
rename to dev/assets/lib_internal.md.oZWVn3YV.js
index c184028..7209f23 100644
--- a/dev/assets/lib_internal.md.Bsq32pz1.lean.js
+++ b/dev/assets/lib_internal.md.oZWVn3YV.js
@@ -1,8 +1,8 @@
-import{_ as r,c as a,a5 as s,j as t,a as i,G as o,B as d,o as l}from"./chunks/framework.BonP4S8S.js";const $e=JSON.parse('{"title":"Jet Reconstruction Internal Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"lib/internal.md","filePath":"lib/internal.md","lastUpdated":null}'),p={name:"lib/internal.md"},c={class:"jldocstring custom-block"},h={class:"jldocstring custom-block"},u={class:"jldocstring custom-block"},g={class:"jldocstring custom-block"},k={class:"jldocstring custom-block"},b={class:"jldocstring custom-block"},m={class:"jldocstring custom-block"},y={class:"jldocstring custom-block"},j={class:"jldocstring custom-block"},T={class:"jldocstring custom-block"},f={class:"jldocstring custom-block"},J={class:"jldocstring custom-block"},E={class:"jldocstring custom-block"},v={class:"jldocstring custom-block"},R={class:"jldocstring custom-block"},C={class:"jldocstring custom-block"},F={class:"jldocstring custom-block"},A={class:"jldocstring custom-block"},x={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},_={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.666ex"},xmlns:"http://www.w3.org/2000/svg",width:"11.255ex",height:"2.363ex",role:"img",focusable:"false",viewBox:"0 -750 4974.7 1044.2","aria-hidden":"true"},Q={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},P={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.186ex"},xmlns:"http://www.w3.org/2000/svg",width:"11.406ex",height:"1.756ex",role:"img",focusable:"false",viewBox:"0 -694 5041.4 776","aria-hidden":"true"},w={class:"jldocstring custom-block"},L={class:"jldocstring custom-block"},B={class:"jldocstring custom-block"},M={class:"jldocstring custom-block"},D={class:"jldocstring custom-block"},H={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},I={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.973ex",height:"1.779ex",role:"img",focusable:"false",viewBox:"0 -775.2 2198.3 786.2","aria-hidden":"true"},q={class:"jldocstring custom-block"},S={class:"jldocstring custom-block"},O={class:"jldocstring custom-block"},N={class:"jldocstring custom-block"},V={class:"jldocstring custom-block"},z={class:"jldocstring custom-block"},Z={class:"jldocstring custom-block"},U={class:"jldocstring custom-block"},X={class:"jldocstring custom-block"},G={class:"jldocstring custom-block"},W={class:"jldocstring custom-block"},$={class:"jldocstring custom-block"},K={class:"jldocstring custom-block"},Y={class:"jldocstring custom-block"},ee={class:"jldocstring custom-block"},te={class:"jldocstring custom-block"},ie={class:"jldocstring custom-block"},se={class:"jldocstring custom-block"},ne={class:"jldocstring custom-block"},oe={class:"jldocstring custom-block"},ae={class:"jldocstring custom-block"},le={class:"jldocstring custom-block"},re={class:"jldocstring custom-block"},de={class:"jldocstring custom-block"},pe={class:"jldocstring custom-block"},ce={class:"jldocstring custom-block"},he={class:"jldocstring custom-block"},ue={class:"jldocstring custom-block"},ge={class:"jldocstring custom-block"},ke={class:"jldocstring custom-block"},be={class:"jldocstring custom-block"},me={class:"jldocstring custom-block"},ye={class:"jldocstring custom-block"},je={class:"jldocstring custom-block"},Te={class:"jldocstring custom-block"},fe={class:"jldocstring custom-block"},Je={class:"jldocstring custom-block"},Ee={class:"jldocstring custom-block"},ve={class:"jldocstring custom-block"},Re={class:"jldocstring custom-block"},Ce={class:"jldocstring custom-block"},Fe={class:"jldocstring custom-block"},Ae={class:"jldocstring custom-block"},xe={class:"jldocstring custom-block"},_e={class:"jldocstring custom-block"},Qe={class:"jldocstring custom-block"},Pe={class:"jldocstring custom-block"},we={class:"jldocstring custom-block"},Le={class:"jldocstring custom-block"},Be={class:"jldocstring custom-block"},Me={class:"jldocstring custom-block"},De={class:"jldocstring custom-block"},He={class:"jldocstring custom-block"},Ie={class:"jldocstring custom-block"},qe={class:"jldocstring custom-block"},Se={class:"jldocstring custom-block"},Oe={class:"jldocstring custom-block"},Ne={class:"jldocstring custom-block"};function Ve(ze,e,Ze,Ue,Xe,Ge){const n=d("Badge");return l(),a("div",null,[e[270]||(e[270]=s('

Jet Reconstruction Internal Documentation

Documentation for JetReconstruction.jl's internal methods and types.

N.B. no guarantee is made of stability of these interfaces or types.

Index

Public Interface

',6)),t("details",c,[t("summary",null,[e[0]||(e[0]=t("a",{id:"Base.:+-Tuple{PseudoJet, PseudoJet}",href:"#Base.:+-Tuple{PseudoJet, PseudoJet}"},[t("span",{class:"jlbinding"},"Base.:+")],-1)),e[1]||(e[1]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[2]||(e[2]=s('
julia
+(j1::PseudoJet, j2::PseudoJet)

Addition operator for PseudoJet objects.

Arguments

  • j1::PseudoJet: The first PseudoJet object.

  • j2::PseudoJet: The second PseudoJet object.

Returns

A new PseudoJet object with the sum of the momenta and energy of j1 and j2.

source

',7))]),t("details",h,[t("summary",null,[e[3]||(e[3]=t("a",{id:"Base.copy-Tuple{JetReconstruction.TiledJet}",href:"#Base.copy-Tuple{JetReconstruction.TiledJet}"},[t("span",{class:"jlbinding"},"Base.copy")],-1)),e[4]||(e[4]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[5]||(e[5]=s('
julia
copy(j::TiledJet)

Create a copy of a TiledJet object.

Arguments

  • j::TiledJet: The TiledJet object to be copied.

Returns

A new TiledJet object with the same attributes as the input object.

source

',7))]),t("details",u,[t("summary",null,[e[6]||(e[6]=t("a",{id:"Base.iterate",href:"#Base.iterate"},[t("span",{class:"jlbinding"},"Base.iterate")],-1)),e[7]||(e[7]=i()),o(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[8]||(e[8]=s('
julia
Base.iterate(t::rightmost_tiles, state=1)

Iterate over the rightmost_tiles object, returning all the rightmost tiles for a given Cartesian tile index.

source

',3))]),t("details",g,[t("summary",null,[e[9]||(e[9]=t("a",{id:"Base.iterate-2",href:"#Base.iterate-2"},[t("span",{class:"jlbinding"},"Base.iterate")],-1)),e[10]||(e[10]=i()),o(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[11]||(e[11]=s('
julia
Base.iterate(t::neighbour_tiles, state=1)

Iterate over the neighbour_tiles object, returning all the neighbour tiles for a given Cartesian tile index.

source

',3))]),t("details",k,[t("summary",null,[e[12]||(e[12]=t("a",{id:"Base.iterate-Tuple{JetReconstruction.TiledJet}",href:"#Base.iterate-Tuple{JetReconstruction.TiledJet}"},[t("span",{class:"jlbinding"},"Base.iterate")],-1)),e[13]||(e[13]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[14]||(e[14]=s('
julia
Base.iterate(tj::TiledJet)

Iterate over a TiledJet object's linked list, walking over all jets until the end (then the next jet is invalid).

Arguments

  • tj::TiledJet: The TiledJet object to start to iterate over.

source

',5))]),t("details",b,[t("summary",null,[e[15]||(e[15]=t("a",{id:"Base.show-Tuple{IO, PseudoJet}",href:"#Base.show-Tuple{IO, PseudoJet}"},[t("span",{class:"jlbinding"},"Base.show")],-1)),e[16]||(e[16]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[17]||(e[17]=s('
julia
show(io::IO, jet::PseudoJet)

Print a PseudoJet object to the specified IO stream.

Arguments

  • io::IO: The IO stream to which the information will be printed.

  • jet::PseudoJet: The PseudoJet object whose information will be printed.

source

',5))]),t("details",m,[t("summary",null,[e[18]||(e[18]=t("a",{id:"Base.tryparse-Tuple{Type{<:Enum}, String}",href:"#Base.tryparse-Tuple{Type{<:Enum}, String}"},[t("span",{class:"jlbinding"},"Base.tryparse")],-1)),e[19]||(e[19]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[20]||(e[20]=s('
julia
Base.tryparse(E::Type{<:Enum}, str::String)

Parser that converts a string to an enum value if it exists, otherwise returns nothing.

source

',3))]),t("details",y,[t("summary",null,[e[21]||(e[21]=t("a",{id:"JetReconstruction.CosTheta-Tuple{PseudoJet}",href:"#JetReconstruction.CosTheta-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.CosTheta")],-1)),e[22]||(e[22]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[23]||(e[23]=s('
julia
CosTheta(p::PseudoJet)

Compute the cosine of the angle between the momentum vector p and the z-axis.

Arguments

  • p::PseudoJet: The PseudoJet object representing the momentum vector.

Returns

  • The cosine of the angle between p and the z-axis.

source

',7))]),t("details",j,[t("summary",null,[e[24]||(e[24]=t("a",{id:"JetReconstruction._ee_genkt_algorithm-Tuple{}",href:"#JetReconstruction._ee_genkt_algorithm-Tuple{}"},[t("span",{class:"jlbinding"},"JetReconstruction._ee_genkt_algorithm")],-1)),e[25]||(e[25]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[26]||(e[26]=s(`
julia
_ee_genkt_algorithm(; particles::Vector{EEjet}, p = 1, R = 4.0,
+import{_ as r,c as l,a5 as s,j as t,a as i,G as o,B as d,o as a}from"./chunks/framework.BtBDBbTG.js";const $e=JSON.parse('{"title":"Jet Reconstruction Internal Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"lib/internal.md","filePath":"lib/internal.md","lastUpdated":null}'),p={name:"lib/internal.md"},c={class:"jldocstring custom-block"},h={class:"jldocstring custom-block"},u={class:"jldocstring custom-block"},g={class:"jldocstring custom-block"},k={class:"jldocstring custom-block"},b={class:"jldocstring custom-block"},m={class:"jldocstring custom-block"},y={class:"jldocstring custom-block"},j={class:"jldocstring custom-block"},T={class:"jldocstring custom-block"},f={class:"jldocstring custom-block"},J={class:"jldocstring custom-block"},E={class:"jldocstring custom-block"},v={class:"jldocstring custom-block"},R={class:"jldocstring custom-block"},C={class:"jldocstring custom-block"},F={class:"jldocstring custom-block"},A={class:"jldocstring custom-block"},x={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},_={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.666ex"},xmlns:"http://www.w3.org/2000/svg",width:"11.255ex",height:"2.363ex",role:"img",focusable:"false",viewBox:"0 -750 4974.7 1044.2","aria-hidden":"true"},Q={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},P={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.186ex"},xmlns:"http://www.w3.org/2000/svg",width:"11.406ex",height:"1.756ex",role:"img",focusable:"false",viewBox:"0 -694 5041.4 776","aria-hidden":"true"},w={class:"jldocstring custom-block"},L={class:"jldocstring custom-block"},B={class:"jldocstring custom-block"},M={class:"jldocstring custom-block"},D={class:"jldocstring custom-block"},H={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},I={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.973ex",height:"1.779ex",role:"img",focusable:"false",viewBox:"0 -775.2 2198.3 786.2","aria-hidden":"true"},q={class:"jldocstring custom-block"},S={class:"jldocstring custom-block"},O={class:"jldocstring custom-block"},N={class:"jldocstring custom-block"},V={class:"jldocstring custom-block"},z={class:"jldocstring custom-block"},Z={class:"jldocstring custom-block"},U={class:"jldocstring custom-block"},X={class:"jldocstring custom-block"},G={class:"jldocstring custom-block"},W={class:"jldocstring custom-block"},$={class:"jldocstring custom-block"},K={class:"jldocstring custom-block"},Y={class:"jldocstring custom-block"},ee={class:"jldocstring custom-block"},te={class:"jldocstring custom-block"},ie={class:"jldocstring custom-block"},se={class:"jldocstring custom-block"},ne={class:"jldocstring custom-block"},oe={class:"jldocstring custom-block"},le={class:"jldocstring custom-block"},ae={class:"jldocstring custom-block"},re={class:"jldocstring custom-block"},de={class:"jldocstring custom-block"},pe={class:"jldocstring custom-block"},ce={class:"jldocstring custom-block"},he={class:"jldocstring custom-block"},ue={class:"jldocstring custom-block"},ge={class:"jldocstring custom-block"},ke={class:"jldocstring custom-block"},be={class:"jldocstring custom-block"},me={class:"jldocstring custom-block"},ye={class:"jldocstring custom-block"},je={class:"jldocstring custom-block"},Te={class:"jldocstring custom-block"},fe={class:"jldocstring custom-block"},Je={class:"jldocstring custom-block"},Ee={class:"jldocstring custom-block"},ve={class:"jldocstring custom-block"},Re={class:"jldocstring custom-block"},Ce={class:"jldocstring custom-block"},Fe={class:"jldocstring custom-block"},Ae={class:"jldocstring custom-block"},xe={class:"jldocstring custom-block"},_e={class:"jldocstring custom-block"},Qe={class:"jldocstring custom-block"},Pe={class:"jldocstring custom-block"},we={class:"jldocstring custom-block"},Le={class:"jldocstring custom-block"},Be={class:"jldocstring custom-block"},Me={class:"jldocstring custom-block"},De={class:"jldocstring custom-block"},He={class:"jldocstring custom-block"},Ie={class:"jldocstring custom-block"},qe={class:"jldocstring custom-block"},Se={class:"jldocstring custom-block"},Oe={class:"jldocstring custom-block"},Ne={class:"jldocstring custom-block"};function Ve(ze,e,Ze,Ue,Xe,Ge){const n=d("Badge");return a(),l("div",null,[e[270]||(e[270]=s('

Jet Reconstruction Internal Documentation

Documentation for JetReconstruction.jl's internal methods and types.

N.B. no guarantee is made of stability of these interfaces or types.

Index

Public Interface

',6)),t("details",c,[t("summary",null,[e[0]||(e[0]=t("a",{id:"Base.:+-Tuple{PseudoJet, PseudoJet}",href:"#Base.:+-Tuple{PseudoJet, PseudoJet}"},[t("span",{class:"jlbinding"},"Base.:+")],-1)),e[1]||(e[1]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[2]||(e[2]=s('
julia
+(j1::PseudoJet, j2::PseudoJet)

Addition operator for PseudoJet objects.

Arguments

  • j1::PseudoJet: The first PseudoJet object.

  • j2::PseudoJet: The second PseudoJet object.

Returns

A new PseudoJet object with the sum of the momenta and energy of j1 and j2.

source

',7))]),t("details",h,[t("summary",null,[e[3]||(e[3]=t("a",{id:"Base.copy-Tuple{JetReconstruction.TiledJet}",href:"#Base.copy-Tuple{JetReconstruction.TiledJet}"},[t("span",{class:"jlbinding"},"Base.copy")],-1)),e[4]||(e[4]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[5]||(e[5]=s('
julia
copy(j::TiledJet)

Create a copy of a TiledJet object.

Arguments

  • j::TiledJet: The TiledJet object to be copied.

Returns

A new TiledJet object with the same attributes as the input object.

source

',7))]),t("details",u,[t("summary",null,[e[6]||(e[6]=t("a",{id:"Base.iterate",href:"#Base.iterate"},[t("span",{class:"jlbinding"},"Base.iterate")],-1)),e[7]||(e[7]=i()),o(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[8]||(e[8]=s('
julia
Base.iterate(t::rightmost_tiles, state=1)

Iterate over the rightmost_tiles object, returning all the rightmost tiles for a given Cartesian tile index.

source

',3))]),t("details",g,[t("summary",null,[e[9]||(e[9]=t("a",{id:"Base.iterate-2",href:"#Base.iterate-2"},[t("span",{class:"jlbinding"},"Base.iterate")],-1)),e[10]||(e[10]=i()),o(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[11]||(e[11]=s('
julia
Base.iterate(t::neighbour_tiles, state=1)

Iterate over the neighbour_tiles object, returning all the neighbour tiles for a given Cartesian tile index.

source

',3))]),t("details",k,[t("summary",null,[e[12]||(e[12]=t("a",{id:"Base.iterate-Tuple{JetReconstruction.TiledJet}",href:"#Base.iterate-Tuple{JetReconstruction.TiledJet}"},[t("span",{class:"jlbinding"},"Base.iterate")],-1)),e[13]||(e[13]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[14]||(e[14]=s('
julia
Base.iterate(tj::TiledJet)

Iterate over a TiledJet object's linked list, walking over all jets until the end (then the next jet is invalid).

Arguments

  • tj::TiledJet: The TiledJet object to start to iterate over.

source

',5))]),t("details",b,[t("summary",null,[e[15]||(e[15]=t("a",{id:"Base.show-Tuple{IO, PseudoJet}",href:"#Base.show-Tuple{IO, PseudoJet}"},[t("span",{class:"jlbinding"},"Base.show")],-1)),e[16]||(e[16]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[17]||(e[17]=s('
julia
show(io::IO, jet::PseudoJet)

Print a PseudoJet object to the specified IO stream.

Arguments

  • io::IO: The IO stream to which the information will be printed.

  • jet::PseudoJet: The PseudoJet object whose information will be printed.

source

',5))]),t("details",m,[t("summary",null,[e[18]||(e[18]=t("a",{id:"Base.tryparse-Tuple{Type{<:Enum}, String}",href:"#Base.tryparse-Tuple{Type{<:Enum}, String}"},[t("span",{class:"jlbinding"},"Base.tryparse")],-1)),e[19]||(e[19]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[20]||(e[20]=s('
julia
Base.tryparse(E::Type{<:Enum}, str::String)

Parser that converts a string to an enum value if it exists, otherwise returns nothing.

source

',3))]),t("details",y,[t("summary",null,[e[21]||(e[21]=t("a",{id:"JetReconstruction.CosTheta-Tuple{PseudoJet}",href:"#JetReconstruction.CosTheta-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.CosTheta")],-1)),e[22]||(e[22]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[23]||(e[23]=s('
julia
CosTheta(p::PseudoJet)

Compute the cosine of the angle between the momentum vector p and the z-axis.

Arguments

  • p::PseudoJet: The PseudoJet object representing the momentum vector.

Returns

  • The cosine of the angle between p and the z-axis.

source

',7))]),t("details",j,[t("summary",null,[e[24]||(e[24]=t("a",{id:"JetReconstruction._ee_genkt_algorithm-Tuple{}",href:"#JetReconstruction._ee_genkt_algorithm-Tuple{}"},[t("span",{class:"jlbinding"},"JetReconstruction._ee_genkt_algorithm")],-1)),e[25]||(e[25]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[26]||(e[26]=s(`
julia
_ee_genkt_algorithm(; particles::Vector{EEjet}, p = 1, R = 4.0,
                    algorithm::JetAlgorithm.Algorithm = JetAlgorithm.Durham,
-                   recombine = +)

This function is the actual implementation of the e+e- jet clustering algorithm.

source

`,3))]),t("details",T,[t("summary",null,[e[27]||(e[27]=t("a",{id:"JetReconstruction._ensure_valid_rap_phi-Tuple{PseudoJet}",href:"#JetReconstruction._ensure_valid_rap_phi-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction._ensure_valid_rap_phi")],-1)),e[28]||(e[28]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[29]||(e[29]=s('
julia
_ensure_valid_rap_phi(p::PseudoJet)

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.

source

',5))]),t("details",f,[t("summary",null,[e[30]||(e[30]=t("a",{id:"JetReconstruction._plain_jet_reconstruct-Tuple{}",href:"#JetReconstruction._plain_jet_reconstruct-Tuple{}"},[t("span",{class:"jlbinding"},"JetReconstruction._plain_jet_reconstruct")],-1)),e[31]||(e[31]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[32]||(e[32]=s('
julia
_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. Floating point values are allowed for generalised k_t algorithm.

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.

source

',9))]),t("details",J,[t("summary",null,[e[33]||(e[33]=t("a",{id:"JetReconstruction._set_rap_phi!-Tuple{PseudoJet}",href:"#JetReconstruction._set_rap_phi!-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction._set_rap_phi!")],-1)),e[34]||(e[34]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[35]||(e[35]=s('

_set_rap_phi!(p::PseudoJet)

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π).

source

',8))]),t("details",E,[t("summary",null,[e[36]||(e[36]=t("a",{id:"JetReconstruction._tiled_jet_reconstruct-Tuple{Vector{PseudoJet}}",href:"#JetReconstruction._tiled_jet_reconstruct-Tuple{Vector{PseudoJet}}"},[t("span",{class:"jlbinding"},"JetReconstruction._tiled_jet_reconstruct")],-1)),e[37]||(e[37]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[38]||(e[38]=s('
julia
_tiled_jet_reconstruct(particles::Vector{PseudoJet}; p = -1, R = 1.0, recombine = +) where {T}

Main jet reconstruction algorithm entry point for reconstructing jets once preprocessing of data types are done.

Arguments

  • particles::Vector{PseudoJet}: A vector of PseudoJet particles used as input for jet reconstruction.

  • 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{PseudoJet}; p = 1, R = 1.0, recombine = +)

source

',9))]),t("details",v,[t("summary",null,[e[39]||(e[39]=t("a",{id:"JetReconstruction._tj_diJ-Tuple{Any}",href:"#JetReconstruction._tj_diJ-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction._tj_diJ")],-1)),e[40]||(e[40]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[41]||(e[41]=s('
julia
_tj_diJ(jet)

Compute the dij metric value for a given jet.

Arguments

  • jet: The input jet.

Returns

  • The dij value for the jet.

Example

source

',8))]),t("details",R,[t("summary",null,[e[42]||(e[42]=t("a",{id:"JetReconstruction._tj_dist-Tuple{Any, Any}",href:"#JetReconstruction._tj_dist-Tuple{Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction._tj_dist")],-1)),e[43]||(e[43]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[44]||(e[44]=s('
julia
_tj_dist(jetA, jetB)

Compute the geometric distance in the (y, ϕ)-plane between two jets in the TiledAlgoLL module.

Arguments

  • jetA: The first jet.

  • jetB: The second jet.

Returns

The squared distance between jetA and jetB.

Examples

source

',8))]),t("details",C,[t("summary",null,[e[45]||(e[45]=t("a",{id:"JetReconstruction.add_step_to_history!-Tuple{ClusterSequence, Vararg{Any, 4}}",href:"#JetReconstruction.add_step_to_history!-Tuple{ClusterSequence, Vararg{Any, 4}}"},[t("span",{class:"jlbinding"},"JetReconstruction.add_step_to_history!")],-1)),e[46]||(e[46]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[47]||(e[47]=s('
julia
add_step_to_history!(clusterseq::ClusterSequence, parent1, parent2, jetp_index, dij)

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.

source

',7))]),t("details",F,[t("summary",null,[e[48]||(e[48]=t("a",{id:"JetReconstruction.add_untagged_neighbours_to_tile_union-NTuple{4, Any}",href:"#JetReconstruction.add_untagged_neighbours_to_tile_union-NTuple{4, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.add_untagged_neighbours_to_tile_union")],-1)),e[49]||(e[49]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[50]||(e[50]=s('
julia
add_untagged_neighbours_to_tile_union(center_index, tile_union, n_near_tiles, tiling)

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.

Returns

The updated number of near tiles.

source

',7))]),t("details",A,[t("summary",null,[e[51]||(e[51]=t("a",{id:"JetReconstruction.angular_distance-Tuple{Any, Any, Any}",href:"#JetReconstruction.angular_distance-Tuple{Any, Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.angular_distance")],-1)),e[52]||(e[52]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[70]||(e[70]=s('
julia
angular_distance(eereco, i, j) -> Float64
',1)),t("p",null,[e[55]||(e[55]=i("Calculate the angular distance between two jets ")),e[56]||(e[56]=t("code",null,"i",-1)),e[57]||(e[57]=i(" and ")),e[58]||(e[58]=t("code",null,"j",-1)),e[59]||(e[59]=i(" using the formula ")),t("mjx-container",x,[(l(),a("svg",_,e[53]||(e[53]=[s('',1)]))),e[54]||(e[54]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mn",null,"1"),t("mo",null,"−"),t("mi",null,"c"),t("mi",null,"o"),t("mi",null,"s"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"θ"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"j")])]),t("mo",{stretchy:"false"},")")])],-1))]),e[60]||(e[60]=i("."))]),e[71]||(e[71]=s("

Arguments

  • eereco: The array of EERecoJet objects.

  • i: The first jet.

  • j: The second jet.

Returns

",3)),t("ul",null,[t("li",null,[e[63]||(e[63]=t("code",null,"Float64",-1)),e[64]||(e[64]=i(": The angular distance between ")),e[65]||(e[65]=t("code",null,"i",-1)),e[66]||(e[66]=i(" and ")),e[67]||(e[67]=t("code",null,"j",-1)),e[68]||(e[68]=i(", which is ")),t("mjx-container",Q,[(l(),a("svg",P,e[61]||(e[61]=[s('',1)]))),e[62]||(e[62]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mn",null,"1"),t("mo",null,"−"),t("mi",null,"c"),t("mi",null,"o"),t("mi",null,"s"),t("mi",null,"h"),t("mi",null,"e"),t("mi",null,"t"),t("mi",null,"a")])],-1))]),e[69]||(e[69]=i("."))])]),e[72]||(e[72]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/ce71ba00ab3da5bb537ea5177ec6178d9ad1b6f7/src/EEAlgorithm.jl#L6-L20",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",w,[t("summary",null,[e[73]||(e[73]=t("a",{id:"JetReconstruction.check_algorithm_power_consistency-Tuple{}",href:"#JetReconstruction.check_algorithm_power_consistency-Tuple{}"},[t("span",{class:"jlbinding"},"JetReconstruction.check_algorithm_power_consistency")],-1)),e[74]||(e[74]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[75]||(e[75]=t("p",null,"Allow a check for algorithm and power consistency",-1)),e[76]||(e[76]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/ce71ba00ab3da5bb537ea5177ec6178d9ad1b6f7/src/AlgorithmStrategyEnums.jl#L129",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",L,[t("summary",null,[e[77]||(e[77]=t("a",{id:"JetReconstruction.detach!-Tuple{JetReconstruction.TiledJet}",href:"#JetReconstruction.detach!-Tuple{JetReconstruction.TiledJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.detach!")],-1)),e[78]||(e[78]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[79]||(e[79]=s('
julia
detach!(jet::TiledJet)

Detach a TiledJet from its linked list by updating the previous and next pointers.

Arguments

  • jet::TiledJet: The TiledJet object to detach.

source

',5))]),t("details",B,[t("summary",null,[e[80]||(e[80]=t("a",{id:"JetReconstruction.determine_rapidity_extent-Union{Tuple{Vector{T}}, Tuple{T}} where T<:AbstractFloat",href:"#JetReconstruction.determine_rapidity_extent-Union{Tuple{Vector{T}}, Tuple{T}} where T<:AbstractFloat"},[t("span",{class:"jlbinding"},"JetReconstruction.determine_rapidity_extent")],-1)),e[81]||(e[81]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[82]||(e[82]=s('
julia
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).

Arguments

  • eta::Vector{T}: A vector of rapidity values.

Returns

  • minrap::T: The minimum rapidity value.

  • maxrap::T: The maximum rapidity value.

source

',8))]),t("details",M,[t("summary",null,[e[83]||(e[83]=t("a",{id:"JetReconstruction.dij-NTuple{4, Any}",href:"#JetReconstruction.dij-NTuple{4, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.dij")],-1)),e[84]||(e[84]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[85]||(e[85]=s('
julia
dij(i, kt2_array, nn, nndist)

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.ßß

Arguments

  • i: The index of the element.

  • kt2_array: An array of kt2 values.

  • nn: An array of nearest neighbors.

  • nndist: An array of nearest neighbor distances.

Returns

  • The computed dij value.

source

',7))]),t("details",D,[t("summary",null,[e[86]||(e[86]=t("a",{id:"JetReconstruction.dij_dist-NTuple{4, Any}",href:"#JetReconstruction.dij_dist-NTuple{4, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.dij_dist")],-1)),e[87]||(e[87]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[92]||(e[92]=s('
julia
dij_dist(eereco, i, j, dij_factor)
',1)),t("p",null,[e[90]||(e[90]=i("Calculate the dij distance between two ")),t("mjx-container",H,[(l(),a("svg",I,e[88]||(e[88]=[s('',1)]))),e[89]||(e[89]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("msup",null,[t("mi",null,"e"),t("mo",null,"−")])])],-1))]),e[91]||(e[91]=i("jets."))]),e[93]||(e[93]=s('

Arguments

  • eereco: The array of EERecoJet objects.

  • i: The first jet.

  • j: The second jet.

  • dij_factor: The scaling factor to multiply the dij distance by.

Returns

  • The dij distance between i and j.

source

',5))]),t("details",q,[t("summary",null,[e[94]||(e[94]=t("a",{id:"JetReconstruction.dist-NTuple{4, Any}",href:"#JetReconstruction.dist-NTuple{4, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.dist")],-1)),e[95]||(e[95]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[96]||(e[96]=s('
julia
dist(i, j, rapidity_array, phi_array)

Compute the distance between points in a 2D space defined by rapidity and phi coordinates.

Arguments

  • i::Int: Index of the first point to consider (indexes into rapidity_array and phi_array).

  • j::Int: Index of the second point to consider (indexes into rapidity_array and phi_array).

  • rapidity_array::Vector{Float64}: Array of rapidity coordinates.

  • phi_array::Vector{Float64}: Array of phi coordinates.

Returns

  • distance::Float64: The distance between the two points.

source

',7))]),t("details",S,[t("summary",null,[e[97]||(e[97]=t("a",{id:"JetReconstruction.do_iB_recombination_step!-Tuple{ClusterSequence, Any, Any}",href:"#JetReconstruction.do_iB_recombination_step!-Tuple{ClusterSequence, Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.do_iB_recombination_step!")],-1)),e[98]||(e[98]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[99]||(e[99]=s('
julia
do_iB_recombination_step!(clusterseq::ClusterSequence, jet_i, diB)

Bookkeeping for recombining a jet with the beam (i.e., finalising the jet) by adding a step to the history of the cluster sequence.

Arguments

  • clusterseq::ClusterSequence: The cluster sequence object.

  • jet_i: The index of the jet.

  • diB: The diB value.

source

',5))]),t("details",O,[t("summary",null,[e[100]||(e[100]=t("a",{id:"JetReconstruction.do_ij_recombination_step!",href:"#JetReconstruction.do_ij_recombination_step!"},[t("span",{class:"jlbinding"},"JetReconstruction.do_ij_recombination_step!")],-1)),e[101]||(e[101]=i()),o(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[102]||(e[102]=s('
julia
do_ij_recombination_step!(clusterseq::ClusterSequence, jet_i, jet_j, dij, recombine=+)

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.

source

',9))]),t("details",N,[t("summary",null,[e[103]||(e[103]=t("a",{id:"JetReconstruction.energy-Tuple{PseudoJet}",href:"#JetReconstruction.energy-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.energy")],-1)),e[104]||(e[104]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[105]||(e[105]=s('
julia
energy(p::PseudoJet)

Return the energy of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The energy of the PseudoJet.

source

',7))]),t("details",V,[t("summary",null,[e[106]||(e[106]=t("a",{id:"JetReconstruction.eta-Tuple{PseudoJet}",href:"#JetReconstruction.eta-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.eta")],-1)),e[107]||(e[107]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[108]||(e[108]=s('
julia
eta(p::PseudoJet)

Compute the pseudorapidity (η) of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the pseudorapidity.

Returns

  • The pseudorapidity (η) of the PseudoJet.

source

',7))]),t("details",z,[t("summary",null,[e[109]||(e[109]=t("a",{id:"JetReconstruction.fast_findmin-Tuple{Any, Any}",href:"#JetReconstruction.fast_findmin-Tuple{Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.fast_findmin")],-1)),e[110]||(e[110]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[111]||(e[111]=s('
julia
fast_findmin(dij, n)

Find the minimum value and its index in the first n elements of the dij array. The use of @turbo macro gives a significiant performance boost.

Arguments

  • dij: An array of values.

  • n: The number of elements to consider in the dij array.

Returns

  • dij_min: The minimum value in the first n elements of the dij array.

  • best: The index of the minimum value in the dij array.

source

',7))]),t("details",Z,[t("summary",null,[e[112]||(e[112]=t("a",{id:"JetReconstruction.find_tile_neighbours!-NTuple{5, Any}",href:"#JetReconstruction.find_tile_neighbours!-NTuple{5, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.find_tile_neighbours!")],-1)),e[113]||(e[113]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[114]||(e[114]=s('
julia
find_tile_neighbours!(tile_union, jetA, jetB, oldB, tiling)

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.

source

',7))]),t("details",U,[t("summary",null,[e[115]||(e[115]=t("a",{id:"JetReconstruction.geometric_distance-NTuple{4, AbstractFloat}",href:"#JetReconstruction.geometric_distance-NTuple{4, AbstractFloat}"},[t("span",{class:"jlbinding"},"JetReconstruction.geometric_distance")],-1)),e[116]||(e[116]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[117]||(e[117]=s('
julia
geometric_distance(eta1::AbstractFloat, phi1::AbstractFloat, eta2::AbstractFloat, phi2::AbstractFloat)

Compute the geometric distance between two points in the rap-phi plane.

Arguments

  • eta1::AbstractFloat: The eta coordinate of the first point.

  • phi1::AbstractFloat: The phi coordinate of the first point.

  • eta2::AbstractFloat: The eta coordinate of the second point.

  • phi2::AbstractFloat: The phi coordinate of the second point.

Returns

  • distance::Float64: The geometric distance between the two points.

source

',7))]),t("details",X,[t("summary",null,[e[118]||(e[118]=t("a",{id:"JetReconstruction.get_algorithm_power_consistency-Tuple{}",href:"#JetReconstruction.get_algorithm_power_consistency-Tuple{}"},[t("span",{class:"jlbinding"},"JetReconstruction.get_algorithm_power_consistency")],-1)),e[119]||(e[119]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[120]||(e[120]=s('
julia
get_algorithm_power_consistency(; p::Union{Real, Nothing}, algorithm::Union{JetAlgorithm, Nothing})

Get the algorithm and power consistency correct

This function checks the consistency between the algorithm and power parameters. If the algorithm is specified, it checks if the power parameter is consistent with the algorithm's known power. If the power parameter is not specified, it sets the power parameter based on the algorithm. If neither the algorithm nor the power parameter is specified, it throws an ArgumentError.

Arguments

  • p::Union{Real, Nothing}: The power value.

  • algorithm::Union{JetAlgorithm, Nothing}: The algorithm.

Returns

A named tuple of the consistent power and algorithm values.

Throws

  • ArgumentError: If the algorithm and power are inconsistent or if neither the algorithm nor the power is specified.

source

',10))]),t("details",G,[t("summary",null,[e[121]||(e[121]=t("a",{id:"JetReconstruction.get_all_ancestors-Tuple{Any, ClusterSequence}",href:"#JetReconstruction.get_all_ancestors-Tuple{Any, ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.get_all_ancestors")],-1)),e[122]||(e[122]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[123]||(e[123]=s('
julia
get_all_ancestors(idx, cs::ClusterSequence)

Recursively finds all ancestors of a given index in a ClusterSequence object.

Arguments

  • idx: The index of the jet for which to find ancestors.

  • cs: The ClusterSequence object containing the jet history.

Returns

An array of indices representing the ancestors of the given jet.

source

',7))]),t("details",W,[t("summary",null,[e[124]||(e[124]=t("a",{id:"JetReconstruction.get_dij_dist-NTuple{4, Any}",href:"#JetReconstruction.get_dij_dist-NTuple{4, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.get_dij_dist")],-1)),e[125]||(e[125]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[126]||(e[126]=s('
julia
get_dij_dist(nn_dist, kt2_1, kt2_2, R2)

Compute the dij metric distance between two jets.

Arguments

  • nn_dist: The nearest-neighbor distance between two jets.

  • kt2_1: The squared momentum metric value of the first jet.

  • kt2_2: The squared momentum metric value of the second jet.

  • R2: The jet radius parameter squared.

Returns

The distance between the two jets.

If kt2_2 is equal to 0.0, then the first jet doesn't actually have a valid neighbour, so it's treated as a single jet adjecent to the beam.

source

',8))]),t("details",$,[t("summary",null,[e[127]||(e[127]=t("a",{id:"JetReconstruction.get_tile-Tuple{JetReconstruction.TilingDef, AbstractFloat, AbstractFloat}",href:"#JetReconstruction.get_tile-Tuple{JetReconstruction.TilingDef, AbstractFloat, AbstractFloat}"},[t("span",{class:"jlbinding"},"JetReconstruction.get_tile")],-1)),e[128]||(e[128]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[129]||(e[129]=s('
julia
get_tile(tiling_setup::TilingDef, eta::AbstractFloat, phi::AbstractFloat)

Given a tiling_setup object, eta and phi values, this function calculates the tile indices for the given eta and phi values.

Arguments

  • tiling_setup: A TilingDef object that contains the tiling setup parameters.

  • eta: The eta value for which to calculate the tile index.

  • phi: The phi value for which to calculate the tile index.

Returns

  • ieta: The tile index along the eta direction.

  • iphi: The tile index along the phi direction.

source

',7))]),t("details",K,[t("summary",null,[e[130]||(e[130]=t("a",{id:"JetReconstruction.get_tile_cartesian_indices-Tuple{JetReconstruction.TilingDef, Int64}",href:"#JetReconstruction.get_tile_cartesian_indices-Tuple{JetReconstruction.TilingDef, Int64}"},[t("span",{class:"jlbinding"},"JetReconstruction.get_tile_cartesian_indices")],-1)),e[131]||(e[131]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[132]||(e[132]=s('
julia
get_tile_linear_index(tiling_setup::TilingDef, i_η::Int, i_ϕ::Int)

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.

Returns

  • The linear index of the tile.

source

',7))]),t("details",Y,[t("summary",null,[e[133]||(e[133]=t("a",{id:"JetReconstruction.initial_history-Tuple{Any}",href:"#JetReconstruction.initial_history-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.initial_history")],-1)),e[134]||(e[134]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[135]||(e[135]=s('
julia
initial_history(particles)

Create an initial history for the given particles.

Arguments

  • particles: The initial vector of stable particles.

Returns

  • history: An array of HistoryElement objects.

  • Qtot: The total energy in the event.

source

',7))]),t("details",ee,[t("summary",null,[e[136]||(e[136]=t("a",{id:"JetReconstruction.insert!-Tuple{JetReconstruction.TiledJet, JetReconstruction.TiledJet}",href:"#JetReconstruction.insert!-Tuple{JetReconstruction.TiledJet, JetReconstruction.TiledJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.insert!")],-1)),e[137]||(e[137]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[138]||(e[138]=s('
julia
insert!(nextjet::TiledJet, jettomove::TiledJet)

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.

Example

source

',6))]),t("details",te,[t("summary",null,[e[139]||(e[139]=t("a",{id:"JetReconstruction.is_ee-Tuple{JetReconstruction.JetAlgorithm.Algorithm}",href:"#JetReconstruction.is_ee-Tuple{JetReconstruction.JetAlgorithm.Algorithm}"},[t("span",{class:"jlbinding"},"JetReconstruction.is_ee")],-1)),e[140]||(e[140]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[141]||(e[141]=s('
julia
is_ee(algorithm::JetAlgorithm.Algorithm)

Check if the algorithm is a e+e- reconstruction algorithm.

Returns

true if the algorithm is a e+e- reconstruction algorithm, false otherwise.

source

',5))]),t("details",ie,[t("summary",null,[e[142]||(e[142]=t("a",{id:"JetReconstruction.is_pp-Tuple{JetReconstruction.JetAlgorithm.Algorithm}",href:"#JetReconstruction.is_pp-Tuple{JetReconstruction.JetAlgorithm.Algorithm}"},[t("span",{class:"jlbinding"},"JetReconstruction.is_pp")],-1)),e[143]||(e[143]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[144]||(e[144]=s('
julia
is_pp(algorithm::JetAlgorithm.Algorithm)

Check if the algorithm is a pp reconstruction algorithm.

Returns

true if the algorithm is a pp reconstruction algorithm, false otherwise.

source

',5))]),t("details",se,[t("summary",null,[e[145]||(e[145]=t("a",{id:"JetReconstruction.isvalid-Tuple{JetReconstruction.TiledJet}",href:"#JetReconstruction.isvalid-Tuple{JetReconstruction.TiledJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.isvalid")],-1)),e[146]||(e[146]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[147]||(e[147]=s('
julia
isvalid(t::TiledJet)

Check if a TiledJet is valid, by seeing if it is not the noTiledJet object.

Arguments

  • t::TiledJet: The TiledJet object to check.

Returns

  • Bool: true if the TiledJet object is valid, false otherwise.

source

',7))]),t("details",ne,[t("summary",null,[e[148]||(e[148]=t("a",{id:"JetReconstruction.jet_ranks-Tuple{ClusterSequence}",href:"#JetReconstruction.jet_ranks-Tuple{ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.jet_ranks")],-1)),e[149]||(e[149]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[150]||(e[150]=s('
julia
jet_ranks(clusterseq::ClusterSequence; compare_fn = JetReconstruction.pt)

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.

source

',9))]),t("details",oe,[t("summary",null,[e[151]||(e[151]=t("a",{id:"JetReconstruction.m-Tuple{PseudoJet}",href:"#JetReconstruction.m-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.m")],-1)),e[152]||(e[152]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[153]||(e[153]=s('
julia
m(p::PseudoJet)

Compute the invariant mass of a PseudoJet object. By convention if m^2 < 0, then -sqrt{(-m^2)} is returned.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the invariant mass.

Returns

The invariant mass of the PseudoJet object.

source

',7))]),t("details",ae,[t("summary",null,[e[154]||(e[154]=t("a",{id:"JetReconstruction.m2-Tuple{PseudoJet}",href:"#JetReconstruction.m2-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.m2")],-1)),e[155]||(e[155]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[156]||(e[156]=s('
julia
m2(p::PseudoJet)

Calculate the invariant mass squared (m^2) of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object for which to calculate the invariant mass squared.

Returns

  • The invariant mass squared (m^2) of the PseudoJet.

source

',7))]),t("details",le,[t("summary",null,[e[157]||(e[157]=t("a",{id:"JetReconstruction.mag-Tuple{PseudoJet}",href:"#JetReconstruction.mag-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.mag")],-1)),e[158]||(e[158]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[159]||(e[159]=s('
julia
mag(p::PseudoJet)

Return the magnitude of the momentum of a PseudoJet, |p|.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the magnitude.

Returns

The magnitude of the PseudoJet object.

source

',7))]),t("details",re,[t("summary",null,[e[160]||(e[160]=t("a",{id:"JetReconstruction.mass-Tuple{PseudoJet}",href:"#JetReconstruction.mass-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.mass")],-1)),e[161]||(e[161]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[162]||(e[162]=s('
julia
mass(p::PseudoJet)

Compute the invariant mass (alias for m(p)).

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the mass.

Returns

  • The mass of the PseudoJet.

source

',7))]),t("details",de,[t("summary",null,[e[163]||(e[163]=t("a",{id:"JetReconstruction.mass2",href:"#JetReconstruction.mass2"},[t("span",{class:"jlbinding"},"JetReconstruction.mass2")],-1)),e[164]||(e[164]=i()),o(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[165]||(e[165]=t("p",null,[i("Alias for "),t("code",null,"m2"),i(" function")],-1)),e[166]||(e[166]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/ce71ba00ab3da5bb537ea5177ec6178d9ad1b6f7/src/Pseudojet.jl#L370",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",pe,[t("summary",null,[e[167]||(e[167]=t("a",{id:"JetReconstruction.merge_steps-Tuple{ClusterSequence}",href:"#JetReconstruction.merge_steps-Tuple{ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.merge_steps")],-1)),e[168]||(e[168]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[169]||(e[169]=s('
julia
merge_steps(clusterseq::ClusterSequence)

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.

Returns

  • merge_steps::Int: The number of merge steps.

source

',7))]),t("details",ce,[t("summary",null,[e[170]||(e[170]=t("a",{id:"JetReconstruction.phi-Tuple{PseudoJet}",href:"#JetReconstruction.phi-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.phi")],-1)),e[171]||(e[171]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[172]||(e[172]=s('
julia
phi(p::PseudoJet)

Compute the ϕ angle of a PseudoJet object p.

Note this function is a wrapper for phi_02pi(p).

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the azimuthal angle.

Returns

  • The azimuthal angle of p in the range [0, 2π).

source

',8))]),t("details",he,[t("summary",null,[e[173]||(e[173]=t("a",{id:"JetReconstruction.phi_02pi-Tuple{PseudoJet}",href:"#JetReconstruction.phi_02pi-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.phi_02pi")],-1)),e[174]||(e[174]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[175]||(e[175]=s('
julia
phi_02pi(p::PseudoJet)

Compute the azimuthal angle of a PseudoJet object p in the range [0, 2π).

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the azimuthal angle.

Returns

  • The azimuthal angle of p in the range [0, 2π).

source

',7))]),t("details",ue,[t("summary",null,[e[176]||(e[176]=t("a",{id:"JetReconstruction.pt-Tuple{PseudoJet}",href:"#JetReconstruction.pt-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.pt")],-1)),e[177]||(e[177]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[178]||(e[178]=s('
julia
pt(p::PseudoJet)

Compute the scalar transverse momentum (pt) of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the transverse momentum.

Returns

  • The transverse momentum (pt) of the PseudoJet.

source

',7))]),t("details",ge,[t("summary",null,[e[179]||(e[179]=t("a",{id:"JetReconstruction.pt2-Tuple{PseudoJet}",href:"#JetReconstruction.pt2-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.pt2")],-1)),e[180]||(e[180]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[181]||(e[181]=s('
julia
pt2(p::PseudoJet)

Get the squared transverse momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The squared transverse momentum of the PseudoJet.

source

',7))]),t("details",ke,[t("summary",null,[e[182]||(e[182]=t("a",{id:"JetReconstruction.px-Tuple{PseudoJet}",href:"#JetReconstruction.px-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.px")],-1)),e[183]||(e[183]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[184]||(e[184]=s('
julia
px(p::PseudoJet)

Return the x-component of the momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The x-component of the momentum of the PseudoJet.

source

',7))]),t("details",be,[t("summary",null,[e[185]||(e[185]=t("a",{id:"JetReconstruction.py-Tuple{PseudoJet}",href:"#JetReconstruction.py-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.py")],-1)),e[186]||(e[186]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[187]||(e[187]=s('
julia
py(p::PseudoJet)

Return the y-component of the momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The y-component of the momentum of the PseudoJet.

source

',7))]),t("details",me,[t("summary",null,[e[188]||(e[188]=t("a",{id:"JetReconstruction.pz-Tuple{PseudoJet}",href:"#JetReconstruction.pz-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.pz")],-1)),e[189]||(e[189]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[190]||(e[190]=s('
julia
pz(p::PseudoJet)

Return the z-component of the momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The z-component of the momentum of the PseudoJet.

source

',7))]),t("details",ye,[t("summary",null,[e[191]||(e[191]=t("a",{id:"JetReconstruction.rapidity-Tuple{PseudoJet}",href:"#JetReconstruction.rapidity-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.rapidity")],-1)),e[192]||(e[192]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[193]||(e[193]=s('
julia
rapidity(p::PseudoJet)

Compute the rapidity of a PseudoJet object.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the rapidity.

Returns

The rapidity of the PseudoJet object.

source

',7))]),t("details",je,[t("summary",null,[e[194]||(e[194]=t("a",{id:"JetReconstruction.reco_state-Tuple{ClusterSequence, Any}",href:"#JetReconstruction.reco_state-Tuple{ClusterSequence, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.reco_state")],-1)),e[195]||(e[195]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[196]||(e[196]=s('
julia
reco_state(cs::ClusterSequence, pt_ranks; iteration=0)

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.

source

',11))]),t("details",Te,[t("summary",null,[e[197]||(e[197]=t("a",{id:"JetReconstruction.rightneighbours-Tuple{Int64, JetReconstruction.Tiling}",href:"#JetReconstruction.rightneighbours-Tuple{Int64, JetReconstruction.Tiling}"},[t("span",{class:"jlbinding"},"JetReconstruction.rightneighbours")],-1)),e[198]||(e[198]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[199]||(e[199]=s('
julia
rightneighbours(center::Int, tiling::Tiling)

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.

source

',7))]),t("details",fe,[t("summary",null,[e[200]||(e[200]=t("a",{id:"JetReconstruction.set_momentum!-Tuple{PseudoJet, Vararg{Any, 4}}",href:"#JetReconstruction.set_momentum!-Tuple{PseudoJet, Vararg{Any, 4}}"},[t("span",{class:"jlbinding"},"JetReconstruction.set_momentum!")],-1)),e[201]||(e[201]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[202]||(e[202]=s('
julia
set_momentum!(j::PseudoJet, px, py, pz, E)

Set the momentum components and energy of a PseudoJet object.

Arguments

  • j::PseudoJet: The PseudoJet object to set the momentum for.

  • px: The x-component of the momentum.

  • py: The y-component of the momentum.

  • pz: The z-component of the momentum.

  • E: The energy of the particle.

source

',5))]),t("details",Je,[t("summary",null,[e[203]||(e[203]=t("a",{id:"JetReconstruction.set_nearest_neighbours!-Tuple{ClusterSequence, JetReconstruction.Tiling, Vector{JetReconstruction.TiledJet}}",href:"#JetReconstruction.set_nearest_neighbours!-Tuple{ClusterSequence, JetReconstruction.Tiling, Vector{JetReconstruction.TiledJet}}"},[t("span",{class:"jlbinding"},"JetReconstruction.set_nearest_neighbours!")],-1)),e[204]||(e[204]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[205]||(e[205]=s('
julia
set_nearest_neighbours!(clusterseq::ClusterSequence, tiling::Tiling, tiledjets::Vector{TiledJet})

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.

source

',9))]),t("details",Ee,[t("summary",null,[e[206]||(e[206]=t("a",{id:"JetReconstruction.setup_tiling-Union{Tuple{T}, Tuple{Vector{T}, AbstractFloat}} where T<:AbstractFloat",href:"#JetReconstruction.setup_tiling-Union{Tuple{T}, Tuple{Vector{T}, AbstractFloat}} where T<:AbstractFloat"},[t("span",{class:"jlbinding"},"JetReconstruction.setup_tiling")],-1)),e[207]||(e[207]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[208]||(e[208]=s('
julia
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.

source

',9))]),t("details",ve,[t("summary",null,[e[209]||(e[209]=t("a",{id:"JetReconstruction.surrounding-Tuple{Int64, JetReconstruction.Tiling}",href:"#JetReconstruction.surrounding-Tuple{Int64, JetReconstruction.Tiling}"},[t("span",{class:"jlbinding"},"JetReconstruction.surrounding")],-1)),e[210]||(e[210]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[211]||(e[211]=s('
julia
surrounding(center::Int, tiling::Tiling)

Compute the surrounding indices of a given center index in a tiling.

Arguments

  • center::Int: The center index.

  • tiling::Tiling: The tiling object.

Returns

  • Surrounding: An object containing the surrounding indices.

source

',7))]),t("details",Re,[t("summary",null,[e[212]||(e[212]=t("a",{id:"JetReconstruction.tile_index-Tuple{Any, Float64, Float64}",href:"#JetReconstruction.tile_index-Tuple{Any, Float64, Float64}"},[t("span",{class:"jlbinding"},"JetReconstruction.tile_index")],-1)),e[213]||(e[213]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[214]||(e[214]=s('
julia
tile_index(tiling_setup, eta::Float64, phi::Float64)

Compute the tile index for a given (eta, phi) coordinate.

Arguments

  • tiling_setup: The tiling setup object containing the tile size and number of tiles.

  • eta::Float64: The eta coordinate.

  • phi::Float64: The phi coordinate.

Returns

The tile index corresponding to the (eta, phi) coordinate.

source

',7))]),t("details",Ce,[t("summary",null,[e[215]||(e[215]=t("a",{id:"JetReconstruction.tiledjet_remove_from_tiles!-Tuple{Any, Any}",href:"#JetReconstruction.tiledjet_remove_from_tiles!-Tuple{Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.tiledjet_remove_from_tiles!")],-1)),e[216]||(e[216]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[217]||(e[217]=s('
julia
tiledjet_remove_from_tiles!(tiling, jet)

Remove a jet from the given tiling structure.

Arguments

  • tiling: The tiling structure from which the jet will be removed.

  • jet: The jet to be removed from the tiling structure.

Description

This function removes a jet from the tiling structure. It adjusts the linked list to be consistent with the removal of the jet.

source

',7))]),t("details",Fe,[t("summary",null,[e[218]||(e[218]=t("a",{id:"JetReconstruction.tiledjet_set_jetinfo!-Tuple{JetReconstruction.TiledJet, ClusterSequence, JetReconstruction.Tiling, Any, Any, Any}",href:"#JetReconstruction.tiledjet_set_jetinfo!-Tuple{JetReconstruction.TiledJet, ClusterSequence, JetReconstruction.Tiling, Any, Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.tiledjet_set_jetinfo!")],-1)),e[219]||(e[219]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[220]||(e[220]=s('
julia
tiledjet_set_jetinfo!(jet::TiledJet, clusterseq::ClusterSequence, tiling::Tiling, jets_index, R2, p)

Initialise a tiled jet from a PseudoJet (using an index into our ClusterSequence)

Arguments:

  • jet::TiledJet: The TiledJet object to set the information for.

  • clusterseq::ClusterSequence: The ClusterSequence object containing the jets.

  • tiling::Tiling: The Tiling object containing the tile information.

  • jets_index: The index of the jet in the ClusterSequence.

  • R2: The jet radius parameter squared.

  • p: The power to raise the pt2 value to.

This function sets the eta, phi, kt2, jets_index, NN_dist, NN, tile_index, previous, and next fields of the TiledJet object.

Returns:

  • nothing

source

',8))]),t("details",Ae,[t("summary",null,[e[221]||(e[221]=t("a",{id:"JetReconstruction.upd_nn_crosscheck!-Tuple{Int64, Int64, Int64, Vararg{Any, 5}}",href:"#JetReconstruction.upd_nn_crosscheck!-Tuple{Int64, Int64, Int64, Vararg{Any, 5}}"},[t("span",{class:"jlbinding"},"JetReconstruction.upd_nn_crosscheck!")],-1)),e[222]||(e[222]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[223]||(e[223]=s('
julia
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.

source

',5))]),t("details",xe,[t("summary",null,[e[224]||(e[224]=t("a",{id:"JetReconstruction.upd_nn_nocross!-Tuple{Int64, Int64, Int64, Vararg{Any, 5}}",href:"#JetReconstruction.upd_nn_nocross!-Tuple{Int64, Int64, Int64, Vararg{Any, 5}}"},[t("span",{class:"jlbinding"},"JetReconstruction.upd_nn_nocross!")],-1)),e[225]||(e[225]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[226]||(e[226]=s('
julia
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.

source

',5))]),t("details",_e,[t("summary",null,[e[227]||(e[227]=t("a",{id:"JetReconstruction.upd_nn_step!-NTuple{12, Any}",href:"#JetReconstruction.upd_nn_step!-NTuple{12, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.upd_nn_step!")],-1)),e[228]||(e[228]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[229]||(e[229]=s('
julia
upd_nn_step!(i, j, k, N, Nn, kt2_array, rapidity_array, phi_array, R2, nndist, nn, nndij)

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.

source

',6))]),t("details",Qe,[t("summary",null,[e[230]||(e[230]=t("a",{id:"JetReconstruction.η",href:"#JetReconstruction.η"},[t("span",{class:"jlbinding"},"JetReconstruction.η")],-1)),e[231]||(e[231]=i()),o(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[232]||(e[232]=s('
julia
const η = eta

Alias for the pseudorapidity function, eta.

source

',3))]),t("details",Pe,[t("summary",null,[e[233]||(e[233]=t("a",{id:"JetReconstruction.FourMomentum",href:"#JetReconstruction.FourMomentum"},[t("span",{class:"jlbinding"},"JetReconstruction.FourMomentum")],-1)),e[234]||(e[234]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[235]||(e[235]=t("p",null,"Interface for composite types that includes fields px, py, py, and E that represents the components of a four-momentum vector.",-1)),e[236]||(e[236]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/ce71ba00ab3da5bb537ea5177ec6178d9ad1b6f7/src/Pseudojet.jl#L6-L8",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",we,[t("summary",null,[e[237]||(e[237]=t("a",{id:"JetReconstruction.HistoryElement",href:"#JetReconstruction.HistoryElement"},[t("span",{class:"jlbinding"},"JetReconstruction.HistoryElement")],-1)),e[238]||(e[238]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[239]||(e[239]=s('
julia
struct HistoryElement

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.

source

',5))]),t("details",Le,[t("summary",null,[e[240]||(e[240]=t("a",{id:"JetReconstruction.HistoryElement-Tuple{Any}",href:"#JetReconstruction.HistoryElement-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.HistoryElement")],-1)),e[241]||(e[241]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[242]||(e[242]=s('
julia
HistoryElement(jetp_index)

Constructs a HistoryElement object with the given jetp_index, used for initialising the history with original particles.

Arguments

  • jetp_index: The index of the jetp.

Returns

A HistoryElement object.

source

',7))]),t("details",Be,[t("summary",null,[e[243]||(e[243]=t("a",{id:"JetReconstruction.JetWithAncestors",href:"#JetReconstruction.JetWithAncestors"},[t("span",{class:"jlbinding"},"JetReconstruction.JetWithAncestors")],-1)),e[244]||(e[244]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[245]||(e[245]=s('
julia
struct JetWithAncestors

A struct representing a jet with its origin ancestors.

Fields

  • self::PseudoJet: The PseudoJet object for this jet.

  • jetp_index::Int: The index of the jet in the corresponding cluster sequence.

  • ancestors::Set{Int}: A set of indices representing the jetp_indexes of ancestors of the jet (in the cluster sequence).

  • jet_rank::Int: The rank of the jet based on a comparison of all of the jet's ancestors

Note

This structure needs its associated cluster sequence origin to be useful.

source

',7))]),t("details",Me,[t("summary",null,[e[246]||(e[246]=t("a",{id:"JetReconstruction.Surrounding",href:"#JetReconstruction.Surrounding"},[t("span",{class:"jlbinding"},"JetReconstruction.Surrounding")],-1)),e[247]||(e[247]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[248]||(e[248]=s('
julia
struct Surrounding{N}

Structure used for iterating over neighbour tiles.

Fields

  • indices::NTuple{N, Int}: A tuple of N integers representing the indices.

source

',5))]),t("details",De,[t("summary",null,[e[249]||(e[249]=t("a",{id:"JetReconstruction.TiledJet",href:"#JetReconstruction.TiledJet"},[t("span",{class:"jlbinding"},"JetReconstruction.TiledJet")],-1)),e[250]||(e[250]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[251]||(e[251]=s('
julia
struct TiledJet

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.

  • NN::TiledJet: The nearest neighbor.

  • previous::TiledJet: The previous jet.

  • next::TiledJet: The next jet.

source

',5))]),t("details",He,[t("summary",null,[e[252]||(e[252]=t("a",{id:"JetReconstruction.TiledJet-Tuple{Any}",href:"#JetReconstruction.TiledJet-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.TiledJet")],-1)),e[253]||(e[253]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[254]||(e[254]=s('
julia
TiledJet(id)

Constructs a TiledJet object with the given id and initializes its properties to zero.

Arguments

  • id: The ID of the TiledJet object.

Returns

A TiledJet object with the specified id and values set to zero or noTiledJet.

source

',7))]),t("details",Ie,[t("summary",null,[e[255]||(e[255]=t("a",{id:"JetReconstruction.Tiling",href:"#JetReconstruction.Tiling"},[t("span",{class:"jlbinding"},"JetReconstruction.Tiling")],-1)),e[256]||(e[256]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[257]||(e[257]=s('
julia
struct Tiling

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).

source

',5))]),t("details",qe,[t("summary",null,[e[258]||(e[258]=t("a",{id:"JetReconstruction.Tiling-Tuple{JetReconstruction.TilingDef}",href:"#JetReconstruction.Tiling-Tuple{JetReconstruction.TilingDef}"},[t("span",{class:"jlbinding"},"JetReconstruction.Tiling")],-1)),e[259]||(e[259]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[260]||(e[260]=s('
julia
Tiling(setup::TilingDef)

Constructs a intial Tiling object based on the provided setup parameters.

Arguments

  • setup::TilingDef: The setup parameters for the tiling.

Returns

A Tiling object.

source

',7))]),t("details",Se,[t("summary",null,[e[261]||(e[261]=t("a",{id:"JetReconstruction.TilingDef",href:"#JetReconstruction.TilingDef"},[t("span",{class:"jlbinding"},"JetReconstruction.TilingDef")],-1)),e[262]||(e[262]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[263]||(e[263]=s(`
julia
struct TilingDef

A struct representing the definition of a spcific tiling scheme.

Fields

  • _tiles_eta_min::Float64: The minimum rapidity of the tiles.

  • _tiles_eta_max::Float64: The maximum rapidity of the tiles.

  • _tile_size_eta::Float64: The size of a tile in rapidity (usually R^2).

  • _tile_size_phi::Float64: The size of a tile in phi (usually a bit more than R^2).

  • _n_tiles_eta::Int: The number of tiles across rapidity.

  • _n_tiles_phi::Int: The number of tiles across phi.

  • _n_tiles::Int: The total number of tiles.

  • _tiles_ieta_min::Int: The minimum rapidity tile index.

  • _tiles_ieta_max::Int: The maximum rapidity tile index.

Constructor

TilingDef(_tiles_eta_min, _tiles_eta_max, _tile_size_eta, _tile_size_phi,
-	_n_tiles_eta, _n_tiles_phi, _tiles_ieta_min, _tiles_ieta_max)

Constructs a TilingDef object with the given parameters.

source

`,8))]),t("details",Oe,[t("summary",null,[e[264]||(e[264]=t("a",{id:"JetReconstruction.neighbour_tiles",href:"#JetReconstruction.neighbour_tiles"},[t("span",{class:"jlbinding"},"JetReconstruction.neighbour_tiles")],-1)),e[265]||(e[265]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[266]||(e[266]=s(`
julia
struct neighbour_tiles

A struct representing the neighbouring tiles.

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
+                   recombine = +)

This function is the actual implementation of the e+e- jet clustering algorithm.

source

`,3))]),t("details",T,[t("summary",null,[e[27]||(e[27]=t("a",{id:"JetReconstruction._ensure_valid_rap_phi-Tuple{PseudoJet}",href:"#JetReconstruction._ensure_valid_rap_phi-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction._ensure_valid_rap_phi")],-1)),e[28]||(e[28]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[29]||(e[29]=s('
julia
_ensure_valid_rap_phi(p::PseudoJet)

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.

source

',5))]),t("details",f,[t("summary",null,[e[30]||(e[30]=t("a",{id:"JetReconstruction._plain_jet_reconstruct-Tuple{}",href:"#JetReconstruction._plain_jet_reconstruct-Tuple{}"},[t("span",{class:"jlbinding"},"JetReconstruction._plain_jet_reconstruct")],-1)),e[31]||(e[31]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[32]||(e[32]=s('
julia
_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. Floating point values are allowed for generalised k_t algorithm.

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.

source

',9))]),t("details",J,[t("summary",null,[e[33]||(e[33]=t("a",{id:"JetReconstruction._set_rap_phi!-Tuple{PseudoJet}",href:"#JetReconstruction._set_rap_phi!-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction._set_rap_phi!")],-1)),e[34]||(e[34]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[35]||(e[35]=s('

_set_rap_phi!(p::PseudoJet)

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π).

source

',8))]),t("details",E,[t("summary",null,[e[36]||(e[36]=t("a",{id:"JetReconstruction._tiled_jet_reconstruct-Tuple{Vector{PseudoJet}}",href:"#JetReconstruction._tiled_jet_reconstruct-Tuple{Vector{PseudoJet}}"},[t("span",{class:"jlbinding"},"JetReconstruction._tiled_jet_reconstruct")],-1)),e[37]||(e[37]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[38]||(e[38]=s('
julia
_tiled_jet_reconstruct(particles::Vector{PseudoJet}; p = -1, R = 1.0, recombine = +) where {T}

Main jet reconstruction algorithm entry point for reconstructing jets once preprocessing of data types are done.

Arguments

  • particles::Vector{PseudoJet}: A vector of PseudoJet particles used as input for jet reconstruction.

  • 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{PseudoJet}; p = 1, R = 1.0, recombine = +)

source

',9))]),t("details",v,[t("summary",null,[e[39]||(e[39]=t("a",{id:"JetReconstruction._tj_diJ-Tuple{Any}",href:"#JetReconstruction._tj_diJ-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction._tj_diJ")],-1)),e[40]||(e[40]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[41]||(e[41]=s('
julia
_tj_diJ(jet)

Compute the dij metric value for a given jet.

Arguments

  • jet: The input jet.

Returns

  • The dij value for the jet.

Example

source

',8))]),t("details",R,[t("summary",null,[e[42]||(e[42]=t("a",{id:"JetReconstruction._tj_dist-Tuple{Any, Any}",href:"#JetReconstruction._tj_dist-Tuple{Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction._tj_dist")],-1)),e[43]||(e[43]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[44]||(e[44]=s('
julia
_tj_dist(jetA, jetB)

Compute the geometric distance in the (y, ϕ)-plane between two jets in the TiledAlgoLL module.

Arguments

  • jetA: The first jet.

  • jetB: The second jet.

Returns

The squared distance between jetA and jetB.

Examples

source

',8))]),t("details",C,[t("summary",null,[e[45]||(e[45]=t("a",{id:"JetReconstruction.add_step_to_history!-Tuple{ClusterSequence, Vararg{Any, 4}}",href:"#JetReconstruction.add_step_to_history!-Tuple{ClusterSequence, Vararg{Any, 4}}"},[t("span",{class:"jlbinding"},"JetReconstruction.add_step_to_history!")],-1)),e[46]||(e[46]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[47]||(e[47]=s('
julia
add_step_to_history!(clusterseq::ClusterSequence, parent1, parent2, jetp_index, dij)

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.

source

',7))]),t("details",F,[t("summary",null,[e[48]||(e[48]=t("a",{id:"JetReconstruction.add_untagged_neighbours_to_tile_union-NTuple{4, Any}",href:"#JetReconstruction.add_untagged_neighbours_to_tile_union-NTuple{4, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.add_untagged_neighbours_to_tile_union")],-1)),e[49]||(e[49]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[50]||(e[50]=s('
julia
add_untagged_neighbours_to_tile_union(center_index, tile_union, n_near_tiles, tiling)

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.

Returns

The updated number of near tiles.

source

',7))]),t("details",A,[t("summary",null,[e[51]||(e[51]=t("a",{id:"JetReconstruction.angular_distance-Tuple{Any, Any, Any}",href:"#JetReconstruction.angular_distance-Tuple{Any, Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.angular_distance")],-1)),e[52]||(e[52]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[70]||(e[70]=s('
julia
angular_distance(eereco, i, j) -> Float64
',1)),t("p",null,[e[55]||(e[55]=i("Calculate the angular distance between two jets ")),e[56]||(e[56]=t("code",null,"i",-1)),e[57]||(e[57]=i(" and ")),e[58]||(e[58]=t("code",null,"j",-1)),e[59]||(e[59]=i(" using the formula ")),t("mjx-container",x,[(a(),l("svg",_,e[53]||(e[53]=[s('',1)]))),e[54]||(e[54]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mn",null,"1"),t("mo",null,"−"),t("mi",null,"c"),t("mi",null,"o"),t("mi",null,"s"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"θ"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"j")])]),t("mo",{stretchy:"false"},")")])],-1))]),e[60]||(e[60]=i("."))]),e[71]||(e[71]=s("

Arguments

  • eereco: The array of EERecoJet objects.

  • i: The first jet.

  • j: The second jet.

Returns

",3)),t("ul",null,[t("li",null,[e[63]||(e[63]=t("code",null,"Float64",-1)),e[64]||(e[64]=i(": The angular distance between ")),e[65]||(e[65]=t("code",null,"i",-1)),e[66]||(e[66]=i(" and ")),e[67]||(e[67]=t("code",null,"j",-1)),e[68]||(e[68]=i(", which is ")),t("mjx-container",Q,[(a(),l("svg",P,e[61]||(e[61]=[s('',1)]))),e[62]||(e[62]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mn",null,"1"),t("mo",null,"−"),t("mi",null,"c"),t("mi",null,"o"),t("mi",null,"s"),t("mi",null,"h"),t("mi",null,"e"),t("mi",null,"t"),t("mi",null,"a")])],-1))]),e[69]||(e[69]=i("."))])]),e[72]||(e[72]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/70c372b379cb343a4cade52fc0231b7a7721dd16/src/EEAlgorithm.jl#L6-L20",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",w,[t("summary",null,[e[73]||(e[73]=t("a",{id:"JetReconstruction.check_algorithm_power_consistency-Tuple{}",href:"#JetReconstruction.check_algorithm_power_consistency-Tuple{}"},[t("span",{class:"jlbinding"},"JetReconstruction.check_algorithm_power_consistency")],-1)),e[74]||(e[74]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[75]||(e[75]=t("p",null,"Allow a check for algorithm and power consistency",-1)),e[76]||(e[76]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/70c372b379cb343a4cade52fc0231b7a7721dd16/src/AlgorithmStrategyEnums.jl#L129",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",L,[t("summary",null,[e[77]||(e[77]=t("a",{id:"JetReconstruction.detach!-Tuple{JetReconstruction.TiledJet}",href:"#JetReconstruction.detach!-Tuple{JetReconstruction.TiledJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.detach!")],-1)),e[78]||(e[78]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[79]||(e[79]=s('
julia
detach!(jet::TiledJet)

Detach a TiledJet from its linked list by updating the previous and next pointers.

Arguments

  • jet::TiledJet: The TiledJet object to detach.

source

',5))]),t("details",B,[t("summary",null,[e[80]||(e[80]=t("a",{id:"JetReconstruction.determine_rapidity_extent-Union{Tuple{Vector{T}}, Tuple{T}} where T<:AbstractFloat",href:"#JetReconstruction.determine_rapidity_extent-Union{Tuple{Vector{T}}, Tuple{T}} where T<:AbstractFloat"},[t("span",{class:"jlbinding"},"JetReconstruction.determine_rapidity_extent")],-1)),e[81]||(e[81]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[82]||(e[82]=s('
julia
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).

Arguments

  • eta::Vector{T}: A vector of rapidity values.

Returns

  • minrap::T: The minimum rapidity value.

  • maxrap::T: The maximum rapidity value.

source

',8))]),t("details",M,[t("summary",null,[e[83]||(e[83]=t("a",{id:"JetReconstruction.dij-NTuple{4, Any}",href:"#JetReconstruction.dij-NTuple{4, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.dij")],-1)),e[84]||(e[84]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[85]||(e[85]=s('
julia
dij(i, kt2_array, nn, nndist)

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.ßß

Arguments

  • i: The index of the element.

  • kt2_array: An array of kt2 values.

  • nn: An array of nearest neighbors.

  • nndist: An array of nearest neighbor distances.

Returns

  • The computed dij value.

source

',7))]),t("details",D,[t("summary",null,[e[86]||(e[86]=t("a",{id:"JetReconstruction.dij_dist-NTuple{4, Any}",href:"#JetReconstruction.dij_dist-NTuple{4, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.dij_dist")],-1)),e[87]||(e[87]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[92]||(e[92]=s('
julia
dij_dist(eereco, i, j, dij_factor)
',1)),t("p",null,[e[90]||(e[90]=i("Calculate the dij distance between two ")),t("mjx-container",H,[(a(),l("svg",I,e[88]||(e[88]=[s('',1)]))),e[89]||(e[89]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("msup",null,[t("mi",null,"e"),t("mo",null,"−")])])],-1))]),e[91]||(e[91]=i("jets."))]),e[93]||(e[93]=s('

Arguments

  • eereco: The array of EERecoJet objects.

  • i: The first jet.

  • j: The second jet.

  • dij_factor: The scaling factor to multiply the dij distance by.

Returns

  • The dij distance between i and j.

source

',5))]),t("details",q,[t("summary",null,[e[94]||(e[94]=t("a",{id:"JetReconstruction.dist-NTuple{4, Any}",href:"#JetReconstruction.dist-NTuple{4, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.dist")],-1)),e[95]||(e[95]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[96]||(e[96]=s('
julia
dist(i, j, rapidity_array, phi_array)

Compute the distance between points in a 2D space defined by rapidity and phi coordinates.

Arguments

  • i::Int: Index of the first point to consider (indexes into rapidity_array and phi_array).

  • j::Int: Index of the second point to consider (indexes into rapidity_array and phi_array).

  • rapidity_array::Vector{Float64}: Array of rapidity coordinates.

  • phi_array::Vector{Float64}: Array of phi coordinates.

Returns

  • distance::Float64: The distance between the two points.

source

',7))]),t("details",S,[t("summary",null,[e[97]||(e[97]=t("a",{id:"JetReconstruction.do_iB_recombination_step!-Tuple{ClusterSequence, Any, Any}",href:"#JetReconstruction.do_iB_recombination_step!-Tuple{ClusterSequence, Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.do_iB_recombination_step!")],-1)),e[98]||(e[98]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[99]||(e[99]=s('
julia
do_iB_recombination_step!(clusterseq::ClusterSequence, jet_i, diB)

Bookkeeping for recombining a jet with the beam (i.e., finalising the jet) by adding a step to the history of the cluster sequence.

Arguments

  • clusterseq::ClusterSequence: The cluster sequence object.

  • jet_i: The index of the jet.

  • diB: The diB value.

source

',5))]),t("details",O,[t("summary",null,[e[100]||(e[100]=t("a",{id:"JetReconstruction.do_ij_recombination_step!",href:"#JetReconstruction.do_ij_recombination_step!"},[t("span",{class:"jlbinding"},"JetReconstruction.do_ij_recombination_step!")],-1)),e[101]||(e[101]=i()),o(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[102]||(e[102]=s('
julia
do_ij_recombination_step!(clusterseq::ClusterSequence, jet_i, jet_j, dij, recombine=+)

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.

source

',9))]),t("details",N,[t("summary",null,[e[103]||(e[103]=t("a",{id:"JetReconstruction.energy-Tuple{PseudoJet}",href:"#JetReconstruction.energy-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.energy")],-1)),e[104]||(e[104]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[105]||(e[105]=s('
julia
energy(p::PseudoJet)

Return the energy of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The energy of the PseudoJet.

source

',7))]),t("details",V,[t("summary",null,[e[106]||(e[106]=t("a",{id:"JetReconstruction.eta-Tuple{PseudoJet}",href:"#JetReconstruction.eta-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.eta")],-1)),e[107]||(e[107]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[108]||(e[108]=s('
julia
eta(p::PseudoJet)

Compute the pseudorapidity (η) of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the pseudorapidity.

Returns

  • The pseudorapidity (η) of the PseudoJet.

source

',7))]),t("details",z,[t("summary",null,[e[109]||(e[109]=t("a",{id:"JetReconstruction.fast_findmin-Tuple{Any, Any}",href:"#JetReconstruction.fast_findmin-Tuple{Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.fast_findmin")],-1)),e[110]||(e[110]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[111]||(e[111]=s('
julia
fast_findmin(dij, n)

Find the minimum value and its index in the first n elements of the dij array. The use of @turbo macro gives a significiant performance boost.

Arguments

  • dij: An array of values.

  • n: The number of elements to consider in the dij array.

Returns

  • dij_min: The minimum value in the first n elements of the dij array.

  • best: The index of the minimum value in the dij array.

source

',7))]),t("details",Z,[t("summary",null,[e[112]||(e[112]=t("a",{id:"JetReconstruction.find_tile_neighbours!-NTuple{5, Any}",href:"#JetReconstruction.find_tile_neighbours!-NTuple{5, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.find_tile_neighbours!")],-1)),e[113]||(e[113]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[114]||(e[114]=s('
julia
find_tile_neighbours!(tile_union, jetA, jetB, oldB, tiling)

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.

source

',7))]),t("details",U,[t("summary",null,[e[115]||(e[115]=t("a",{id:"JetReconstruction.geometric_distance-NTuple{4, AbstractFloat}",href:"#JetReconstruction.geometric_distance-NTuple{4, AbstractFloat}"},[t("span",{class:"jlbinding"},"JetReconstruction.geometric_distance")],-1)),e[116]||(e[116]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[117]||(e[117]=s('
julia
geometric_distance(eta1::AbstractFloat, phi1::AbstractFloat, eta2::AbstractFloat, phi2::AbstractFloat)

Compute the geometric distance between two points in the rap-phi plane.

Arguments

  • eta1::AbstractFloat: The eta coordinate of the first point.

  • phi1::AbstractFloat: The phi coordinate of the first point.

  • eta2::AbstractFloat: The eta coordinate of the second point.

  • phi2::AbstractFloat: The phi coordinate of the second point.

Returns

  • distance::Float64: The geometric distance between the two points.

source

',7))]),t("details",X,[t("summary",null,[e[118]||(e[118]=t("a",{id:"JetReconstruction.get_algorithm_power_consistency-Tuple{}",href:"#JetReconstruction.get_algorithm_power_consistency-Tuple{}"},[t("span",{class:"jlbinding"},"JetReconstruction.get_algorithm_power_consistency")],-1)),e[119]||(e[119]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[120]||(e[120]=s('
julia
get_algorithm_power_consistency(; p::Union{Real, Nothing}, algorithm::Union{JetAlgorithm, Nothing})

Get the algorithm and power consistency correct

This function checks the consistency between the algorithm and power parameters. If the algorithm is specified, it checks if the power parameter is consistent with the algorithm's known power. If the power parameter is not specified, it sets the power parameter based on the algorithm. If neither the algorithm nor the power parameter is specified, it throws an ArgumentError.

Arguments

  • p::Union{Real, Nothing}: The power value.

  • algorithm::Union{JetAlgorithm, Nothing}: The algorithm.

Returns

A named tuple of the consistent power and algorithm values.

Throws

  • ArgumentError: If the algorithm and power are inconsistent or if neither the algorithm nor the power is specified.

source

',10))]),t("details",G,[t("summary",null,[e[121]||(e[121]=t("a",{id:"JetReconstruction.get_all_ancestors-Tuple{Any, ClusterSequence}",href:"#JetReconstruction.get_all_ancestors-Tuple{Any, ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.get_all_ancestors")],-1)),e[122]||(e[122]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[123]||(e[123]=s('
julia
get_all_ancestors(idx, cs::ClusterSequence)

Recursively finds all ancestors of a given index in a ClusterSequence object.

Arguments

  • idx: The index of the jet for which to find ancestors.

  • cs: The ClusterSequence object containing the jet history.

Returns

An array of indices representing the ancestors of the given jet.

source

',7))]),t("details",W,[t("summary",null,[e[124]||(e[124]=t("a",{id:"JetReconstruction.get_dij_dist-NTuple{4, Any}",href:"#JetReconstruction.get_dij_dist-NTuple{4, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.get_dij_dist")],-1)),e[125]||(e[125]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[126]||(e[126]=s('
julia
get_dij_dist(nn_dist, kt2_1, kt2_2, R2)

Compute the dij metric distance between two jets.

Arguments

  • nn_dist: The nearest-neighbor distance between two jets.

  • kt2_1: The squared momentum metric value of the first jet.

  • kt2_2: The squared momentum metric value of the second jet.

  • R2: The jet radius parameter squared.

Returns

The distance between the two jets.

If kt2_2 is equal to 0.0, then the first jet doesn't actually have a valid neighbour, so it's treated as a single jet adjecent to the beam.

source

',8))]),t("details",$,[t("summary",null,[e[127]||(e[127]=t("a",{id:"JetReconstruction.get_tile-Tuple{JetReconstruction.TilingDef, AbstractFloat, AbstractFloat}",href:"#JetReconstruction.get_tile-Tuple{JetReconstruction.TilingDef, AbstractFloat, AbstractFloat}"},[t("span",{class:"jlbinding"},"JetReconstruction.get_tile")],-1)),e[128]||(e[128]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[129]||(e[129]=s('
julia
get_tile(tiling_setup::TilingDef, eta::AbstractFloat, phi::AbstractFloat)

Given a tiling_setup object, eta and phi values, this function calculates the tile indices for the given eta and phi values.

Arguments

  • tiling_setup: A TilingDef object that contains the tiling setup parameters.

  • eta: The eta value for which to calculate the tile index.

  • phi: The phi value for which to calculate the tile index.

Returns

  • ieta: The tile index along the eta direction.

  • iphi: The tile index along the phi direction.

source

',7))]),t("details",K,[t("summary",null,[e[130]||(e[130]=t("a",{id:"JetReconstruction.get_tile_cartesian_indices-Tuple{JetReconstruction.TilingDef, Int64}",href:"#JetReconstruction.get_tile_cartesian_indices-Tuple{JetReconstruction.TilingDef, Int64}"},[t("span",{class:"jlbinding"},"JetReconstruction.get_tile_cartesian_indices")],-1)),e[131]||(e[131]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[132]||(e[132]=s('
julia
get_tile_linear_index(tiling_setup::TilingDef, i_η::Int, i_ϕ::Int)

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.

Returns

  • The linear index of the tile.

source

',7))]),t("details",Y,[t("summary",null,[e[133]||(e[133]=t("a",{id:"JetReconstruction.initial_history-Tuple{Any}",href:"#JetReconstruction.initial_history-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.initial_history")],-1)),e[134]||(e[134]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[135]||(e[135]=s('
julia
initial_history(particles)

Create an initial history for the given particles.

Arguments

  • particles: The initial vector of stable particles.

Returns

  • history: An array of HistoryElement objects.

  • Qtot: The total energy in the event.

source

',7))]),t("details",ee,[t("summary",null,[e[136]||(e[136]=t("a",{id:"JetReconstruction.insert!-Tuple{JetReconstruction.TiledJet, JetReconstruction.TiledJet}",href:"#JetReconstruction.insert!-Tuple{JetReconstruction.TiledJet, JetReconstruction.TiledJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.insert!")],-1)),e[137]||(e[137]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[138]||(e[138]=s('
julia
insert!(nextjet::TiledJet, jettomove::TiledJet)

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.

Example

source

',6))]),t("details",te,[t("summary",null,[e[139]||(e[139]=t("a",{id:"JetReconstruction.is_ee-Tuple{JetReconstruction.JetAlgorithm.Algorithm}",href:"#JetReconstruction.is_ee-Tuple{JetReconstruction.JetAlgorithm.Algorithm}"},[t("span",{class:"jlbinding"},"JetReconstruction.is_ee")],-1)),e[140]||(e[140]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[141]||(e[141]=s('
julia
is_ee(algorithm::JetAlgorithm.Algorithm)

Check if the algorithm is a e+e- reconstruction algorithm.

Returns

true if the algorithm is a e+e- reconstruction algorithm, false otherwise.

source

',5))]),t("details",ie,[t("summary",null,[e[142]||(e[142]=t("a",{id:"JetReconstruction.is_pp-Tuple{JetReconstruction.JetAlgorithm.Algorithm}",href:"#JetReconstruction.is_pp-Tuple{JetReconstruction.JetAlgorithm.Algorithm}"},[t("span",{class:"jlbinding"},"JetReconstruction.is_pp")],-1)),e[143]||(e[143]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[144]||(e[144]=s('
julia
is_pp(algorithm::JetAlgorithm.Algorithm)

Check if the algorithm is a pp reconstruction algorithm.

Returns

true if the algorithm is a pp reconstruction algorithm, false otherwise.

source

',5))]),t("details",se,[t("summary",null,[e[145]||(e[145]=t("a",{id:"JetReconstruction.isvalid-Tuple{JetReconstruction.TiledJet}",href:"#JetReconstruction.isvalid-Tuple{JetReconstruction.TiledJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.isvalid")],-1)),e[146]||(e[146]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[147]||(e[147]=s('
julia
isvalid(t::TiledJet)

Check if a TiledJet is valid, by seeing if it is not the noTiledJet object.

Arguments

  • t::TiledJet: The TiledJet object to check.

Returns

  • Bool: true if the TiledJet object is valid, false otherwise.

source

',7))]),t("details",ne,[t("summary",null,[e[148]||(e[148]=t("a",{id:"JetReconstruction.jet_ranks-Tuple{ClusterSequence}",href:"#JetReconstruction.jet_ranks-Tuple{ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.jet_ranks")],-1)),e[149]||(e[149]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[150]||(e[150]=s('
julia
jet_ranks(clusterseq::ClusterSequence; compare_fn = JetReconstruction.pt)

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.

source

',9))]),t("details",oe,[t("summary",null,[e[151]||(e[151]=t("a",{id:"JetReconstruction.m-Tuple{PseudoJet}",href:"#JetReconstruction.m-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.m")],-1)),e[152]||(e[152]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[153]||(e[153]=s('
julia
m(p::PseudoJet)

Compute the invariant mass of a PseudoJet object. By convention if m^2 < 0, then -sqrt{(-m^2)} is returned.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the invariant mass.

Returns

The invariant mass of the PseudoJet object.

source

',7))]),t("details",le,[t("summary",null,[e[154]||(e[154]=t("a",{id:"JetReconstruction.m2-Tuple{PseudoJet}",href:"#JetReconstruction.m2-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.m2")],-1)),e[155]||(e[155]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[156]||(e[156]=s('
julia
m2(p::PseudoJet)

Calculate the invariant mass squared (m^2) of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object for which to calculate the invariant mass squared.

Returns

  • The invariant mass squared (m^2) of the PseudoJet.

source

',7))]),t("details",ae,[t("summary",null,[e[157]||(e[157]=t("a",{id:"JetReconstruction.mag-Tuple{PseudoJet}",href:"#JetReconstruction.mag-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.mag")],-1)),e[158]||(e[158]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[159]||(e[159]=s('
julia
mag(p::PseudoJet)

Return the magnitude of the momentum of a PseudoJet, |p|.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the magnitude.

Returns

The magnitude of the PseudoJet object.

source

',7))]),t("details",re,[t("summary",null,[e[160]||(e[160]=t("a",{id:"JetReconstruction.mass-Tuple{PseudoJet}",href:"#JetReconstruction.mass-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.mass")],-1)),e[161]||(e[161]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[162]||(e[162]=s('
julia
mass(p::PseudoJet)

Compute the invariant mass (alias for m(p)).

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the mass.

Returns

  • The mass of the PseudoJet.

source

',7))]),t("details",de,[t("summary",null,[e[163]||(e[163]=t("a",{id:"JetReconstruction.mass2",href:"#JetReconstruction.mass2"},[t("span",{class:"jlbinding"},"JetReconstruction.mass2")],-1)),e[164]||(e[164]=i()),o(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[165]||(e[165]=t("p",null,[i("Alias for "),t("code",null,"m2"),i(" function")],-1)),e[166]||(e[166]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/70c372b379cb343a4cade52fc0231b7a7721dd16/src/Pseudojet.jl#L370",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",pe,[t("summary",null,[e[167]||(e[167]=t("a",{id:"JetReconstruction.merge_steps-Tuple{ClusterSequence}",href:"#JetReconstruction.merge_steps-Tuple{ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.merge_steps")],-1)),e[168]||(e[168]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[169]||(e[169]=s('
julia
merge_steps(clusterseq::ClusterSequence)

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.

Returns

  • merge_steps::Int: The number of merge steps.

source

',7))]),t("details",ce,[t("summary",null,[e[170]||(e[170]=t("a",{id:"JetReconstruction.phi-Tuple{PseudoJet}",href:"#JetReconstruction.phi-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.phi")],-1)),e[171]||(e[171]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[172]||(e[172]=s('
julia
phi(p::PseudoJet)

Compute the ϕ angle of a PseudoJet object p.

Note this function is a wrapper for phi_02pi(p).

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the azimuthal angle.

Returns

  • The azimuthal angle of p in the range [0, 2π).

source

',8))]),t("details",he,[t("summary",null,[e[173]||(e[173]=t("a",{id:"JetReconstruction.phi_02pi-Tuple{PseudoJet}",href:"#JetReconstruction.phi_02pi-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.phi_02pi")],-1)),e[174]||(e[174]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[175]||(e[175]=s('
julia
phi_02pi(p::PseudoJet)

Compute the azimuthal angle of a PseudoJet object p in the range [0, 2π).

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the azimuthal angle.

Returns

  • The azimuthal angle of p in the range [0, 2π).

source

',7))]),t("details",ue,[t("summary",null,[e[176]||(e[176]=t("a",{id:"JetReconstruction.pt-Tuple{PseudoJet}",href:"#JetReconstruction.pt-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.pt")],-1)),e[177]||(e[177]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[178]||(e[178]=s('
julia
pt(p::PseudoJet)

Compute the scalar transverse momentum (pt) of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the transverse momentum.

Returns

  • The transverse momentum (pt) of the PseudoJet.

source

',7))]),t("details",ge,[t("summary",null,[e[179]||(e[179]=t("a",{id:"JetReconstruction.pt2-Tuple{PseudoJet}",href:"#JetReconstruction.pt2-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.pt2")],-1)),e[180]||(e[180]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[181]||(e[181]=s('
julia
pt2(p::PseudoJet)

Get the squared transverse momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The squared transverse momentum of the PseudoJet.

source

',7))]),t("details",ke,[t("summary",null,[e[182]||(e[182]=t("a",{id:"JetReconstruction.px-Tuple{PseudoJet}",href:"#JetReconstruction.px-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.px")],-1)),e[183]||(e[183]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[184]||(e[184]=s('
julia
px(p::PseudoJet)

Return the x-component of the momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The x-component of the momentum of the PseudoJet.

source

',7))]),t("details",be,[t("summary",null,[e[185]||(e[185]=t("a",{id:"JetReconstruction.py-Tuple{PseudoJet}",href:"#JetReconstruction.py-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.py")],-1)),e[186]||(e[186]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[187]||(e[187]=s('
julia
py(p::PseudoJet)

Return the y-component of the momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The y-component of the momentum of the PseudoJet.

source

',7))]),t("details",me,[t("summary",null,[e[188]||(e[188]=t("a",{id:"JetReconstruction.pz-Tuple{PseudoJet}",href:"#JetReconstruction.pz-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.pz")],-1)),e[189]||(e[189]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[190]||(e[190]=s('
julia
pz(p::PseudoJet)

Return the z-component of the momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The z-component of the momentum of the PseudoJet.

source

',7))]),t("details",ye,[t("summary",null,[e[191]||(e[191]=t("a",{id:"JetReconstruction.rapidity-Tuple{PseudoJet}",href:"#JetReconstruction.rapidity-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.rapidity")],-1)),e[192]||(e[192]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[193]||(e[193]=s('
julia
rapidity(p::PseudoJet)

Compute the rapidity of a PseudoJet object.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the rapidity.

Returns

The rapidity of the PseudoJet object.

source

',7))]),t("details",je,[t("summary",null,[e[194]||(e[194]=t("a",{id:"JetReconstruction.reco_state-Tuple{ClusterSequence, Any}",href:"#JetReconstruction.reco_state-Tuple{ClusterSequence, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.reco_state")],-1)),e[195]||(e[195]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[196]||(e[196]=s('
julia
reco_state(cs::ClusterSequence, pt_ranks; iteration=0)

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.

source

',11))]),t("details",Te,[t("summary",null,[e[197]||(e[197]=t("a",{id:"JetReconstruction.rightneighbours-Tuple{Int64, JetReconstruction.Tiling}",href:"#JetReconstruction.rightneighbours-Tuple{Int64, JetReconstruction.Tiling}"},[t("span",{class:"jlbinding"},"JetReconstruction.rightneighbours")],-1)),e[198]||(e[198]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[199]||(e[199]=s('
julia
rightneighbours(center::Int, tiling::Tiling)

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.

source

',7))]),t("details",fe,[t("summary",null,[e[200]||(e[200]=t("a",{id:"JetReconstruction.set_momentum!-Tuple{PseudoJet, Vararg{Any, 4}}",href:"#JetReconstruction.set_momentum!-Tuple{PseudoJet, Vararg{Any, 4}}"},[t("span",{class:"jlbinding"},"JetReconstruction.set_momentum!")],-1)),e[201]||(e[201]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[202]||(e[202]=s('
julia
set_momentum!(j::PseudoJet, px, py, pz, E)

Set the momentum components and energy of a PseudoJet object.

Arguments

  • j::PseudoJet: The PseudoJet object to set the momentum for.

  • px: The x-component of the momentum.

  • py: The y-component of the momentum.

  • pz: The z-component of the momentum.

  • E: The energy of the particle.

source

',5))]),t("details",Je,[t("summary",null,[e[203]||(e[203]=t("a",{id:"JetReconstruction.set_nearest_neighbours!-Tuple{ClusterSequence, JetReconstruction.Tiling, Vector{JetReconstruction.TiledJet}}",href:"#JetReconstruction.set_nearest_neighbours!-Tuple{ClusterSequence, JetReconstruction.Tiling, Vector{JetReconstruction.TiledJet}}"},[t("span",{class:"jlbinding"},"JetReconstruction.set_nearest_neighbours!")],-1)),e[204]||(e[204]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[205]||(e[205]=s('
julia
set_nearest_neighbours!(clusterseq::ClusterSequence, tiling::Tiling, tiledjets::Vector{TiledJet})

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.

source

',9))]),t("details",Ee,[t("summary",null,[e[206]||(e[206]=t("a",{id:"JetReconstruction.setup_tiling-Union{Tuple{T}, Tuple{Vector{T}, AbstractFloat}} where T<:AbstractFloat",href:"#JetReconstruction.setup_tiling-Union{Tuple{T}, Tuple{Vector{T}, AbstractFloat}} where T<:AbstractFloat"},[t("span",{class:"jlbinding"},"JetReconstruction.setup_tiling")],-1)),e[207]||(e[207]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[208]||(e[208]=s('
julia
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.

source

',9))]),t("details",ve,[t("summary",null,[e[209]||(e[209]=t("a",{id:"JetReconstruction.surrounding-Tuple{Int64, JetReconstruction.Tiling}",href:"#JetReconstruction.surrounding-Tuple{Int64, JetReconstruction.Tiling}"},[t("span",{class:"jlbinding"},"JetReconstruction.surrounding")],-1)),e[210]||(e[210]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[211]||(e[211]=s('
julia
surrounding(center::Int, tiling::Tiling)

Compute the surrounding indices of a given center index in a tiling.

Arguments

  • center::Int: The center index.

  • tiling::Tiling: The tiling object.

Returns

  • Surrounding: An object containing the surrounding indices.

source

',7))]),t("details",Re,[t("summary",null,[e[212]||(e[212]=t("a",{id:"JetReconstruction.tile_index-Tuple{Any, Float64, Float64}",href:"#JetReconstruction.tile_index-Tuple{Any, Float64, Float64}"},[t("span",{class:"jlbinding"},"JetReconstruction.tile_index")],-1)),e[213]||(e[213]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[214]||(e[214]=s('
julia
tile_index(tiling_setup, eta::Float64, phi::Float64)

Compute the tile index for a given (eta, phi) coordinate.

Arguments

  • tiling_setup: The tiling setup object containing the tile size and number of tiles.

  • eta::Float64: The eta coordinate.

  • phi::Float64: The phi coordinate.

Returns

The tile index corresponding to the (eta, phi) coordinate.

source

',7))]),t("details",Ce,[t("summary",null,[e[215]||(e[215]=t("a",{id:"JetReconstruction.tiledjet_remove_from_tiles!-Tuple{Any, Any}",href:"#JetReconstruction.tiledjet_remove_from_tiles!-Tuple{Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.tiledjet_remove_from_tiles!")],-1)),e[216]||(e[216]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[217]||(e[217]=s('
julia
tiledjet_remove_from_tiles!(tiling, jet)

Remove a jet from the given tiling structure.

Arguments

  • tiling: The tiling structure from which the jet will be removed.

  • jet: The jet to be removed from the tiling structure.

Description

This function removes a jet from the tiling structure. It adjusts the linked list to be consistent with the removal of the jet.

source

',7))]),t("details",Fe,[t("summary",null,[e[218]||(e[218]=t("a",{id:"JetReconstruction.tiledjet_set_jetinfo!-Tuple{JetReconstruction.TiledJet, ClusterSequence, JetReconstruction.Tiling, Any, Any, Any}",href:"#JetReconstruction.tiledjet_set_jetinfo!-Tuple{JetReconstruction.TiledJet, ClusterSequence, JetReconstruction.Tiling, Any, Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.tiledjet_set_jetinfo!")],-1)),e[219]||(e[219]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[220]||(e[220]=s('
julia
tiledjet_set_jetinfo!(jet::TiledJet, clusterseq::ClusterSequence, tiling::Tiling, jets_index, R2, p)

Initialise a tiled jet from a PseudoJet (using an index into our ClusterSequence)

Arguments:

  • jet::TiledJet: The TiledJet object to set the information for.

  • clusterseq::ClusterSequence: The ClusterSequence object containing the jets.

  • tiling::Tiling: The Tiling object containing the tile information.

  • jets_index: The index of the jet in the ClusterSequence.

  • R2: The jet radius parameter squared.

  • p: The power to raise the pt2 value to.

This function sets the eta, phi, kt2, jets_index, NN_dist, NN, tile_index, previous, and next fields of the TiledJet object.

Returns:

  • nothing

source

',8))]),t("details",Ae,[t("summary",null,[e[221]||(e[221]=t("a",{id:"JetReconstruction.upd_nn_crosscheck!-Tuple{Int64, Int64, Int64, Vararg{Any, 5}}",href:"#JetReconstruction.upd_nn_crosscheck!-Tuple{Int64, Int64, Int64, Vararg{Any, 5}}"},[t("span",{class:"jlbinding"},"JetReconstruction.upd_nn_crosscheck!")],-1)),e[222]||(e[222]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[223]||(e[223]=s('
julia
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.

source

',5))]),t("details",xe,[t("summary",null,[e[224]||(e[224]=t("a",{id:"JetReconstruction.upd_nn_nocross!-Tuple{Int64, Int64, Int64, Vararg{Any, 5}}",href:"#JetReconstruction.upd_nn_nocross!-Tuple{Int64, Int64, Int64, Vararg{Any, 5}}"},[t("span",{class:"jlbinding"},"JetReconstruction.upd_nn_nocross!")],-1)),e[225]||(e[225]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[226]||(e[226]=s('
julia
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.

source

',5))]),t("details",_e,[t("summary",null,[e[227]||(e[227]=t("a",{id:"JetReconstruction.upd_nn_step!-NTuple{12, Any}",href:"#JetReconstruction.upd_nn_step!-NTuple{12, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.upd_nn_step!")],-1)),e[228]||(e[228]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[229]||(e[229]=s('
julia
upd_nn_step!(i, j, k, N, Nn, kt2_array, rapidity_array, phi_array, R2, nndist, nn, nndij)

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.

source

',6))]),t("details",Qe,[t("summary",null,[e[230]||(e[230]=t("a",{id:"JetReconstruction.η",href:"#JetReconstruction.η"},[t("span",{class:"jlbinding"},"JetReconstruction.η")],-1)),e[231]||(e[231]=i()),o(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[232]||(e[232]=s('
julia
const η = eta

Alias for the pseudorapidity function, eta.

source

',3))]),t("details",Pe,[t("summary",null,[e[233]||(e[233]=t("a",{id:"JetReconstruction.FourMomentum",href:"#JetReconstruction.FourMomentum"},[t("span",{class:"jlbinding"},"JetReconstruction.FourMomentum")],-1)),e[234]||(e[234]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[235]||(e[235]=t("p",null,"Interface for composite types that includes fields px, py, py, and E that represents the components of a four-momentum vector.",-1)),e[236]||(e[236]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/70c372b379cb343a4cade52fc0231b7a7721dd16/src/Pseudojet.jl#L6-L8",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",we,[t("summary",null,[e[237]||(e[237]=t("a",{id:"JetReconstruction.HistoryElement",href:"#JetReconstruction.HistoryElement"},[t("span",{class:"jlbinding"},"JetReconstruction.HistoryElement")],-1)),e[238]||(e[238]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[239]||(e[239]=s('
julia
struct HistoryElement

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.

source

',5))]),t("details",Le,[t("summary",null,[e[240]||(e[240]=t("a",{id:"JetReconstruction.HistoryElement-Tuple{Any}",href:"#JetReconstruction.HistoryElement-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.HistoryElement")],-1)),e[241]||(e[241]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[242]||(e[242]=s('
julia
HistoryElement(jetp_index)

Constructs a HistoryElement object with the given jetp_index, used for initialising the history with original particles.

Arguments

  • jetp_index: The index of the jetp.

Returns

A HistoryElement object.

source

',7))]),t("details",Be,[t("summary",null,[e[243]||(e[243]=t("a",{id:"JetReconstruction.JetWithAncestors",href:"#JetReconstruction.JetWithAncestors"},[t("span",{class:"jlbinding"},"JetReconstruction.JetWithAncestors")],-1)),e[244]||(e[244]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[245]||(e[245]=s('
julia
struct JetWithAncestors

A struct representing a jet with its origin ancestors.

Fields

  • self::PseudoJet: The PseudoJet object for this jet.

  • jetp_index::Int: The index of the jet in the corresponding cluster sequence.

  • ancestors::Set{Int}: A set of indices representing the jetp_indexes of ancestors of the jet (in the cluster sequence).

  • jet_rank::Int: The rank of the jet based on a comparison of all of the jet's ancestors

Note

This structure needs its associated cluster sequence origin to be useful.

source

',7))]),t("details",Me,[t("summary",null,[e[246]||(e[246]=t("a",{id:"JetReconstruction.Surrounding",href:"#JetReconstruction.Surrounding"},[t("span",{class:"jlbinding"},"JetReconstruction.Surrounding")],-1)),e[247]||(e[247]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[248]||(e[248]=s('
julia
struct Surrounding{N}

Structure used for iterating over neighbour tiles.

Fields

  • indices::NTuple{N, Int}: A tuple of N integers representing the indices.

source

',5))]),t("details",De,[t("summary",null,[e[249]||(e[249]=t("a",{id:"JetReconstruction.TiledJet",href:"#JetReconstruction.TiledJet"},[t("span",{class:"jlbinding"},"JetReconstruction.TiledJet")],-1)),e[250]||(e[250]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[251]||(e[251]=s('
julia
struct TiledJet

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.

  • NN::TiledJet: The nearest neighbor.

  • previous::TiledJet: The previous jet.

  • next::TiledJet: The next jet.

source

',5))]),t("details",He,[t("summary",null,[e[252]||(e[252]=t("a",{id:"JetReconstruction.TiledJet-Tuple{Any}",href:"#JetReconstruction.TiledJet-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.TiledJet")],-1)),e[253]||(e[253]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[254]||(e[254]=s('
julia
TiledJet(id)

Constructs a TiledJet object with the given id and initializes its properties to zero.

Arguments

  • id: The ID of the TiledJet object.

Returns

A TiledJet object with the specified id and values set to zero or noTiledJet.

source

',7))]),t("details",Ie,[t("summary",null,[e[255]||(e[255]=t("a",{id:"JetReconstruction.Tiling",href:"#JetReconstruction.Tiling"},[t("span",{class:"jlbinding"},"JetReconstruction.Tiling")],-1)),e[256]||(e[256]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[257]||(e[257]=s('
julia
struct Tiling

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).

source

',5))]),t("details",qe,[t("summary",null,[e[258]||(e[258]=t("a",{id:"JetReconstruction.Tiling-Tuple{JetReconstruction.TilingDef}",href:"#JetReconstruction.Tiling-Tuple{JetReconstruction.TilingDef}"},[t("span",{class:"jlbinding"},"JetReconstruction.Tiling")],-1)),e[259]||(e[259]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[260]||(e[260]=s('
julia
Tiling(setup::TilingDef)

Constructs a intial Tiling object based on the provided setup parameters.

Arguments

  • setup::TilingDef: The setup parameters for the tiling.

Returns

A Tiling object.

source

',7))]),t("details",Se,[t("summary",null,[e[261]||(e[261]=t("a",{id:"JetReconstruction.TilingDef",href:"#JetReconstruction.TilingDef"},[t("span",{class:"jlbinding"},"JetReconstruction.TilingDef")],-1)),e[262]||(e[262]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[263]||(e[263]=s(`
julia
struct TilingDef

A struct representing the definition of a spcific tiling scheme.

Fields

  • _tiles_eta_min::Float64: The minimum rapidity of the tiles.

  • _tiles_eta_max::Float64: The maximum rapidity of the tiles.

  • _tile_size_eta::Float64: The size of a tile in rapidity (usually R^2).

  • _tile_size_phi::Float64: The size of a tile in phi (usually a bit more than R^2).

  • _n_tiles_eta::Int: The number of tiles across rapidity.

  • _n_tiles_phi::Int: The number of tiles across phi.

  • _n_tiles::Int: The total number of tiles.

  • _tiles_ieta_min::Int: The minimum rapidity tile index.

  • _tiles_ieta_max::Int: The maximum rapidity tile index.

Constructor

TilingDef(_tiles_eta_min, _tiles_eta_max, _tile_size_eta, _tile_size_phi,
+	_n_tiles_eta, _n_tiles_phi, _tiles_ieta_min, _tiles_ieta_max)

Constructs a TilingDef object with the given parameters.

source

`,8))]),t("details",Oe,[t("summary",null,[e[264]||(e[264]=t("a",{id:"JetReconstruction.neighbour_tiles",href:"#JetReconstruction.neighbour_tiles"},[t("span",{class:"jlbinding"},"JetReconstruction.neighbour_tiles")],-1)),e[265]||(e[265]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[266]||(e[266]=s(`
julia
struct neighbour_tiles

A struct representing the neighbouring tiles.

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

Fields

  • n_η::Int: Number of η tiles

  • n_ϕ::Int: Number of ϕ tiles

  • start_η::Int: Centre η tile coordinate

  • start_ϕ::Int: Centre ϕ tile coordinate

source

`,8))]),t("details",Ne,[t("summary",null,[e[267]||(e[267]=t("a",{id:"JetReconstruction.rightmost_tiles",href:"#JetReconstruction.rightmost_tiles"},[t("span",{class:"jlbinding"},"JetReconstruction.rightmost_tiles")],-1)),e[268]||(e[268]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[269]||(e[269]=s(`
julia
struct rightmost_tiles

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
+XXX

Note, rapidity coordinate must be in range, ϕ coordinate wraps

Fields

  • n_η::Int: Number of η tiles

  • n_ϕ::Int: Number of ϕ tiles

  • start_η::Int: Centre η tile coordinate

  • start_ϕ::Int: Centre ϕ tile coordinate

source

`,8))]),t("details",Ne,[t("summary",null,[e[267]||(e[267]=t("a",{id:"JetReconstruction.rightmost_tiles",href:"#JetReconstruction.rightmost_tiles"},[t("span",{class:"jlbinding"},"JetReconstruction.rightmost_tiles")],-1)),e[268]||(e[268]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[269]||(e[269]=s(`
julia
struct rightmost_tiles

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

Fields

  • n_η::Int: Number of η tiles

  • n_ϕ::Int: Number of ϕ tiles

  • start_η::Int: Centre η tile coordinate

  • start_ϕ::Int: Centre ϕ tile coordinate

source

`,7))])])}const Ke=r(p,[["render",Ve]]);export{$e as __pageData,Ke as default}; +OOO

Note, rapidity coordinate must be in range, ϕ coordinate wraps

Fields

  • n_η::Int: Number of η tiles

  • n_ϕ::Int: Number of ϕ tiles

  • start_η::Int: Centre η tile coordinate

  • start_ϕ::Int: Centre ϕ tile coordinate

source

`,7))])])}const Ke=r(p,[["render",Ve]]);export{$e as __pageData,Ke as default}; diff --git a/dev/assets/lib_internal.md.Bsq32pz1.js b/dev/assets/lib_internal.md.oZWVn3YV.lean.js similarity index 94% rename from dev/assets/lib_internal.md.Bsq32pz1.js rename to dev/assets/lib_internal.md.oZWVn3YV.lean.js index c184028..7209f23 100644 --- a/dev/assets/lib_internal.md.Bsq32pz1.js +++ b/dev/assets/lib_internal.md.oZWVn3YV.lean.js @@ -1,8 +1,8 @@ -import{_ as r,c as a,a5 as s,j as t,a as i,G as o,B as d,o as l}from"./chunks/framework.BonP4S8S.js";const $e=JSON.parse('{"title":"Jet Reconstruction Internal Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"lib/internal.md","filePath":"lib/internal.md","lastUpdated":null}'),p={name:"lib/internal.md"},c={class:"jldocstring custom-block"},h={class:"jldocstring custom-block"},u={class:"jldocstring custom-block"},g={class:"jldocstring custom-block"},k={class:"jldocstring custom-block"},b={class:"jldocstring custom-block"},m={class:"jldocstring custom-block"},y={class:"jldocstring custom-block"},j={class:"jldocstring custom-block"},T={class:"jldocstring custom-block"},f={class:"jldocstring custom-block"},J={class:"jldocstring custom-block"},E={class:"jldocstring custom-block"},v={class:"jldocstring custom-block"},R={class:"jldocstring custom-block"},C={class:"jldocstring custom-block"},F={class:"jldocstring custom-block"},A={class:"jldocstring custom-block"},x={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},_={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.666ex"},xmlns:"http://www.w3.org/2000/svg",width:"11.255ex",height:"2.363ex",role:"img",focusable:"false",viewBox:"0 -750 4974.7 1044.2","aria-hidden":"true"},Q={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},P={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.186ex"},xmlns:"http://www.w3.org/2000/svg",width:"11.406ex",height:"1.756ex",role:"img",focusable:"false",viewBox:"0 -694 5041.4 776","aria-hidden":"true"},w={class:"jldocstring custom-block"},L={class:"jldocstring custom-block"},B={class:"jldocstring custom-block"},M={class:"jldocstring custom-block"},D={class:"jldocstring custom-block"},H={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},I={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.973ex",height:"1.779ex",role:"img",focusable:"false",viewBox:"0 -775.2 2198.3 786.2","aria-hidden":"true"},q={class:"jldocstring custom-block"},S={class:"jldocstring custom-block"},O={class:"jldocstring custom-block"},N={class:"jldocstring custom-block"},V={class:"jldocstring custom-block"},z={class:"jldocstring custom-block"},Z={class:"jldocstring custom-block"},U={class:"jldocstring custom-block"},X={class:"jldocstring custom-block"},G={class:"jldocstring custom-block"},W={class:"jldocstring custom-block"},$={class:"jldocstring custom-block"},K={class:"jldocstring custom-block"},Y={class:"jldocstring custom-block"},ee={class:"jldocstring custom-block"},te={class:"jldocstring custom-block"},ie={class:"jldocstring custom-block"},se={class:"jldocstring custom-block"},ne={class:"jldocstring custom-block"},oe={class:"jldocstring custom-block"},ae={class:"jldocstring custom-block"},le={class:"jldocstring custom-block"},re={class:"jldocstring custom-block"},de={class:"jldocstring custom-block"},pe={class:"jldocstring custom-block"},ce={class:"jldocstring custom-block"},he={class:"jldocstring custom-block"},ue={class:"jldocstring custom-block"},ge={class:"jldocstring custom-block"},ke={class:"jldocstring custom-block"},be={class:"jldocstring custom-block"},me={class:"jldocstring custom-block"},ye={class:"jldocstring custom-block"},je={class:"jldocstring custom-block"},Te={class:"jldocstring custom-block"},fe={class:"jldocstring custom-block"},Je={class:"jldocstring custom-block"},Ee={class:"jldocstring custom-block"},ve={class:"jldocstring custom-block"},Re={class:"jldocstring custom-block"},Ce={class:"jldocstring custom-block"},Fe={class:"jldocstring custom-block"},Ae={class:"jldocstring custom-block"},xe={class:"jldocstring custom-block"},_e={class:"jldocstring custom-block"},Qe={class:"jldocstring custom-block"},Pe={class:"jldocstring custom-block"},we={class:"jldocstring custom-block"},Le={class:"jldocstring custom-block"},Be={class:"jldocstring custom-block"},Me={class:"jldocstring custom-block"},De={class:"jldocstring custom-block"},He={class:"jldocstring custom-block"},Ie={class:"jldocstring custom-block"},qe={class:"jldocstring custom-block"},Se={class:"jldocstring custom-block"},Oe={class:"jldocstring custom-block"},Ne={class:"jldocstring custom-block"};function Ve(ze,e,Ze,Ue,Xe,Ge){const n=d("Badge");return l(),a("div",null,[e[270]||(e[270]=s('

Jet Reconstruction Internal Documentation

Documentation for JetReconstruction.jl's internal methods and types.

N.B. no guarantee is made of stability of these interfaces or types.

Index

Public Interface

',6)),t("details",c,[t("summary",null,[e[0]||(e[0]=t("a",{id:"Base.:+-Tuple{PseudoJet, PseudoJet}",href:"#Base.:+-Tuple{PseudoJet, PseudoJet}"},[t("span",{class:"jlbinding"},"Base.:+")],-1)),e[1]||(e[1]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[2]||(e[2]=s('
julia
+(j1::PseudoJet, j2::PseudoJet)

Addition operator for PseudoJet objects.

Arguments

  • j1::PseudoJet: The first PseudoJet object.

  • j2::PseudoJet: The second PseudoJet object.

Returns

A new PseudoJet object with the sum of the momenta and energy of j1 and j2.

source

',7))]),t("details",h,[t("summary",null,[e[3]||(e[3]=t("a",{id:"Base.copy-Tuple{JetReconstruction.TiledJet}",href:"#Base.copy-Tuple{JetReconstruction.TiledJet}"},[t("span",{class:"jlbinding"},"Base.copy")],-1)),e[4]||(e[4]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[5]||(e[5]=s('
julia
copy(j::TiledJet)

Create a copy of a TiledJet object.

Arguments

  • j::TiledJet: The TiledJet object to be copied.

Returns

A new TiledJet object with the same attributes as the input object.

source

',7))]),t("details",u,[t("summary",null,[e[6]||(e[6]=t("a",{id:"Base.iterate",href:"#Base.iterate"},[t("span",{class:"jlbinding"},"Base.iterate")],-1)),e[7]||(e[7]=i()),o(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[8]||(e[8]=s('
julia
Base.iterate(t::rightmost_tiles, state=1)

Iterate over the rightmost_tiles object, returning all the rightmost tiles for a given Cartesian tile index.

source

',3))]),t("details",g,[t("summary",null,[e[9]||(e[9]=t("a",{id:"Base.iterate-2",href:"#Base.iterate-2"},[t("span",{class:"jlbinding"},"Base.iterate")],-1)),e[10]||(e[10]=i()),o(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[11]||(e[11]=s('
julia
Base.iterate(t::neighbour_tiles, state=1)

Iterate over the neighbour_tiles object, returning all the neighbour tiles for a given Cartesian tile index.

source

',3))]),t("details",k,[t("summary",null,[e[12]||(e[12]=t("a",{id:"Base.iterate-Tuple{JetReconstruction.TiledJet}",href:"#Base.iterate-Tuple{JetReconstruction.TiledJet}"},[t("span",{class:"jlbinding"},"Base.iterate")],-1)),e[13]||(e[13]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[14]||(e[14]=s('
julia
Base.iterate(tj::TiledJet)

Iterate over a TiledJet object's linked list, walking over all jets until the end (then the next jet is invalid).

Arguments

  • tj::TiledJet: The TiledJet object to start to iterate over.

source

',5))]),t("details",b,[t("summary",null,[e[15]||(e[15]=t("a",{id:"Base.show-Tuple{IO, PseudoJet}",href:"#Base.show-Tuple{IO, PseudoJet}"},[t("span",{class:"jlbinding"},"Base.show")],-1)),e[16]||(e[16]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[17]||(e[17]=s('
julia
show(io::IO, jet::PseudoJet)

Print a PseudoJet object to the specified IO stream.

Arguments

  • io::IO: The IO stream to which the information will be printed.

  • jet::PseudoJet: The PseudoJet object whose information will be printed.

source

',5))]),t("details",m,[t("summary",null,[e[18]||(e[18]=t("a",{id:"Base.tryparse-Tuple{Type{<:Enum}, String}",href:"#Base.tryparse-Tuple{Type{<:Enum}, String}"},[t("span",{class:"jlbinding"},"Base.tryparse")],-1)),e[19]||(e[19]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[20]||(e[20]=s('
julia
Base.tryparse(E::Type{<:Enum}, str::String)

Parser that converts a string to an enum value if it exists, otherwise returns nothing.

source

',3))]),t("details",y,[t("summary",null,[e[21]||(e[21]=t("a",{id:"JetReconstruction.CosTheta-Tuple{PseudoJet}",href:"#JetReconstruction.CosTheta-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.CosTheta")],-1)),e[22]||(e[22]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[23]||(e[23]=s('
julia
CosTheta(p::PseudoJet)

Compute the cosine of the angle between the momentum vector p and the z-axis.

Arguments

  • p::PseudoJet: The PseudoJet object representing the momentum vector.

Returns

  • The cosine of the angle between p and the z-axis.

source

',7))]),t("details",j,[t("summary",null,[e[24]||(e[24]=t("a",{id:"JetReconstruction._ee_genkt_algorithm-Tuple{}",href:"#JetReconstruction._ee_genkt_algorithm-Tuple{}"},[t("span",{class:"jlbinding"},"JetReconstruction._ee_genkt_algorithm")],-1)),e[25]||(e[25]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[26]||(e[26]=s(`
julia
_ee_genkt_algorithm(; particles::Vector{EEjet}, p = 1, R = 4.0,
+import{_ as r,c as l,a5 as s,j as t,a as i,G as o,B as d,o as a}from"./chunks/framework.BtBDBbTG.js";const $e=JSON.parse('{"title":"Jet Reconstruction Internal Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"lib/internal.md","filePath":"lib/internal.md","lastUpdated":null}'),p={name:"lib/internal.md"},c={class:"jldocstring custom-block"},h={class:"jldocstring custom-block"},u={class:"jldocstring custom-block"},g={class:"jldocstring custom-block"},k={class:"jldocstring custom-block"},b={class:"jldocstring custom-block"},m={class:"jldocstring custom-block"},y={class:"jldocstring custom-block"},j={class:"jldocstring custom-block"},T={class:"jldocstring custom-block"},f={class:"jldocstring custom-block"},J={class:"jldocstring custom-block"},E={class:"jldocstring custom-block"},v={class:"jldocstring custom-block"},R={class:"jldocstring custom-block"},C={class:"jldocstring custom-block"},F={class:"jldocstring custom-block"},A={class:"jldocstring custom-block"},x={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},_={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.666ex"},xmlns:"http://www.w3.org/2000/svg",width:"11.255ex",height:"2.363ex",role:"img",focusable:"false",viewBox:"0 -750 4974.7 1044.2","aria-hidden":"true"},Q={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},P={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.186ex"},xmlns:"http://www.w3.org/2000/svg",width:"11.406ex",height:"1.756ex",role:"img",focusable:"false",viewBox:"0 -694 5041.4 776","aria-hidden":"true"},w={class:"jldocstring custom-block"},L={class:"jldocstring custom-block"},B={class:"jldocstring custom-block"},M={class:"jldocstring custom-block"},D={class:"jldocstring custom-block"},H={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},I={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"4.973ex",height:"1.779ex",role:"img",focusable:"false",viewBox:"0 -775.2 2198.3 786.2","aria-hidden":"true"},q={class:"jldocstring custom-block"},S={class:"jldocstring custom-block"},O={class:"jldocstring custom-block"},N={class:"jldocstring custom-block"},V={class:"jldocstring custom-block"},z={class:"jldocstring custom-block"},Z={class:"jldocstring custom-block"},U={class:"jldocstring custom-block"},X={class:"jldocstring custom-block"},G={class:"jldocstring custom-block"},W={class:"jldocstring custom-block"},$={class:"jldocstring custom-block"},K={class:"jldocstring custom-block"},Y={class:"jldocstring custom-block"},ee={class:"jldocstring custom-block"},te={class:"jldocstring custom-block"},ie={class:"jldocstring custom-block"},se={class:"jldocstring custom-block"},ne={class:"jldocstring custom-block"},oe={class:"jldocstring custom-block"},le={class:"jldocstring custom-block"},ae={class:"jldocstring custom-block"},re={class:"jldocstring custom-block"},de={class:"jldocstring custom-block"},pe={class:"jldocstring custom-block"},ce={class:"jldocstring custom-block"},he={class:"jldocstring custom-block"},ue={class:"jldocstring custom-block"},ge={class:"jldocstring custom-block"},ke={class:"jldocstring custom-block"},be={class:"jldocstring custom-block"},me={class:"jldocstring custom-block"},ye={class:"jldocstring custom-block"},je={class:"jldocstring custom-block"},Te={class:"jldocstring custom-block"},fe={class:"jldocstring custom-block"},Je={class:"jldocstring custom-block"},Ee={class:"jldocstring custom-block"},ve={class:"jldocstring custom-block"},Re={class:"jldocstring custom-block"},Ce={class:"jldocstring custom-block"},Fe={class:"jldocstring custom-block"},Ae={class:"jldocstring custom-block"},xe={class:"jldocstring custom-block"},_e={class:"jldocstring custom-block"},Qe={class:"jldocstring custom-block"},Pe={class:"jldocstring custom-block"},we={class:"jldocstring custom-block"},Le={class:"jldocstring custom-block"},Be={class:"jldocstring custom-block"},Me={class:"jldocstring custom-block"},De={class:"jldocstring custom-block"},He={class:"jldocstring custom-block"},Ie={class:"jldocstring custom-block"},qe={class:"jldocstring custom-block"},Se={class:"jldocstring custom-block"},Oe={class:"jldocstring custom-block"},Ne={class:"jldocstring custom-block"};function Ve(ze,e,Ze,Ue,Xe,Ge){const n=d("Badge");return a(),l("div",null,[e[270]||(e[270]=s('

Jet Reconstruction Internal Documentation

Documentation for JetReconstruction.jl's internal methods and types.

N.B. no guarantee is made of stability of these interfaces or types.

Index

Public Interface

',6)),t("details",c,[t("summary",null,[e[0]||(e[0]=t("a",{id:"Base.:+-Tuple{PseudoJet, PseudoJet}",href:"#Base.:+-Tuple{PseudoJet, PseudoJet}"},[t("span",{class:"jlbinding"},"Base.:+")],-1)),e[1]||(e[1]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[2]||(e[2]=s('
julia
+(j1::PseudoJet, j2::PseudoJet)

Addition operator for PseudoJet objects.

Arguments

  • j1::PseudoJet: The first PseudoJet object.

  • j2::PseudoJet: The second PseudoJet object.

Returns

A new PseudoJet object with the sum of the momenta and energy of j1 and j2.

source

',7))]),t("details",h,[t("summary",null,[e[3]||(e[3]=t("a",{id:"Base.copy-Tuple{JetReconstruction.TiledJet}",href:"#Base.copy-Tuple{JetReconstruction.TiledJet}"},[t("span",{class:"jlbinding"},"Base.copy")],-1)),e[4]||(e[4]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[5]||(e[5]=s('
julia
copy(j::TiledJet)

Create a copy of a TiledJet object.

Arguments

  • j::TiledJet: The TiledJet object to be copied.

Returns

A new TiledJet object with the same attributes as the input object.

source

',7))]),t("details",u,[t("summary",null,[e[6]||(e[6]=t("a",{id:"Base.iterate",href:"#Base.iterate"},[t("span",{class:"jlbinding"},"Base.iterate")],-1)),e[7]||(e[7]=i()),o(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[8]||(e[8]=s('
julia
Base.iterate(t::rightmost_tiles, state=1)

Iterate over the rightmost_tiles object, returning all the rightmost tiles for a given Cartesian tile index.

source

',3))]),t("details",g,[t("summary",null,[e[9]||(e[9]=t("a",{id:"Base.iterate-2",href:"#Base.iterate-2"},[t("span",{class:"jlbinding"},"Base.iterate")],-1)),e[10]||(e[10]=i()),o(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[11]||(e[11]=s('
julia
Base.iterate(t::neighbour_tiles, state=1)

Iterate over the neighbour_tiles object, returning all the neighbour tiles for a given Cartesian tile index.

source

',3))]),t("details",k,[t("summary",null,[e[12]||(e[12]=t("a",{id:"Base.iterate-Tuple{JetReconstruction.TiledJet}",href:"#Base.iterate-Tuple{JetReconstruction.TiledJet}"},[t("span",{class:"jlbinding"},"Base.iterate")],-1)),e[13]||(e[13]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[14]||(e[14]=s('
julia
Base.iterate(tj::TiledJet)

Iterate over a TiledJet object's linked list, walking over all jets until the end (then the next jet is invalid).

Arguments

  • tj::TiledJet: The TiledJet object to start to iterate over.

source

',5))]),t("details",b,[t("summary",null,[e[15]||(e[15]=t("a",{id:"Base.show-Tuple{IO, PseudoJet}",href:"#Base.show-Tuple{IO, PseudoJet}"},[t("span",{class:"jlbinding"},"Base.show")],-1)),e[16]||(e[16]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[17]||(e[17]=s('
julia
show(io::IO, jet::PseudoJet)

Print a PseudoJet object to the specified IO stream.

Arguments

  • io::IO: The IO stream to which the information will be printed.

  • jet::PseudoJet: The PseudoJet object whose information will be printed.

source

',5))]),t("details",m,[t("summary",null,[e[18]||(e[18]=t("a",{id:"Base.tryparse-Tuple{Type{<:Enum}, String}",href:"#Base.tryparse-Tuple{Type{<:Enum}, String}"},[t("span",{class:"jlbinding"},"Base.tryparse")],-1)),e[19]||(e[19]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[20]||(e[20]=s('
julia
Base.tryparse(E::Type{<:Enum}, str::String)

Parser that converts a string to an enum value if it exists, otherwise returns nothing.

source

',3))]),t("details",y,[t("summary",null,[e[21]||(e[21]=t("a",{id:"JetReconstruction.CosTheta-Tuple{PseudoJet}",href:"#JetReconstruction.CosTheta-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.CosTheta")],-1)),e[22]||(e[22]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[23]||(e[23]=s('
julia
CosTheta(p::PseudoJet)

Compute the cosine of the angle between the momentum vector p and the z-axis.

Arguments

  • p::PseudoJet: The PseudoJet object representing the momentum vector.

Returns

  • The cosine of the angle between p and the z-axis.

source

',7))]),t("details",j,[t("summary",null,[e[24]||(e[24]=t("a",{id:"JetReconstruction._ee_genkt_algorithm-Tuple{}",href:"#JetReconstruction._ee_genkt_algorithm-Tuple{}"},[t("span",{class:"jlbinding"},"JetReconstruction._ee_genkt_algorithm")],-1)),e[25]||(e[25]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[26]||(e[26]=s(`
julia
_ee_genkt_algorithm(; particles::Vector{EEjet}, p = 1, R = 4.0,
                    algorithm::JetAlgorithm.Algorithm = JetAlgorithm.Durham,
-                   recombine = +)

This function is the actual implementation of the e+e- jet clustering algorithm.

source

`,3))]),t("details",T,[t("summary",null,[e[27]||(e[27]=t("a",{id:"JetReconstruction._ensure_valid_rap_phi-Tuple{PseudoJet}",href:"#JetReconstruction._ensure_valid_rap_phi-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction._ensure_valid_rap_phi")],-1)),e[28]||(e[28]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[29]||(e[29]=s('
julia
_ensure_valid_rap_phi(p::PseudoJet)

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.

source

',5))]),t("details",f,[t("summary",null,[e[30]||(e[30]=t("a",{id:"JetReconstruction._plain_jet_reconstruct-Tuple{}",href:"#JetReconstruction._plain_jet_reconstruct-Tuple{}"},[t("span",{class:"jlbinding"},"JetReconstruction._plain_jet_reconstruct")],-1)),e[31]||(e[31]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[32]||(e[32]=s('
julia
_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. Floating point values are allowed for generalised k_t algorithm.

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.

source

',9))]),t("details",J,[t("summary",null,[e[33]||(e[33]=t("a",{id:"JetReconstruction._set_rap_phi!-Tuple{PseudoJet}",href:"#JetReconstruction._set_rap_phi!-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction._set_rap_phi!")],-1)),e[34]||(e[34]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[35]||(e[35]=s('

_set_rap_phi!(p::PseudoJet)

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π).

source

',8))]),t("details",E,[t("summary",null,[e[36]||(e[36]=t("a",{id:"JetReconstruction._tiled_jet_reconstruct-Tuple{Vector{PseudoJet}}",href:"#JetReconstruction._tiled_jet_reconstruct-Tuple{Vector{PseudoJet}}"},[t("span",{class:"jlbinding"},"JetReconstruction._tiled_jet_reconstruct")],-1)),e[37]||(e[37]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[38]||(e[38]=s('
julia
_tiled_jet_reconstruct(particles::Vector{PseudoJet}; p = -1, R = 1.0, recombine = +) where {T}

Main jet reconstruction algorithm entry point for reconstructing jets once preprocessing of data types are done.

Arguments

  • particles::Vector{PseudoJet}: A vector of PseudoJet particles used as input for jet reconstruction.

  • 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{PseudoJet}; p = 1, R = 1.0, recombine = +)

source

',9))]),t("details",v,[t("summary",null,[e[39]||(e[39]=t("a",{id:"JetReconstruction._tj_diJ-Tuple{Any}",href:"#JetReconstruction._tj_diJ-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction._tj_diJ")],-1)),e[40]||(e[40]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[41]||(e[41]=s('
julia
_tj_diJ(jet)

Compute the dij metric value for a given jet.

Arguments

  • jet: The input jet.

Returns

  • The dij value for the jet.

Example

source

',8))]),t("details",R,[t("summary",null,[e[42]||(e[42]=t("a",{id:"JetReconstruction._tj_dist-Tuple{Any, Any}",href:"#JetReconstruction._tj_dist-Tuple{Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction._tj_dist")],-1)),e[43]||(e[43]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[44]||(e[44]=s('
julia
_tj_dist(jetA, jetB)

Compute the geometric distance in the (y, ϕ)-plane between two jets in the TiledAlgoLL module.

Arguments

  • jetA: The first jet.

  • jetB: The second jet.

Returns

The squared distance between jetA and jetB.

Examples

source

',8))]),t("details",C,[t("summary",null,[e[45]||(e[45]=t("a",{id:"JetReconstruction.add_step_to_history!-Tuple{ClusterSequence, Vararg{Any, 4}}",href:"#JetReconstruction.add_step_to_history!-Tuple{ClusterSequence, Vararg{Any, 4}}"},[t("span",{class:"jlbinding"},"JetReconstruction.add_step_to_history!")],-1)),e[46]||(e[46]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[47]||(e[47]=s('
julia
add_step_to_history!(clusterseq::ClusterSequence, parent1, parent2, jetp_index, dij)

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.

source

',7))]),t("details",F,[t("summary",null,[e[48]||(e[48]=t("a",{id:"JetReconstruction.add_untagged_neighbours_to_tile_union-NTuple{4, Any}",href:"#JetReconstruction.add_untagged_neighbours_to_tile_union-NTuple{4, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.add_untagged_neighbours_to_tile_union")],-1)),e[49]||(e[49]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[50]||(e[50]=s('
julia
add_untagged_neighbours_to_tile_union(center_index, tile_union, n_near_tiles, tiling)

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.

Returns

The updated number of near tiles.

source

',7))]),t("details",A,[t("summary",null,[e[51]||(e[51]=t("a",{id:"JetReconstruction.angular_distance-Tuple{Any, Any, Any}",href:"#JetReconstruction.angular_distance-Tuple{Any, Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.angular_distance")],-1)),e[52]||(e[52]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[70]||(e[70]=s('
julia
angular_distance(eereco, i, j) -> Float64
',1)),t("p",null,[e[55]||(e[55]=i("Calculate the angular distance between two jets ")),e[56]||(e[56]=t("code",null,"i",-1)),e[57]||(e[57]=i(" and ")),e[58]||(e[58]=t("code",null,"j",-1)),e[59]||(e[59]=i(" using the formula ")),t("mjx-container",x,[(l(),a("svg",_,e[53]||(e[53]=[s('',1)]))),e[54]||(e[54]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mn",null,"1"),t("mo",null,"−"),t("mi",null,"c"),t("mi",null,"o"),t("mi",null,"s"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"θ"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"j")])]),t("mo",{stretchy:"false"},")")])],-1))]),e[60]||(e[60]=i("."))]),e[71]||(e[71]=s("

Arguments

  • eereco: The array of EERecoJet objects.

  • i: The first jet.

  • j: The second jet.

Returns

",3)),t("ul",null,[t("li",null,[e[63]||(e[63]=t("code",null,"Float64",-1)),e[64]||(e[64]=i(": The angular distance between ")),e[65]||(e[65]=t("code",null,"i",-1)),e[66]||(e[66]=i(" and ")),e[67]||(e[67]=t("code",null,"j",-1)),e[68]||(e[68]=i(", which is ")),t("mjx-container",Q,[(l(),a("svg",P,e[61]||(e[61]=[s('',1)]))),e[62]||(e[62]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mn",null,"1"),t("mo",null,"−"),t("mi",null,"c"),t("mi",null,"o"),t("mi",null,"s"),t("mi",null,"h"),t("mi",null,"e"),t("mi",null,"t"),t("mi",null,"a")])],-1))]),e[69]||(e[69]=i("."))])]),e[72]||(e[72]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/ce71ba00ab3da5bb537ea5177ec6178d9ad1b6f7/src/EEAlgorithm.jl#L6-L20",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",w,[t("summary",null,[e[73]||(e[73]=t("a",{id:"JetReconstruction.check_algorithm_power_consistency-Tuple{}",href:"#JetReconstruction.check_algorithm_power_consistency-Tuple{}"},[t("span",{class:"jlbinding"},"JetReconstruction.check_algorithm_power_consistency")],-1)),e[74]||(e[74]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[75]||(e[75]=t("p",null,"Allow a check for algorithm and power consistency",-1)),e[76]||(e[76]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/ce71ba00ab3da5bb537ea5177ec6178d9ad1b6f7/src/AlgorithmStrategyEnums.jl#L129",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",L,[t("summary",null,[e[77]||(e[77]=t("a",{id:"JetReconstruction.detach!-Tuple{JetReconstruction.TiledJet}",href:"#JetReconstruction.detach!-Tuple{JetReconstruction.TiledJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.detach!")],-1)),e[78]||(e[78]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[79]||(e[79]=s('
julia
detach!(jet::TiledJet)

Detach a TiledJet from its linked list by updating the previous and next pointers.

Arguments

  • jet::TiledJet: The TiledJet object to detach.

source

',5))]),t("details",B,[t("summary",null,[e[80]||(e[80]=t("a",{id:"JetReconstruction.determine_rapidity_extent-Union{Tuple{Vector{T}}, Tuple{T}} where T<:AbstractFloat",href:"#JetReconstruction.determine_rapidity_extent-Union{Tuple{Vector{T}}, Tuple{T}} where T<:AbstractFloat"},[t("span",{class:"jlbinding"},"JetReconstruction.determine_rapidity_extent")],-1)),e[81]||(e[81]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[82]||(e[82]=s('
julia
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).

Arguments

  • eta::Vector{T}: A vector of rapidity values.

Returns

  • minrap::T: The minimum rapidity value.

  • maxrap::T: The maximum rapidity value.

source

',8))]),t("details",M,[t("summary",null,[e[83]||(e[83]=t("a",{id:"JetReconstruction.dij-NTuple{4, Any}",href:"#JetReconstruction.dij-NTuple{4, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.dij")],-1)),e[84]||(e[84]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[85]||(e[85]=s('
julia
dij(i, kt2_array, nn, nndist)

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.ßß

Arguments

  • i: The index of the element.

  • kt2_array: An array of kt2 values.

  • nn: An array of nearest neighbors.

  • nndist: An array of nearest neighbor distances.

Returns

  • The computed dij value.

source

',7))]),t("details",D,[t("summary",null,[e[86]||(e[86]=t("a",{id:"JetReconstruction.dij_dist-NTuple{4, Any}",href:"#JetReconstruction.dij_dist-NTuple{4, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.dij_dist")],-1)),e[87]||(e[87]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[92]||(e[92]=s('
julia
dij_dist(eereco, i, j, dij_factor)
',1)),t("p",null,[e[90]||(e[90]=i("Calculate the dij distance between two ")),t("mjx-container",H,[(l(),a("svg",I,e[88]||(e[88]=[s('',1)]))),e[89]||(e[89]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("msup",null,[t("mi",null,"e"),t("mo",null,"−")])])],-1))]),e[91]||(e[91]=i("jets."))]),e[93]||(e[93]=s('

Arguments

  • eereco: The array of EERecoJet objects.

  • i: The first jet.

  • j: The second jet.

  • dij_factor: The scaling factor to multiply the dij distance by.

Returns

  • The dij distance between i and j.

source

',5))]),t("details",q,[t("summary",null,[e[94]||(e[94]=t("a",{id:"JetReconstruction.dist-NTuple{4, Any}",href:"#JetReconstruction.dist-NTuple{4, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.dist")],-1)),e[95]||(e[95]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[96]||(e[96]=s('
julia
dist(i, j, rapidity_array, phi_array)

Compute the distance between points in a 2D space defined by rapidity and phi coordinates.

Arguments

  • i::Int: Index of the first point to consider (indexes into rapidity_array and phi_array).

  • j::Int: Index of the second point to consider (indexes into rapidity_array and phi_array).

  • rapidity_array::Vector{Float64}: Array of rapidity coordinates.

  • phi_array::Vector{Float64}: Array of phi coordinates.

Returns

  • distance::Float64: The distance between the two points.

source

',7))]),t("details",S,[t("summary",null,[e[97]||(e[97]=t("a",{id:"JetReconstruction.do_iB_recombination_step!-Tuple{ClusterSequence, Any, Any}",href:"#JetReconstruction.do_iB_recombination_step!-Tuple{ClusterSequence, Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.do_iB_recombination_step!")],-1)),e[98]||(e[98]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[99]||(e[99]=s('
julia
do_iB_recombination_step!(clusterseq::ClusterSequence, jet_i, diB)

Bookkeeping for recombining a jet with the beam (i.e., finalising the jet) by adding a step to the history of the cluster sequence.

Arguments

  • clusterseq::ClusterSequence: The cluster sequence object.

  • jet_i: The index of the jet.

  • diB: The diB value.

source

',5))]),t("details",O,[t("summary",null,[e[100]||(e[100]=t("a",{id:"JetReconstruction.do_ij_recombination_step!",href:"#JetReconstruction.do_ij_recombination_step!"},[t("span",{class:"jlbinding"},"JetReconstruction.do_ij_recombination_step!")],-1)),e[101]||(e[101]=i()),o(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[102]||(e[102]=s('
julia
do_ij_recombination_step!(clusterseq::ClusterSequence, jet_i, jet_j, dij, recombine=+)

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.

source

',9))]),t("details",N,[t("summary",null,[e[103]||(e[103]=t("a",{id:"JetReconstruction.energy-Tuple{PseudoJet}",href:"#JetReconstruction.energy-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.energy")],-1)),e[104]||(e[104]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[105]||(e[105]=s('
julia
energy(p::PseudoJet)

Return the energy of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The energy of the PseudoJet.

source

',7))]),t("details",V,[t("summary",null,[e[106]||(e[106]=t("a",{id:"JetReconstruction.eta-Tuple{PseudoJet}",href:"#JetReconstruction.eta-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.eta")],-1)),e[107]||(e[107]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[108]||(e[108]=s('
julia
eta(p::PseudoJet)

Compute the pseudorapidity (η) of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the pseudorapidity.

Returns

  • The pseudorapidity (η) of the PseudoJet.

source

',7))]),t("details",z,[t("summary",null,[e[109]||(e[109]=t("a",{id:"JetReconstruction.fast_findmin-Tuple{Any, Any}",href:"#JetReconstruction.fast_findmin-Tuple{Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.fast_findmin")],-1)),e[110]||(e[110]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[111]||(e[111]=s('
julia
fast_findmin(dij, n)

Find the minimum value and its index in the first n elements of the dij array. The use of @turbo macro gives a significiant performance boost.

Arguments

  • dij: An array of values.

  • n: The number of elements to consider in the dij array.

Returns

  • dij_min: The minimum value in the first n elements of the dij array.

  • best: The index of the minimum value in the dij array.

source

',7))]),t("details",Z,[t("summary",null,[e[112]||(e[112]=t("a",{id:"JetReconstruction.find_tile_neighbours!-NTuple{5, Any}",href:"#JetReconstruction.find_tile_neighbours!-NTuple{5, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.find_tile_neighbours!")],-1)),e[113]||(e[113]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[114]||(e[114]=s('
julia
find_tile_neighbours!(tile_union, jetA, jetB, oldB, tiling)

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.

source

',7))]),t("details",U,[t("summary",null,[e[115]||(e[115]=t("a",{id:"JetReconstruction.geometric_distance-NTuple{4, AbstractFloat}",href:"#JetReconstruction.geometric_distance-NTuple{4, AbstractFloat}"},[t("span",{class:"jlbinding"},"JetReconstruction.geometric_distance")],-1)),e[116]||(e[116]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[117]||(e[117]=s('
julia
geometric_distance(eta1::AbstractFloat, phi1::AbstractFloat, eta2::AbstractFloat, phi2::AbstractFloat)

Compute the geometric distance between two points in the rap-phi plane.

Arguments

  • eta1::AbstractFloat: The eta coordinate of the first point.

  • phi1::AbstractFloat: The phi coordinate of the first point.

  • eta2::AbstractFloat: The eta coordinate of the second point.

  • phi2::AbstractFloat: The phi coordinate of the second point.

Returns

  • distance::Float64: The geometric distance between the two points.

source

',7))]),t("details",X,[t("summary",null,[e[118]||(e[118]=t("a",{id:"JetReconstruction.get_algorithm_power_consistency-Tuple{}",href:"#JetReconstruction.get_algorithm_power_consistency-Tuple{}"},[t("span",{class:"jlbinding"},"JetReconstruction.get_algorithm_power_consistency")],-1)),e[119]||(e[119]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[120]||(e[120]=s('
julia
get_algorithm_power_consistency(; p::Union{Real, Nothing}, algorithm::Union{JetAlgorithm, Nothing})

Get the algorithm and power consistency correct

This function checks the consistency between the algorithm and power parameters. If the algorithm is specified, it checks if the power parameter is consistent with the algorithm's known power. If the power parameter is not specified, it sets the power parameter based on the algorithm. If neither the algorithm nor the power parameter is specified, it throws an ArgumentError.

Arguments

  • p::Union{Real, Nothing}: The power value.

  • algorithm::Union{JetAlgorithm, Nothing}: The algorithm.

Returns

A named tuple of the consistent power and algorithm values.

Throws

  • ArgumentError: If the algorithm and power are inconsistent or if neither the algorithm nor the power is specified.

source

',10))]),t("details",G,[t("summary",null,[e[121]||(e[121]=t("a",{id:"JetReconstruction.get_all_ancestors-Tuple{Any, ClusterSequence}",href:"#JetReconstruction.get_all_ancestors-Tuple{Any, ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.get_all_ancestors")],-1)),e[122]||(e[122]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[123]||(e[123]=s('
julia
get_all_ancestors(idx, cs::ClusterSequence)

Recursively finds all ancestors of a given index in a ClusterSequence object.

Arguments

  • idx: The index of the jet for which to find ancestors.

  • cs: The ClusterSequence object containing the jet history.

Returns

An array of indices representing the ancestors of the given jet.

source

',7))]),t("details",W,[t("summary",null,[e[124]||(e[124]=t("a",{id:"JetReconstruction.get_dij_dist-NTuple{4, Any}",href:"#JetReconstruction.get_dij_dist-NTuple{4, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.get_dij_dist")],-1)),e[125]||(e[125]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[126]||(e[126]=s('
julia
get_dij_dist(nn_dist, kt2_1, kt2_2, R2)

Compute the dij metric distance between two jets.

Arguments

  • nn_dist: The nearest-neighbor distance between two jets.

  • kt2_1: The squared momentum metric value of the first jet.

  • kt2_2: The squared momentum metric value of the second jet.

  • R2: The jet radius parameter squared.

Returns

The distance between the two jets.

If kt2_2 is equal to 0.0, then the first jet doesn't actually have a valid neighbour, so it's treated as a single jet adjecent to the beam.

source

',8))]),t("details",$,[t("summary",null,[e[127]||(e[127]=t("a",{id:"JetReconstruction.get_tile-Tuple{JetReconstruction.TilingDef, AbstractFloat, AbstractFloat}",href:"#JetReconstruction.get_tile-Tuple{JetReconstruction.TilingDef, AbstractFloat, AbstractFloat}"},[t("span",{class:"jlbinding"},"JetReconstruction.get_tile")],-1)),e[128]||(e[128]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[129]||(e[129]=s('
julia
get_tile(tiling_setup::TilingDef, eta::AbstractFloat, phi::AbstractFloat)

Given a tiling_setup object, eta and phi values, this function calculates the tile indices for the given eta and phi values.

Arguments

  • tiling_setup: A TilingDef object that contains the tiling setup parameters.

  • eta: The eta value for which to calculate the tile index.

  • phi: The phi value for which to calculate the tile index.

Returns

  • ieta: The tile index along the eta direction.

  • iphi: The tile index along the phi direction.

source

',7))]),t("details",K,[t("summary",null,[e[130]||(e[130]=t("a",{id:"JetReconstruction.get_tile_cartesian_indices-Tuple{JetReconstruction.TilingDef, Int64}",href:"#JetReconstruction.get_tile_cartesian_indices-Tuple{JetReconstruction.TilingDef, Int64}"},[t("span",{class:"jlbinding"},"JetReconstruction.get_tile_cartesian_indices")],-1)),e[131]||(e[131]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[132]||(e[132]=s('
julia
get_tile_linear_index(tiling_setup::TilingDef, i_η::Int, i_ϕ::Int)

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.

Returns

  • The linear index of the tile.

source

',7))]),t("details",Y,[t("summary",null,[e[133]||(e[133]=t("a",{id:"JetReconstruction.initial_history-Tuple{Any}",href:"#JetReconstruction.initial_history-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.initial_history")],-1)),e[134]||(e[134]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[135]||(e[135]=s('
julia
initial_history(particles)

Create an initial history for the given particles.

Arguments

  • particles: The initial vector of stable particles.

Returns

  • history: An array of HistoryElement objects.

  • Qtot: The total energy in the event.

source

',7))]),t("details",ee,[t("summary",null,[e[136]||(e[136]=t("a",{id:"JetReconstruction.insert!-Tuple{JetReconstruction.TiledJet, JetReconstruction.TiledJet}",href:"#JetReconstruction.insert!-Tuple{JetReconstruction.TiledJet, JetReconstruction.TiledJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.insert!")],-1)),e[137]||(e[137]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[138]||(e[138]=s('
julia
insert!(nextjet::TiledJet, jettomove::TiledJet)

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.

Example

source

',6))]),t("details",te,[t("summary",null,[e[139]||(e[139]=t("a",{id:"JetReconstruction.is_ee-Tuple{JetReconstruction.JetAlgorithm.Algorithm}",href:"#JetReconstruction.is_ee-Tuple{JetReconstruction.JetAlgorithm.Algorithm}"},[t("span",{class:"jlbinding"},"JetReconstruction.is_ee")],-1)),e[140]||(e[140]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[141]||(e[141]=s('
julia
is_ee(algorithm::JetAlgorithm.Algorithm)

Check if the algorithm is a e+e- reconstruction algorithm.

Returns

true if the algorithm is a e+e- reconstruction algorithm, false otherwise.

source

',5))]),t("details",ie,[t("summary",null,[e[142]||(e[142]=t("a",{id:"JetReconstruction.is_pp-Tuple{JetReconstruction.JetAlgorithm.Algorithm}",href:"#JetReconstruction.is_pp-Tuple{JetReconstruction.JetAlgorithm.Algorithm}"},[t("span",{class:"jlbinding"},"JetReconstruction.is_pp")],-1)),e[143]||(e[143]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[144]||(e[144]=s('
julia
is_pp(algorithm::JetAlgorithm.Algorithm)

Check if the algorithm is a pp reconstruction algorithm.

Returns

true if the algorithm is a pp reconstruction algorithm, false otherwise.

source

',5))]),t("details",se,[t("summary",null,[e[145]||(e[145]=t("a",{id:"JetReconstruction.isvalid-Tuple{JetReconstruction.TiledJet}",href:"#JetReconstruction.isvalid-Tuple{JetReconstruction.TiledJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.isvalid")],-1)),e[146]||(e[146]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[147]||(e[147]=s('
julia
isvalid(t::TiledJet)

Check if a TiledJet is valid, by seeing if it is not the noTiledJet object.

Arguments

  • t::TiledJet: The TiledJet object to check.

Returns

  • Bool: true if the TiledJet object is valid, false otherwise.

source

',7))]),t("details",ne,[t("summary",null,[e[148]||(e[148]=t("a",{id:"JetReconstruction.jet_ranks-Tuple{ClusterSequence}",href:"#JetReconstruction.jet_ranks-Tuple{ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.jet_ranks")],-1)),e[149]||(e[149]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[150]||(e[150]=s('
julia
jet_ranks(clusterseq::ClusterSequence; compare_fn = JetReconstruction.pt)

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.

source

',9))]),t("details",oe,[t("summary",null,[e[151]||(e[151]=t("a",{id:"JetReconstruction.m-Tuple{PseudoJet}",href:"#JetReconstruction.m-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.m")],-1)),e[152]||(e[152]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[153]||(e[153]=s('
julia
m(p::PseudoJet)

Compute the invariant mass of a PseudoJet object. By convention if m^2 < 0, then -sqrt{(-m^2)} is returned.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the invariant mass.

Returns

The invariant mass of the PseudoJet object.

source

',7))]),t("details",ae,[t("summary",null,[e[154]||(e[154]=t("a",{id:"JetReconstruction.m2-Tuple{PseudoJet}",href:"#JetReconstruction.m2-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.m2")],-1)),e[155]||(e[155]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[156]||(e[156]=s('
julia
m2(p::PseudoJet)

Calculate the invariant mass squared (m^2) of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object for which to calculate the invariant mass squared.

Returns

  • The invariant mass squared (m^2) of the PseudoJet.

source

',7))]),t("details",le,[t("summary",null,[e[157]||(e[157]=t("a",{id:"JetReconstruction.mag-Tuple{PseudoJet}",href:"#JetReconstruction.mag-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.mag")],-1)),e[158]||(e[158]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[159]||(e[159]=s('
julia
mag(p::PseudoJet)

Return the magnitude of the momentum of a PseudoJet, |p|.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the magnitude.

Returns

The magnitude of the PseudoJet object.

source

',7))]),t("details",re,[t("summary",null,[e[160]||(e[160]=t("a",{id:"JetReconstruction.mass-Tuple{PseudoJet}",href:"#JetReconstruction.mass-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.mass")],-1)),e[161]||(e[161]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[162]||(e[162]=s('
julia
mass(p::PseudoJet)

Compute the invariant mass (alias for m(p)).

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the mass.

Returns

  • The mass of the PseudoJet.

source

',7))]),t("details",de,[t("summary",null,[e[163]||(e[163]=t("a",{id:"JetReconstruction.mass2",href:"#JetReconstruction.mass2"},[t("span",{class:"jlbinding"},"JetReconstruction.mass2")],-1)),e[164]||(e[164]=i()),o(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[165]||(e[165]=t("p",null,[i("Alias for "),t("code",null,"m2"),i(" function")],-1)),e[166]||(e[166]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/ce71ba00ab3da5bb537ea5177ec6178d9ad1b6f7/src/Pseudojet.jl#L370",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",pe,[t("summary",null,[e[167]||(e[167]=t("a",{id:"JetReconstruction.merge_steps-Tuple{ClusterSequence}",href:"#JetReconstruction.merge_steps-Tuple{ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.merge_steps")],-1)),e[168]||(e[168]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[169]||(e[169]=s('
julia
merge_steps(clusterseq::ClusterSequence)

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.

Returns

  • merge_steps::Int: The number of merge steps.

source

',7))]),t("details",ce,[t("summary",null,[e[170]||(e[170]=t("a",{id:"JetReconstruction.phi-Tuple{PseudoJet}",href:"#JetReconstruction.phi-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.phi")],-1)),e[171]||(e[171]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[172]||(e[172]=s('
julia
phi(p::PseudoJet)

Compute the ϕ angle of a PseudoJet object p.

Note this function is a wrapper for phi_02pi(p).

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the azimuthal angle.

Returns

  • The azimuthal angle of p in the range [0, 2π).

source

',8))]),t("details",he,[t("summary",null,[e[173]||(e[173]=t("a",{id:"JetReconstruction.phi_02pi-Tuple{PseudoJet}",href:"#JetReconstruction.phi_02pi-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.phi_02pi")],-1)),e[174]||(e[174]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[175]||(e[175]=s('
julia
phi_02pi(p::PseudoJet)

Compute the azimuthal angle of a PseudoJet object p in the range [0, 2π).

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the azimuthal angle.

Returns

  • The azimuthal angle of p in the range [0, 2π).

source

',7))]),t("details",ue,[t("summary",null,[e[176]||(e[176]=t("a",{id:"JetReconstruction.pt-Tuple{PseudoJet}",href:"#JetReconstruction.pt-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.pt")],-1)),e[177]||(e[177]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[178]||(e[178]=s('
julia
pt(p::PseudoJet)

Compute the scalar transverse momentum (pt) of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the transverse momentum.

Returns

  • The transverse momentum (pt) of the PseudoJet.

source

',7))]),t("details",ge,[t("summary",null,[e[179]||(e[179]=t("a",{id:"JetReconstruction.pt2-Tuple{PseudoJet}",href:"#JetReconstruction.pt2-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.pt2")],-1)),e[180]||(e[180]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[181]||(e[181]=s('
julia
pt2(p::PseudoJet)

Get the squared transverse momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The squared transverse momentum of the PseudoJet.

source

',7))]),t("details",ke,[t("summary",null,[e[182]||(e[182]=t("a",{id:"JetReconstruction.px-Tuple{PseudoJet}",href:"#JetReconstruction.px-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.px")],-1)),e[183]||(e[183]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[184]||(e[184]=s('
julia
px(p::PseudoJet)

Return the x-component of the momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The x-component of the momentum of the PseudoJet.

source

',7))]),t("details",be,[t("summary",null,[e[185]||(e[185]=t("a",{id:"JetReconstruction.py-Tuple{PseudoJet}",href:"#JetReconstruction.py-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.py")],-1)),e[186]||(e[186]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[187]||(e[187]=s('
julia
py(p::PseudoJet)

Return the y-component of the momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The y-component of the momentum of the PseudoJet.

source

',7))]),t("details",me,[t("summary",null,[e[188]||(e[188]=t("a",{id:"JetReconstruction.pz-Tuple{PseudoJet}",href:"#JetReconstruction.pz-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.pz")],-1)),e[189]||(e[189]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[190]||(e[190]=s('
julia
pz(p::PseudoJet)

Return the z-component of the momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The z-component of the momentum of the PseudoJet.

source

',7))]),t("details",ye,[t("summary",null,[e[191]||(e[191]=t("a",{id:"JetReconstruction.rapidity-Tuple{PseudoJet}",href:"#JetReconstruction.rapidity-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.rapidity")],-1)),e[192]||(e[192]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[193]||(e[193]=s('
julia
rapidity(p::PseudoJet)

Compute the rapidity of a PseudoJet object.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the rapidity.

Returns

The rapidity of the PseudoJet object.

source

',7))]),t("details",je,[t("summary",null,[e[194]||(e[194]=t("a",{id:"JetReconstruction.reco_state-Tuple{ClusterSequence, Any}",href:"#JetReconstruction.reco_state-Tuple{ClusterSequence, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.reco_state")],-1)),e[195]||(e[195]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[196]||(e[196]=s('
julia
reco_state(cs::ClusterSequence, pt_ranks; iteration=0)

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.

source

',11))]),t("details",Te,[t("summary",null,[e[197]||(e[197]=t("a",{id:"JetReconstruction.rightneighbours-Tuple{Int64, JetReconstruction.Tiling}",href:"#JetReconstruction.rightneighbours-Tuple{Int64, JetReconstruction.Tiling}"},[t("span",{class:"jlbinding"},"JetReconstruction.rightneighbours")],-1)),e[198]||(e[198]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[199]||(e[199]=s('
julia
rightneighbours(center::Int, tiling::Tiling)

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.

source

',7))]),t("details",fe,[t("summary",null,[e[200]||(e[200]=t("a",{id:"JetReconstruction.set_momentum!-Tuple{PseudoJet, Vararg{Any, 4}}",href:"#JetReconstruction.set_momentum!-Tuple{PseudoJet, Vararg{Any, 4}}"},[t("span",{class:"jlbinding"},"JetReconstruction.set_momentum!")],-1)),e[201]||(e[201]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[202]||(e[202]=s('
julia
set_momentum!(j::PseudoJet, px, py, pz, E)

Set the momentum components and energy of a PseudoJet object.

Arguments

  • j::PseudoJet: The PseudoJet object to set the momentum for.

  • px: The x-component of the momentum.

  • py: The y-component of the momentum.

  • pz: The z-component of the momentum.

  • E: The energy of the particle.

source

',5))]),t("details",Je,[t("summary",null,[e[203]||(e[203]=t("a",{id:"JetReconstruction.set_nearest_neighbours!-Tuple{ClusterSequence, JetReconstruction.Tiling, Vector{JetReconstruction.TiledJet}}",href:"#JetReconstruction.set_nearest_neighbours!-Tuple{ClusterSequence, JetReconstruction.Tiling, Vector{JetReconstruction.TiledJet}}"},[t("span",{class:"jlbinding"},"JetReconstruction.set_nearest_neighbours!")],-1)),e[204]||(e[204]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[205]||(e[205]=s('
julia
set_nearest_neighbours!(clusterseq::ClusterSequence, tiling::Tiling, tiledjets::Vector{TiledJet})

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.

source

',9))]),t("details",Ee,[t("summary",null,[e[206]||(e[206]=t("a",{id:"JetReconstruction.setup_tiling-Union{Tuple{T}, Tuple{Vector{T}, AbstractFloat}} where T<:AbstractFloat",href:"#JetReconstruction.setup_tiling-Union{Tuple{T}, Tuple{Vector{T}, AbstractFloat}} where T<:AbstractFloat"},[t("span",{class:"jlbinding"},"JetReconstruction.setup_tiling")],-1)),e[207]||(e[207]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[208]||(e[208]=s('
julia
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.

source

',9))]),t("details",ve,[t("summary",null,[e[209]||(e[209]=t("a",{id:"JetReconstruction.surrounding-Tuple{Int64, JetReconstruction.Tiling}",href:"#JetReconstruction.surrounding-Tuple{Int64, JetReconstruction.Tiling}"},[t("span",{class:"jlbinding"},"JetReconstruction.surrounding")],-1)),e[210]||(e[210]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[211]||(e[211]=s('
julia
surrounding(center::Int, tiling::Tiling)

Compute the surrounding indices of a given center index in a tiling.

Arguments

  • center::Int: The center index.

  • tiling::Tiling: The tiling object.

Returns

  • Surrounding: An object containing the surrounding indices.

source

',7))]),t("details",Re,[t("summary",null,[e[212]||(e[212]=t("a",{id:"JetReconstruction.tile_index-Tuple{Any, Float64, Float64}",href:"#JetReconstruction.tile_index-Tuple{Any, Float64, Float64}"},[t("span",{class:"jlbinding"},"JetReconstruction.tile_index")],-1)),e[213]||(e[213]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[214]||(e[214]=s('
julia
tile_index(tiling_setup, eta::Float64, phi::Float64)

Compute the tile index for a given (eta, phi) coordinate.

Arguments

  • tiling_setup: The tiling setup object containing the tile size and number of tiles.

  • eta::Float64: The eta coordinate.

  • phi::Float64: The phi coordinate.

Returns

The tile index corresponding to the (eta, phi) coordinate.

source

',7))]),t("details",Ce,[t("summary",null,[e[215]||(e[215]=t("a",{id:"JetReconstruction.tiledjet_remove_from_tiles!-Tuple{Any, Any}",href:"#JetReconstruction.tiledjet_remove_from_tiles!-Tuple{Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.tiledjet_remove_from_tiles!")],-1)),e[216]||(e[216]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[217]||(e[217]=s('
julia
tiledjet_remove_from_tiles!(tiling, jet)

Remove a jet from the given tiling structure.

Arguments

  • tiling: The tiling structure from which the jet will be removed.

  • jet: The jet to be removed from the tiling structure.

Description

This function removes a jet from the tiling structure. It adjusts the linked list to be consistent with the removal of the jet.

source

',7))]),t("details",Fe,[t("summary",null,[e[218]||(e[218]=t("a",{id:"JetReconstruction.tiledjet_set_jetinfo!-Tuple{JetReconstruction.TiledJet, ClusterSequence, JetReconstruction.Tiling, Any, Any, Any}",href:"#JetReconstruction.tiledjet_set_jetinfo!-Tuple{JetReconstruction.TiledJet, ClusterSequence, JetReconstruction.Tiling, Any, Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.tiledjet_set_jetinfo!")],-1)),e[219]||(e[219]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[220]||(e[220]=s('
julia
tiledjet_set_jetinfo!(jet::TiledJet, clusterseq::ClusterSequence, tiling::Tiling, jets_index, R2, p)

Initialise a tiled jet from a PseudoJet (using an index into our ClusterSequence)

Arguments:

  • jet::TiledJet: The TiledJet object to set the information for.

  • clusterseq::ClusterSequence: The ClusterSequence object containing the jets.

  • tiling::Tiling: The Tiling object containing the tile information.

  • jets_index: The index of the jet in the ClusterSequence.

  • R2: The jet radius parameter squared.

  • p: The power to raise the pt2 value to.

This function sets the eta, phi, kt2, jets_index, NN_dist, NN, tile_index, previous, and next fields of the TiledJet object.

Returns:

  • nothing

source

',8))]),t("details",Ae,[t("summary",null,[e[221]||(e[221]=t("a",{id:"JetReconstruction.upd_nn_crosscheck!-Tuple{Int64, Int64, Int64, Vararg{Any, 5}}",href:"#JetReconstruction.upd_nn_crosscheck!-Tuple{Int64, Int64, Int64, Vararg{Any, 5}}"},[t("span",{class:"jlbinding"},"JetReconstruction.upd_nn_crosscheck!")],-1)),e[222]||(e[222]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[223]||(e[223]=s('
julia
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.

source

',5))]),t("details",xe,[t("summary",null,[e[224]||(e[224]=t("a",{id:"JetReconstruction.upd_nn_nocross!-Tuple{Int64, Int64, Int64, Vararg{Any, 5}}",href:"#JetReconstruction.upd_nn_nocross!-Tuple{Int64, Int64, Int64, Vararg{Any, 5}}"},[t("span",{class:"jlbinding"},"JetReconstruction.upd_nn_nocross!")],-1)),e[225]||(e[225]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[226]||(e[226]=s('
julia
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.

source

',5))]),t("details",_e,[t("summary",null,[e[227]||(e[227]=t("a",{id:"JetReconstruction.upd_nn_step!-NTuple{12, Any}",href:"#JetReconstruction.upd_nn_step!-NTuple{12, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.upd_nn_step!")],-1)),e[228]||(e[228]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[229]||(e[229]=s('
julia
upd_nn_step!(i, j, k, N, Nn, kt2_array, rapidity_array, phi_array, R2, nndist, nn, nndij)

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.

source

',6))]),t("details",Qe,[t("summary",null,[e[230]||(e[230]=t("a",{id:"JetReconstruction.η",href:"#JetReconstruction.η"},[t("span",{class:"jlbinding"},"JetReconstruction.η")],-1)),e[231]||(e[231]=i()),o(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[232]||(e[232]=s('
julia
const η = eta

Alias for the pseudorapidity function, eta.

source

',3))]),t("details",Pe,[t("summary",null,[e[233]||(e[233]=t("a",{id:"JetReconstruction.FourMomentum",href:"#JetReconstruction.FourMomentum"},[t("span",{class:"jlbinding"},"JetReconstruction.FourMomentum")],-1)),e[234]||(e[234]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[235]||(e[235]=t("p",null,"Interface for composite types that includes fields px, py, py, and E that represents the components of a four-momentum vector.",-1)),e[236]||(e[236]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/ce71ba00ab3da5bb537ea5177ec6178d9ad1b6f7/src/Pseudojet.jl#L6-L8",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",we,[t("summary",null,[e[237]||(e[237]=t("a",{id:"JetReconstruction.HistoryElement",href:"#JetReconstruction.HistoryElement"},[t("span",{class:"jlbinding"},"JetReconstruction.HistoryElement")],-1)),e[238]||(e[238]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[239]||(e[239]=s('
julia
struct HistoryElement

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.

source

',5))]),t("details",Le,[t("summary",null,[e[240]||(e[240]=t("a",{id:"JetReconstruction.HistoryElement-Tuple{Any}",href:"#JetReconstruction.HistoryElement-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.HistoryElement")],-1)),e[241]||(e[241]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[242]||(e[242]=s('
julia
HistoryElement(jetp_index)

Constructs a HistoryElement object with the given jetp_index, used for initialising the history with original particles.

Arguments

  • jetp_index: The index of the jetp.

Returns

A HistoryElement object.

source

',7))]),t("details",Be,[t("summary",null,[e[243]||(e[243]=t("a",{id:"JetReconstruction.JetWithAncestors",href:"#JetReconstruction.JetWithAncestors"},[t("span",{class:"jlbinding"},"JetReconstruction.JetWithAncestors")],-1)),e[244]||(e[244]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[245]||(e[245]=s('
julia
struct JetWithAncestors

A struct representing a jet with its origin ancestors.

Fields

  • self::PseudoJet: The PseudoJet object for this jet.

  • jetp_index::Int: The index of the jet in the corresponding cluster sequence.

  • ancestors::Set{Int}: A set of indices representing the jetp_indexes of ancestors of the jet (in the cluster sequence).

  • jet_rank::Int: The rank of the jet based on a comparison of all of the jet's ancestors

Note

This structure needs its associated cluster sequence origin to be useful.

source

',7))]),t("details",Me,[t("summary",null,[e[246]||(e[246]=t("a",{id:"JetReconstruction.Surrounding",href:"#JetReconstruction.Surrounding"},[t("span",{class:"jlbinding"},"JetReconstruction.Surrounding")],-1)),e[247]||(e[247]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[248]||(e[248]=s('
julia
struct Surrounding{N}

Structure used for iterating over neighbour tiles.

Fields

  • indices::NTuple{N, Int}: A tuple of N integers representing the indices.

source

',5))]),t("details",De,[t("summary",null,[e[249]||(e[249]=t("a",{id:"JetReconstruction.TiledJet",href:"#JetReconstruction.TiledJet"},[t("span",{class:"jlbinding"},"JetReconstruction.TiledJet")],-1)),e[250]||(e[250]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[251]||(e[251]=s('
julia
struct TiledJet

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.

  • NN::TiledJet: The nearest neighbor.

  • previous::TiledJet: The previous jet.

  • next::TiledJet: The next jet.

source

',5))]),t("details",He,[t("summary",null,[e[252]||(e[252]=t("a",{id:"JetReconstruction.TiledJet-Tuple{Any}",href:"#JetReconstruction.TiledJet-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.TiledJet")],-1)),e[253]||(e[253]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[254]||(e[254]=s('
julia
TiledJet(id)

Constructs a TiledJet object with the given id and initializes its properties to zero.

Arguments

  • id: The ID of the TiledJet object.

Returns

A TiledJet object with the specified id and values set to zero or noTiledJet.

source

',7))]),t("details",Ie,[t("summary",null,[e[255]||(e[255]=t("a",{id:"JetReconstruction.Tiling",href:"#JetReconstruction.Tiling"},[t("span",{class:"jlbinding"},"JetReconstruction.Tiling")],-1)),e[256]||(e[256]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[257]||(e[257]=s('
julia
struct Tiling

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).

source

',5))]),t("details",qe,[t("summary",null,[e[258]||(e[258]=t("a",{id:"JetReconstruction.Tiling-Tuple{JetReconstruction.TilingDef}",href:"#JetReconstruction.Tiling-Tuple{JetReconstruction.TilingDef}"},[t("span",{class:"jlbinding"},"JetReconstruction.Tiling")],-1)),e[259]||(e[259]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[260]||(e[260]=s('
julia
Tiling(setup::TilingDef)

Constructs a intial Tiling object based on the provided setup parameters.

Arguments

  • setup::TilingDef: The setup parameters for the tiling.

Returns

A Tiling object.

source

',7))]),t("details",Se,[t("summary",null,[e[261]||(e[261]=t("a",{id:"JetReconstruction.TilingDef",href:"#JetReconstruction.TilingDef"},[t("span",{class:"jlbinding"},"JetReconstruction.TilingDef")],-1)),e[262]||(e[262]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[263]||(e[263]=s(`
julia
struct TilingDef

A struct representing the definition of a spcific tiling scheme.

Fields

  • _tiles_eta_min::Float64: The minimum rapidity of the tiles.

  • _tiles_eta_max::Float64: The maximum rapidity of the tiles.

  • _tile_size_eta::Float64: The size of a tile in rapidity (usually R^2).

  • _tile_size_phi::Float64: The size of a tile in phi (usually a bit more than R^2).

  • _n_tiles_eta::Int: The number of tiles across rapidity.

  • _n_tiles_phi::Int: The number of tiles across phi.

  • _n_tiles::Int: The total number of tiles.

  • _tiles_ieta_min::Int: The minimum rapidity tile index.

  • _tiles_ieta_max::Int: The maximum rapidity tile index.

Constructor

TilingDef(_tiles_eta_min, _tiles_eta_max, _tile_size_eta, _tile_size_phi,
-	_n_tiles_eta, _n_tiles_phi, _tiles_ieta_min, _tiles_ieta_max)

Constructs a TilingDef object with the given parameters.

source

`,8))]),t("details",Oe,[t("summary",null,[e[264]||(e[264]=t("a",{id:"JetReconstruction.neighbour_tiles",href:"#JetReconstruction.neighbour_tiles"},[t("span",{class:"jlbinding"},"JetReconstruction.neighbour_tiles")],-1)),e[265]||(e[265]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[266]||(e[266]=s(`
julia
struct neighbour_tiles

A struct representing the neighbouring tiles.

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
+                   recombine = +)

This function is the actual implementation of the e+e- jet clustering algorithm.

source

`,3))]),t("details",T,[t("summary",null,[e[27]||(e[27]=t("a",{id:"JetReconstruction._ensure_valid_rap_phi-Tuple{PseudoJet}",href:"#JetReconstruction._ensure_valid_rap_phi-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction._ensure_valid_rap_phi")],-1)),e[28]||(e[28]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[29]||(e[29]=s('
julia
_ensure_valid_rap_phi(p::PseudoJet)

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.

source

',5))]),t("details",f,[t("summary",null,[e[30]||(e[30]=t("a",{id:"JetReconstruction._plain_jet_reconstruct-Tuple{}",href:"#JetReconstruction._plain_jet_reconstruct-Tuple{}"},[t("span",{class:"jlbinding"},"JetReconstruction._plain_jet_reconstruct")],-1)),e[31]||(e[31]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[32]||(e[32]=s('
julia
_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. Floating point values are allowed for generalised k_t algorithm.

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.

source

',9))]),t("details",J,[t("summary",null,[e[33]||(e[33]=t("a",{id:"JetReconstruction._set_rap_phi!-Tuple{PseudoJet}",href:"#JetReconstruction._set_rap_phi!-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction._set_rap_phi!")],-1)),e[34]||(e[34]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[35]||(e[35]=s('

_set_rap_phi!(p::PseudoJet)

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π).

source

',8))]),t("details",E,[t("summary",null,[e[36]||(e[36]=t("a",{id:"JetReconstruction._tiled_jet_reconstruct-Tuple{Vector{PseudoJet}}",href:"#JetReconstruction._tiled_jet_reconstruct-Tuple{Vector{PseudoJet}}"},[t("span",{class:"jlbinding"},"JetReconstruction._tiled_jet_reconstruct")],-1)),e[37]||(e[37]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[38]||(e[38]=s('
julia
_tiled_jet_reconstruct(particles::Vector{PseudoJet}; p = -1, R = 1.0, recombine = +) where {T}

Main jet reconstruction algorithm entry point for reconstructing jets once preprocessing of data types are done.

Arguments

  • particles::Vector{PseudoJet}: A vector of PseudoJet particles used as input for jet reconstruction.

  • 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{PseudoJet}; p = 1, R = 1.0, recombine = +)

source

',9))]),t("details",v,[t("summary",null,[e[39]||(e[39]=t("a",{id:"JetReconstruction._tj_diJ-Tuple{Any}",href:"#JetReconstruction._tj_diJ-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction._tj_diJ")],-1)),e[40]||(e[40]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[41]||(e[41]=s('
julia
_tj_diJ(jet)

Compute the dij metric value for a given jet.

Arguments

  • jet: The input jet.

Returns

  • The dij value for the jet.

Example

source

',8))]),t("details",R,[t("summary",null,[e[42]||(e[42]=t("a",{id:"JetReconstruction._tj_dist-Tuple{Any, Any}",href:"#JetReconstruction._tj_dist-Tuple{Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction._tj_dist")],-1)),e[43]||(e[43]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[44]||(e[44]=s('
julia
_tj_dist(jetA, jetB)

Compute the geometric distance in the (y, ϕ)-plane between two jets in the TiledAlgoLL module.

Arguments

  • jetA: The first jet.

  • jetB: The second jet.

Returns

The squared distance between jetA and jetB.

Examples

source

',8))]),t("details",C,[t("summary",null,[e[45]||(e[45]=t("a",{id:"JetReconstruction.add_step_to_history!-Tuple{ClusterSequence, Vararg{Any, 4}}",href:"#JetReconstruction.add_step_to_history!-Tuple{ClusterSequence, Vararg{Any, 4}}"},[t("span",{class:"jlbinding"},"JetReconstruction.add_step_to_history!")],-1)),e[46]||(e[46]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[47]||(e[47]=s('
julia
add_step_to_history!(clusterseq::ClusterSequence, parent1, parent2, jetp_index, dij)

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.

source

',7))]),t("details",F,[t("summary",null,[e[48]||(e[48]=t("a",{id:"JetReconstruction.add_untagged_neighbours_to_tile_union-NTuple{4, Any}",href:"#JetReconstruction.add_untagged_neighbours_to_tile_union-NTuple{4, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.add_untagged_neighbours_to_tile_union")],-1)),e[49]||(e[49]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[50]||(e[50]=s('
julia
add_untagged_neighbours_to_tile_union(center_index, tile_union, n_near_tiles, tiling)

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.

Returns

The updated number of near tiles.

source

',7))]),t("details",A,[t("summary",null,[e[51]||(e[51]=t("a",{id:"JetReconstruction.angular_distance-Tuple{Any, Any, Any}",href:"#JetReconstruction.angular_distance-Tuple{Any, Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.angular_distance")],-1)),e[52]||(e[52]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[70]||(e[70]=s('
julia
angular_distance(eereco, i, j) -> Float64
',1)),t("p",null,[e[55]||(e[55]=i("Calculate the angular distance between two jets ")),e[56]||(e[56]=t("code",null,"i",-1)),e[57]||(e[57]=i(" and ")),e[58]||(e[58]=t("code",null,"j",-1)),e[59]||(e[59]=i(" using the formula ")),t("mjx-container",x,[(a(),l("svg",_,e[53]||(e[53]=[s('',1)]))),e[54]||(e[54]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mn",null,"1"),t("mo",null,"−"),t("mi",null,"c"),t("mi",null,"o"),t("mi",null,"s"),t("mo",{stretchy:"false"},"("),t("msub",null,[t("mi",null,"θ"),t("mrow",{"data-mjx-texclass":"ORD"},[t("mi",null,"i"),t("mi",null,"j")])]),t("mo",{stretchy:"false"},")")])],-1))]),e[60]||(e[60]=i("."))]),e[71]||(e[71]=s("

Arguments

  • eereco: The array of EERecoJet objects.

  • i: The first jet.

  • j: The second jet.

Returns

",3)),t("ul",null,[t("li",null,[e[63]||(e[63]=t("code",null,"Float64",-1)),e[64]||(e[64]=i(": The angular distance between ")),e[65]||(e[65]=t("code",null,"i",-1)),e[66]||(e[66]=i(" and ")),e[67]||(e[67]=t("code",null,"j",-1)),e[68]||(e[68]=i(", which is ")),t("mjx-container",Q,[(a(),l("svg",P,e[61]||(e[61]=[s('',1)]))),e[62]||(e[62]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("mn",null,"1"),t("mo",null,"−"),t("mi",null,"c"),t("mi",null,"o"),t("mi",null,"s"),t("mi",null,"h"),t("mi",null,"e"),t("mi",null,"t"),t("mi",null,"a")])],-1))]),e[69]||(e[69]=i("."))])]),e[72]||(e[72]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/70c372b379cb343a4cade52fc0231b7a7721dd16/src/EEAlgorithm.jl#L6-L20",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",w,[t("summary",null,[e[73]||(e[73]=t("a",{id:"JetReconstruction.check_algorithm_power_consistency-Tuple{}",href:"#JetReconstruction.check_algorithm_power_consistency-Tuple{}"},[t("span",{class:"jlbinding"},"JetReconstruction.check_algorithm_power_consistency")],-1)),e[74]||(e[74]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[75]||(e[75]=t("p",null,"Allow a check for algorithm and power consistency",-1)),e[76]||(e[76]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/70c372b379cb343a4cade52fc0231b7a7721dd16/src/AlgorithmStrategyEnums.jl#L129",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",L,[t("summary",null,[e[77]||(e[77]=t("a",{id:"JetReconstruction.detach!-Tuple{JetReconstruction.TiledJet}",href:"#JetReconstruction.detach!-Tuple{JetReconstruction.TiledJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.detach!")],-1)),e[78]||(e[78]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[79]||(e[79]=s('
julia
detach!(jet::TiledJet)

Detach a TiledJet from its linked list by updating the previous and next pointers.

Arguments

  • jet::TiledJet: The TiledJet object to detach.

source

',5))]),t("details",B,[t("summary",null,[e[80]||(e[80]=t("a",{id:"JetReconstruction.determine_rapidity_extent-Union{Tuple{Vector{T}}, Tuple{T}} where T<:AbstractFloat",href:"#JetReconstruction.determine_rapidity_extent-Union{Tuple{Vector{T}}, Tuple{T}} where T<:AbstractFloat"},[t("span",{class:"jlbinding"},"JetReconstruction.determine_rapidity_extent")],-1)),e[81]||(e[81]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[82]||(e[82]=s('
julia
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).

Arguments

  • eta::Vector{T}: A vector of rapidity values.

Returns

  • minrap::T: The minimum rapidity value.

  • maxrap::T: The maximum rapidity value.

source

',8))]),t("details",M,[t("summary",null,[e[83]||(e[83]=t("a",{id:"JetReconstruction.dij-NTuple{4, Any}",href:"#JetReconstruction.dij-NTuple{4, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.dij")],-1)),e[84]||(e[84]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[85]||(e[85]=s('
julia
dij(i, kt2_array, nn, nndist)

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.ßß

Arguments

  • i: The index of the element.

  • kt2_array: An array of kt2 values.

  • nn: An array of nearest neighbors.

  • nndist: An array of nearest neighbor distances.

Returns

  • The computed dij value.

source

',7))]),t("details",D,[t("summary",null,[e[86]||(e[86]=t("a",{id:"JetReconstruction.dij_dist-NTuple{4, Any}",href:"#JetReconstruction.dij_dist-NTuple{4, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.dij_dist")],-1)),e[87]||(e[87]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[92]||(e[92]=s('
julia
dij_dist(eereco, i, j, dij_factor)
',1)),t("p",null,[e[90]||(e[90]=i("Calculate the dij distance between two ")),t("mjx-container",H,[(a(),l("svg",I,e[88]||(e[88]=[s('',1)]))),e[89]||(e[89]=t("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[t("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[t("msup",null,[t("mi",null,"e"),t("mo",null,"+")]),t("msup",null,[t("mi",null,"e"),t("mo",null,"−")])])],-1))]),e[91]||(e[91]=i("jets."))]),e[93]||(e[93]=s('

Arguments

  • eereco: The array of EERecoJet objects.

  • i: The first jet.

  • j: The second jet.

  • dij_factor: The scaling factor to multiply the dij distance by.

Returns

  • The dij distance between i and j.

source

',5))]),t("details",q,[t("summary",null,[e[94]||(e[94]=t("a",{id:"JetReconstruction.dist-NTuple{4, Any}",href:"#JetReconstruction.dist-NTuple{4, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.dist")],-1)),e[95]||(e[95]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[96]||(e[96]=s('
julia
dist(i, j, rapidity_array, phi_array)

Compute the distance between points in a 2D space defined by rapidity and phi coordinates.

Arguments

  • i::Int: Index of the first point to consider (indexes into rapidity_array and phi_array).

  • j::Int: Index of the second point to consider (indexes into rapidity_array and phi_array).

  • rapidity_array::Vector{Float64}: Array of rapidity coordinates.

  • phi_array::Vector{Float64}: Array of phi coordinates.

Returns

  • distance::Float64: The distance between the two points.

source

',7))]),t("details",S,[t("summary",null,[e[97]||(e[97]=t("a",{id:"JetReconstruction.do_iB_recombination_step!-Tuple{ClusterSequence, Any, Any}",href:"#JetReconstruction.do_iB_recombination_step!-Tuple{ClusterSequence, Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.do_iB_recombination_step!")],-1)),e[98]||(e[98]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[99]||(e[99]=s('
julia
do_iB_recombination_step!(clusterseq::ClusterSequence, jet_i, diB)

Bookkeeping for recombining a jet with the beam (i.e., finalising the jet) by adding a step to the history of the cluster sequence.

Arguments

  • clusterseq::ClusterSequence: The cluster sequence object.

  • jet_i: The index of the jet.

  • diB: The diB value.

source

',5))]),t("details",O,[t("summary",null,[e[100]||(e[100]=t("a",{id:"JetReconstruction.do_ij_recombination_step!",href:"#JetReconstruction.do_ij_recombination_step!"},[t("span",{class:"jlbinding"},"JetReconstruction.do_ij_recombination_step!")],-1)),e[101]||(e[101]=i()),o(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[102]||(e[102]=s('
julia
do_ij_recombination_step!(clusterseq::ClusterSequence, jet_i, jet_j, dij, recombine=+)

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.

source

',9))]),t("details",N,[t("summary",null,[e[103]||(e[103]=t("a",{id:"JetReconstruction.energy-Tuple{PseudoJet}",href:"#JetReconstruction.energy-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.energy")],-1)),e[104]||(e[104]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[105]||(e[105]=s('
julia
energy(p::PseudoJet)

Return the energy of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The energy of the PseudoJet.

source

',7))]),t("details",V,[t("summary",null,[e[106]||(e[106]=t("a",{id:"JetReconstruction.eta-Tuple{PseudoJet}",href:"#JetReconstruction.eta-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.eta")],-1)),e[107]||(e[107]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[108]||(e[108]=s('
julia
eta(p::PseudoJet)

Compute the pseudorapidity (η) of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the pseudorapidity.

Returns

  • The pseudorapidity (η) of the PseudoJet.

source

',7))]),t("details",z,[t("summary",null,[e[109]||(e[109]=t("a",{id:"JetReconstruction.fast_findmin-Tuple{Any, Any}",href:"#JetReconstruction.fast_findmin-Tuple{Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.fast_findmin")],-1)),e[110]||(e[110]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[111]||(e[111]=s('
julia
fast_findmin(dij, n)

Find the minimum value and its index in the first n elements of the dij array. The use of @turbo macro gives a significiant performance boost.

Arguments

  • dij: An array of values.

  • n: The number of elements to consider in the dij array.

Returns

  • dij_min: The minimum value in the first n elements of the dij array.

  • best: The index of the minimum value in the dij array.

source

',7))]),t("details",Z,[t("summary",null,[e[112]||(e[112]=t("a",{id:"JetReconstruction.find_tile_neighbours!-NTuple{5, Any}",href:"#JetReconstruction.find_tile_neighbours!-NTuple{5, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.find_tile_neighbours!")],-1)),e[113]||(e[113]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[114]||(e[114]=s('
julia
find_tile_neighbours!(tile_union, jetA, jetB, oldB, tiling)

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.

source

',7))]),t("details",U,[t("summary",null,[e[115]||(e[115]=t("a",{id:"JetReconstruction.geometric_distance-NTuple{4, AbstractFloat}",href:"#JetReconstruction.geometric_distance-NTuple{4, AbstractFloat}"},[t("span",{class:"jlbinding"},"JetReconstruction.geometric_distance")],-1)),e[116]||(e[116]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[117]||(e[117]=s('
julia
geometric_distance(eta1::AbstractFloat, phi1::AbstractFloat, eta2::AbstractFloat, phi2::AbstractFloat)

Compute the geometric distance between two points in the rap-phi plane.

Arguments

  • eta1::AbstractFloat: The eta coordinate of the first point.

  • phi1::AbstractFloat: The phi coordinate of the first point.

  • eta2::AbstractFloat: The eta coordinate of the second point.

  • phi2::AbstractFloat: The phi coordinate of the second point.

Returns

  • distance::Float64: The geometric distance between the two points.

source

',7))]),t("details",X,[t("summary",null,[e[118]||(e[118]=t("a",{id:"JetReconstruction.get_algorithm_power_consistency-Tuple{}",href:"#JetReconstruction.get_algorithm_power_consistency-Tuple{}"},[t("span",{class:"jlbinding"},"JetReconstruction.get_algorithm_power_consistency")],-1)),e[119]||(e[119]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[120]||(e[120]=s('
julia
get_algorithm_power_consistency(; p::Union{Real, Nothing}, algorithm::Union{JetAlgorithm, Nothing})

Get the algorithm and power consistency correct

This function checks the consistency between the algorithm and power parameters. If the algorithm is specified, it checks if the power parameter is consistent with the algorithm's known power. If the power parameter is not specified, it sets the power parameter based on the algorithm. If neither the algorithm nor the power parameter is specified, it throws an ArgumentError.

Arguments

  • p::Union{Real, Nothing}: The power value.

  • algorithm::Union{JetAlgorithm, Nothing}: The algorithm.

Returns

A named tuple of the consistent power and algorithm values.

Throws

  • ArgumentError: If the algorithm and power are inconsistent or if neither the algorithm nor the power is specified.

source

',10))]),t("details",G,[t("summary",null,[e[121]||(e[121]=t("a",{id:"JetReconstruction.get_all_ancestors-Tuple{Any, ClusterSequence}",href:"#JetReconstruction.get_all_ancestors-Tuple{Any, ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.get_all_ancestors")],-1)),e[122]||(e[122]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[123]||(e[123]=s('
julia
get_all_ancestors(idx, cs::ClusterSequence)

Recursively finds all ancestors of a given index in a ClusterSequence object.

Arguments

  • idx: The index of the jet for which to find ancestors.

  • cs: The ClusterSequence object containing the jet history.

Returns

An array of indices representing the ancestors of the given jet.

source

',7))]),t("details",W,[t("summary",null,[e[124]||(e[124]=t("a",{id:"JetReconstruction.get_dij_dist-NTuple{4, Any}",href:"#JetReconstruction.get_dij_dist-NTuple{4, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.get_dij_dist")],-1)),e[125]||(e[125]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[126]||(e[126]=s('
julia
get_dij_dist(nn_dist, kt2_1, kt2_2, R2)

Compute the dij metric distance between two jets.

Arguments

  • nn_dist: The nearest-neighbor distance between two jets.

  • kt2_1: The squared momentum metric value of the first jet.

  • kt2_2: The squared momentum metric value of the second jet.

  • R2: The jet radius parameter squared.

Returns

The distance between the two jets.

If kt2_2 is equal to 0.0, then the first jet doesn't actually have a valid neighbour, so it's treated as a single jet adjecent to the beam.

source

',8))]),t("details",$,[t("summary",null,[e[127]||(e[127]=t("a",{id:"JetReconstruction.get_tile-Tuple{JetReconstruction.TilingDef, AbstractFloat, AbstractFloat}",href:"#JetReconstruction.get_tile-Tuple{JetReconstruction.TilingDef, AbstractFloat, AbstractFloat}"},[t("span",{class:"jlbinding"},"JetReconstruction.get_tile")],-1)),e[128]||(e[128]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[129]||(e[129]=s('
julia
get_tile(tiling_setup::TilingDef, eta::AbstractFloat, phi::AbstractFloat)

Given a tiling_setup object, eta and phi values, this function calculates the tile indices for the given eta and phi values.

Arguments

  • tiling_setup: A TilingDef object that contains the tiling setup parameters.

  • eta: The eta value for which to calculate the tile index.

  • phi: The phi value for which to calculate the tile index.

Returns

  • ieta: The tile index along the eta direction.

  • iphi: The tile index along the phi direction.

source

',7))]),t("details",K,[t("summary",null,[e[130]||(e[130]=t("a",{id:"JetReconstruction.get_tile_cartesian_indices-Tuple{JetReconstruction.TilingDef, Int64}",href:"#JetReconstruction.get_tile_cartesian_indices-Tuple{JetReconstruction.TilingDef, Int64}"},[t("span",{class:"jlbinding"},"JetReconstruction.get_tile_cartesian_indices")],-1)),e[131]||(e[131]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[132]||(e[132]=s('
julia
get_tile_linear_index(tiling_setup::TilingDef, i_η::Int, i_ϕ::Int)

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.

Returns

  • The linear index of the tile.

source

',7))]),t("details",Y,[t("summary",null,[e[133]||(e[133]=t("a",{id:"JetReconstruction.initial_history-Tuple{Any}",href:"#JetReconstruction.initial_history-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.initial_history")],-1)),e[134]||(e[134]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[135]||(e[135]=s('
julia
initial_history(particles)

Create an initial history for the given particles.

Arguments

  • particles: The initial vector of stable particles.

Returns

  • history: An array of HistoryElement objects.

  • Qtot: The total energy in the event.

source

',7))]),t("details",ee,[t("summary",null,[e[136]||(e[136]=t("a",{id:"JetReconstruction.insert!-Tuple{JetReconstruction.TiledJet, JetReconstruction.TiledJet}",href:"#JetReconstruction.insert!-Tuple{JetReconstruction.TiledJet, JetReconstruction.TiledJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.insert!")],-1)),e[137]||(e[137]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[138]||(e[138]=s('
julia
insert!(nextjet::TiledJet, jettomove::TiledJet)

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.

Example

source

',6))]),t("details",te,[t("summary",null,[e[139]||(e[139]=t("a",{id:"JetReconstruction.is_ee-Tuple{JetReconstruction.JetAlgorithm.Algorithm}",href:"#JetReconstruction.is_ee-Tuple{JetReconstruction.JetAlgorithm.Algorithm}"},[t("span",{class:"jlbinding"},"JetReconstruction.is_ee")],-1)),e[140]||(e[140]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[141]||(e[141]=s('
julia
is_ee(algorithm::JetAlgorithm.Algorithm)

Check if the algorithm is a e+e- reconstruction algorithm.

Returns

true if the algorithm is a e+e- reconstruction algorithm, false otherwise.

source

',5))]),t("details",ie,[t("summary",null,[e[142]||(e[142]=t("a",{id:"JetReconstruction.is_pp-Tuple{JetReconstruction.JetAlgorithm.Algorithm}",href:"#JetReconstruction.is_pp-Tuple{JetReconstruction.JetAlgorithm.Algorithm}"},[t("span",{class:"jlbinding"},"JetReconstruction.is_pp")],-1)),e[143]||(e[143]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[144]||(e[144]=s('
julia
is_pp(algorithm::JetAlgorithm.Algorithm)

Check if the algorithm is a pp reconstruction algorithm.

Returns

true if the algorithm is a pp reconstruction algorithm, false otherwise.

source

',5))]),t("details",se,[t("summary",null,[e[145]||(e[145]=t("a",{id:"JetReconstruction.isvalid-Tuple{JetReconstruction.TiledJet}",href:"#JetReconstruction.isvalid-Tuple{JetReconstruction.TiledJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.isvalid")],-1)),e[146]||(e[146]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[147]||(e[147]=s('
julia
isvalid(t::TiledJet)

Check if a TiledJet is valid, by seeing if it is not the noTiledJet object.

Arguments

  • t::TiledJet: The TiledJet object to check.

Returns

  • Bool: true if the TiledJet object is valid, false otherwise.

source

',7))]),t("details",ne,[t("summary",null,[e[148]||(e[148]=t("a",{id:"JetReconstruction.jet_ranks-Tuple{ClusterSequence}",href:"#JetReconstruction.jet_ranks-Tuple{ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.jet_ranks")],-1)),e[149]||(e[149]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[150]||(e[150]=s('
julia
jet_ranks(clusterseq::ClusterSequence; compare_fn = JetReconstruction.pt)

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.

source

',9))]),t("details",oe,[t("summary",null,[e[151]||(e[151]=t("a",{id:"JetReconstruction.m-Tuple{PseudoJet}",href:"#JetReconstruction.m-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.m")],-1)),e[152]||(e[152]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[153]||(e[153]=s('
julia
m(p::PseudoJet)

Compute the invariant mass of a PseudoJet object. By convention if m^2 < 0, then -sqrt{(-m^2)} is returned.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the invariant mass.

Returns

The invariant mass of the PseudoJet object.

source

',7))]),t("details",le,[t("summary",null,[e[154]||(e[154]=t("a",{id:"JetReconstruction.m2-Tuple{PseudoJet}",href:"#JetReconstruction.m2-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.m2")],-1)),e[155]||(e[155]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[156]||(e[156]=s('
julia
m2(p::PseudoJet)

Calculate the invariant mass squared (m^2) of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object for which to calculate the invariant mass squared.

Returns

  • The invariant mass squared (m^2) of the PseudoJet.

source

',7))]),t("details",ae,[t("summary",null,[e[157]||(e[157]=t("a",{id:"JetReconstruction.mag-Tuple{PseudoJet}",href:"#JetReconstruction.mag-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.mag")],-1)),e[158]||(e[158]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[159]||(e[159]=s('
julia
mag(p::PseudoJet)

Return the magnitude of the momentum of a PseudoJet, |p|.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the magnitude.

Returns

The magnitude of the PseudoJet object.

source

',7))]),t("details",re,[t("summary",null,[e[160]||(e[160]=t("a",{id:"JetReconstruction.mass-Tuple{PseudoJet}",href:"#JetReconstruction.mass-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.mass")],-1)),e[161]||(e[161]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[162]||(e[162]=s('
julia
mass(p::PseudoJet)

Compute the invariant mass (alias for m(p)).

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the mass.

Returns

  • The mass of the PseudoJet.

source

',7))]),t("details",de,[t("summary",null,[e[163]||(e[163]=t("a",{id:"JetReconstruction.mass2",href:"#JetReconstruction.mass2"},[t("span",{class:"jlbinding"},"JetReconstruction.mass2")],-1)),e[164]||(e[164]=i()),o(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[165]||(e[165]=t("p",null,[i("Alias for "),t("code",null,"m2"),i(" function")],-1)),e[166]||(e[166]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/70c372b379cb343a4cade52fc0231b7a7721dd16/src/Pseudojet.jl#L370",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",pe,[t("summary",null,[e[167]||(e[167]=t("a",{id:"JetReconstruction.merge_steps-Tuple{ClusterSequence}",href:"#JetReconstruction.merge_steps-Tuple{ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.merge_steps")],-1)),e[168]||(e[168]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[169]||(e[169]=s('
julia
merge_steps(clusterseq::ClusterSequence)

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.

Returns

  • merge_steps::Int: The number of merge steps.

source

',7))]),t("details",ce,[t("summary",null,[e[170]||(e[170]=t("a",{id:"JetReconstruction.phi-Tuple{PseudoJet}",href:"#JetReconstruction.phi-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.phi")],-1)),e[171]||(e[171]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[172]||(e[172]=s('
julia
phi(p::PseudoJet)

Compute the ϕ angle of a PseudoJet object p.

Note this function is a wrapper for phi_02pi(p).

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the azimuthal angle.

Returns

  • The azimuthal angle of p in the range [0, 2π).

source

',8))]),t("details",he,[t("summary",null,[e[173]||(e[173]=t("a",{id:"JetReconstruction.phi_02pi-Tuple{PseudoJet}",href:"#JetReconstruction.phi_02pi-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.phi_02pi")],-1)),e[174]||(e[174]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[175]||(e[175]=s('
julia
phi_02pi(p::PseudoJet)

Compute the azimuthal angle of a PseudoJet object p in the range [0, 2π).

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the azimuthal angle.

Returns

  • The azimuthal angle of p in the range [0, 2π).

source

',7))]),t("details",ue,[t("summary",null,[e[176]||(e[176]=t("a",{id:"JetReconstruction.pt-Tuple{PseudoJet}",href:"#JetReconstruction.pt-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.pt")],-1)),e[177]||(e[177]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[178]||(e[178]=s('
julia
pt(p::PseudoJet)

Compute the scalar transverse momentum (pt) of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the transverse momentum.

Returns

  • The transverse momentum (pt) of the PseudoJet.

source

',7))]),t("details",ge,[t("summary",null,[e[179]||(e[179]=t("a",{id:"JetReconstruction.pt2-Tuple{PseudoJet}",href:"#JetReconstruction.pt2-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.pt2")],-1)),e[180]||(e[180]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[181]||(e[181]=s('
julia
pt2(p::PseudoJet)

Get the squared transverse momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The squared transverse momentum of the PseudoJet.

source

',7))]),t("details",ke,[t("summary",null,[e[182]||(e[182]=t("a",{id:"JetReconstruction.px-Tuple{PseudoJet}",href:"#JetReconstruction.px-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.px")],-1)),e[183]||(e[183]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[184]||(e[184]=s('
julia
px(p::PseudoJet)

Return the x-component of the momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The x-component of the momentum of the PseudoJet.

source

',7))]),t("details",be,[t("summary",null,[e[185]||(e[185]=t("a",{id:"JetReconstruction.py-Tuple{PseudoJet}",href:"#JetReconstruction.py-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.py")],-1)),e[186]||(e[186]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[187]||(e[187]=s('
julia
py(p::PseudoJet)

Return the y-component of the momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The y-component of the momentum of the PseudoJet.

source

',7))]),t("details",me,[t("summary",null,[e[188]||(e[188]=t("a",{id:"JetReconstruction.pz-Tuple{PseudoJet}",href:"#JetReconstruction.pz-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.pz")],-1)),e[189]||(e[189]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[190]||(e[190]=s('
julia
pz(p::PseudoJet)

Return the z-component of the momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The z-component of the momentum of the PseudoJet.

source

',7))]),t("details",ye,[t("summary",null,[e[191]||(e[191]=t("a",{id:"JetReconstruction.rapidity-Tuple{PseudoJet}",href:"#JetReconstruction.rapidity-Tuple{PseudoJet}"},[t("span",{class:"jlbinding"},"JetReconstruction.rapidity")],-1)),e[192]||(e[192]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[193]||(e[193]=s('
julia
rapidity(p::PseudoJet)

Compute the rapidity of a PseudoJet object.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the rapidity.

Returns

The rapidity of the PseudoJet object.

source

',7))]),t("details",je,[t("summary",null,[e[194]||(e[194]=t("a",{id:"JetReconstruction.reco_state-Tuple{ClusterSequence, Any}",href:"#JetReconstruction.reco_state-Tuple{ClusterSequence, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.reco_state")],-1)),e[195]||(e[195]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[196]||(e[196]=s('
julia
reco_state(cs::ClusterSequence, pt_ranks; iteration=0)

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.

source

',11))]),t("details",Te,[t("summary",null,[e[197]||(e[197]=t("a",{id:"JetReconstruction.rightneighbours-Tuple{Int64, JetReconstruction.Tiling}",href:"#JetReconstruction.rightneighbours-Tuple{Int64, JetReconstruction.Tiling}"},[t("span",{class:"jlbinding"},"JetReconstruction.rightneighbours")],-1)),e[198]||(e[198]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[199]||(e[199]=s('
julia
rightneighbours(center::Int, tiling::Tiling)

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.

source

',7))]),t("details",fe,[t("summary",null,[e[200]||(e[200]=t("a",{id:"JetReconstruction.set_momentum!-Tuple{PseudoJet, Vararg{Any, 4}}",href:"#JetReconstruction.set_momentum!-Tuple{PseudoJet, Vararg{Any, 4}}"},[t("span",{class:"jlbinding"},"JetReconstruction.set_momentum!")],-1)),e[201]||(e[201]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[202]||(e[202]=s('
julia
set_momentum!(j::PseudoJet, px, py, pz, E)

Set the momentum components and energy of a PseudoJet object.

Arguments

  • j::PseudoJet: The PseudoJet object to set the momentum for.

  • px: The x-component of the momentum.

  • py: The y-component of the momentum.

  • pz: The z-component of the momentum.

  • E: The energy of the particle.

source

',5))]),t("details",Je,[t("summary",null,[e[203]||(e[203]=t("a",{id:"JetReconstruction.set_nearest_neighbours!-Tuple{ClusterSequence, JetReconstruction.Tiling, Vector{JetReconstruction.TiledJet}}",href:"#JetReconstruction.set_nearest_neighbours!-Tuple{ClusterSequence, JetReconstruction.Tiling, Vector{JetReconstruction.TiledJet}}"},[t("span",{class:"jlbinding"},"JetReconstruction.set_nearest_neighbours!")],-1)),e[204]||(e[204]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[205]||(e[205]=s('
julia
set_nearest_neighbours!(clusterseq::ClusterSequence, tiling::Tiling, tiledjets::Vector{TiledJet})

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.

source

',9))]),t("details",Ee,[t("summary",null,[e[206]||(e[206]=t("a",{id:"JetReconstruction.setup_tiling-Union{Tuple{T}, Tuple{Vector{T}, AbstractFloat}} where T<:AbstractFloat",href:"#JetReconstruction.setup_tiling-Union{Tuple{T}, Tuple{Vector{T}, AbstractFloat}} where T<:AbstractFloat"},[t("span",{class:"jlbinding"},"JetReconstruction.setup_tiling")],-1)),e[207]||(e[207]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[208]||(e[208]=s('
julia
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.

source

',9))]),t("details",ve,[t("summary",null,[e[209]||(e[209]=t("a",{id:"JetReconstruction.surrounding-Tuple{Int64, JetReconstruction.Tiling}",href:"#JetReconstruction.surrounding-Tuple{Int64, JetReconstruction.Tiling}"},[t("span",{class:"jlbinding"},"JetReconstruction.surrounding")],-1)),e[210]||(e[210]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[211]||(e[211]=s('
julia
surrounding(center::Int, tiling::Tiling)

Compute the surrounding indices of a given center index in a tiling.

Arguments

  • center::Int: The center index.

  • tiling::Tiling: The tiling object.

Returns

  • Surrounding: An object containing the surrounding indices.

source

',7))]),t("details",Re,[t("summary",null,[e[212]||(e[212]=t("a",{id:"JetReconstruction.tile_index-Tuple{Any, Float64, Float64}",href:"#JetReconstruction.tile_index-Tuple{Any, Float64, Float64}"},[t("span",{class:"jlbinding"},"JetReconstruction.tile_index")],-1)),e[213]||(e[213]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[214]||(e[214]=s('
julia
tile_index(tiling_setup, eta::Float64, phi::Float64)

Compute the tile index for a given (eta, phi) coordinate.

Arguments

  • tiling_setup: The tiling setup object containing the tile size and number of tiles.

  • eta::Float64: The eta coordinate.

  • phi::Float64: The phi coordinate.

Returns

The tile index corresponding to the (eta, phi) coordinate.

source

',7))]),t("details",Ce,[t("summary",null,[e[215]||(e[215]=t("a",{id:"JetReconstruction.tiledjet_remove_from_tiles!-Tuple{Any, Any}",href:"#JetReconstruction.tiledjet_remove_from_tiles!-Tuple{Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.tiledjet_remove_from_tiles!")],-1)),e[216]||(e[216]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[217]||(e[217]=s('
julia
tiledjet_remove_from_tiles!(tiling, jet)

Remove a jet from the given tiling structure.

Arguments

  • tiling: The tiling structure from which the jet will be removed.

  • jet: The jet to be removed from the tiling structure.

Description

This function removes a jet from the tiling structure. It adjusts the linked list to be consistent with the removal of the jet.

source

',7))]),t("details",Fe,[t("summary",null,[e[218]||(e[218]=t("a",{id:"JetReconstruction.tiledjet_set_jetinfo!-Tuple{JetReconstruction.TiledJet, ClusterSequence, JetReconstruction.Tiling, Any, Any, Any}",href:"#JetReconstruction.tiledjet_set_jetinfo!-Tuple{JetReconstruction.TiledJet, ClusterSequence, JetReconstruction.Tiling, Any, Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.tiledjet_set_jetinfo!")],-1)),e[219]||(e[219]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[220]||(e[220]=s('
julia
tiledjet_set_jetinfo!(jet::TiledJet, clusterseq::ClusterSequence, tiling::Tiling, jets_index, R2, p)

Initialise a tiled jet from a PseudoJet (using an index into our ClusterSequence)

Arguments:

  • jet::TiledJet: The TiledJet object to set the information for.

  • clusterseq::ClusterSequence: The ClusterSequence object containing the jets.

  • tiling::Tiling: The Tiling object containing the tile information.

  • jets_index: The index of the jet in the ClusterSequence.

  • R2: The jet radius parameter squared.

  • p: The power to raise the pt2 value to.

This function sets the eta, phi, kt2, jets_index, NN_dist, NN, tile_index, previous, and next fields of the TiledJet object.

Returns:

  • nothing

source

',8))]),t("details",Ae,[t("summary",null,[e[221]||(e[221]=t("a",{id:"JetReconstruction.upd_nn_crosscheck!-Tuple{Int64, Int64, Int64, Vararg{Any, 5}}",href:"#JetReconstruction.upd_nn_crosscheck!-Tuple{Int64, Int64, Int64, Vararg{Any, 5}}"},[t("span",{class:"jlbinding"},"JetReconstruction.upd_nn_crosscheck!")],-1)),e[222]||(e[222]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[223]||(e[223]=s('
julia
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.

source

',5))]),t("details",xe,[t("summary",null,[e[224]||(e[224]=t("a",{id:"JetReconstruction.upd_nn_nocross!-Tuple{Int64, Int64, Int64, Vararg{Any, 5}}",href:"#JetReconstruction.upd_nn_nocross!-Tuple{Int64, Int64, Int64, Vararg{Any, 5}}"},[t("span",{class:"jlbinding"},"JetReconstruction.upd_nn_nocross!")],-1)),e[225]||(e[225]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[226]||(e[226]=s('
julia
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.

source

',5))]),t("details",_e,[t("summary",null,[e[227]||(e[227]=t("a",{id:"JetReconstruction.upd_nn_step!-NTuple{12, Any}",href:"#JetReconstruction.upd_nn_step!-NTuple{12, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.upd_nn_step!")],-1)),e[228]||(e[228]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[229]||(e[229]=s('
julia
upd_nn_step!(i, j, k, N, Nn, kt2_array, rapidity_array, phi_array, R2, nndist, nn, nndij)

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.

source

',6))]),t("details",Qe,[t("summary",null,[e[230]||(e[230]=t("a",{id:"JetReconstruction.η",href:"#JetReconstruction.η"},[t("span",{class:"jlbinding"},"JetReconstruction.η")],-1)),e[231]||(e[231]=i()),o(n,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[232]||(e[232]=s('
julia
const η = eta

Alias for the pseudorapidity function, eta.

source

',3))]),t("details",Pe,[t("summary",null,[e[233]||(e[233]=t("a",{id:"JetReconstruction.FourMomentum",href:"#JetReconstruction.FourMomentum"},[t("span",{class:"jlbinding"},"JetReconstruction.FourMomentum")],-1)),e[234]||(e[234]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[235]||(e[235]=t("p",null,"Interface for composite types that includes fields px, py, py, and E that represents the components of a four-momentum vector.",-1)),e[236]||(e[236]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/70c372b379cb343a4cade52fc0231b7a7721dd16/src/Pseudojet.jl#L6-L8",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",we,[t("summary",null,[e[237]||(e[237]=t("a",{id:"JetReconstruction.HistoryElement",href:"#JetReconstruction.HistoryElement"},[t("span",{class:"jlbinding"},"JetReconstruction.HistoryElement")],-1)),e[238]||(e[238]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[239]||(e[239]=s('
julia
struct HistoryElement

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.

source

',5))]),t("details",Le,[t("summary",null,[e[240]||(e[240]=t("a",{id:"JetReconstruction.HistoryElement-Tuple{Any}",href:"#JetReconstruction.HistoryElement-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.HistoryElement")],-1)),e[241]||(e[241]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[242]||(e[242]=s('
julia
HistoryElement(jetp_index)

Constructs a HistoryElement object with the given jetp_index, used for initialising the history with original particles.

Arguments

  • jetp_index: The index of the jetp.

Returns

A HistoryElement object.

source

',7))]),t("details",Be,[t("summary",null,[e[243]||(e[243]=t("a",{id:"JetReconstruction.JetWithAncestors",href:"#JetReconstruction.JetWithAncestors"},[t("span",{class:"jlbinding"},"JetReconstruction.JetWithAncestors")],-1)),e[244]||(e[244]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[245]||(e[245]=s('
julia
struct JetWithAncestors

A struct representing a jet with its origin ancestors.

Fields

  • self::PseudoJet: The PseudoJet object for this jet.

  • jetp_index::Int: The index of the jet in the corresponding cluster sequence.

  • ancestors::Set{Int}: A set of indices representing the jetp_indexes of ancestors of the jet (in the cluster sequence).

  • jet_rank::Int: The rank of the jet based on a comparison of all of the jet's ancestors

Note

This structure needs its associated cluster sequence origin to be useful.

source

',7))]),t("details",Me,[t("summary",null,[e[246]||(e[246]=t("a",{id:"JetReconstruction.Surrounding",href:"#JetReconstruction.Surrounding"},[t("span",{class:"jlbinding"},"JetReconstruction.Surrounding")],-1)),e[247]||(e[247]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[248]||(e[248]=s('
julia
struct Surrounding{N}

Structure used for iterating over neighbour tiles.

Fields

  • indices::NTuple{N, Int}: A tuple of N integers representing the indices.

source

',5))]),t("details",De,[t("summary",null,[e[249]||(e[249]=t("a",{id:"JetReconstruction.TiledJet",href:"#JetReconstruction.TiledJet"},[t("span",{class:"jlbinding"},"JetReconstruction.TiledJet")],-1)),e[250]||(e[250]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[251]||(e[251]=s('
julia
struct TiledJet

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.

  • NN::TiledJet: The nearest neighbor.

  • previous::TiledJet: The previous jet.

  • next::TiledJet: The next jet.

source

',5))]),t("details",He,[t("summary",null,[e[252]||(e[252]=t("a",{id:"JetReconstruction.TiledJet-Tuple{Any}",href:"#JetReconstruction.TiledJet-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.TiledJet")],-1)),e[253]||(e[253]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[254]||(e[254]=s('
julia
TiledJet(id)

Constructs a TiledJet object with the given id and initializes its properties to zero.

Arguments

  • id: The ID of the TiledJet object.

Returns

A TiledJet object with the specified id and values set to zero or noTiledJet.

source

',7))]),t("details",Ie,[t("summary",null,[e[255]||(e[255]=t("a",{id:"JetReconstruction.Tiling",href:"#JetReconstruction.Tiling"},[t("span",{class:"jlbinding"},"JetReconstruction.Tiling")],-1)),e[256]||(e[256]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[257]||(e[257]=s('
julia
struct Tiling

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).

source

',5))]),t("details",qe,[t("summary",null,[e[258]||(e[258]=t("a",{id:"JetReconstruction.Tiling-Tuple{JetReconstruction.TilingDef}",href:"#JetReconstruction.Tiling-Tuple{JetReconstruction.TilingDef}"},[t("span",{class:"jlbinding"},"JetReconstruction.Tiling")],-1)),e[259]||(e[259]=i()),o(n,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[260]||(e[260]=s('
julia
Tiling(setup::TilingDef)

Constructs a intial Tiling object based on the provided setup parameters.

Arguments

  • setup::TilingDef: The setup parameters for the tiling.

Returns

A Tiling object.

source

',7))]),t("details",Se,[t("summary",null,[e[261]||(e[261]=t("a",{id:"JetReconstruction.TilingDef",href:"#JetReconstruction.TilingDef"},[t("span",{class:"jlbinding"},"JetReconstruction.TilingDef")],-1)),e[262]||(e[262]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[263]||(e[263]=s(`
julia
struct TilingDef

A struct representing the definition of a spcific tiling scheme.

Fields

  • _tiles_eta_min::Float64: The minimum rapidity of the tiles.

  • _tiles_eta_max::Float64: The maximum rapidity of the tiles.

  • _tile_size_eta::Float64: The size of a tile in rapidity (usually R^2).

  • _tile_size_phi::Float64: The size of a tile in phi (usually a bit more than R^2).

  • _n_tiles_eta::Int: The number of tiles across rapidity.

  • _n_tiles_phi::Int: The number of tiles across phi.

  • _n_tiles::Int: The total number of tiles.

  • _tiles_ieta_min::Int: The minimum rapidity tile index.

  • _tiles_ieta_max::Int: The maximum rapidity tile index.

Constructor

TilingDef(_tiles_eta_min, _tiles_eta_max, _tile_size_eta, _tile_size_phi,
+	_n_tiles_eta, _n_tiles_phi, _tiles_ieta_min, _tiles_ieta_max)

Constructs a TilingDef object with the given parameters.

source

`,8))]),t("details",Oe,[t("summary",null,[e[264]||(e[264]=t("a",{id:"JetReconstruction.neighbour_tiles",href:"#JetReconstruction.neighbour_tiles"},[t("span",{class:"jlbinding"},"JetReconstruction.neighbour_tiles")],-1)),e[265]||(e[265]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[266]||(e[266]=s(`
julia
struct neighbour_tiles

A struct representing the neighbouring tiles.

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

Fields

  • n_η::Int: Number of η tiles

  • n_ϕ::Int: Number of ϕ tiles

  • start_η::Int: Centre η tile coordinate

  • start_ϕ::Int: Centre ϕ tile coordinate

source

`,8))]),t("details",Ne,[t("summary",null,[e[267]||(e[267]=t("a",{id:"JetReconstruction.rightmost_tiles",href:"#JetReconstruction.rightmost_tiles"},[t("span",{class:"jlbinding"},"JetReconstruction.rightmost_tiles")],-1)),e[268]||(e[268]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[269]||(e[269]=s(`
julia
struct rightmost_tiles

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
+XXX

Note, rapidity coordinate must be in range, ϕ coordinate wraps

Fields

  • n_η::Int: Number of η tiles

  • n_ϕ::Int: Number of ϕ tiles

  • start_η::Int: Centre η tile coordinate

  • start_ϕ::Int: Centre ϕ tile coordinate

source

`,8))]),t("details",Ne,[t("summary",null,[e[267]||(e[267]=t("a",{id:"JetReconstruction.rightmost_tiles",href:"#JetReconstruction.rightmost_tiles"},[t("span",{class:"jlbinding"},"JetReconstruction.rightmost_tiles")],-1)),e[268]||(e[268]=i()),o(n,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[269]||(e[269]=s(`
julia
struct rightmost_tiles

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

Fields

  • n_η::Int: Number of η tiles

  • n_ϕ::Int: Number of ϕ tiles

  • start_η::Int: Centre η tile coordinate

  • start_ϕ::Int: Centre ϕ tile coordinate

source

`,7))])])}const Ke=r(p,[["render",Ve]]);export{$e as __pageData,Ke as default}; +OOO

Note, rapidity coordinate must be in range, ϕ coordinate wraps

Fields

  • n_η::Int: Number of η tiles

  • n_ϕ::Int: Number of ϕ tiles

  • start_η::Int: Centre η tile coordinate

  • start_ϕ::Int: Centre ϕ tile coordinate

source

`,7))])])}const Ke=r(p,[["render",Ve]]);export{$e as __pageData,Ke as default}; diff --git a/dev/assets/lib_public.md.CDXEV-o0.lean.js b/dev/assets/lib_public.md.ClckhHDw.js similarity index 91% rename from dev/assets/lib_public.md.CDXEV-o0.lean.js rename to dev/assets/lib_public.md.ClckhHDw.js index 1a87660..89a6ebe 100644 --- a/dev/assets/lib_public.md.CDXEV-o0.lean.js +++ b/dev/assets/lib_public.md.ClckhHDw.js @@ -1,13 +1,13 @@ -import{_ as l,c as o,a5 as n,j as t,a as i,G as a,B as p,o as r}from"./chunks/framework.BonP4S8S.js";const I=JSON.parse('{"title":"Jet Reconstruction Public Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"lib/public.md","filePath":"lib/public.md","lastUpdated":null}'),h={name:"lib/public.md"},c={class:"jldocstring custom-block",open:""},d={class:"jldocstring custom-block",open:""},u={class:"jldocstring custom-block",open:""},k={class:"jldocstring custom-block",open:""},g={class:"jldocstring custom-block",open:""},y={class:"jldocstring custom-block",open:""},E={class:"jldocstring custom-block",open:""},m={class:"jldocstring custom-block",open:""},b={class:"jldocstring custom-block",open:""},j={class:"jldocstring custom-block",open:""},f={class:"jldocstring custom-block",open:""},F={class:"jldocstring custom-block",open:""},C={class:"jldocstring custom-block",open:""},v={class:"jldocstring custom-block",open:""},J={class:"jldocstring custom-block",open:""},T={class:"jldocstring custom-block",open:""},A={class:"jldocstring custom-block",open:""},R={class:"jldocstring custom-block",open:""},x={class:"jldocstring custom-block",open:""},D={class:"jldocstring custom-block",open:""},q={class:"jldocstring custom-block",open:""},B={class:"jldocstring custom-block",open:""},P={class:"jldocstring custom-block",open:""};function _(S,e,L,w,z,V){const s=p("Badge");return r(),o("div",null,[e[71]||(e[71]=n('

Jet Reconstruction Public Documentation

Documentation for JetReconstruction.jl's public interfaces.

Index

Public Methods and Types

',5)),t("details",c,[t("summary",null,[e[0]||(e[0]=t("a",{id:"JetReconstruction.constituents-Tuple{PseudoJet, ClusterSequence}",href:"#JetReconstruction.constituents-Tuple{PseudoJet, ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.constituents")],-1)),e[1]||(e[1]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[2]||(e[2]=n('
julia
constituents(j::PseudoJet, cs::ClusterSequence)

Get the constituents of a given jet in a cluster sequence.

Arguments

  • cs::ClusterSequence: The cluster sequence object.

  • j::PseudoJet: The jet for which to retrieve the constituents.

Returns

An array of PseudoJet objects representing the constituents of the given jet. (That is, the original clusters that were recombined to form this jet.)

source

',7))]),t("details",d,[t("summary",null,[e[3]||(e[3]=t("a",{id:"JetReconstruction.ee_genkt_algorithm-Union{Tuple{Vector{T}}, Tuple{T}} where T",href:"#JetReconstruction.ee_genkt_algorithm-Union{Tuple{Vector{T}}, Tuple{T}} where T"},[t("span",{class:"jlbinding"},"JetReconstruction.ee_genkt_algorithm")],-1)),e[4]||(e[4]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[5]||(e[5]=n(`
julia
ee_genkt_algorithm(particles::Vector{T}; p = -1, R = 4.0,
+import{_ as l,c as o,a5 as a,j as t,a as i,G as n,B as p,o as r}from"./chunks/framework.BtBDBbTG.js";const I=JSON.parse('{"title":"Jet Reconstruction Public Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"lib/public.md","filePath":"lib/public.md","lastUpdated":null}'),h={name:"lib/public.md"},c={class:"jldocstring custom-block",open:""},d={class:"jldocstring custom-block",open:""},u={class:"jldocstring custom-block",open:""},k={class:"jldocstring custom-block",open:""},g={class:"jldocstring custom-block",open:""},y={class:"jldocstring custom-block",open:""},E={class:"jldocstring custom-block",open:""},m={class:"jldocstring custom-block",open:""},b={class:"jldocstring custom-block",open:""},j={class:"jldocstring custom-block",open:""},f={class:"jldocstring custom-block",open:""},F={class:"jldocstring custom-block",open:""},C={class:"jldocstring custom-block",open:""},v={class:"jldocstring custom-block",open:""},J={class:"jldocstring custom-block",open:""},T={class:"jldocstring custom-block",open:""},A={class:"jldocstring custom-block",open:""},R={class:"jldocstring custom-block",open:""},x={class:"jldocstring custom-block",open:""},D={class:"jldocstring custom-block",open:""},q={class:"jldocstring custom-block",open:""},B={class:"jldocstring custom-block",open:""},P={class:"jldocstring custom-block",open:""};function _(S,e,L,w,z,V){const s=p("Badge");return r(),o("div",null,[e[71]||(e[71]=a('

Jet Reconstruction Public Documentation

Documentation for JetReconstruction.jl's public interfaces.

Index

Public Methods and Types

',5)),t("details",c,[t("summary",null,[e[0]||(e[0]=t("a",{id:"JetReconstruction.constituents-Tuple{PseudoJet, ClusterSequence}",href:"#JetReconstruction.constituents-Tuple{PseudoJet, ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.constituents")],-1)),e[1]||(e[1]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[2]||(e[2]=a('
julia
constituents(j::PseudoJet, cs::ClusterSequence)

Get the constituents of a given jet in a cluster sequence.

Arguments

  • cs::ClusterSequence: The cluster sequence object.

  • j::PseudoJet: The jet for which to retrieve the constituents.

Returns

An array of PseudoJet objects representing the constituents of the given jet. (That is, the original clusters that were recombined to form this jet.)

source

',7))]),t("details",d,[t("summary",null,[e[3]||(e[3]=t("a",{id:"JetReconstruction.ee_genkt_algorithm-Union{Tuple{Vector{T}}, Tuple{T}} where T",href:"#JetReconstruction.ee_genkt_algorithm-Union{Tuple{Vector{T}}, Tuple{T}} where T"},[t("span",{class:"jlbinding"},"JetReconstruction.ee_genkt_algorithm")],-1)),e[4]||(e[4]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[5]||(e[5]=a(`
julia
ee_genkt_algorithm(particles::Vector{T}; p = -1, R = 4.0,
                    algorithm::JetAlgorithm.Algorithm = JetAlgorithm.Durham,
-                   recombine = +) where {T}

Run an e+e- reconstruction algorithm on a set of initial particles.

Arguments

  • particles::Vector{T}: A vector of particles to be clustered.

  • p = 1: The power parameter for the algorithm. Not required / ignored for the Durham algorithm when it is set to 1.

  • R = 4.0: The jet radius parameter. Not required / ignored for the Durham algorithm.

  • algorithm::JetAlgorithm.Algorithm = JetAlgorithm.Durham: The specific jet algorithm to use.

  • recombine: The recombination scheme to use. Defaults to +.

Returns

  • The result of the jet clustering as a ClusterSequence object.

Notes

This is the public interface to the e+e- jet clustering algorithm. The function will check for consistency between the algorithm and the power parameter as needed. It will then prepare the internal EDM particles for the clustering itself, and call the actual reconstruction method _ee_genkt_algorithm.

If the algorithm is Durham, p is set to 1 and R is nominally set to 4.

Note that unlike pp reconstruction the algorithm has to be specified explicitly.

source

`,11))]),t("details",u,[t("summary",null,[e[6]||(e[6]=t("a",{id:"JetReconstruction.exclusive_jets-Tuple{ClusterSequence}",href:"#JetReconstruction.exclusive_jets-Tuple{ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.exclusive_jets")],-1)),e[7]||(e[7]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[8]||(e[8]=n(`
julia
exclusive_jets(clusterseq::ClusterSequence; dcut = nothing, njets = nothing, T = LorentzVectorCyl)

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.

  • T = LorentzVectorCyl: The return type used for the selected jets.

Note: Either dcut or njets must be provided (but not both).

Returns

  • An array of T objects representing the exclusive jets.

Valid return types are LorentzVectorCyl and PseudoJet (N.B. this will evolve in the future to be any subtype of FourMomemntumBase; currently unrecognised types will return LorentzVectorCyl)

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.

Examples

julia
exclusive_jets(clusterseq, dcut = 20.0)
-exclusive_jets(clusterseq, njets = 3, T = PseudoJet)

source

`,13))]),t("details",k,[t("summary",null,[e[9]||(e[9]=t("a",{id:"JetReconstruction.final_jets",href:"#JetReconstruction.final_jets"},[t("span",{class:"jlbinding"},"JetReconstruction.final_jets")],-1)),e[10]||(e[10]=i()),a(s,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[11]||(e[11]=t("p",null,"Specialisation for final jets from LorentzVectorCyl (TODO: merge into more general function)",-1)),e[12]||(e[12]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/ce71ba00ab3da5bb537ea5177ec6178d9ad1b6f7/src/Utils.jl#L105",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",g,[t("summary",null,[e[13]||(e[13]=t("a",{id:"JetReconstruction.final_jets-2",href:"#JetReconstruction.final_jets-2"},[t("span",{class:"jlbinding"},"JetReconstruction.final_jets")],-1)),e[14]||(e[14]=i()),a(s,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[15]||(e[15]=t("p",null,"Specialisation for final jets from LorentzVectors (TODO: merge into more general function)",-1)),e[16]||(e[16]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/ce71ba00ab3da5bb537ea5177ec6178d9ad1b6f7/src/Utils.jl#L88",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",y,[t("summary",null,[e[17]||(e[17]=t("a",{id:"JetReconstruction.final_jets-3",href:"#JetReconstruction.final_jets-3"},[t("span",{class:"jlbinding"},"JetReconstruction.final_jets")],-1)),e[18]||(e[18]=i()),a(s,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[19]||(e[19]=n('
julia
final_jets(jets::Vector{PseudoJet}, ptmin::AbstractFloat=0.0)

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.

source

',7))]),t("details",E,[t("summary",null,[e[20]||(e[20]=t("a",{id:"JetReconstruction.inclusive_jets-Tuple{ClusterSequence}",href:"#JetReconstruction.inclusive_jets-Tuple{ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.inclusive_jets")],-1)),e[21]||(e[21]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[22]||(e[22]=n('
julia
inclusive_jets(clusterseq::ClusterSequence; ptmin = 0.0, T = LorentzVectorCyl)

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.

  • T = LorentzVectorCyl: The return type used for the selected jets.

Returns

An array of T 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.

Valid return types are LorentzVectorCyl and PseudoJet (N.B. this will evolve in the future to be any subtype of FourMomemntumBase; currently unrecognised types will return LorentzVectorCyl).

Example

julia
inclusive_jets(clusterseq; ptmin = 10.0)

source

',12))]),t("details",m,[t("summary",null,[e[23]||(e[23]=t("a",{id:"JetReconstruction.jet_reconstruct-Tuple{Any}",href:"#JetReconstruction.jet_reconstruct-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.jet_reconstruct")],-1)),e[24]||(e[24]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[25]||(e[25]=n(`
julia
jet_reconstruct(particles; p = -1, algorithm = nothing, 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::Union{Real, Nothing} = -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).

  • algorithm::Union{JetAlgorithm.Algorithm, Nothing} = nothing: The algorithm to use for jet reconstruction.

  • 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.

Consitency of p, algorithm and R arguments

If an algorithm is explicitly specified the p value should be consistent with it or nothing. If the algorithm is one where p can vary, then it has to be given, along with the algorithm.\`\`

If the p parameter is passed and algorithm=nothing, then pp-type reconstruction is implied (i.e., AntiKt, CA, Kt or GenKt will be used, depending on the value of p).

When an algorithm has no R dependence the R parameter is ignored.

Example

julia
jet_reconstruct(particles; p = -1, R = 0.4)
+                   recombine = +) where {T}

Run an e+e- reconstruction algorithm on a set of initial particles.

Arguments

  • particles::Vector{T}: A vector of particles to be clustered.

  • p = 1: The power parameter for the algorithm. Not required / ignored for the Durham algorithm when it is set to 1.

  • R = 4.0: The jet radius parameter. Not required / ignored for the Durham algorithm.

  • algorithm::JetAlgorithm.Algorithm = JetAlgorithm.Durham: The specific jet algorithm to use.

  • recombine: The recombination scheme to use. Defaults to +.

Returns

  • The result of the jet clustering as a ClusterSequence object.

Notes

This is the public interface to the e+e- jet clustering algorithm. The function will check for consistency between the algorithm and the power parameter as needed. It will then prepare the internal EDM particles for the clustering itself, and call the actual reconstruction method _ee_genkt_algorithm.

If the algorithm is Durham, p is set to 1 and R is nominally set to 4.

Note that unlike pp reconstruction the algorithm has to be specified explicitly.

source

`,11))]),t("details",u,[t("summary",null,[e[6]||(e[6]=t("a",{id:"JetReconstruction.exclusive_jets-Tuple{ClusterSequence}",href:"#JetReconstruction.exclusive_jets-Tuple{ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.exclusive_jets")],-1)),e[7]||(e[7]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[8]||(e[8]=a(`
julia
exclusive_jets(clusterseq::ClusterSequence; dcut = nothing, njets = nothing, T = LorentzVectorCyl)

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.

  • T = LorentzVectorCyl: The return type used for the selected jets.

Note: Either dcut or njets must be provided (but not both).

Returns

  • An array of T objects representing the exclusive jets.

Valid return types are LorentzVectorCyl and PseudoJet (N.B. this will evolve in the future to be any subtype of FourMomemntumBase; currently unrecognised types will return LorentzVectorCyl)

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.

Examples

julia
exclusive_jets(clusterseq, dcut = 20.0)
+exclusive_jets(clusterseq, njets = 3, T = PseudoJet)

source

`,13))]),t("details",k,[t("summary",null,[e[9]||(e[9]=t("a",{id:"JetReconstruction.final_jets",href:"#JetReconstruction.final_jets"},[t("span",{class:"jlbinding"},"JetReconstruction.final_jets")],-1)),e[10]||(e[10]=i()),n(s,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[11]||(e[11]=t("p",null,"Specialisation for final jets from LorentzVectorCyl (TODO: merge into more general function)",-1)),e[12]||(e[12]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/70c372b379cb343a4cade52fc0231b7a7721dd16/src/Utils.jl#L105",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",g,[t("summary",null,[e[13]||(e[13]=t("a",{id:"JetReconstruction.final_jets-2",href:"#JetReconstruction.final_jets-2"},[t("span",{class:"jlbinding"},"JetReconstruction.final_jets")],-1)),e[14]||(e[14]=i()),n(s,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[15]||(e[15]=t("p",null,"Specialisation for final jets from LorentzVectors (TODO: merge into more general function)",-1)),e[16]||(e[16]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/70c372b379cb343a4cade52fc0231b7a7721dd16/src/Utils.jl#L88",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",y,[t("summary",null,[e[17]||(e[17]=t("a",{id:"JetReconstruction.final_jets-3",href:"#JetReconstruction.final_jets-3"},[t("span",{class:"jlbinding"},"JetReconstruction.final_jets")],-1)),e[18]||(e[18]=i()),n(s,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[19]||(e[19]=a('
julia
final_jets(jets::Vector{PseudoJet}, ptmin::AbstractFloat=0.0)

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.

source

',7))]),t("details",E,[t("summary",null,[e[20]||(e[20]=t("a",{id:"JetReconstruction.inclusive_jets-Tuple{ClusterSequence}",href:"#JetReconstruction.inclusive_jets-Tuple{ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.inclusive_jets")],-1)),e[21]||(e[21]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[22]||(e[22]=a('
julia
inclusive_jets(clusterseq::ClusterSequence; ptmin = 0.0, T = LorentzVectorCyl)

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.

  • T = LorentzVectorCyl: The return type used for the selected jets.

Returns

An array of T 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.

Valid return types are LorentzVectorCyl and PseudoJet (N.B. this will evolve in the future to be any subtype of FourMomemntumBase; currently unrecognised types will return LorentzVectorCyl).

Example

julia
inclusive_jets(clusterseq; ptmin = 10.0)

source

',12))]),t("details",m,[t("summary",null,[e[23]||(e[23]=t("a",{id:"JetReconstruction.jet_reconstruct-Tuple{Any}",href:"#JetReconstruction.jet_reconstruct-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.jet_reconstruct")],-1)),e[24]||(e[24]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[25]||(e[25]=a(`
julia
jet_reconstruct(particles; p = -1, algorithm = nothing, 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::Union{Real, Nothing} = -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).

  • algorithm::Union{JetAlgorithm.Algorithm, Nothing} = nothing: The algorithm to use for jet reconstruction.

  • 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.

Consitency of p, algorithm and R arguments

If an algorithm is explicitly specified the p value should be consistent with it or nothing. If the algorithm is one where p can vary, then it has to be given, along with the algorithm.\`\`

If the p parameter is passed and algorithm=nothing, then pp-type reconstruction is implied (i.e., AntiKt, CA, Kt or GenKt will be used, depending on the value of p).

When an algorithm has no R dependence the R parameter is ignored.

Example

julia
jet_reconstruct(particles; p = -1, R = 0.4)
 jet_reconstruct(particles; algorithm = JetAlgorithm.Kt, R = 1.0)
 jet_reconstruct(particles; algorithm = JetAlgorithm.Durham)
-jet_reconstruct(particles; algorithm = JetAlgorithm.GenKt, p = 0.5, R = 1.0)

source

`,18))]),t("details",b,[t("summary",null,[e[26]||(e[26]=t("a",{id:"JetReconstruction.loadjets!-Tuple{Any, Any}",href:"#JetReconstruction.loadjets!-Tuple{Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.loadjets!")],-1)),e[27]||(e[27]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[28]||(e[28]=n(`
julia
loadjets!(filename, jets; splitby=isspace, constructor=(px,py,pz,E)->LorentzVectorHEP(E,px,py,pz), dtype=Float64)

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
+jet_reconstruct(particles; algorithm = JetAlgorithm.GenKt, p = 0.5, R = 1.0)

source

`,18))]),t("details",b,[t("summary",null,[e[26]||(e[26]=t("a",{id:"JetReconstruction.loadjets!-Tuple{Any, Any}",href:"#JetReconstruction.loadjets!-Tuple{Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.loadjets!")],-1)),e[27]||(e[27]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[28]||(e[28]=a(`
julia
loadjets!(filename, jets; splitby=isspace, constructor=(px,py,pz,E)->LorentzVectorHEP(E,px,py,pz), dtype=Float64)

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)

source

`,6))]),t("details",j,[t("summary",null,[e[29]||(e[29]=t("a",{id:"JetReconstruction.loadjets-Tuple{Any}",href:"#JetReconstruction.loadjets-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.loadjets")],-1)),e[30]||(e[30]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[31]||(e[31]=n('
julia
loadjets(filename; splitby=isspace, constructor=(px,py,pz,E)->LorentzVectorHEP(E,px,py,pz), VT=LorentzVector)

Load jets from a file.

Arguments

  • filename: The name of the file to load jets from.

  • splitby: The delimiter used to split the data in the file. Default is isspace.

  • constructor: A function that constructs a VT object from the jet data. Default is (px,py,pz,E)->LorentzVector(E,px,py,pz).

  • VT: The type of the vector used to store the jet data. Default is LorentzVector.

Returns

  • A vector of VT objects representing the loaded jets.

source

',7))]),t("details",f,[t("summary",null,[e[32]||(e[32]=t("a",{id:"JetReconstruction.n_exclusive_jets-Tuple{ClusterSequence}",href:"#JetReconstruction.n_exclusive_jets-Tuple{ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.n_exclusive_jets")],-1)),e[33]||(e[33]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[34]||(e[34]=n('
julia
n_exclusive_jets(clusterseq::ClusterSequence; dcut::AbstractFloat)

Return the number of exclusive jets of a ClusterSequence that are above a certain dcut value.

Arguments

  • clusterseq::ClusterSequence: The ClusterSequence object containing the clustering history.

  • dcut::AbstractFloat: The maximum calue for the distance parameter in the reconstruction.

Returns

The number of exclusive jets in the ClusterSequence object.

Example

julia
n_exclusive_jets(clusterseq, dcut = 20.0)

source

',9))]),t("details",F,[t("summary",null,[e[35]||(e[35]=t("a",{id:"JetReconstruction.plain_jet_reconstruct-Union{Tuple{Vector{T}}, Tuple{T}} where T",href:"#JetReconstruction.plain_jet_reconstruct-Union{Tuple{Vector{T}}, Tuple{T}} where T"},[t("span",{class:"jlbinding"},"JetReconstruction.plain_jet_reconstruct")],-1)),e[36]||(e[36]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[37]||(e[37]=n(`
julia
plain_jet_reconstruct(particles::Vector{T}; p = -1, R = 1.0, recombine = +) where T

Perform pp 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.

  • algorithm::Union{JetAlgorithm, Nothing} = nothing: The explicit jet algorithm to use.

  • 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.

This code will use the k_t algorithm types, operating in (rapidity, φ) space.

It is not necessary to specify both the algorithm and the p (power) value. If both are given they must be consistent or an exception is thrown.

Returns

  • Vector{PseudoJet}: A vector of reconstructed jets.

Example

julia
jets = plain_jet_reconstruct(particles; p = -1, R = 0.4)
-jets = plain_jet_reconstruct(particles; algorithm = JetAlgorithm.Kt, R = 1.0)

source

`,12))]),t("details",C,[t("summary",null,[e[38]||(e[38]=t("a",{id:"JetReconstruction.read_final_state_particles-Tuple{Any}",href:"#JetReconstruction.read_final_state_particles-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.read_final_state_particles")],-1)),e[39]||(e[39]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[40]||(e[40]=n('
julia
read_final_state_particles(fname; maxevents = -1, skipevents = 0, T=PseudoJet)

Reads final state particles from a file and returns them as a vector of type T.

Arguments

  • fname: The name of the HepMC3 ASCII file to read particles from. If the file is gzipped, the function will automatically decompress it.

  • maxevents=-1: The maximum number of events to read. -1 means all events will be read.

  • skipevents=0: The number of events to skip before an event is included.

  • T=PseudoJet: The type of object to contruct and return.

Returns

A vector of vectors of T objects, where each inner vector represents all the particles of a particular event. In particular T can be PseudoJet or a LorentzVector type. Note, if T is not PseudoJet, the order of the arguments in the constructor must be (t, x, y, z).

source

',7))]),t("details",v,[t("summary",null,[e[41]||(e[41]=t("a",{id:"JetReconstruction.savejets-Tuple{Any, Any}",href:"#JetReconstruction.savejets-Tuple{Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.savejets")],-1)),e[42]||(e[42]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[43]||(e[43]=n('
julia
savejets(filename, jets; format="px py pz E")

Save jet data to a file.

Arguments

  • 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.

source

',10))]),t("details",J,[t("summary",null,[e[44]||(e[44]=t("a",{id:"JetReconstruction.tiled_jet_reconstruct-Union{Tuple{Vector{T}}, Tuple{T}} where T",href:"#JetReconstruction.tiled_jet_reconstruct-Union{Tuple{Vector{T}}, Tuple{T}} where T"},[t("span",{class:"jlbinding"},"JetReconstruction.tiled_jet_reconstruct")],-1)),e[45]||(e[45]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[46]||(e[46]=n('
julia
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.

This code will use the k_t algorithm types, operating in (rapidity, φ) space.

It is not necessary to specify both the algorithm and the p (power) value. If both are given they must be consistent or an exception is thrown.

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::Union{Real, Nothing} = -1: The power parameter for the jet reconstruction algorithm, thus swiching between different algorithms.

  • algorithm::Union{JetAlgorithm, Nothing} = nothing: The explicit jet algorithm to use.

  • 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 = +)

source

',12))]),t("details",T,[t("summary",null,[e[47]||(e[47]=t("a",{id:"JetReconstruction.ClusterSequence",href:"#JetReconstruction.ClusterSequence"},[t("span",{class:"jlbinding"},"JetReconstruction.ClusterSequence")],-1)),e[48]||(e[48]=i()),a(s,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[49]||(e[49]=n('
julia
struct ClusterSequence

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.

  • power::Float64: The power value used for the clustering algorithm (not that this value is always stored as a Float64 to be type stable)

  • R::Float64: The R parameter used for the clustering algorithm.

  • 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.

  • Qtot::Any: The total energy of the event.

source

',5))]),t("details",A,[t("summary",null,[e[50]||(e[50]=t("a",{id:"JetReconstruction.ClusterSequence-Tuple{JetReconstruction.JetAlgorithm.Algorithm, Real, Float64, JetReconstruction.RecoStrategy.Strategy, Any, Any, Any}",href:"#JetReconstruction.ClusterSequence-Tuple{JetReconstruction.JetAlgorithm.Algorithm, Real, Float64, JetReconstruction.RecoStrategy.Strategy, Any, Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.ClusterSequence")],-1)),e[51]||(e[51]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[52]||(e[52]=n('
julia
ClusterSequence(algorithm::JetAlgorithm.Algorithm, p::Real, R::Float64, strategy::RecoStrategy.Strategy, jets, history, Qtot)

Construct a ClusterSequence object.

Arguments

  • algorithm::JetAlgorithm.Algorithm: The algorithm used for clustering.

  • p::Real: The power value used for the clustering algorithm.

  • R::Float64: The R parameter used for the clustering algorithm.

  • strategy::RecoStrategy.Strategy: The strategy used for clustering.

  • jets::Vector{PseudoJet}: The physical PseudoJets in the cluster sequence.

  • history::Vector{HistoryElement}: The branching history of the cluster sequence.

  • Qtot::Any: The total energy of the event.

source

',5))]),t("details",R,[t("summary",null,[e[53]||(e[53]=t("a",{id:"JetReconstruction.EEjet",href:"#JetReconstruction.EEjet"},[t("span",{class:"jlbinding"},"JetReconstruction.EEjet")],-1)),e[54]||(e[54]=i()),a(s,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[55]||(e[55]=n('
julia
struct EEjet

The EEjet struct is a 4-momentum object used for the e+e jet reconstruction routines.

Fields

  • px::Float64: The x-component of the jet momentum.

  • py::Float64: The y-component of the jet momentum.

  • pz::Float64: The z-component of the jet momentum.

  • E::Float64: The energy of the jet.

  • _cluster_hist_index::Int: The index of the cluster histogram.

  • _p2::Float64: The squared momentum of the jet.

  • _inv_p::Float64: The inverse momentum of the jet.

source

',5))]),t("details",x,[t("summary",null,[e[56]||(e[56]=t("a",{id:"JetReconstruction.FinalJet",href:"#JetReconstruction.FinalJet"},[t("span",{class:"jlbinding"},"JetReconstruction.FinalJet")],-1)),e[57]||(e[57]=i()),a(s,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[58]||(e[58]=n('
julia
struct FinalJet

A struct representing the final properties of a jet, used for JSON serialisation.

Fields

  • rap::Float64: The rapidity of the jet.

  • phi::Float64: The azimuthal angle of the jet.

  • pt::Float64: The transverse momentum of the jet.

source

',5))]),t("details",D,[t("summary",null,[e[59]||(e[59]=t("a",{id:"JetReconstruction.FinalJets",href:"#JetReconstruction.FinalJets"},[t("span",{class:"jlbinding"},"JetReconstruction.FinalJets")],-1)),e[60]||(e[60]=i()),a(s,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[61]||(e[61]=n('
julia
struct FinalJets

A struct with the vector of all jets for a certain jet identifier, used for JSON serialisation.

Fields

  • jetid::Int64: The ID of the jet.

  • jets::Vector{FinalJet}: A vector of FinalJet objects representing the jets.

source

',5))]),t("details",q,[t("summary",null,[e[62]||(e[62]=t("a",{id:"JetReconstruction.PseudoJet",href:"#JetReconstruction.PseudoJet"},[t("span",{class:"jlbinding"},"JetReconstruction.PseudoJet")],-1)),e[63]||(e[63]=i()),a(s,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[64]||(e[64]=n('
julia
mutable struct PseudoJet <: FourMomentum

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.

  • _rap::Float64: The rapidity.

  • _phi::Float64: The azimuthal angle.

source

',5))]),t("details",B,[t("summary",null,[e[65]||(e[65]=t("a",{id:"JetReconstruction.PseudoJet-NTuple{4, Float64}",href:"#JetReconstruction.PseudoJet-NTuple{4, Float64}"},[t("span",{class:"jlbinding"},"JetReconstruction.PseudoJet")],-1)),e[66]||(e[66]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[67]||(e[67]=n('
julia
PseudoJet(px::Float64, py::Float64, pz::Float64, E::Float64)

Constructs a PseudoJet object with the given momentum components and energy.

Arguments

  • 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.

Returns

A PseudoJet object.

source

',7))]),t("details",P,[t("summary",null,[e[68]||(e[68]=t("a",{id:"JetReconstruction.PseudoJet-Tuple{Float64, Float64, Float64, Float64, Int64, Float64}",href:"#JetReconstruction.PseudoJet-Tuple{Float64, Float64, Float64, Float64, Int64, Float64}"},[t("span",{class:"jlbinding"},"JetReconstruction.PseudoJet")],-1)),e[69]||(e[69]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[70]||(e[70]=n(`
julia
PseudoJet(px::Float64, py::Float64, pz::Float64, E::Float64,
+loadjets!("myjets2.dat", jets)

source

`,6))]),t("details",j,[t("summary",null,[e[29]||(e[29]=t("a",{id:"JetReconstruction.loadjets-Tuple{Any}",href:"#JetReconstruction.loadjets-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.loadjets")],-1)),e[30]||(e[30]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[31]||(e[31]=a('
julia
loadjets(filename; splitby=isspace, constructor=(px,py,pz,E)->LorentzVectorHEP(E,px,py,pz), VT=LorentzVector)

Load jets from a file.

Arguments

  • filename: The name of the file to load jets from.

  • splitby: The delimiter used to split the data in the file. Default is isspace.

  • constructor: A function that constructs a VT object from the jet data. Default is (px,py,pz,E)->LorentzVector(E,px,py,pz).

  • VT: The type of the vector used to store the jet data. Default is LorentzVector.

Returns

  • A vector of VT objects representing the loaded jets.

source

',7))]),t("details",f,[t("summary",null,[e[32]||(e[32]=t("a",{id:"JetReconstruction.n_exclusive_jets-Tuple{ClusterSequence}",href:"#JetReconstruction.n_exclusive_jets-Tuple{ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.n_exclusive_jets")],-1)),e[33]||(e[33]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[34]||(e[34]=a('
julia
n_exclusive_jets(clusterseq::ClusterSequence; dcut::AbstractFloat)

Return the number of exclusive jets of a ClusterSequence that are above a certain dcut value.

Arguments

  • clusterseq::ClusterSequence: The ClusterSequence object containing the clustering history.

  • dcut::AbstractFloat: The maximum calue for the distance parameter in the reconstruction.

Returns

The number of exclusive jets in the ClusterSequence object.

Example

julia
n_exclusive_jets(clusterseq, dcut = 20.0)

source

',9))]),t("details",F,[t("summary",null,[e[35]||(e[35]=t("a",{id:"JetReconstruction.plain_jet_reconstruct-Union{Tuple{Vector{T}}, Tuple{T}} where T",href:"#JetReconstruction.plain_jet_reconstruct-Union{Tuple{Vector{T}}, Tuple{T}} where T"},[t("span",{class:"jlbinding"},"JetReconstruction.plain_jet_reconstruct")],-1)),e[36]||(e[36]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[37]||(e[37]=a(`
julia
plain_jet_reconstruct(particles::Vector{T}; p = -1, R = 1.0, recombine = +) where T

Perform pp 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.

  • algorithm::Union{JetAlgorithm, Nothing} = nothing: The explicit jet algorithm to use.

  • 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.

This code will use the k_t algorithm types, operating in (rapidity, φ) space.

It is not necessary to specify both the algorithm and the p (power) value. If both are given they must be consistent or an exception is thrown.

Returns

  • Vector{PseudoJet}: A vector of reconstructed jets.

Example

julia
jets = plain_jet_reconstruct(particles; p = -1, R = 0.4)
+jets = plain_jet_reconstruct(particles; algorithm = JetAlgorithm.Kt, R = 1.0)

source

`,12))]),t("details",C,[t("summary",null,[e[38]||(e[38]=t("a",{id:"JetReconstruction.read_final_state_particles-Tuple{Any}",href:"#JetReconstruction.read_final_state_particles-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.read_final_state_particles")],-1)),e[39]||(e[39]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[40]||(e[40]=a('
julia
read_final_state_particles(fname; maxevents = -1, skipevents = 0, T=PseudoJet)

Reads final state particles from a file and returns them as a vector of type T.

Arguments

  • fname: The name of the HepMC3 ASCII file to read particles from. If the file is gzipped, the function will automatically decompress it.

  • maxevents=-1: The maximum number of events to read. -1 means all events will be read.

  • skipevents=0: The number of events to skip before an event is included.

  • T=PseudoJet: The type of object to contruct and return.

Returns

A vector of vectors of T objects, where each inner vector represents all the particles of a particular event. In particular T can be PseudoJet or a LorentzVector type. Note, if T is not PseudoJet, the order of the arguments in the constructor must be (t, x, y, z).

source

',7))]),t("details",v,[t("summary",null,[e[41]||(e[41]=t("a",{id:"JetReconstruction.savejets-Tuple{Any, Any}",href:"#JetReconstruction.savejets-Tuple{Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.savejets")],-1)),e[42]||(e[42]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[43]||(e[43]=a('
julia
savejets(filename, jets; format="px py pz E")

Save jet data to a file.

Arguments

  • 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.

source

',10))]),t("details",J,[t("summary",null,[e[44]||(e[44]=t("a",{id:"JetReconstruction.tiled_jet_reconstruct-Union{Tuple{Vector{T}}, Tuple{T}} where T",href:"#JetReconstruction.tiled_jet_reconstruct-Union{Tuple{Vector{T}}, Tuple{T}} where T"},[t("span",{class:"jlbinding"},"JetReconstruction.tiled_jet_reconstruct")],-1)),e[45]||(e[45]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[46]||(e[46]=a('
julia
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.

This code will use the k_t algorithm types, operating in (rapidity, φ) space.

It is not necessary to specify both the algorithm and the p (power) value. If both are given they must be consistent or an exception is thrown.

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::Union{Real, Nothing} = -1: The power parameter for the jet reconstruction algorithm, thus swiching between different algorithms.

  • algorithm::Union{JetAlgorithm, Nothing} = nothing: The explicit jet algorithm to use.

  • 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 = +)

source

',12))]),t("details",T,[t("summary",null,[e[47]||(e[47]=t("a",{id:"JetReconstruction.ClusterSequence",href:"#JetReconstruction.ClusterSequence"},[t("span",{class:"jlbinding"},"JetReconstruction.ClusterSequence")],-1)),e[48]||(e[48]=i()),n(s,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[49]||(e[49]=a('
julia
struct ClusterSequence

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.

  • power::Float64: The power value used for the clustering algorithm (not that this value is always stored as a Float64 to be type stable)

  • R::Float64: The R parameter used for the clustering algorithm.

  • 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.

  • Qtot::Any: The total energy of the event.

source

',5))]),t("details",A,[t("summary",null,[e[50]||(e[50]=t("a",{id:"JetReconstruction.ClusterSequence-Tuple{JetReconstruction.JetAlgorithm.Algorithm, Real, Float64, JetReconstruction.RecoStrategy.Strategy, Any, Any, Any}",href:"#JetReconstruction.ClusterSequence-Tuple{JetReconstruction.JetAlgorithm.Algorithm, Real, Float64, JetReconstruction.RecoStrategy.Strategy, Any, Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.ClusterSequence")],-1)),e[51]||(e[51]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[52]||(e[52]=a('
julia
ClusterSequence(algorithm::JetAlgorithm.Algorithm, p::Real, R::Float64, strategy::RecoStrategy.Strategy, jets, history, Qtot)

Construct a ClusterSequence object.

Arguments

  • algorithm::JetAlgorithm.Algorithm: The algorithm used for clustering.

  • p::Real: The power value used for the clustering algorithm.

  • R::Float64: The R parameter used for the clustering algorithm.

  • strategy::RecoStrategy.Strategy: The strategy used for clustering.

  • jets::Vector{PseudoJet}: The physical PseudoJets in the cluster sequence.

  • history::Vector{HistoryElement}: The branching history of the cluster sequence.

  • Qtot::Any: The total energy of the event.

source

',5))]),t("details",R,[t("summary",null,[e[53]||(e[53]=t("a",{id:"JetReconstruction.EEjet",href:"#JetReconstruction.EEjet"},[t("span",{class:"jlbinding"},"JetReconstruction.EEjet")],-1)),e[54]||(e[54]=i()),n(s,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[55]||(e[55]=a('
julia
struct EEjet

The EEjet struct is a 4-momentum object used for the e+e jet reconstruction routines.

Fields

  • px::Float64: The x-component of the jet momentum.

  • py::Float64: The y-component of the jet momentum.

  • pz::Float64: The z-component of the jet momentum.

  • E::Float64: The energy of the jet.

  • _cluster_hist_index::Int: The index of the cluster histogram.

  • _p2::Float64: The squared momentum of the jet.

  • _inv_p::Float64: The inverse momentum of the jet.

source

',5))]),t("details",x,[t("summary",null,[e[56]||(e[56]=t("a",{id:"JetReconstruction.FinalJet",href:"#JetReconstruction.FinalJet"},[t("span",{class:"jlbinding"},"JetReconstruction.FinalJet")],-1)),e[57]||(e[57]=i()),n(s,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[58]||(e[58]=a('
julia
struct FinalJet

A struct representing the final properties of a jet, used for JSON serialisation.

Fields

  • rap::Float64: The rapidity of the jet.

  • phi::Float64: The azimuthal angle of the jet.

  • pt::Float64: The transverse momentum of the jet.

source

',5))]),t("details",D,[t("summary",null,[e[59]||(e[59]=t("a",{id:"JetReconstruction.FinalJets",href:"#JetReconstruction.FinalJets"},[t("span",{class:"jlbinding"},"JetReconstruction.FinalJets")],-1)),e[60]||(e[60]=i()),n(s,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[61]||(e[61]=a('
julia
struct FinalJets

A struct with the vector of all jets for a certain jet identifier, used for JSON serialisation.

Fields

  • jetid::Int64: The ID of the jet.

  • jets::Vector{FinalJet}: A vector of FinalJet objects representing the jets.

source

',5))]),t("details",q,[t("summary",null,[e[62]||(e[62]=t("a",{id:"JetReconstruction.PseudoJet",href:"#JetReconstruction.PseudoJet"},[t("span",{class:"jlbinding"},"JetReconstruction.PseudoJet")],-1)),e[63]||(e[63]=i()),n(s,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[64]||(e[64]=a('
julia
mutable struct PseudoJet <: FourMomentum

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.

  • _rap::Float64: The rapidity.

  • _phi::Float64: The azimuthal angle.

source

',5))]),t("details",B,[t("summary",null,[e[65]||(e[65]=t("a",{id:"JetReconstruction.PseudoJet-NTuple{4, Float64}",href:"#JetReconstruction.PseudoJet-NTuple{4, Float64}"},[t("span",{class:"jlbinding"},"JetReconstruction.PseudoJet")],-1)),e[66]||(e[66]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[67]||(e[67]=a('
julia
PseudoJet(px::Float64, py::Float64, pz::Float64, E::Float64)

Constructs a PseudoJet object with the given momentum components and energy.

Arguments

  • 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.

Returns

A PseudoJet object.

source

',7))]),t("details",P,[t("summary",null,[e[68]||(e[68]=t("a",{id:"JetReconstruction.PseudoJet-Tuple{Float64, Float64, Float64, Float64, Int64, Float64}",href:"#JetReconstruction.PseudoJet-Tuple{Float64, Float64, Float64, Float64, Int64, Float64}"},[t("span",{class:"jlbinding"},"JetReconstruction.PseudoJet")],-1)),e[69]||(e[69]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[70]||(e[70]=a(`
julia
PseudoJet(px::Float64, py::Float64, pz::Float64, E::Float64,
     _cluster_hist_index::Int,
-    pt2::Float64)

Constructs a PseudoJet object with the given momentum components and energy and history index.

Arguments

  • 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.

  • _cluster_hist_index::Int: The cluster history index.

  • pt2::Float64: The transverse momentum squared.

Returns

A PseudoJet object.

source

`,7))])])}const O=l(h,[["render",_]]);export{I as __pageData,O as default}; + pt2::Float64)

Constructs a PseudoJet object with the given momentum components and energy and history index.

Arguments

  • 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.

  • _cluster_hist_index::Int: The cluster history index.

  • pt2::Float64: The transverse momentum squared.

Returns

A PseudoJet object.

source

`,7))])])}const O=l(h,[["render",_]]);export{I as __pageData,O as default}; diff --git a/dev/assets/lib_public.md.CDXEV-o0.js b/dev/assets/lib_public.md.ClckhHDw.lean.js similarity index 91% rename from dev/assets/lib_public.md.CDXEV-o0.js rename to dev/assets/lib_public.md.ClckhHDw.lean.js index 1a87660..89a6ebe 100644 --- a/dev/assets/lib_public.md.CDXEV-o0.js +++ b/dev/assets/lib_public.md.ClckhHDw.lean.js @@ -1,13 +1,13 @@ -import{_ as l,c as o,a5 as n,j as t,a as i,G as a,B as p,o as r}from"./chunks/framework.BonP4S8S.js";const I=JSON.parse('{"title":"Jet Reconstruction Public Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"lib/public.md","filePath":"lib/public.md","lastUpdated":null}'),h={name:"lib/public.md"},c={class:"jldocstring custom-block",open:""},d={class:"jldocstring custom-block",open:""},u={class:"jldocstring custom-block",open:""},k={class:"jldocstring custom-block",open:""},g={class:"jldocstring custom-block",open:""},y={class:"jldocstring custom-block",open:""},E={class:"jldocstring custom-block",open:""},m={class:"jldocstring custom-block",open:""},b={class:"jldocstring custom-block",open:""},j={class:"jldocstring custom-block",open:""},f={class:"jldocstring custom-block",open:""},F={class:"jldocstring custom-block",open:""},C={class:"jldocstring custom-block",open:""},v={class:"jldocstring custom-block",open:""},J={class:"jldocstring custom-block",open:""},T={class:"jldocstring custom-block",open:""},A={class:"jldocstring custom-block",open:""},R={class:"jldocstring custom-block",open:""},x={class:"jldocstring custom-block",open:""},D={class:"jldocstring custom-block",open:""},q={class:"jldocstring custom-block",open:""},B={class:"jldocstring custom-block",open:""},P={class:"jldocstring custom-block",open:""};function _(S,e,L,w,z,V){const s=p("Badge");return r(),o("div",null,[e[71]||(e[71]=n('

Jet Reconstruction Public Documentation

Documentation for JetReconstruction.jl's public interfaces.

Index

Public Methods and Types

',5)),t("details",c,[t("summary",null,[e[0]||(e[0]=t("a",{id:"JetReconstruction.constituents-Tuple{PseudoJet, ClusterSequence}",href:"#JetReconstruction.constituents-Tuple{PseudoJet, ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.constituents")],-1)),e[1]||(e[1]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[2]||(e[2]=n('
julia
constituents(j::PseudoJet, cs::ClusterSequence)

Get the constituents of a given jet in a cluster sequence.

Arguments

  • cs::ClusterSequence: The cluster sequence object.

  • j::PseudoJet: The jet for which to retrieve the constituents.

Returns

An array of PseudoJet objects representing the constituents of the given jet. (That is, the original clusters that were recombined to form this jet.)

source

',7))]),t("details",d,[t("summary",null,[e[3]||(e[3]=t("a",{id:"JetReconstruction.ee_genkt_algorithm-Union{Tuple{Vector{T}}, Tuple{T}} where T",href:"#JetReconstruction.ee_genkt_algorithm-Union{Tuple{Vector{T}}, Tuple{T}} where T"},[t("span",{class:"jlbinding"},"JetReconstruction.ee_genkt_algorithm")],-1)),e[4]||(e[4]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[5]||(e[5]=n(`
julia
ee_genkt_algorithm(particles::Vector{T}; p = -1, R = 4.0,
+import{_ as l,c as o,a5 as a,j as t,a as i,G as n,B as p,o as r}from"./chunks/framework.BtBDBbTG.js";const I=JSON.parse('{"title":"Jet Reconstruction Public Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"lib/public.md","filePath":"lib/public.md","lastUpdated":null}'),h={name:"lib/public.md"},c={class:"jldocstring custom-block",open:""},d={class:"jldocstring custom-block",open:""},u={class:"jldocstring custom-block",open:""},k={class:"jldocstring custom-block",open:""},g={class:"jldocstring custom-block",open:""},y={class:"jldocstring custom-block",open:""},E={class:"jldocstring custom-block",open:""},m={class:"jldocstring custom-block",open:""},b={class:"jldocstring custom-block",open:""},j={class:"jldocstring custom-block",open:""},f={class:"jldocstring custom-block",open:""},F={class:"jldocstring custom-block",open:""},C={class:"jldocstring custom-block",open:""},v={class:"jldocstring custom-block",open:""},J={class:"jldocstring custom-block",open:""},T={class:"jldocstring custom-block",open:""},A={class:"jldocstring custom-block",open:""},R={class:"jldocstring custom-block",open:""},x={class:"jldocstring custom-block",open:""},D={class:"jldocstring custom-block",open:""},q={class:"jldocstring custom-block",open:""},B={class:"jldocstring custom-block",open:""},P={class:"jldocstring custom-block",open:""};function _(S,e,L,w,z,V){const s=p("Badge");return r(),o("div",null,[e[71]||(e[71]=a('

Jet Reconstruction Public Documentation

Documentation for JetReconstruction.jl's public interfaces.

Index

Public Methods and Types

',5)),t("details",c,[t("summary",null,[e[0]||(e[0]=t("a",{id:"JetReconstruction.constituents-Tuple{PseudoJet, ClusterSequence}",href:"#JetReconstruction.constituents-Tuple{PseudoJet, ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.constituents")],-1)),e[1]||(e[1]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[2]||(e[2]=a('
julia
constituents(j::PseudoJet, cs::ClusterSequence)

Get the constituents of a given jet in a cluster sequence.

Arguments

  • cs::ClusterSequence: The cluster sequence object.

  • j::PseudoJet: The jet for which to retrieve the constituents.

Returns

An array of PseudoJet objects representing the constituents of the given jet. (That is, the original clusters that were recombined to form this jet.)

source

',7))]),t("details",d,[t("summary",null,[e[3]||(e[3]=t("a",{id:"JetReconstruction.ee_genkt_algorithm-Union{Tuple{Vector{T}}, Tuple{T}} where T",href:"#JetReconstruction.ee_genkt_algorithm-Union{Tuple{Vector{T}}, Tuple{T}} where T"},[t("span",{class:"jlbinding"},"JetReconstruction.ee_genkt_algorithm")],-1)),e[4]||(e[4]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[5]||(e[5]=a(`
julia
ee_genkt_algorithm(particles::Vector{T}; p = -1, R = 4.0,
                    algorithm::JetAlgorithm.Algorithm = JetAlgorithm.Durham,
-                   recombine = +) where {T}

Run an e+e- reconstruction algorithm on a set of initial particles.

Arguments

  • particles::Vector{T}: A vector of particles to be clustered.

  • p = 1: The power parameter for the algorithm. Not required / ignored for the Durham algorithm when it is set to 1.

  • R = 4.0: The jet radius parameter. Not required / ignored for the Durham algorithm.

  • algorithm::JetAlgorithm.Algorithm = JetAlgorithm.Durham: The specific jet algorithm to use.

  • recombine: The recombination scheme to use. Defaults to +.

Returns

  • The result of the jet clustering as a ClusterSequence object.

Notes

This is the public interface to the e+e- jet clustering algorithm. The function will check for consistency between the algorithm and the power parameter as needed. It will then prepare the internal EDM particles for the clustering itself, and call the actual reconstruction method _ee_genkt_algorithm.

If the algorithm is Durham, p is set to 1 and R is nominally set to 4.

Note that unlike pp reconstruction the algorithm has to be specified explicitly.

source

`,11))]),t("details",u,[t("summary",null,[e[6]||(e[6]=t("a",{id:"JetReconstruction.exclusive_jets-Tuple{ClusterSequence}",href:"#JetReconstruction.exclusive_jets-Tuple{ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.exclusive_jets")],-1)),e[7]||(e[7]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[8]||(e[8]=n(`
julia
exclusive_jets(clusterseq::ClusterSequence; dcut = nothing, njets = nothing, T = LorentzVectorCyl)

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.

  • T = LorentzVectorCyl: The return type used for the selected jets.

Note: Either dcut or njets must be provided (but not both).

Returns

  • An array of T objects representing the exclusive jets.

Valid return types are LorentzVectorCyl and PseudoJet (N.B. this will evolve in the future to be any subtype of FourMomemntumBase; currently unrecognised types will return LorentzVectorCyl)

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.

Examples

julia
exclusive_jets(clusterseq, dcut = 20.0)
-exclusive_jets(clusterseq, njets = 3, T = PseudoJet)

source

`,13))]),t("details",k,[t("summary",null,[e[9]||(e[9]=t("a",{id:"JetReconstruction.final_jets",href:"#JetReconstruction.final_jets"},[t("span",{class:"jlbinding"},"JetReconstruction.final_jets")],-1)),e[10]||(e[10]=i()),a(s,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[11]||(e[11]=t("p",null,"Specialisation for final jets from LorentzVectorCyl (TODO: merge into more general function)",-1)),e[12]||(e[12]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/ce71ba00ab3da5bb537ea5177ec6178d9ad1b6f7/src/Utils.jl#L105",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",g,[t("summary",null,[e[13]||(e[13]=t("a",{id:"JetReconstruction.final_jets-2",href:"#JetReconstruction.final_jets-2"},[t("span",{class:"jlbinding"},"JetReconstruction.final_jets")],-1)),e[14]||(e[14]=i()),a(s,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[15]||(e[15]=t("p",null,"Specialisation for final jets from LorentzVectors (TODO: merge into more general function)",-1)),e[16]||(e[16]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/ce71ba00ab3da5bb537ea5177ec6178d9ad1b6f7/src/Utils.jl#L88",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",y,[t("summary",null,[e[17]||(e[17]=t("a",{id:"JetReconstruction.final_jets-3",href:"#JetReconstruction.final_jets-3"},[t("span",{class:"jlbinding"},"JetReconstruction.final_jets")],-1)),e[18]||(e[18]=i()),a(s,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[19]||(e[19]=n('
julia
final_jets(jets::Vector{PseudoJet}, ptmin::AbstractFloat=0.0)

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.

source

',7))]),t("details",E,[t("summary",null,[e[20]||(e[20]=t("a",{id:"JetReconstruction.inclusive_jets-Tuple{ClusterSequence}",href:"#JetReconstruction.inclusive_jets-Tuple{ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.inclusive_jets")],-1)),e[21]||(e[21]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[22]||(e[22]=n('
julia
inclusive_jets(clusterseq::ClusterSequence; ptmin = 0.0, T = LorentzVectorCyl)

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.

  • T = LorentzVectorCyl: The return type used for the selected jets.

Returns

An array of T 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.

Valid return types are LorentzVectorCyl and PseudoJet (N.B. this will evolve in the future to be any subtype of FourMomemntumBase; currently unrecognised types will return LorentzVectorCyl).

Example

julia
inclusive_jets(clusterseq; ptmin = 10.0)

source

',12))]),t("details",m,[t("summary",null,[e[23]||(e[23]=t("a",{id:"JetReconstruction.jet_reconstruct-Tuple{Any}",href:"#JetReconstruction.jet_reconstruct-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.jet_reconstruct")],-1)),e[24]||(e[24]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[25]||(e[25]=n(`
julia
jet_reconstruct(particles; p = -1, algorithm = nothing, 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::Union{Real, Nothing} = -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).

  • algorithm::Union{JetAlgorithm.Algorithm, Nothing} = nothing: The algorithm to use for jet reconstruction.

  • 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.

Consitency of p, algorithm and R arguments

If an algorithm is explicitly specified the p value should be consistent with it or nothing. If the algorithm is one where p can vary, then it has to be given, along with the algorithm.\`\`

If the p parameter is passed and algorithm=nothing, then pp-type reconstruction is implied (i.e., AntiKt, CA, Kt or GenKt will be used, depending on the value of p).

When an algorithm has no R dependence the R parameter is ignored.

Example

julia
jet_reconstruct(particles; p = -1, R = 0.4)
+                   recombine = +) where {T}

Run an e+e- reconstruction algorithm on a set of initial particles.

Arguments

  • particles::Vector{T}: A vector of particles to be clustered.

  • p = 1: The power parameter for the algorithm. Not required / ignored for the Durham algorithm when it is set to 1.

  • R = 4.0: The jet radius parameter. Not required / ignored for the Durham algorithm.

  • algorithm::JetAlgorithm.Algorithm = JetAlgorithm.Durham: The specific jet algorithm to use.

  • recombine: The recombination scheme to use. Defaults to +.

Returns

  • The result of the jet clustering as a ClusterSequence object.

Notes

This is the public interface to the e+e- jet clustering algorithm. The function will check for consistency between the algorithm and the power parameter as needed. It will then prepare the internal EDM particles for the clustering itself, and call the actual reconstruction method _ee_genkt_algorithm.

If the algorithm is Durham, p is set to 1 and R is nominally set to 4.

Note that unlike pp reconstruction the algorithm has to be specified explicitly.

source

`,11))]),t("details",u,[t("summary",null,[e[6]||(e[6]=t("a",{id:"JetReconstruction.exclusive_jets-Tuple{ClusterSequence}",href:"#JetReconstruction.exclusive_jets-Tuple{ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.exclusive_jets")],-1)),e[7]||(e[7]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[8]||(e[8]=a(`
julia
exclusive_jets(clusterseq::ClusterSequence; dcut = nothing, njets = nothing, T = LorentzVectorCyl)

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.

  • T = LorentzVectorCyl: The return type used for the selected jets.

Note: Either dcut or njets must be provided (but not both).

Returns

  • An array of T objects representing the exclusive jets.

Valid return types are LorentzVectorCyl and PseudoJet (N.B. this will evolve in the future to be any subtype of FourMomemntumBase; currently unrecognised types will return LorentzVectorCyl)

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.

Examples

julia
exclusive_jets(clusterseq, dcut = 20.0)
+exclusive_jets(clusterseq, njets = 3, T = PseudoJet)

source

`,13))]),t("details",k,[t("summary",null,[e[9]||(e[9]=t("a",{id:"JetReconstruction.final_jets",href:"#JetReconstruction.final_jets"},[t("span",{class:"jlbinding"},"JetReconstruction.final_jets")],-1)),e[10]||(e[10]=i()),n(s,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[11]||(e[11]=t("p",null,"Specialisation for final jets from LorentzVectorCyl (TODO: merge into more general function)",-1)),e[12]||(e[12]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/70c372b379cb343a4cade52fc0231b7a7721dd16/src/Utils.jl#L105",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",g,[t("summary",null,[e[13]||(e[13]=t("a",{id:"JetReconstruction.final_jets-2",href:"#JetReconstruction.final_jets-2"},[t("span",{class:"jlbinding"},"JetReconstruction.final_jets")],-1)),e[14]||(e[14]=i()),n(s,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[15]||(e[15]=t("p",null,"Specialisation for final jets from LorentzVectors (TODO: merge into more general function)",-1)),e[16]||(e[16]=t("p",null,[t("a",{href:"https://github.com/JuliaHEP/JetReconstruction.jl/blob/70c372b379cb343a4cade52fc0231b7a7721dd16/src/Utils.jl#L88",target:"_blank",rel:"noreferrer"},"source")],-1))]),t("details",y,[t("summary",null,[e[17]||(e[17]=t("a",{id:"JetReconstruction.final_jets-3",href:"#JetReconstruction.final_jets-3"},[t("span",{class:"jlbinding"},"JetReconstruction.final_jets")],-1)),e[18]||(e[18]=i()),n(s,{type:"info",class:"jlObjectType jlFunction",text:"Function"})]),e[19]||(e[19]=a('
julia
final_jets(jets::Vector{PseudoJet}, ptmin::AbstractFloat=0.0)

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.

source

',7))]),t("details",E,[t("summary",null,[e[20]||(e[20]=t("a",{id:"JetReconstruction.inclusive_jets-Tuple{ClusterSequence}",href:"#JetReconstruction.inclusive_jets-Tuple{ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.inclusive_jets")],-1)),e[21]||(e[21]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[22]||(e[22]=a('
julia
inclusive_jets(clusterseq::ClusterSequence; ptmin = 0.0, T = LorentzVectorCyl)

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.

  • T = LorentzVectorCyl: The return type used for the selected jets.

Returns

An array of T 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.

Valid return types are LorentzVectorCyl and PseudoJet (N.B. this will evolve in the future to be any subtype of FourMomemntumBase; currently unrecognised types will return LorentzVectorCyl).

Example

julia
inclusive_jets(clusterseq; ptmin = 10.0)

source

',12))]),t("details",m,[t("summary",null,[e[23]||(e[23]=t("a",{id:"JetReconstruction.jet_reconstruct-Tuple{Any}",href:"#JetReconstruction.jet_reconstruct-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.jet_reconstruct")],-1)),e[24]||(e[24]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[25]||(e[25]=a(`
julia
jet_reconstruct(particles; p = -1, algorithm = nothing, 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::Union{Real, Nothing} = -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).

  • algorithm::Union{JetAlgorithm.Algorithm, Nothing} = nothing: The algorithm to use for jet reconstruction.

  • 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.

Consitency of p, algorithm and R arguments

If an algorithm is explicitly specified the p value should be consistent with it or nothing. If the algorithm is one where p can vary, then it has to be given, along with the algorithm.\`\`

If the p parameter is passed and algorithm=nothing, then pp-type reconstruction is implied (i.e., AntiKt, CA, Kt or GenKt will be used, depending on the value of p).

When an algorithm has no R dependence the R parameter is ignored.

Example

julia
jet_reconstruct(particles; p = -1, R = 0.4)
 jet_reconstruct(particles; algorithm = JetAlgorithm.Kt, R = 1.0)
 jet_reconstruct(particles; algorithm = JetAlgorithm.Durham)
-jet_reconstruct(particles; algorithm = JetAlgorithm.GenKt, p = 0.5, R = 1.0)

source

`,18))]),t("details",b,[t("summary",null,[e[26]||(e[26]=t("a",{id:"JetReconstruction.loadjets!-Tuple{Any, Any}",href:"#JetReconstruction.loadjets!-Tuple{Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.loadjets!")],-1)),e[27]||(e[27]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[28]||(e[28]=n(`
julia
loadjets!(filename, jets; splitby=isspace, constructor=(px,py,pz,E)->LorentzVectorHEP(E,px,py,pz), dtype=Float64)

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
+jet_reconstruct(particles; algorithm = JetAlgorithm.GenKt, p = 0.5, R = 1.0)

source

`,18))]),t("details",b,[t("summary",null,[e[26]||(e[26]=t("a",{id:"JetReconstruction.loadjets!-Tuple{Any, Any}",href:"#JetReconstruction.loadjets!-Tuple{Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.loadjets!")],-1)),e[27]||(e[27]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[28]||(e[28]=a(`
julia
loadjets!(filename, jets; splitby=isspace, constructor=(px,py,pz,E)->LorentzVectorHEP(E,px,py,pz), dtype=Float64)

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)

source

`,6))]),t("details",j,[t("summary",null,[e[29]||(e[29]=t("a",{id:"JetReconstruction.loadjets-Tuple{Any}",href:"#JetReconstruction.loadjets-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.loadjets")],-1)),e[30]||(e[30]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[31]||(e[31]=n('
julia
loadjets(filename; splitby=isspace, constructor=(px,py,pz,E)->LorentzVectorHEP(E,px,py,pz), VT=LorentzVector)

Load jets from a file.

Arguments

  • filename: The name of the file to load jets from.

  • splitby: The delimiter used to split the data in the file. Default is isspace.

  • constructor: A function that constructs a VT object from the jet data. Default is (px,py,pz,E)->LorentzVector(E,px,py,pz).

  • VT: The type of the vector used to store the jet data. Default is LorentzVector.

Returns

  • A vector of VT objects representing the loaded jets.

source

',7))]),t("details",f,[t("summary",null,[e[32]||(e[32]=t("a",{id:"JetReconstruction.n_exclusive_jets-Tuple{ClusterSequence}",href:"#JetReconstruction.n_exclusive_jets-Tuple{ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.n_exclusive_jets")],-1)),e[33]||(e[33]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[34]||(e[34]=n('
julia
n_exclusive_jets(clusterseq::ClusterSequence; dcut::AbstractFloat)

Return the number of exclusive jets of a ClusterSequence that are above a certain dcut value.

Arguments

  • clusterseq::ClusterSequence: The ClusterSequence object containing the clustering history.

  • dcut::AbstractFloat: The maximum calue for the distance parameter in the reconstruction.

Returns

The number of exclusive jets in the ClusterSequence object.

Example

julia
n_exclusive_jets(clusterseq, dcut = 20.0)

source

',9))]),t("details",F,[t("summary",null,[e[35]||(e[35]=t("a",{id:"JetReconstruction.plain_jet_reconstruct-Union{Tuple{Vector{T}}, Tuple{T}} where T",href:"#JetReconstruction.plain_jet_reconstruct-Union{Tuple{Vector{T}}, Tuple{T}} where T"},[t("span",{class:"jlbinding"},"JetReconstruction.plain_jet_reconstruct")],-1)),e[36]||(e[36]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[37]||(e[37]=n(`
julia
plain_jet_reconstruct(particles::Vector{T}; p = -1, R = 1.0, recombine = +) where T

Perform pp 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.

  • algorithm::Union{JetAlgorithm, Nothing} = nothing: The explicit jet algorithm to use.

  • 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.

This code will use the k_t algorithm types, operating in (rapidity, φ) space.

It is not necessary to specify both the algorithm and the p (power) value. If both are given they must be consistent or an exception is thrown.

Returns

  • Vector{PseudoJet}: A vector of reconstructed jets.

Example

julia
jets = plain_jet_reconstruct(particles; p = -1, R = 0.4)
-jets = plain_jet_reconstruct(particles; algorithm = JetAlgorithm.Kt, R = 1.0)

source

`,12))]),t("details",C,[t("summary",null,[e[38]||(e[38]=t("a",{id:"JetReconstruction.read_final_state_particles-Tuple{Any}",href:"#JetReconstruction.read_final_state_particles-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.read_final_state_particles")],-1)),e[39]||(e[39]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[40]||(e[40]=n('
julia
read_final_state_particles(fname; maxevents = -1, skipevents = 0, T=PseudoJet)

Reads final state particles from a file and returns them as a vector of type T.

Arguments

  • fname: The name of the HepMC3 ASCII file to read particles from. If the file is gzipped, the function will automatically decompress it.

  • maxevents=-1: The maximum number of events to read. -1 means all events will be read.

  • skipevents=0: The number of events to skip before an event is included.

  • T=PseudoJet: The type of object to contruct and return.

Returns

A vector of vectors of T objects, where each inner vector represents all the particles of a particular event. In particular T can be PseudoJet or a LorentzVector type. Note, if T is not PseudoJet, the order of the arguments in the constructor must be (t, x, y, z).

source

',7))]),t("details",v,[t("summary",null,[e[41]||(e[41]=t("a",{id:"JetReconstruction.savejets-Tuple{Any, Any}",href:"#JetReconstruction.savejets-Tuple{Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.savejets")],-1)),e[42]||(e[42]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[43]||(e[43]=n('
julia
savejets(filename, jets; format="px py pz E")

Save jet data to a file.

Arguments

  • 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.

source

',10))]),t("details",J,[t("summary",null,[e[44]||(e[44]=t("a",{id:"JetReconstruction.tiled_jet_reconstruct-Union{Tuple{Vector{T}}, Tuple{T}} where T",href:"#JetReconstruction.tiled_jet_reconstruct-Union{Tuple{Vector{T}}, Tuple{T}} where T"},[t("span",{class:"jlbinding"},"JetReconstruction.tiled_jet_reconstruct")],-1)),e[45]||(e[45]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[46]||(e[46]=n('
julia
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.

This code will use the k_t algorithm types, operating in (rapidity, φ) space.

It is not necessary to specify both the algorithm and the p (power) value. If both are given they must be consistent or an exception is thrown.

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::Union{Real, Nothing} = -1: The power parameter for the jet reconstruction algorithm, thus swiching between different algorithms.

  • algorithm::Union{JetAlgorithm, Nothing} = nothing: The explicit jet algorithm to use.

  • 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 = +)

source

',12))]),t("details",T,[t("summary",null,[e[47]||(e[47]=t("a",{id:"JetReconstruction.ClusterSequence",href:"#JetReconstruction.ClusterSequence"},[t("span",{class:"jlbinding"},"JetReconstruction.ClusterSequence")],-1)),e[48]||(e[48]=i()),a(s,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[49]||(e[49]=n('
julia
struct ClusterSequence

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.

  • power::Float64: The power value used for the clustering algorithm (not that this value is always stored as a Float64 to be type stable)

  • R::Float64: The R parameter used for the clustering algorithm.

  • 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.

  • Qtot::Any: The total energy of the event.

source

',5))]),t("details",A,[t("summary",null,[e[50]||(e[50]=t("a",{id:"JetReconstruction.ClusterSequence-Tuple{JetReconstruction.JetAlgorithm.Algorithm, Real, Float64, JetReconstruction.RecoStrategy.Strategy, Any, Any, Any}",href:"#JetReconstruction.ClusterSequence-Tuple{JetReconstruction.JetAlgorithm.Algorithm, Real, Float64, JetReconstruction.RecoStrategy.Strategy, Any, Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.ClusterSequence")],-1)),e[51]||(e[51]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[52]||(e[52]=n('
julia
ClusterSequence(algorithm::JetAlgorithm.Algorithm, p::Real, R::Float64, strategy::RecoStrategy.Strategy, jets, history, Qtot)

Construct a ClusterSequence object.

Arguments

  • algorithm::JetAlgorithm.Algorithm: The algorithm used for clustering.

  • p::Real: The power value used for the clustering algorithm.

  • R::Float64: The R parameter used for the clustering algorithm.

  • strategy::RecoStrategy.Strategy: The strategy used for clustering.

  • jets::Vector{PseudoJet}: The physical PseudoJets in the cluster sequence.

  • history::Vector{HistoryElement}: The branching history of the cluster sequence.

  • Qtot::Any: The total energy of the event.

source

',5))]),t("details",R,[t("summary",null,[e[53]||(e[53]=t("a",{id:"JetReconstruction.EEjet",href:"#JetReconstruction.EEjet"},[t("span",{class:"jlbinding"},"JetReconstruction.EEjet")],-1)),e[54]||(e[54]=i()),a(s,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[55]||(e[55]=n('
julia
struct EEjet

The EEjet struct is a 4-momentum object used for the e+e jet reconstruction routines.

Fields

  • px::Float64: The x-component of the jet momentum.

  • py::Float64: The y-component of the jet momentum.

  • pz::Float64: The z-component of the jet momentum.

  • E::Float64: The energy of the jet.

  • _cluster_hist_index::Int: The index of the cluster histogram.

  • _p2::Float64: The squared momentum of the jet.

  • _inv_p::Float64: The inverse momentum of the jet.

source

',5))]),t("details",x,[t("summary",null,[e[56]||(e[56]=t("a",{id:"JetReconstruction.FinalJet",href:"#JetReconstruction.FinalJet"},[t("span",{class:"jlbinding"},"JetReconstruction.FinalJet")],-1)),e[57]||(e[57]=i()),a(s,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[58]||(e[58]=n('
julia
struct FinalJet

A struct representing the final properties of a jet, used for JSON serialisation.

Fields

  • rap::Float64: The rapidity of the jet.

  • phi::Float64: The azimuthal angle of the jet.

  • pt::Float64: The transverse momentum of the jet.

source

',5))]),t("details",D,[t("summary",null,[e[59]||(e[59]=t("a",{id:"JetReconstruction.FinalJets",href:"#JetReconstruction.FinalJets"},[t("span",{class:"jlbinding"},"JetReconstruction.FinalJets")],-1)),e[60]||(e[60]=i()),a(s,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[61]||(e[61]=n('
julia
struct FinalJets

A struct with the vector of all jets for a certain jet identifier, used for JSON serialisation.

Fields

  • jetid::Int64: The ID of the jet.

  • jets::Vector{FinalJet}: A vector of FinalJet objects representing the jets.

source

',5))]),t("details",q,[t("summary",null,[e[62]||(e[62]=t("a",{id:"JetReconstruction.PseudoJet",href:"#JetReconstruction.PseudoJet"},[t("span",{class:"jlbinding"},"JetReconstruction.PseudoJet")],-1)),e[63]||(e[63]=i()),a(s,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[64]||(e[64]=n('
julia
mutable struct PseudoJet <: FourMomentum

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.

  • _rap::Float64: The rapidity.

  • _phi::Float64: The azimuthal angle.

source

',5))]),t("details",B,[t("summary",null,[e[65]||(e[65]=t("a",{id:"JetReconstruction.PseudoJet-NTuple{4, Float64}",href:"#JetReconstruction.PseudoJet-NTuple{4, Float64}"},[t("span",{class:"jlbinding"},"JetReconstruction.PseudoJet")],-1)),e[66]||(e[66]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[67]||(e[67]=n('
julia
PseudoJet(px::Float64, py::Float64, pz::Float64, E::Float64)

Constructs a PseudoJet object with the given momentum components and energy.

Arguments

  • 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.

Returns

A PseudoJet object.

source

',7))]),t("details",P,[t("summary",null,[e[68]||(e[68]=t("a",{id:"JetReconstruction.PseudoJet-Tuple{Float64, Float64, Float64, Float64, Int64, Float64}",href:"#JetReconstruction.PseudoJet-Tuple{Float64, Float64, Float64, Float64, Int64, Float64}"},[t("span",{class:"jlbinding"},"JetReconstruction.PseudoJet")],-1)),e[69]||(e[69]=i()),a(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[70]||(e[70]=n(`
julia
PseudoJet(px::Float64, py::Float64, pz::Float64, E::Float64,
+loadjets!("myjets2.dat", jets)

source

`,6))]),t("details",j,[t("summary",null,[e[29]||(e[29]=t("a",{id:"JetReconstruction.loadjets-Tuple{Any}",href:"#JetReconstruction.loadjets-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.loadjets")],-1)),e[30]||(e[30]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[31]||(e[31]=a('
julia
loadjets(filename; splitby=isspace, constructor=(px,py,pz,E)->LorentzVectorHEP(E,px,py,pz), VT=LorentzVector)

Load jets from a file.

Arguments

  • filename: The name of the file to load jets from.

  • splitby: The delimiter used to split the data in the file. Default is isspace.

  • constructor: A function that constructs a VT object from the jet data. Default is (px,py,pz,E)->LorentzVector(E,px,py,pz).

  • VT: The type of the vector used to store the jet data. Default is LorentzVector.

Returns

  • A vector of VT objects representing the loaded jets.

source

',7))]),t("details",f,[t("summary",null,[e[32]||(e[32]=t("a",{id:"JetReconstruction.n_exclusive_jets-Tuple{ClusterSequence}",href:"#JetReconstruction.n_exclusive_jets-Tuple{ClusterSequence}"},[t("span",{class:"jlbinding"},"JetReconstruction.n_exclusive_jets")],-1)),e[33]||(e[33]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[34]||(e[34]=a('
julia
n_exclusive_jets(clusterseq::ClusterSequence; dcut::AbstractFloat)

Return the number of exclusive jets of a ClusterSequence that are above a certain dcut value.

Arguments

  • clusterseq::ClusterSequence: The ClusterSequence object containing the clustering history.

  • dcut::AbstractFloat: The maximum calue for the distance parameter in the reconstruction.

Returns

The number of exclusive jets in the ClusterSequence object.

Example

julia
n_exclusive_jets(clusterseq, dcut = 20.0)

source

',9))]),t("details",F,[t("summary",null,[e[35]||(e[35]=t("a",{id:"JetReconstruction.plain_jet_reconstruct-Union{Tuple{Vector{T}}, Tuple{T}} where T",href:"#JetReconstruction.plain_jet_reconstruct-Union{Tuple{Vector{T}}, Tuple{T}} where T"},[t("span",{class:"jlbinding"},"JetReconstruction.plain_jet_reconstruct")],-1)),e[36]||(e[36]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[37]||(e[37]=a(`
julia
plain_jet_reconstruct(particles::Vector{T}; p = -1, R = 1.0, recombine = +) where T

Perform pp 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.

  • algorithm::Union{JetAlgorithm, Nothing} = nothing: The explicit jet algorithm to use.

  • 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.

This code will use the k_t algorithm types, operating in (rapidity, φ) space.

It is not necessary to specify both the algorithm and the p (power) value. If both are given they must be consistent or an exception is thrown.

Returns

  • Vector{PseudoJet}: A vector of reconstructed jets.

Example

julia
jets = plain_jet_reconstruct(particles; p = -1, R = 0.4)
+jets = plain_jet_reconstruct(particles; algorithm = JetAlgorithm.Kt, R = 1.0)

source

`,12))]),t("details",C,[t("summary",null,[e[38]||(e[38]=t("a",{id:"JetReconstruction.read_final_state_particles-Tuple{Any}",href:"#JetReconstruction.read_final_state_particles-Tuple{Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.read_final_state_particles")],-1)),e[39]||(e[39]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[40]||(e[40]=a('
julia
read_final_state_particles(fname; maxevents = -1, skipevents = 0, T=PseudoJet)

Reads final state particles from a file and returns them as a vector of type T.

Arguments

  • fname: The name of the HepMC3 ASCII file to read particles from. If the file is gzipped, the function will automatically decompress it.

  • maxevents=-1: The maximum number of events to read. -1 means all events will be read.

  • skipevents=0: The number of events to skip before an event is included.

  • T=PseudoJet: The type of object to contruct and return.

Returns

A vector of vectors of T objects, where each inner vector represents all the particles of a particular event. In particular T can be PseudoJet or a LorentzVector type. Note, if T is not PseudoJet, the order of the arguments in the constructor must be (t, x, y, z).

source

',7))]),t("details",v,[t("summary",null,[e[41]||(e[41]=t("a",{id:"JetReconstruction.savejets-Tuple{Any, Any}",href:"#JetReconstruction.savejets-Tuple{Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.savejets")],-1)),e[42]||(e[42]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[43]||(e[43]=a('
julia
savejets(filename, jets; format="px py pz E")

Save jet data to a file.

Arguments

  • 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.

source

',10))]),t("details",J,[t("summary",null,[e[44]||(e[44]=t("a",{id:"JetReconstruction.tiled_jet_reconstruct-Union{Tuple{Vector{T}}, Tuple{T}} where T",href:"#JetReconstruction.tiled_jet_reconstruct-Union{Tuple{Vector{T}}, Tuple{T}} where T"},[t("span",{class:"jlbinding"},"JetReconstruction.tiled_jet_reconstruct")],-1)),e[45]||(e[45]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[46]||(e[46]=a('
julia
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.

This code will use the k_t algorithm types, operating in (rapidity, φ) space.

It is not necessary to specify both the algorithm and the p (power) value. If both are given they must be consistent or an exception is thrown.

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::Union{Real, Nothing} = -1: The power parameter for the jet reconstruction algorithm, thus swiching between different algorithms.

  • algorithm::Union{JetAlgorithm, Nothing} = nothing: The explicit jet algorithm to use.

  • 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 = +)

source

',12))]),t("details",T,[t("summary",null,[e[47]||(e[47]=t("a",{id:"JetReconstruction.ClusterSequence",href:"#JetReconstruction.ClusterSequence"},[t("span",{class:"jlbinding"},"JetReconstruction.ClusterSequence")],-1)),e[48]||(e[48]=i()),n(s,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[49]||(e[49]=a('
julia
struct ClusterSequence

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.

  • power::Float64: The power value used for the clustering algorithm (not that this value is always stored as a Float64 to be type stable)

  • R::Float64: The R parameter used for the clustering algorithm.

  • 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.

  • Qtot::Any: The total energy of the event.

source

',5))]),t("details",A,[t("summary",null,[e[50]||(e[50]=t("a",{id:"JetReconstruction.ClusterSequence-Tuple{JetReconstruction.JetAlgorithm.Algorithm, Real, Float64, JetReconstruction.RecoStrategy.Strategy, Any, Any, Any}",href:"#JetReconstruction.ClusterSequence-Tuple{JetReconstruction.JetAlgorithm.Algorithm, Real, Float64, JetReconstruction.RecoStrategy.Strategy, Any, Any, Any}"},[t("span",{class:"jlbinding"},"JetReconstruction.ClusterSequence")],-1)),e[51]||(e[51]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[52]||(e[52]=a('
julia
ClusterSequence(algorithm::JetAlgorithm.Algorithm, p::Real, R::Float64, strategy::RecoStrategy.Strategy, jets, history, Qtot)

Construct a ClusterSequence object.

Arguments

  • algorithm::JetAlgorithm.Algorithm: The algorithm used for clustering.

  • p::Real: The power value used for the clustering algorithm.

  • R::Float64: The R parameter used for the clustering algorithm.

  • strategy::RecoStrategy.Strategy: The strategy used for clustering.

  • jets::Vector{PseudoJet}: The physical PseudoJets in the cluster sequence.

  • history::Vector{HistoryElement}: The branching history of the cluster sequence.

  • Qtot::Any: The total energy of the event.

source

',5))]),t("details",R,[t("summary",null,[e[53]||(e[53]=t("a",{id:"JetReconstruction.EEjet",href:"#JetReconstruction.EEjet"},[t("span",{class:"jlbinding"},"JetReconstruction.EEjet")],-1)),e[54]||(e[54]=i()),n(s,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[55]||(e[55]=a('
julia
struct EEjet

The EEjet struct is a 4-momentum object used for the e+e jet reconstruction routines.

Fields

  • px::Float64: The x-component of the jet momentum.

  • py::Float64: The y-component of the jet momentum.

  • pz::Float64: The z-component of the jet momentum.

  • E::Float64: The energy of the jet.

  • _cluster_hist_index::Int: The index of the cluster histogram.

  • _p2::Float64: The squared momentum of the jet.

  • _inv_p::Float64: The inverse momentum of the jet.

source

',5))]),t("details",x,[t("summary",null,[e[56]||(e[56]=t("a",{id:"JetReconstruction.FinalJet",href:"#JetReconstruction.FinalJet"},[t("span",{class:"jlbinding"},"JetReconstruction.FinalJet")],-1)),e[57]||(e[57]=i()),n(s,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[58]||(e[58]=a('
julia
struct FinalJet

A struct representing the final properties of a jet, used for JSON serialisation.

Fields

  • rap::Float64: The rapidity of the jet.

  • phi::Float64: The azimuthal angle of the jet.

  • pt::Float64: The transverse momentum of the jet.

source

',5))]),t("details",D,[t("summary",null,[e[59]||(e[59]=t("a",{id:"JetReconstruction.FinalJets",href:"#JetReconstruction.FinalJets"},[t("span",{class:"jlbinding"},"JetReconstruction.FinalJets")],-1)),e[60]||(e[60]=i()),n(s,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[61]||(e[61]=a('
julia
struct FinalJets

A struct with the vector of all jets for a certain jet identifier, used for JSON serialisation.

Fields

  • jetid::Int64: The ID of the jet.

  • jets::Vector{FinalJet}: A vector of FinalJet objects representing the jets.

source

',5))]),t("details",q,[t("summary",null,[e[62]||(e[62]=t("a",{id:"JetReconstruction.PseudoJet",href:"#JetReconstruction.PseudoJet"},[t("span",{class:"jlbinding"},"JetReconstruction.PseudoJet")],-1)),e[63]||(e[63]=i()),n(s,{type:"info",class:"jlObjectType jlType",text:"Type"})]),e[64]||(e[64]=a('
julia
mutable struct PseudoJet <: FourMomentum

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.

  • _rap::Float64: The rapidity.

  • _phi::Float64: The azimuthal angle.

source

',5))]),t("details",B,[t("summary",null,[e[65]||(e[65]=t("a",{id:"JetReconstruction.PseudoJet-NTuple{4, Float64}",href:"#JetReconstruction.PseudoJet-NTuple{4, Float64}"},[t("span",{class:"jlbinding"},"JetReconstruction.PseudoJet")],-1)),e[66]||(e[66]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[67]||(e[67]=a('
julia
PseudoJet(px::Float64, py::Float64, pz::Float64, E::Float64)

Constructs a PseudoJet object with the given momentum components and energy.

Arguments

  • 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.

Returns

A PseudoJet object.

source

',7))]),t("details",P,[t("summary",null,[e[68]||(e[68]=t("a",{id:"JetReconstruction.PseudoJet-Tuple{Float64, Float64, Float64, Float64, Int64, Float64}",href:"#JetReconstruction.PseudoJet-Tuple{Float64, Float64, Float64, Float64, Int64, Float64}"},[t("span",{class:"jlbinding"},"JetReconstruction.PseudoJet")],-1)),e[69]||(e[69]=i()),n(s,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[70]||(e[70]=a(`
julia
PseudoJet(px::Float64, py::Float64, pz::Float64, E::Float64,
     _cluster_hist_index::Int,
-    pt2::Float64)

Constructs a PseudoJet object with the given momentum components and energy and history index.

Arguments

  • 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.

  • _cluster_hist_index::Int: The cluster history index.

  • pt2::Float64: The transverse momentum squared.

Returns

A PseudoJet object.

source

`,7))])])}const O=l(h,[["render",_]]);export{I as __pageData,O as default}; + pt2::Float64)

Constructs a PseudoJet object with the given momentum components and energy and history index.

Arguments

  • 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.

  • _cluster_hist_index::Int: The cluster history index.

  • pt2::Float64: The transverse momentum squared.

Returns

A PseudoJet object.

source

`,7))])])}const O=l(h,[["render",_]]);export{I as __pageData,O as default}; diff --git a/dev/assets/lib_visualisation.md.BGH-rHrp.js b/dev/assets/lib_visualisation.md.Bjkk6jY3.js similarity index 97% rename from dev/assets/lib_visualisation.md.BGH-rHrp.js rename to dev/assets/lib_visualisation.md.Bjkk6jY3.js index cec4c9f..d423ddb 100644 --- a/dev/assets/lib_visualisation.md.BGH-rHrp.js +++ b/dev/assets/lib_visualisation.md.Bjkk6jY3.js @@ -1,4 +1,4 @@ -import{_ as o,c as l,a5 as a,j as s,a as t,G as n,B as p,o as c}from"./chunks/framework.BonP4S8S.js";const j=JSON.parse('{"title":"Jet Visualisation Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"lib/visualisation.md","filePath":"lib/visualisation.md","lastUpdated":null}'),r={name:"lib/visualisation.md"},h={class:"jldocstring custom-block",open:""},d={class:"jldocstring custom-block",open:""},u={class:"jldocstring custom-block",open:""};function k(g,e,y,b,m,E){const i=p("Badge");return c(),l("div",null,[e[9]||(e[9]=a('

Jet Visualisation Documentation

Documentation for visualisation interfaces extension module.

Index

Jet Visualisation Public Interfaces

',5)),s("details",h,[s("summary",null,[e[0]||(e[0]=s("a",{id:"JetReconstruction.animatereco-Tuple{ClusterSequence, Any}",href:"#JetReconstruction.animatereco-Tuple{ClusterSequence, Any}"},[s("span",{class:"jlbinding"},"JetReconstruction.animatereco")],-1)),e[1]||(e[1]=t()),n(i,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[2]||(e[2]=a(`
julia
animatereco(cs::ClusterSequence, filename;
+import{_ as o,c as l,a5 as a,j as s,a as t,G as n,B as p,o as c}from"./chunks/framework.BtBDBbTG.js";const j=JSON.parse('{"title":"Jet Visualisation Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"lib/visualisation.md","filePath":"lib/visualisation.md","lastUpdated":null}'),r={name:"lib/visualisation.md"},h={class:"jldocstring custom-block",open:""},d={class:"jldocstring custom-block",open:""},u={class:"jldocstring custom-block",open:""};function k(g,e,y,b,m,E){const i=p("Badge");return c(),l("div",null,[e[9]||(e[9]=a('

Jet Visualisation Documentation

Documentation for visualisation interfaces extension module.

Index

Jet Visualisation Public Interfaces

',5)),s("details",h,[s("summary",null,[e[0]||(e[0]=s("a",{id:"JetReconstruction.animatereco-Tuple{ClusterSequence, Any}",href:"#JetReconstruction.animatereco-Tuple{ClusterSequence, Any}"},[s("span",{class:"jlbinding"},"JetReconstruction.animatereco")],-1)),e[1]||(e[1]=t()),n(i,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[2]||(e[2]=a(`
julia
animatereco(cs::ClusterSequence, filename;
             barsize_phi = 0.1,
             barsize_y = 0.1,
             colormap = :glasbey_category10_n256,
@@ -7,7 +7,7 @@ import{_ as o,c as l,a5 as a,j as s,a as t,G as n,B as p,o as c}from"./chunks/fr
             elevation = 0.5,
             framerate = 5,
             ancestors = false,
-            Module = Makie)

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.

source

`,10))]),s("details",d,[s("summary",null,[e[3]||(e[3]=s("a",{id:"JetReconstruction.jetsplot-Tuple{Any, Any}",href:"#JetReconstruction.jetsplot-Tuple{Any, Any}"},[s("span",{class:"jlbinding"},"JetReconstruction.jetsplot")],-1)),e[4]||(e[4]=t()),n(i,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[5]||(e[5]=a(`

jetsplot(objects, idx_arrays; barsize_phi=0.1, barsize_eta=0.1, colormap=:glasbey_hv_n256, Module=Main)

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
+            Module = Makie)

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.

source

`,10))]),s("details",d,[s("summary",null,[e[3]||(e[3]=s("a",{id:"JetReconstruction.jetsplot-Tuple{Any, Any}",href:"#JetReconstruction.jetsplot-Tuple{Any, Any}"},[s("span",{class:"jlbinding"},"JetReconstruction.jetsplot")],-1)),e[4]||(e[4]=t()),n(i,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[5]||(e[5]=a(`

jetsplot(objects, idx_arrays; barsize_phi=0.1, barsize_eta=0.1, colormap=:glasbey_hv_n256, Module=Main)

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:

import CairoMakie
@@ -17,7 +17,7 @@ import{_ as o,c as l,a5 as a,j as s,a as t,G as n,B as p,o as c}from"./chunks/fr
 jetsplot(my_objects, my_colour_arrays, Module=GLMakie)
 
 using WGLMakie
-jetsplot(my_objects, my_colour_arrays, Module=Main) #default

source

`,8))]),s("details",u,[s("summary",null,[e[6]||(e[6]=s("a",{id:"JetReconstruction.jetsplot-Tuple{Any, ClusterSequence}",href:"#JetReconstruction.jetsplot-Tuple{Any, ClusterSequence}"},[s("span",{class:"jlbinding"},"JetReconstruction.jetsplot")],-1)),e[7]||(e[7]=t()),n(i,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[8]||(e[8]=a(`
julia
jetsplot(objects, cs::ClusterSequence; barsize_phi=0.1, barsize_eta=0.1, colormap=:glasbey_hv_n256, Module=Main)

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
+jetsplot(my_objects, my_colour_arrays, Module=Main) #default

source

`,8))]),s("details",u,[s("summary",null,[e[6]||(e[6]=s("a",{id:"JetReconstruction.jetsplot-Tuple{Any, ClusterSequence}",href:"#JetReconstruction.jetsplot-Tuple{Any, ClusterSequence}"},[s("span",{class:"jlbinding"},"JetReconstruction.jetsplot")],-1)),e[7]||(e[7]=t()),n(i,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[8]||(e[8]=a(`
julia
jetsplot(objects, cs::ClusterSequence; barsize_phi=0.1, barsize_eta=0.1, colormap=:glasbey_hv_n256, Module=Main)

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:

import CairoMakie
 jetsplot(my_objects, cs, Module=CairoMakie)
@@ -26,4 +26,4 @@ import{_ as o,c as l,a5 as a,j as s,a as t,G as n,B as p,o as c}from"./chunks/fr
 jetsplot(my_objects, cs, Module=GLMakie)
 
 using WGLMakie
-jetsplot(my_objects, cs, Module=Main) #default

source

`,7))])])}const v=o(r,[["render",k]]);export{j as __pageData,v as default}; +jetsplot(my_objects, cs, Module=Main) #default

source

`,7))])])}const v=o(r,[["render",k]]);export{j as __pageData,v as default}; diff --git a/dev/assets/lib_visualisation.md.BGH-rHrp.lean.js b/dev/assets/lib_visualisation.md.Bjkk6jY3.lean.js similarity index 97% rename from dev/assets/lib_visualisation.md.BGH-rHrp.lean.js rename to dev/assets/lib_visualisation.md.Bjkk6jY3.lean.js index cec4c9f..d423ddb 100644 --- a/dev/assets/lib_visualisation.md.BGH-rHrp.lean.js +++ b/dev/assets/lib_visualisation.md.Bjkk6jY3.lean.js @@ -1,4 +1,4 @@ -import{_ as o,c as l,a5 as a,j as s,a as t,G as n,B as p,o as c}from"./chunks/framework.BonP4S8S.js";const j=JSON.parse('{"title":"Jet Visualisation Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"lib/visualisation.md","filePath":"lib/visualisation.md","lastUpdated":null}'),r={name:"lib/visualisation.md"},h={class:"jldocstring custom-block",open:""},d={class:"jldocstring custom-block",open:""},u={class:"jldocstring custom-block",open:""};function k(g,e,y,b,m,E){const i=p("Badge");return c(),l("div",null,[e[9]||(e[9]=a('

Jet Visualisation Documentation

Documentation for visualisation interfaces extension module.

Index

Jet Visualisation Public Interfaces

',5)),s("details",h,[s("summary",null,[e[0]||(e[0]=s("a",{id:"JetReconstruction.animatereco-Tuple{ClusterSequence, Any}",href:"#JetReconstruction.animatereco-Tuple{ClusterSequence, Any}"},[s("span",{class:"jlbinding"},"JetReconstruction.animatereco")],-1)),e[1]||(e[1]=t()),n(i,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[2]||(e[2]=a(`
julia
animatereco(cs::ClusterSequence, filename;
+import{_ as o,c as l,a5 as a,j as s,a as t,G as n,B as p,o as c}from"./chunks/framework.BtBDBbTG.js";const j=JSON.parse('{"title":"Jet Visualisation Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"lib/visualisation.md","filePath":"lib/visualisation.md","lastUpdated":null}'),r={name:"lib/visualisation.md"},h={class:"jldocstring custom-block",open:""},d={class:"jldocstring custom-block",open:""},u={class:"jldocstring custom-block",open:""};function k(g,e,y,b,m,E){const i=p("Badge");return c(),l("div",null,[e[9]||(e[9]=a('

Jet Visualisation Documentation

Documentation for visualisation interfaces extension module.

Index

Jet Visualisation Public Interfaces

',5)),s("details",h,[s("summary",null,[e[0]||(e[0]=s("a",{id:"JetReconstruction.animatereco-Tuple{ClusterSequence, Any}",href:"#JetReconstruction.animatereco-Tuple{ClusterSequence, Any}"},[s("span",{class:"jlbinding"},"JetReconstruction.animatereco")],-1)),e[1]||(e[1]=t()),n(i,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[2]||(e[2]=a(`
julia
animatereco(cs::ClusterSequence, filename;
             barsize_phi = 0.1,
             barsize_y = 0.1,
             colormap = :glasbey_category10_n256,
@@ -7,7 +7,7 @@ import{_ as o,c as l,a5 as a,j as s,a as t,G as n,B as p,o as c}from"./chunks/fr
             elevation = 0.5,
             framerate = 5,
             ancestors = false,
-            Module = Makie)

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.

source

`,10))]),s("details",d,[s("summary",null,[e[3]||(e[3]=s("a",{id:"JetReconstruction.jetsplot-Tuple{Any, Any}",href:"#JetReconstruction.jetsplot-Tuple{Any, Any}"},[s("span",{class:"jlbinding"},"JetReconstruction.jetsplot")],-1)),e[4]||(e[4]=t()),n(i,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[5]||(e[5]=a(`

jetsplot(objects, idx_arrays; barsize_phi=0.1, barsize_eta=0.1, colormap=:glasbey_hv_n256, Module=Main)

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
+            Module = Makie)

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.

source

`,10))]),s("details",d,[s("summary",null,[e[3]||(e[3]=s("a",{id:"JetReconstruction.jetsplot-Tuple{Any, Any}",href:"#JetReconstruction.jetsplot-Tuple{Any, Any}"},[s("span",{class:"jlbinding"},"JetReconstruction.jetsplot")],-1)),e[4]||(e[4]=t()),n(i,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[5]||(e[5]=a(`

jetsplot(objects, idx_arrays; barsize_phi=0.1, barsize_eta=0.1, colormap=:glasbey_hv_n256, Module=Main)

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:

import CairoMakie
@@ -17,7 +17,7 @@ import{_ as o,c as l,a5 as a,j as s,a as t,G as n,B as p,o as c}from"./chunks/fr
 jetsplot(my_objects, my_colour_arrays, Module=GLMakie)
 
 using WGLMakie
-jetsplot(my_objects, my_colour_arrays, Module=Main) #default

source

`,8))]),s("details",u,[s("summary",null,[e[6]||(e[6]=s("a",{id:"JetReconstruction.jetsplot-Tuple{Any, ClusterSequence}",href:"#JetReconstruction.jetsplot-Tuple{Any, ClusterSequence}"},[s("span",{class:"jlbinding"},"JetReconstruction.jetsplot")],-1)),e[7]||(e[7]=t()),n(i,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[8]||(e[8]=a(`
julia
jetsplot(objects, cs::ClusterSequence; barsize_phi=0.1, barsize_eta=0.1, colormap=:glasbey_hv_n256, Module=Main)

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
+jetsplot(my_objects, my_colour_arrays, Module=Main) #default

source

`,8))]),s("details",u,[s("summary",null,[e[6]||(e[6]=s("a",{id:"JetReconstruction.jetsplot-Tuple{Any, ClusterSequence}",href:"#JetReconstruction.jetsplot-Tuple{Any, ClusterSequence}"},[s("span",{class:"jlbinding"},"JetReconstruction.jetsplot")],-1)),e[7]||(e[7]=t()),n(i,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),e[8]||(e[8]=a(`
julia
jetsplot(objects, cs::ClusterSequence; barsize_phi=0.1, barsize_eta=0.1, colormap=:glasbey_hv_n256, Module=Main)

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:

import CairoMakie
 jetsplot(my_objects, cs, Module=CairoMakie)
@@ -26,4 +26,4 @@ import{_ as o,c as l,a5 as a,j as s,a as t,G as n,B as p,o as c}from"./chunks/fr
 jetsplot(my_objects, cs, Module=GLMakie)
 
 using WGLMakie
-jetsplot(my_objects, cs, Module=Main) #default

source

`,7))])])}const v=o(r,[["render",k]]);export{j as __pageData,v as default}; +jetsplot(my_objects, cs, Module=Main) #default

source

`,7))])])}const v=o(r,[["render",k]]);export{j as __pageData,v as default}; diff --git a/dev/assets/style.DdJAd73t.css b/dev/assets/style.DALBIe4L.css similarity index 99% rename from dev/assets/style.DdJAd73t.css rename to dev/assets/style.DALBIe4L.css index 6a6e239..1f5161e 100644 --- a/dev/assets/style.DdJAd73t.css +++ b/dev/assets/style.DALBIe4L.css @@ -1 +1 @@ -@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, "PingFang SC", "Noto Sans CJK SC", "Noto Sans SC", "Heiti SC", "Microsoft YaHei", "DengXian", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.vpi-social-discord{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418Z'/%3E%3C/svg%3E")}.vpi-social-facebook{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z'/%3E%3C/svg%3E")}.vpi-social-github{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")}.vpi-social-instagram{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.03.084c-1.277.06-2.149.264-2.91.563a5.874 5.874 0 0 0-2.124 1.388 5.878 5.878 0 0 0-1.38 2.127C.321 4.926.12 5.8.064 7.076.008 8.354-.005 8.764.001 12.023c.007 3.259.021 3.667.083 4.947.061 1.277.264 2.149.563 2.911.308.789.72 1.457 1.388 2.123a5.872 5.872 0 0 0 2.129 1.38c.763.295 1.636.496 2.913.552 1.278.056 1.689.069 4.947.063 3.257-.007 3.668-.021 4.947-.082 1.28-.06 2.147-.265 2.91-.563a5.881 5.881 0 0 0 2.123-1.388 5.881 5.881 0 0 0 1.38-2.129c.295-.763.496-1.636.551-2.912.056-1.28.07-1.69.063-4.948-.006-3.258-.02-3.667-.081-4.947-.06-1.28-.264-2.148-.564-2.911a5.892 5.892 0 0 0-1.387-2.123 5.857 5.857 0 0 0-2.128-1.38C19.074.322 18.202.12 16.924.066 15.647.009 15.236-.006 11.977 0 8.718.008 8.31.021 7.03.084m.14 21.693c-1.17-.05-1.805-.245-2.228-.408a3.736 3.736 0 0 1-1.382-.895 3.695 3.695 0 0 1-.9-1.378c-.165-.423-.363-1.058-.417-2.228-.06-1.264-.072-1.644-.08-4.848-.006-3.204.006-3.583.061-4.848.05-1.169.246-1.805.408-2.228.216-.561.477-.96.895-1.382a3.705 3.705 0 0 1 1.379-.9c.423-.165 1.057-.361 2.227-.417 1.265-.06 1.644-.072 4.848-.08 3.203-.006 3.583.006 4.85.062 1.168.05 1.804.244 2.227.408.56.216.96.475 1.382.895.421.42.681.817.9 1.378.165.422.362 1.056.417 2.227.06 1.265.074 1.645.08 4.848.005 3.203-.006 3.583-.061 4.848-.051 1.17-.245 1.805-.408 2.23-.216.56-.477.96-.896 1.38a3.705 3.705 0 0 1-1.378.9c-.422.165-1.058.362-2.226.418-1.266.06-1.645.072-4.85.079-3.204.007-3.582-.006-4.848-.06m9.783-16.192a1.44 1.44 0 1 0 1.437-1.442 1.44 1.44 0 0 0-1.437 1.442M5.839 12.012a6.161 6.161 0 1 0 12.323-.024 6.162 6.162 0 0 0-12.323.024M8 12.008A4 4 0 1 1 12.008 16 4 4 0 0 1 8 12.008'/%3E%3C/svg%3E")}.vpi-social-linkedin{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z'/%3E%3C/svg%3E")}.vpi-social-mastodon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z'/%3E%3C/svg%3E")}.vpi-social-npm{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z'/%3E%3C/svg%3E")}.vpi-social-slack{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z'/%3E%3C/svg%3E")}.vpi-social-twitter,.vpi-social-x{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z'/%3E%3C/svg%3E")}.vpi-social-youtube{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-b06cdb19]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-b06cdb19],.VPBackdrop.fade-leave-to[data-v-b06cdb19]{opacity:0}.VPBackdrop.fade-leave-active[data-v-b06cdb19]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-b06cdb19]{display:none}}.NotFound[data-v-951cab6c]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-951cab6c]{padding:96px 32px 168px}}.code[data-v-951cab6c]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-951cab6c]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-951cab6c]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-951cab6c]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-951cab6c]{padding-top:20px}.link[data-v-951cab6c]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-951cab6c]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-3f927ebe]{position:relative;z-index:1}.nested[data-v-3f927ebe]{padding-right:16px;padding-left:16px}.outline-link[data-v-3f927ebe]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-3f927ebe]:hover,.outline-link.active[data-v-3f927ebe]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-3f927ebe]{padding-left:13px}.VPDocAsideOutline[data-v-b38bf2ff]{display:none}.VPDocAsideOutline.has-outline[data-v-b38bf2ff]{display:block}.content[data-v-b38bf2ff]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-b38bf2ff]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-b38bf2ff]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-6d7b3c46]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-6d7b3c46]{flex-grow:1}.VPDocAside[data-v-6d7b3c46] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-6d7b3c46] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-6d7b3c46] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-475f71b8]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-475f71b8]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-4f9813fa]{margin-top:64px}.edit-info[data-v-4f9813fa]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-4f9813fa]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-4f9813fa]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-4f9813fa]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-4f9813fa]{margin-right:8px}.prev-next[data-v-4f9813fa]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-4f9813fa]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-4f9813fa]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-4f9813fa]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-4f9813fa]{margin-left:auto;text-align:right}.desc[data-v-4f9813fa]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-4f9813fa]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-83890dd9]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-83890dd9]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-83890dd9]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-83890dd9]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-83890dd9]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-83890dd9]{display:flex;justify-content:center}.VPDoc .aside[data-v-83890dd9]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-83890dd9]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-83890dd9]{max-width:1104px}}.container[data-v-83890dd9]{margin:0 auto;width:100%}.aside[data-v-83890dd9]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-83890dd9]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-83890dd9]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-83890dd9]::-webkit-scrollbar{display:none}.aside-curtain[data-v-83890dd9]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-83890dd9]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-83890dd9]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-83890dd9]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-83890dd9]{order:1;margin:0;min-width:640px}}.content-container[data-v-83890dd9]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-83890dd9]{max-width:688px}.VPButton[data-v-14206e74]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-14206e74]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-14206e74]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-14206e74]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-14206e74]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-14206e74]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-14206e74]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-14206e74]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-14206e74]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-14206e74]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-14206e74]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-14206e74]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-14206e74]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-35a7d0b8]{display:none}.dark .VPImage.light[data-v-35a7d0b8]{display:none}.VPHero[data-v-955009fc]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-955009fc]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-955009fc]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-955009fc]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-955009fc]{flex-direction:row}}.main[data-v-955009fc]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-955009fc]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-955009fc]{text-align:left}}@media (min-width: 960px){.main[data-v-955009fc]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-955009fc]{max-width:592px}}.name[data-v-955009fc],.text[data-v-955009fc]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-955009fc],.VPHero.has-image .text[data-v-955009fc]{margin:0 auto}.name[data-v-955009fc]{color:var(--vp-home-hero-name-color)}.clip[data-v-955009fc]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-955009fc],.text[data-v-955009fc]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-955009fc],.text[data-v-955009fc]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-955009fc],.VPHero.has-image .text[data-v-955009fc]{margin:0}}.tagline[data-v-955009fc]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-955009fc]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-955009fc]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-955009fc]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-955009fc]{margin:0}}.actions[data-v-955009fc]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-955009fc]{justify-content:center}@media (min-width: 640px){.actions[data-v-955009fc]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-955009fc]{justify-content:flex-start}}.action[data-v-955009fc]{flex-shrink:0;padding:6px}.image[data-v-955009fc]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-955009fc]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-955009fc]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-955009fc]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-955009fc]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-955009fc]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-955009fc]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-955009fc]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-955009fc]{width:320px;height:320px}}[data-v-955009fc] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-955009fc] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-955009fc] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-f5e9645b]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-f5e9645b]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-f5e9645b]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-f5e9645b]>.VPImage{margin-bottom:20px}.icon[data-v-f5e9645b]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-f5e9645b]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-f5e9645b]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-f5e9645b]{padding-top:8px}.link-text-value[data-v-f5e9645b]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-f5e9645b]{margin-left:6px}.VPFeatures[data-v-d0a190d7]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-d0a190d7]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-d0a190d7]{padding:0 64px}}.container[data-v-d0a190d7]{margin:0 auto;max-width:1152px}.items[data-v-d0a190d7]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-d0a190d7]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-d0a190d7],.item.grid-4[data-v-d0a190d7],.item.grid-6[data-v-d0a190d7]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-d0a190d7],.item.grid-4[data-v-d0a190d7]{width:50%}.item.grid-3[data-v-d0a190d7],.item.grid-6[data-v-d0a190d7]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-d0a190d7]{width:25%}}.container[data-v-7a48a447]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-7a48a447]{padding:0 48px}}@media (min-width: 960px){.container[data-v-7a48a447]{width:100%;padding:0 64px}}.vp-doc[data-v-7a48a447] .VPHomeSponsors,.vp-doc[data-v-7a48a447] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-7a48a447] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-7a48a447] .VPHomeSponsors a,.vp-doc[data-v-7a48a447] .VPTeamPage a{text-decoration:none}.VPHome[data-v-cbb6ec48]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-cbb6ec48]{margin-bottom:128px}}.VPContent[data-v-91765379]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-91765379]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-91765379]{margin:0}@media (min-width: 960px){.VPContent[data-v-91765379]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-91765379]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-91765379]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-c970a860]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-c970a860]{display:none}.VPFooter[data-v-c970a860] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-c970a860] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-c970a860]{padding:32px}}.container[data-v-c970a860]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-c970a860],.copyright[data-v-c970a860]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-bc9dc845]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-bc9dc845]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-bc9dc845]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-bc9dc845]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-bc9dc845]{color:var(--vp-c-text-1)}.icon[data-v-bc9dc845]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-bc9dc845]{font-size:14px}.icon[data-v-bc9dc845]{font-size:16px}}.open>.icon[data-v-bc9dc845]{transform:rotate(90deg)}.items[data-v-bc9dc845]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-bc9dc845]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-bc9dc845]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-bc9dc845]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-bc9dc845]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-bc9dc845]{transition:all .2s ease-out}.flyout-leave-active[data-v-bc9dc845]{transition:all .15s ease-in}.flyout-enter-from[data-v-bc9dc845],.flyout-leave-to[data-v-bc9dc845]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-070ab83d]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-070ab83d]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-070ab83d]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-070ab83d]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-070ab83d]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-070ab83d]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-070ab83d]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-070ab83d]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-070ab83d]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-070ab83d]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-070ab83d]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-070ab83d]{display:none}}.menu-icon[data-v-070ab83d]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-070ab83d]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-070ab83d]{padding:12px 32px 11px}}.VPSwitch[data-v-4a1c76db]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-4a1c76db]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-4a1c76db]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-4a1c76db]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-4a1c76db] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-4a1c76db] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-e40a8bb6]{opacity:1}.moon[data-v-e40a8bb6],.dark .sun[data-v-e40a8bb6]{opacity:0}.dark .moon[data-v-e40a8bb6]{opacity:1}.dark .VPSwitchAppearance[data-v-e40a8bb6] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-af096f4a]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-af096f4a]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-8b74d055]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-8b74d055]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-8b74d055]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-8b74d055]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-48c802d0]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-48c802d0]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-48c802d0]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-48c802d0]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-7dd3104a]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-7dd3104a] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-7dd3104a] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-7dd3104a] .group:last-child{padding-bottom:0}.VPMenu[data-v-7dd3104a] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-7dd3104a] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-7dd3104a] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-7dd3104a] .action{padding-left:24px}.VPFlyout[data-v-e5380155]{position:relative}.VPFlyout[data-v-e5380155]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-e5380155]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-e5380155]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-e5380155]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-e5380155]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-e5380155],.button[aria-expanded=true]+.menu[data-v-e5380155]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-e5380155]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-e5380155]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-e5380155]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-e5380155]{margin-right:0;font-size:16px}.text-icon[data-v-e5380155]{margin-left:4px;font-size:14px}.icon[data-v-e5380155]{font-size:20px;transition:fill .25s}.menu[data-v-e5380155]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-717b8b75]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-717b8b75]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-717b8b75]>svg,.VPSocialLink[data-v-717b8b75]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-ee7a9424]{display:flex;justify-content:center}.VPNavBarExtra[data-v-925effce]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-925effce]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-925effce]{display:none}}.trans-title[data-v-925effce]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-925effce],.item.social-links[data-v-925effce]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-925effce]{min-width:176px}.appearance-action[data-v-925effce]{margin-right:-2px}.social-links-list[data-v-925effce]{margin:-4px -8px}.VPNavBarHamburger[data-v-5dea55bf]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-5dea55bf]{display:none}}.container[data-v-5dea55bf]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-5dea55bf]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-5dea55bf]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-5dea55bf]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-5dea55bf]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-5dea55bf]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-5dea55bf]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-5dea55bf],.VPNavBarHamburger.active:hover .middle[data-v-5dea55bf],.VPNavBarHamburger.active:hover .bottom[data-v-5dea55bf]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-5dea55bf],.middle[data-v-5dea55bf],.bottom[data-v-5dea55bf]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-5dea55bf]{top:0;left:0;transform:translate(0)}.middle[data-v-5dea55bf]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-5dea55bf]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-ed5ac1f6]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-ed5ac1f6],.VPNavBarMenuLink[data-v-ed5ac1f6]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-e6d46098]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-e6d46098]{display:flex}}/*! @docsearch/css 3.6.1 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.30196078431372547);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}.DocSearch-Button-Key--pressed{transform:translate3d(0,1px,0);box-shadow:var(--docsearch-key-pressed-shadow)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-164c457f]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-164c457f]{display:flex;align-items:center}}.title[data-v-28a961f9]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-28a961f9]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-28a961f9]{border-bottom-color:var(--vp-c-divider)}}[data-v-28a961f9] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-c80d9ad0]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-c80d9ad0]{display:flex;align-items:center}}.title[data-v-c80d9ad0]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-822684d1]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-822684d1]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-822684d1]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-822684d1]:not(.home){background-color:transparent}.VPNavBar[data-v-822684d1]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-822684d1]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-822684d1]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-822684d1]{padding:0}}.container[data-v-822684d1]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-822684d1],.container>.content[data-v-822684d1]{pointer-events:none}.container[data-v-822684d1] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-822684d1]{max-width:100%}}.title[data-v-822684d1]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-822684d1]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-822684d1]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-822684d1]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-822684d1]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-822684d1]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-822684d1]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-822684d1]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-822684d1]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-822684d1]{column-gap:.5rem}}.menu+.translations[data-v-822684d1]:before,.menu+.appearance[data-v-822684d1]:before,.menu+.social-links[data-v-822684d1]:before,.translations+.appearance[data-v-822684d1]:before,.appearance+.social-links[data-v-822684d1]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-822684d1]:before,.translations+.appearance[data-v-822684d1]:before{margin-right:16px}.appearance+.social-links[data-v-822684d1]:before{margin-left:16px}.social-links[data-v-822684d1]{margin-right:-8px}.divider[data-v-822684d1]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-822684d1]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-822684d1]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-822684d1]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-822684d1]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-822684d1]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-822684d1]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-ffb44008]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-ffb44008]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-27d04aeb]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-27d04aeb]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-7179dbb7]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-7179dbb7]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-4b8941ac]{display:block}.title[data-v-4b8941ac]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-875057a5]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-875057a5]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-875057a5]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-875057a5]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-875057a5]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-875057a5]{transform:rotate(45deg)}.button[data-v-875057a5]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-875057a5]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-875057a5]{transition:transform .25s}.group[data-v-875057a5]:first-child{padding-top:0}.group+.group[data-v-875057a5],.group+.item[data-v-875057a5]{padding-top:4px}.VPNavScreenTranslations[data-v-362991c2]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-362991c2]{height:auto}.title[data-v-362991c2]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-362991c2]{font-size:16px}.icon.lang[data-v-362991c2]{margin-right:8px}.icon.chevron[data-v-362991c2]{margin-left:4px}.list[data-v-362991c2]{padding:4px 0 0 24px}.link[data-v-362991c2]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-833aabba]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-833aabba],.VPNavScreen.fade-leave-active[data-v-833aabba]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-833aabba],.VPNavScreen.fade-leave-active .container[data-v-833aabba]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-833aabba],.VPNavScreen.fade-leave-to[data-v-833aabba]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-833aabba],.VPNavScreen.fade-leave-to .container[data-v-833aabba]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-833aabba]{display:none}}.container[data-v-833aabba]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-833aabba],.menu+.appearance[data-v-833aabba],.translations+.appearance[data-v-833aabba]{margin-top:24px}.menu+.social-links[data-v-833aabba]{margin-top:16px}.appearance+.social-links[data-v-833aabba]{margin-top:16px}.VPNav[data-v-f1e365da]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-f1e365da]{position:fixed}}.VPSidebarItem.level-0[data-v-196b2e5f]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-196b2e5f]{padding-bottom:10px}.item[data-v-196b2e5f]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-196b2e5f]{cursor:pointer}.indicator[data-v-196b2e5f]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-196b2e5f],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-196b2e5f],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-196b2e5f],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-196b2e5f]{background-color:var(--vp-c-brand-1)}.link[data-v-196b2e5f]{display:flex;align-items:center;flex-grow:1}.text[data-v-196b2e5f]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-196b2e5f]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-196b2e5f],.VPSidebarItem.level-2 .text[data-v-196b2e5f],.VPSidebarItem.level-3 .text[data-v-196b2e5f],.VPSidebarItem.level-4 .text[data-v-196b2e5f],.VPSidebarItem.level-5 .text[data-v-196b2e5f]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-196b2e5f]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-1.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-2.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-3.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-4.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-5.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-196b2e5f]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-196b2e5f]{color:var(--vp-c-brand-1)}.caret[data-v-196b2e5f]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-196b2e5f]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-196b2e5f]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-196b2e5f]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-196b2e5f]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-196b2e5f],.VPSidebarItem.level-2 .items[data-v-196b2e5f],.VPSidebarItem.level-3 .items[data-v-196b2e5f],.VPSidebarItem.level-4 .items[data-v-196b2e5f],.VPSidebarItem.level-5 .items[data-v-196b2e5f]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-196b2e5f]{display:none}.no-transition[data-v-9e426adc] .caret-icon{transition:none}.group+.group[data-v-9e426adc]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-9e426adc]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-18756405]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-18756405]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-18756405]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-18756405]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-18756405]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-18756405]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-18756405]{outline:0}.VPSkipLink[data-v-c3508ec8]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-c3508ec8]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-c3508ec8]{top:14px;left:16px}}.Layout[data-v-a9a9e638]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-db81191c]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-db81191c]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-db81191c]{margin:128px 0}}.VPHomeSponsors[data-v-db81191c]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-db81191c]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-db81191c]{padding:0 64px}}.container[data-v-db81191c]{margin:0 auto;max-width:1152px}.love[data-v-db81191c]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-db81191c]{display:inline-block}.message[data-v-db81191c]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-db81191c]{padding-top:32px}.action[data-v-db81191c]{padding-top:40px;text-align:center}.VPTeamPage[data-v-c2f8e101]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-c2f8e101]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-c2f8e101-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-c2f8e101-s],.VPTeamMembers+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-c2f8e101-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-c2f8e101-s],.VPTeamMembers+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:96px}}.VPTeamMembers[data-v-c2f8e101-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-c2f8e101-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-c2f8e101-s]{padding:0 64px}}.VPTeamPageTitle[data-v-e277e15c]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-e277e15c]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-e277e15c]{padding:80px 64px 48px}}.title[data-v-e277e15c]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-e277e15c]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-e277e15c]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-e277e15c]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-d43bc49d]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-d43bc49d]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-d43bc49d]{padding:0 64px}}.title[data-v-d43bc49d]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-d43bc49d]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-d43bc49d]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-d43bc49d]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-d43bc49d]{padding-top:40px}.VPTeamMembersItem[data-v-f9987cb6]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-f9987cb6]{padding:32px}.VPTeamMembersItem.small .data[data-v-f9987cb6]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-f9987cb6]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-f9987cb6]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-f9987cb6]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-f9987cb6]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-f9987cb6]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-f9987cb6]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-f9987cb6]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-f9987cb6]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-f9987cb6]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-f9987cb6]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-f9987cb6]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-f9987cb6]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-f9987cb6]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-f9987cb6]{text-align:center}.avatar[data-v-f9987cb6]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-f9987cb6]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-f9987cb6]{margin:0;font-weight:600}.affiliation[data-v-f9987cb6]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-f9987cb6]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-f9987cb6]:hover{color:var(--vp-c-brand-1)}.desc[data-v-f9987cb6]{margin:0 auto}.desc[data-v-f9987cb6] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-f9987cb6]{display:flex;justify-content:center;height:56px}.sp-link[data-v-f9987cb6]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-f9987cb6]:hover,.sp .sp-link.link[data-v-f9987cb6]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-f9987cb6]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-fba19bad]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-fba19bad]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-fba19bad]{max-width:876px}.VPTeamMembers.medium .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-fba19bad]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-fba19bad]{max-width:760px}.container[data-v-fba19bad]{display:grid;gap:24px;margin:0 auto;max-width:1152px}:root{--vp-plugin-tabs-tab-text-color: var(--vp-c-text-2);--vp-plugin-tabs-tab-active-text-color: var(--vp-c-text-1);--vp-plugin-tabs-tab-hover-text-color: var(--vp-c-text-1);--vp-plugin-tabs-tab-bg: var(--vp-c-bg-soft);--vp-plugin-tabs-tab-divider: var(--vp-c-divider);--vp-plugin-tabs-tab-active-bar-color: var(--vp-c-brand-1)}.plugin-tabs{margin:16px 0;background-color:var(--vp-plugin-tabs-tab-bg);border-radius:8px}.plugin-tabs--tab-list{position:relative;padding:0 12px;overflow-x:auto;overflow-y:hidden}.plugin-tabs--tab-list:after{content:"";position:absolute;bottom:0;left:0;right:0;height:2px;background-color:var(--vp-plugin-tabs-tab-divider)}.plugin-tabs--tab{position:relative;padding:0 12px;line-height:48px;border-bottom:2px solid transparent;color:var(--vp-plugin-tabs-tab-text-color);font-size:14px;font-weight:500;white-space:nowrap;transition:color .25s}.plugin-tabs--tab[aria-selected=true]{color:var(--vp-plugin-tabs-tab-active-text-color)}.plugin-tabs--tab:hover{color:var(--vp-plugin-tabs-tab-hover-text-color)}.plugin-tabs--tab:after{content:"";position:absolute;bottom:-2px;left:8px;right:8px;height:2px;background-color:transparent;transition:background-color .25s;z-index:1}.plugin-tabs--tab[aria-selected=true]:after{background-color:var(--vp-plugin-tabs-tab-active-bar-color)}.plugin-tabs--content[data-v-9b0d03d2]{padding:16px}.plugin-tabs--content[data-v-9b0d03d2]>:first-child:first-child{margin-top:0}.plugin-tabs--content[data-v-9b0d03d2]>:last-child:last-child{margin-bottom:0}.plugin-tabs--content[data-v-9b0d03d2]>div[class*=language-]{border-radius:8px;margin:16px 0}:root:not(.dark) .plugin-tabs--content[data-v-9b0d03d2] div[class*=language-]{background-color:var(--vp-c-bg)}.VPHero .clip{white-space:pre;max-width:500px}@font-face{font-family:JuliaMono-Regular;src:url(https://cdn.jsdelivr.net/gh/cormullion/juliamono/webfonts/JuliaMono-Regular.woff2)}:root{--vp-font-family-base: "Barlow", "Inter var experimental", "Inter var", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--vp-font-family-mono: JuliaMono-Regular, monospace}.mono{font-feature-settings:"calt" 0}.mono pre,.mono code{font-family:JuliaMono-Light}:root{--julia-blue: #4063D8;--julia-purple: #9558B2;--julia-red: #CB3C33;--julia-green: #389826;--vp-c-brand: #389826;--vp-c-brand-light: #3dd027;--vp-c-brand-lighter: #9499ff;--vp-c-brand-lightest: #bcc0ff;--vp-c-brand-dark: #535bf2;--vp-c-brand-darker: #454ce1;--vp-c-brand-dimm: #212425}:root{--vp-button-brand-border: var(--vp-c-brand-light);--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand);--vp-button-brand-hover-border: var(--vp-c-brand-light);--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-light);--vp-button-brand-active-border: var(--vp-c-brand-light);--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-button-brand-bg)}:root{--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: -webkit-linear-gradient( 120deg, #9558B2 30%, #CB3C33 );--vp-home-hero-image-background-image: linear-gradient( -45deg, #9558B2 30%, #389826 30%, #CB3C33 );--vp-home-hero-image-filter: blur(40px)}@media (min-width: 640px){:root{--vp-home-hero-image-filter: blur(56px)}}@media (min-width: 960px){:root{--vp-home-hero-image-filter: blur(72px)}}:root.dark{--vp-custom-block-tip-border: var(--vp-c-brand);--vp-custom-block-tip-text: var(--vp-c-brand-lightest);--vp-custom-block-tip-bg: var(--vp-c-brand-dimm);--vp-c-black: hsl(220 20% 9%);--vp-c-black-pure: hsl(220, 24%, 4%);--vp-c-black-soft: hsl(220 16% 13%);--vp-c-black-mute: hsl(220 14% 17%);--vp-c-gray: hsl(220 8% 56%);--vp-c-gray-dark-1: hsl(220 10% 39%);--vp-c-gray-dark-2: hsl(220 12% 28%);--vp-c-gray-dark-3: hsl(220 12% 23%);--vp-c-gray-dark-4: hsl(220 14% 17%);--vp-c-gray-dark-5: hsl(220 16% 13%);--vp-custom-block-info-bg: hsl(220 14% 17%)}.DocSearch{--docsearch-primary-color: var(--vp-c-brand) !important}mjx-container>svg{display:block;margin:auto}mjx-container{padding:.5rem 0}mjx-container{display:inline;margin:auto 2px -2px}mjx-container>svg{margin:auto;display:inline}:root{--vp-c-brand-1: #CB3C33;--vp-c-brand-2: #CB3C33;--vp-c-brand-3: #CB3C33;--vp-c-sponsor: #ca2971;--vitest-c-sponsor-hover: #c13071}.dark{--vp-c-brand-1: #91dd33;--vp-c-brand-2: #91dd33;--vp-c-brand-3: #91dd33;--vp-c-sponsor: #91dd33;--vitest-c-sponsor-hover: #e51370}:root:not(.dark) .dark-only{display:none}:root:is(.dark) .light-only{display:none}.VPDoc.has-aside .content-container{max-width:100%!important}.aside{max-width:200px!important;padding-left:0!important}.VPDoc{padding-top:15px!important;padding-left:5px!important}.VPDocOutlineItem li{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;max-width:200px}.VPNavBar .title{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}@media (max-width: 960px){.VPDoc{padding-left:25px!important}}.VPLocalSearchBox[data-v-5b749456]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-5b749456]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-5b749456]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-5b749456]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-5b749456]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 767px){.search-bar[data-v-5b749456]{padding:0 8px}}.search-bar[data-v-5b749456]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-5b749456]{display:block;font-size:18px}.navigate-icon[data-v-5b749456]{display:block;font-size:14px}.search-icon[data-v-5b749456]{margin:8px}@media (max-width: 767px){.search-icon[data-v-5b749456]{display:none}}.search-input[data-v-5b749456]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-5b749456]{padding:6px 4px}}.search-actions[data-v-5b749456]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-5b749456]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-5b749456]{display:none}}.search-actions button[data-v-5b749456]{padding:8px}.search-actions button[data-v-5b749456]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-5b749456]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-5b749456]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-5b749456]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-5b749456]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-5b749456]{display:none}}.search-keyboard-shortcuts kbd[data-v-5b749456]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-5b749456]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-5b749456]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-5b749456]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-5b749456]{margin:8px}}.titles[data-v-5b749456]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-5b749456]{display:flex;align-items:center;gap:4px}.title.main[data-v-5b749456]{font-weight:500}.title-icon[data-v-5b749456]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-5b749456]{opacity:.5}.result.selected[data-v-5b749456]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-5b749456]{position:relative}.excerpt[data-v-5b749456]{opacity:50%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;margin-top:4px}.result.selected .excerpt[data-v-5b749456]{opacity:1}.excerpt[data-v-5b749456] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-5b749456] mark,.excerpt[data-v-5b749456] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-5b749456] .vp-code-group .tabs{display:none}.excerpt[data-v-5b749456] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-5b749456]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-5b749456]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-5b749456],.result.selected .title-icon[data-v-5b749456]{color:var(--vp-c-brand-1)!important}.no-results[data-v-5b749456]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-5b749456]{flex:none} +@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/JetReconstruction.jl/dev/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, "PingFang SC", "Noto Sans CJK SC", "Noto Sans SC", "Heiti SC", "Microsoft YaHei", "DengXian", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.vpi-social-discord{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418Z'/%3E%3C/svg%3E")}.vpi-social-facebook{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z'/%3E%3C/svg%3E")}.vpi-social-github{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")}.vpi-social-instagram{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.03.084c-1.277.06-2.149.264-2.91.563a5.874 5.874 0 0 0-2.124 1.388 5.878 5.878 0 0 0-1.38 2.127C.321 4.926.12 5.8.064 7.076.008 8.354-.005 8.764.001 12.023c.007 3.259.021 3.667.083 4.947.061 1.277.264 2.149.563 2.911.308.789.72 1.457 1.388 2.123a5.872 5.872 0 0 0 2.129 1.38c.763.295 1.636.496 2.913.552 1.278.056 1.689.069 4.947.063 3.257-.007 3.668-.021 4.947-.082 1.28-.06 2.147-.265 2.91-.563a5.881 5.881 0 0 0 2.123-1.388 5.881 5.881 0 0 0 1.38-2.129c.295-.763.496-1.636.551-2.912.056-1.28.07-1.69.063-4.948-.006-3.258-.02-3.667-.081-4.947-.06-1.28-.264-2.148-.564-2.911a5.892 5.892 0 0 0-1.387-2.123 5.857 5.857 0 0 0-2.128-1.38C19.074.322 18.202.12 16.924.066 15.647.009 15.236-.006 11.977 0 8.718.008 8.31.021 7.03.084m.14 21.693c-1.17-.05-1.805-.245-2.228-.408a3.736 3.736 0 0 1-1.382-.895 3.695 3.695 0 0 1-.9-1.378c-.165-.423-.363-1.058-.417-2.228-.06-1.264-.072-1.644-.08-4.848-.006-3.204.006-3.583.061-4.848.05-1.169.246-1.805.408-2.228.216-.561.477-.96.895-1.382a3.705 3.705 0 0 1 1.379-.9c.423-.165 1.057-.361 2.227-.417 1.265-.06 1.644-.072 4.848-.08 3.203-.006 3.583.006 4.85.062 1.168.05 1.804.244 2.227.408.56.216.96.475 1.382.895.421.42.681.817.9 1.378.165.422.362 1.056.417 2.227.06 1.265.074 1.645.08 4.848.005 3.203-.006 3.583-.061 4.848-.051 1.17-.245 1.805-.408 2.23-.216.56-.477.96-.896 1.38a3.705 3.705 0 0 1-1.378.9c-.422.165-1.058.362-2.226.418-1.266.06-1.645.072-4.85.079-3.204.007-3.582-.006-4.848-.06m9.783-16.192a1.44 1.44 0 1 0 1.437-1.442 1.44 1.44 0 0 0-1.437 1.442M5.839 12.012a6.161 6.161 0 1 0 12.323-.024 6.162 6.162 0 0 0-12.323.024M8 12.008A4 4 0 1 1 12.008 16 4 4 0 0 1 8 12.008'/%3E%3C/svg%3E")}.vpi-social-linkedin{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z'/%3E%3C/svg%3E")}.vpi-social-mastodon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z'/%3E%3C/svg%3E")}.vpi-social-npm{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z'/%3E%3C/svg%3E")}.vpi-social-slack{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z'/%3E%3C/svg%3E")}.vpi-social-twitter,.vpi-social-x{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z'/%3E%3C/svg%3E")}.vpi-social-youtube{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-b06cdb19]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-b06cdb19],.VPBackdrop.fade-leave-to[data-v-b06cdb19]{opacity:0}.VPBackdrop.fade-leave-active[data-v-b06cdb19]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-b06cdb19]{display:none}}.NotFound[data-v-951cab6c]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-951cab6c]{padding:96px 32px 168px}}.code[data-v-951cab6c]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-951cab6c]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-951cab6c]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-951cab6c]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-951cab6c]{padding-top:20px}.link[data-v-951cab6c]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-951cab6c]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-3f927ebe]{position:relative;z-index:1}.nested[data-v-3f927ebe]{padding-right:16px;padding-left:16px}.outline-link[data-v-3f927ebe]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-3f927ebe]:hover,.outline-link.active[data-v-3f927ebe]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-3f927ebe]{padding-left:13px}.VPDocAsideOutline[data-v-b38bf2ff]{display:none}.VPDocAsideOutline.has-outline[data-v-b38bf2ff]{display:block}.content[data-v-b38bf2ff]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-b38bf2ff]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-b38bf2ff]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-6d7b3c46]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-6d7b3c46]{flex-grow:1}.VPDocAside[data-v-6d7b3c46] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-6d7b3c46] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-6d7b3c46] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-475f71b8]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-475f71b8]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-4f9813fa]{margin-top:64px}.edit-info[data-v-4f9813fa]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-4f9813fa]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-4f9813fa]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-4f9813fa]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-4f9813fa]{margin-right:8px}.prev-next[data-v-4f9813fa]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-4f9813fa]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-4f9813fa]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-4f9813fa]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-4f9813fa]{margin-left:auto;text-align:right}.desc[data-v-4f9813fa]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-4f9813fa]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-83890dd9]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-83890dd9]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-83890dd9]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-83890dd9]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-83890dd9]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-83890dd9]{display:flex;justify-content:center}.VPDoc .aside[data-v-83890dd9]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-83890dd9]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-83890dd9]{max-width:1104px}}.container[data-v-83890dd9]{margin:0 auto;width:100%}.aside[data-v-83890dd9]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-83890dd9]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-83890dd9]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-83890dd9]::-webkit-scrollbar{display:none}.aside-curtain[data-v-83890dd9]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-83890dd9]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-83890dd9]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-83890dd9]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-83890dd9]{order:1;margin:0;min-width:640px}}.content-container[data-v-83890dd9]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-83890dd9]{max-width:688px}.VPButton[data-v-14206e74]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-14206e74]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-14206e74]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-14206e74]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-14206e74]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-14206e74]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-14206e74]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-14206e74]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-14206e74]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-14206e74]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-14206e74]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-14206e74]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-14206e74]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-35a7d0b8]{display:none}.dark .VPImage.light[data-v-35a7d0b8]{display:none}.VPHero[data-v-955009fc]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-955009fc]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-955009fc]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-955009fc]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-955009fc]{flex-direction:row}}.main[data-v-955009fc]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-955009fc]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-955009fc]{text-align:left}}@media (min-width: 960px){.main[data-v-955009fc]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-955009fc]{max-width:592px}}.name[data-v-955009fc],.text[data-v-955009fc]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-955009fc],.VPHero.has-image .text[data-v-955009fc]{margin:0 auto}.name[data-v-955009fc]{color:var(--vp-home-hero-name-color)}.clip[data-v-955009fc]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-955009fc],.text[data-v-955009fc]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-955009fc],.text[data-v-955009fc]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-955009fc],.VPHero.has-image .text[data-v-955009fc]{margin:0}}.tagline[data-v-955009fc]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-955009fc]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-955009fc]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-955009fc]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-955009fc]{margin:0}}.actions[data-v-955009fc]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-955009fc]{justify-content:center}@media (min-width: 640px){.actions[data-v-955009fc]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-955009fc]{justify-content:flex-start}}.action[data-v-955009fc]{flex-shrink:0;padding:6px}.image[data-v-955009fc]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-955009fc]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-955009fc]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-955009fc]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-955009fc]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-955009fc]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-955009fc]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-955009fc]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-955009fc]{width:320px;height:320px}}[data-v-955009fc] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-955009fc] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-955009fc] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-f5e9645b]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-f5e9645b]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-f5e9645b]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-f5e9645b]>.VPImage{margin-bottom:20px}.icon[data-v-f5e9645b]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-f5e9645b]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-f5e9645b]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-f5e9645b]{padding-top:8px}.link-text-value[data-v-f5e9645b]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-f5e9645b]{margin-left:6px}.VPFeatures[data-v-d0a190d7]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-d0a190d7]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-d0a190d7]{padding:0 64px}}.container[data-v-d0a190d7]{margin:0 auto;max-width:1152px}.items[data-v-d0a190d7]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-d0a190d7]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-d0a190d7],.item.grid-4[data-v-d0a190d7],.item.grid-6[data-v-d0a190d7]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-d0a190d7],.item.grid-4[data-v-d0a190d7]{width:50%}.item.grid-3[data-v-d0a190d7],.item.grid-6[data-v-d0a190d7]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-d0a190d7]{width:25%}}.container[data-v-7a48a447]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-7a48a447]{padding:0 48px}}@media (min-width: 960px){.container[data-v-7a48a447]{width:100%;padding:0 64px}}.vp-doc[data-v-7a48a447] .VPHomeSponsors,.vp-doc[data-v-7a48a447] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-7a48a447] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-7a48a447] .VPHomeSponsors a,.vp-doc[data-v-7a48a447] .VPTeamPage a{text-decoration:none}.VPHome[data-v-cbb6ec48]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-cbb6ec48]{margin-bottom:128px}}.VPContent[data-v-91765379]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-91765379]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-91765379]{margin:0}@media (min-width: 960px){.VPContent[data-v-91765379]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-91765379]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-91765379]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-c970a860]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-c970a860]{display:none}.VPFooter[data-v-c970a860] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-c970a860] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-c970a860]{padding:32px}}.container[data-v-c970a860]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-c970a860],.copyright[data-v-c970a860]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-bc9dc845]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-bc9dc845]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-bc9dc845]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-bc9dc845]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-bc9dc845]{color:var(--vp-c-text-1)}.icon[data-v-bc9dc845]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-bc9dc845]{font-size:14px}.icon[data-v-bc9dc845]{font-size:16px}}.open>.icon[data-v-bc9dc845]{transform:rotate(90deg)}.items[data-v-bc9dc845]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-bc9dc845]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-bc9dc845]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-bc9dc845]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-bc9dc845]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-bc9dc845]{transition:all .2s ease-out}.flyout-leave-active[data-v-bc9dc845]{transition:all .15s ease-in}.flyout-enter-from[data-v-bc9dc845],.flyout-leave-to[data-v-bc9dc845]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-070ab83d]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-070ab83d]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-070ab83d]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-070ab83d]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-070ab83d]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-070ab83d]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-070ab83d]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-070ab83d]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-070ab83d]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-070ab83d]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-070ab83d]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-070ab83d]{display:none}}.menu-icon[data-v-070ab83d]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-070ab83d]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-070ab83d]{padding:12px 32px 11px}}.VPSwitch[data-v-4a1c76db]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-4a1c76db]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-4a1c76db]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-4a1c76db]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-4a1c76db] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-4a1c76db] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-e40a8bb6]{opacity:1}.moon[data-v-e40a8bb6],.dark .sun[data-v-e40a8bb6]{opacity:0}.dark .moon[data-v-e40a8bb6]{opacity:1}.dark .VPSwitchAppearance[data-v-e40a8bb6] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-af096f4a]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-af096f4a]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-8b74d055]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-8b74d055]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-8b74d055]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-8b74d055]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-48c802d0]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-48c802d0]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-48c802d0]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-48c802d0]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-7dd3104a]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-7dd3104a] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-7dd3104a] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-7dd3104a] .group:last-child{padding-bottom:0}.VPMenu[data-v-7dd3104a] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-7dd3104a] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-7dd3104a] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-7dd3104a] .action{padding-left:24px}.VPFlyout[data-v-e5380155]{position:relative}.VPFlyout[data-v-e5380155]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-e5380155]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-e5380155]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-e5380155]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-e5380155]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-e5380155],.button[aria-expanded=true]+.menu[data-v-e5380155]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-e5380155]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-e5380155]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-e5380155]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-e5380155]{margin-right:0;font-size:16px}.text-icon[data-v-e5380155]{margin-left:4px;font-size:14px}.icon[data-v-e5380155]{font-size:20px;transition:fill .25s}.menu[data-v-e5380155]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-717b8b75]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-717b8b75]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-717b8b75]>svg,.VPSocialLink[data-v-717b8b75]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-ee7a9424]{display:flex;justify-content:center}.VPNavBarExtra[data-v-925effce]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-925effce]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-925effce]{display:none}}.trans-title[data-v-925effce]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-925effce],.item.social-links[data-v-925effce]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-925effce]{min-width:176px}.appearance-action[data-v-925effce]{margin-right:-2px}.social-links-list[data-v-925effce]{margin:-4px -8px}.VPNavBarHamburger[data-v-5dea55bf]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-5dea55bf]{display:none}}.container[data-v-5dea55bf]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-5dea55bf]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-5dea55bf]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-5dea55bf]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-5dea55bf]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-5dea55bf]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-5dea55bf]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-5dea55bf],.VPNavBarHamburger.active:hover .middle[data-v-5dea55bf],.VPNavBarHamburger.active:hover .bottom[data-v-5dea55bf]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-5dea55bf],.middle[data-v-5dea55bf],.bottom[data-v-5dea55bf]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-5dea55bf]{top:0;left:0;transform:translate(0)}.middle[data-v-5dea55bf]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-5dea55bf]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-ed5ac1f6]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-ed5ac1f6],.VPNavBarMenuLink[data-v-ed5ac1f6]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-e6d46098]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-e6d46098]{display:flex}}/*! @docsearch/css 3.6.2 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.30196078431372547);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}.DocSearch-Button-Key--pressed{transform:translate3d(0,1px,0);box-shadow:var(--docsearch-key-pressed-shadow)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-164c457f]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-164c457f]{display:flex;align-items:center}}.title[data-v-28a961f9]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-28a961f9]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-28a961f9]{border-bottom-color:var(--vp-c-divider)}}[data-v-28a961f9] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-c80d9ad0]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-c80d9ad0]{display:flex;align-items:center}}.title[data-v-c80d9ad0]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-822684d1]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-822684d1]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-822684d1]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-822684d1]:not(.home){background-color:transparent}.VPNavBar[data-v-822684d1]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-822684d1]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-822684d1]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-822684d1]{padding:0}}.container[data-v-822684d1]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-822684d1],.container>.content[data-v-822684d1]{pointer-events:none}.container[data-v-822684d1] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-822684d1]{max-width:100%}}.title[data-v-822684d1]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-822684d1]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-822684d1]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-822684d1]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-822684d1]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-822684d1]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-822684d1]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-822684d1]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-822684d1]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-822684d1]{column-gap:.5rem}}.menu+.translations[data-v-822684d1]:before,.menu+.appearance[data-v-822684d1]:before,.menu+.social-links[data-v-822684d1]:before,.translations+.appearance[data-v-822684d1]:before,.appearance+.social-links[data-v-822684d1]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-822684d1]:before,.translations+.appearance[data-v-822684d1]:before{margin-right:16px}.appearance+.social-links[data-v-822684d1]:before{margin-left:16px}.social-links[data-v-822684d1]{margin-right:-8px}.divider[data-v-822684d1]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-822684d1]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-822684d1]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-822684d1]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-822684d1]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-822684d1]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-822684d1]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-ffb44008]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-ffb44008]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-27d04aeb]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-27d04aeb]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-7179dbb7]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-7179dbb7]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-4b8941ac]{display:block}.title[data-v-4b8941ac]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-875057a5]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-875057a5]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-875057a5]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-875057a5]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-875057a5]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-875057a5]{transform:rotate(45deg)}.button[data-v-875057a5]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-875057a5]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-875057a5]{transition:transform .25s}.group[data-v-875057a5]:first-child{padding-top:0}.group+.group[data-v-875057a5],.group+.item[data-v-875057a5]{padding-top:4px}.VPNavScreenTranslations[data-v-362991c2]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-362991c2]{height:auto}.title[data-v-362991c2]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-362991c2]{font-size:16px}.icon.lang[data-v-362991c2]{margin-right:8px}.icon.chevron[data-v-362991c2]{margin-left:4px}.list[data-v-362991c2]{padding:4px 0 0 24px}.link[data-v-362991c2]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-833aabba]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-833aabba],.VPNavScreen.fade-leave-active[data-v-833aabba]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-833aabba],.VPNavScreen.fade-leave-active .container[data-v-833aabba]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-833aabba],.VPNavScreen.fade-leave-to[data-v-833aabba]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-833aabba],.VPNavScreen.fade-leave-to .container[data-v-833aabba]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-833aabba]{display:none}}.container[data-v-833aabba]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-833aabba],.menu+.appearance[data-v-833aabba],.translations+.appearance[data-v-833aabba]{margin-top:24px}.menu+.social-links[data-v-833aabba]{margin-top:16px}.appearance+.social-links[data-v-833aabba]{margin-top:16px}.VPNav[data-v-f1e365da]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-f1e365da]{position:fixed}}.VPSidebarItem.level-0[data-v-196b2e5f]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-196b2e5f]{padding-bottom:10px}.item[data-v-196b2e5f]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-196b2e5f]{cursor:pointer}.indicator[data-v-196b2e5f]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-196b2e5f],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-196b2e5f],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-196b2e5f],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-196b2e5f]{background-color:var(--vp-c-brand-1)}.link[data-v-196b2e5f]{display:flex;align-items:center;flex-grow:1}.text[data-v-196b2e5f]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-196b2e5f]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-196b2e5f],.VPSidebarItem.level-2 .text[data-v-196b2e5f],.VPSidebarItem.level-3 .text[data-v-196b2e5f],.VPSidebarItem.level-4 .text[data-v-196b2e5f],.VPSidebarItem.level-5 .text[data-v-196b2e5f]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-196b2e5f]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-1.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-2.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-3.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-4.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-5.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-196b2e5f]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-196b2e5f]{color:var(--vp-c-brand-1)}.caret[data-v-196b2e5f]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-196b2e5f]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-196b2e5f]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-196b2e5f]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-196b2e5f]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-196b2e5f],.VPSidebarItem.level-2 .items[data-v-196b2e5f],.VPSidebarItem.level-3 .items[data-v-196b2e5f],.VPSidebarItem.level-4 .items[data-v-196b2e5f],.VPSidebarItem.level-5 .items[data-v-196b2e5f]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-196b2e5f]{display:none}.no-transition[data-v-9e426adc] .caret-icon{transition:none}.group+.group[data-v-9e426adc]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-9e426adc]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-18756405]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-18756405]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-18756405]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-18756405]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-18756405]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-18756405]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-18756405]{outline:0}.VPSkipLink[data-v-c3508ec8]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-c3508ec8]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-c3508ec8]{top:14px;left:16px}}.Layout[data-v-a9a9e638]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-db81191c]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-db81191c]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-db81191c]{margin:128px 0}}.VPHomeSponsors[data-v-db81191c]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-db81191c]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-db81191c]{padding:0 64px}}.container[data-v-db81191c]{margin:0 auto;max-width:1152px}.love[data-v-db81191c]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-db81191c]{display:inline-block}.message[data-v-db81191c]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-db81191c]{padding-top:32px}.action[data-v-db81191c]{padding-top:40px;text-align:center}.VPTeamPage[data-v-c2f8e101]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-c2f8e101]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-c2f8e101-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-c2f8e101-s],.VPTeamMembers+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-c2f8e101-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-c2f8e101-s],.VPTeamMembers+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:96px}}.VPTeamMembers[data-v-c2f8e101-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-c2f8e101-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-c2f8e101-s]{padding:0 64px}}.VPTeamPageTitle[data-v-e277e15c]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-e277e15c]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-e277e15c]{padding:80px 64px 48px}}.title[data-v-e277e15c]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-e277e15c]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-e277e15c]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-e277e15c]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-d43bc49d]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-d43bc49d]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-d43bc49d]{padding:0 64px}}.title[data-v-d43bc49d]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-d43bc49d]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-d43bc49d]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-d43bc49d]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-d43bc49d]{padding-top:40px}.VPTeamMembersItem[data-v-f9987cb6]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-f9987cb6]{padding:32px}.VPTeamMembersItem.small .data[data-v-f9987cb6]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-f9987cb6]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-f9987cb6]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-f9987cb6]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-f9987cb6]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-f9987cb6]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-f9987cb6]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-f9987cb6]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-f9987cb6]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-f9987cb6]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-f9987cb6]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-f9987cb6]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-f9987cb6]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-f9987cb6]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-f9987cb6]{text-align:center}.avatar[data-v-f9987cb6]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-f9987cb6]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-f9987cb6]{margin:0;font-weight:600}.affiliation[data-v-f9987cb6]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-f9987cb6]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-f9987cb6]:hover{color:var(--vp-c-brand-1)}.desc[data-v-f9987cb6]{margin:0 auto}.desc[data-v-f9987cb6] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-f9987cb6]{display:flex;justify-content:center;height:56px}.sp-link[data-v-f9987cb6]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-f9987cb6]:hover,.sp .sp-link.link[data-v-f9987cb6]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-f9987cb6]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-fba19bad]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-fba19bad]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-fba19bad]{max-width:876px}.VPTeamMembers.medium .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-fba19bad]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-fba19bad]{max-width:760px}.container[data-v-fba19bad]{display:grid;gap:24px;margin:0 auto;max-width:1152px}:root{--vp-plugin-tabs-tab-text-color: var(--vp-c-text-2);--vp-plugin-tabs-tab-active-text-color: var(--vp-c-text-1);--vp-plugin-tabs-tab-hover-text-color: var(--vp-c-text-1);--vp-plugin-tabs-tab-bg: var(--vp-c-bg-soft);--vp-plugin-tabs-tab-divider: var(--vp-c-divider);--vp-plugin-tabs-tab-active-bar-color: var(--vp-c-brand-1)}.plugin-tabs{margin:16px 0;background-color:var(--vp-plugin-tabs-tab-bg);border-radius:8px}.plugin-tabs--tab-list{position:relative;padding:0 12px;overflow-x:auto;overflow-y:hidden}.plugin-tabs--tab-list:after{content:"";position:absolute;bottom:0;left:0;right:0;height:2px;background-color:var(--vp-plugin-tabs-tab-divider)}.plugin-tabs--tab{position:relative;padding:0 12px;line-height:48px;border-bottom:2px solid transparent;color:var(--vp-plugin-tabs-tab-text-color);font-size:14px;font-weight:500;white-space:nowrap;transition:color .25s}.plugin-tabs--tab[aria-selected=true]{color:var(--vp-plugin-tabs-tab-active-text-color)}.plugin-tabs--tab:hover{color:var(--vp-plugin-tabs-tab-hover-text-color)}.plugin-tabs--tab:after{content:"";position:absolute;bottom:-2px;left:8px;right:8px;height:2px;background-color:transparent;transition:background-color .25s;z-index:1}.plugin-tabs--tab[aria-selected=true]:after{background-color:var(--vp-plugin-tabs-tab-active-bar-color)}.plugin-tabs--content[data-v-9b0d03d2]{padding:16px}.plugin-tabs--content[data-v-9b0d03d2]>:first-child:first-child{margin-top:0}.plugin-tabs--content[data-v-9b0d03d2]>:last-child:last-child{margin-bottom:0}.plugin-tabs--content[data-v-9b0d03d2]>div[class*=language-]{border-radius:8px;margin:16px 0}:root:not(.dark) .plugin-tabs--content[data-v-9b0d03d2] div[class*=language-]{background-color:var(--vp-c-bg)}.VPHero .clip{white-space:pre;max-width:500px}@font-face{font-family:JuliaMono-Regular;src:url(https://cdn.jsdelivr.net/gh/cormullion/juliamono/webfonts/JuliaMono-Regular.woff2)}:root{--vp-font-family-base: "Barlow", "Inter var experimental", "Inter var", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--vp-font-family-mono: JuliaMono-Regular, monospace}.mono{font-feature-settings:"calt" 0}.mono pre,.mono code{font-family:JuliaMono-Light}:root{--julia-blue: #4063D8;--julia-purple: #9558B2;--julia-red: #CB3C33;--julia-green: #389826;--vp-c-brand: #389826;--vp-c-brand-light: #3dd027;--vp-c-brand-lighter: #9499ff;--vp-c-brand-lightest: #bcc0ff;--vp-c-brand-dark: #535bf2;--vp-c-brand-darker: #454ce1;--vp-c-brand-dimm: #212425}:root{--vp-button-brand-border: var(--vp-c-brand-light);--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand);--vp-button-brand-hover-border: var(--vp-c-brand-light);--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-light);--vp-button-brand-active-border: var(--vp-c-brand-light);--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-button-brand-bg)}:root{--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: -webkit-linear-gradient( 120deg, #9558B2 30%, #CB3C33 );--vp-home-hero-image-background-image: linear-gradient( -45deg, #9558B2 30%, #389826 30%, #CB3C33 );--vp-home-hero-image-filter: blur(40px)}@media (min-width: 640px){:root{--vp-home-hero-image-filter: blur(56px)}}@media (min-width: 960px){:root{--vp-home-hero-image-filter: blur(72px)}}:root.dark{--vp-custom-block-tip-border: var(--vp-c-brand);--vp-custom-block-tip-text: var(--vp-c-brand-lightest);--vp-custom-block-tip-bg: var(--vp-c-brand-dimm);--vp-c-black: hsl(220 20% 9%);--vp-c-black-pure: hsl(220, 24%, 4%);--vp-c-black-soft: hsl(220 16% 13%);--vp-c-black-mute: hsl(220 14% 17%);--vp-c-gray: hsl(220 8% 56%);--vp-c-gray-dark-1: hsl(220 10% 39%);--vp-c-gray-dark-2: hsl(220 12% 28%);--vp-c-gray-dark-3: hsl(220 12% 23%);--vp-c-gray-dark-4: hsl(220 14% 17%);--vp-c-gray-dark-5: hsl(220 16% 13%);--vp-custom-block-info-bg: hsl(220 14% 17%)}.DocSearch{--docsearch-primary-color: var(--vp-c-brand) !important}mjx-container>svg{display:block;margin:auto}mjx-container{padding:.5rem 0}mjx-container{display:inline;margin:auto 2px -2px}mjx-container>svg{margin:auto;display:inline}:root{--vp-c-brand-1: #CB3C33;--vp-c-brand-2: #CB3C33;--vp-c-brand-3: #CB3C33;--vp-c-sponsor: #ca2971;--vitest-c-sponsor-hover: #c13071}.dark{--vp-c-brand-1: #91dd33;--vp-c-brand-2: #91dd33;--vp-c-brand-3: #91dd33;--vp-c-sponsor: #91dd33;--vitest-c-sponsor-hover: #e51370}:root:not(.dark) .dark-only{display:none}:root:is(.dark) .light-only{display:none}.VPDoc.has-aside .content-container{max-width:100%!important}.aside{max-width:200px!important;padding-left:0!important}.VPDoc{padding-top:15px!important;padding-left:5px!important}.VPDocOutlineItem li{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;max-width:200px}.VPNavBar .title{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}@media (max-width: 960px){.VPDoc{padding-left:25px!important}}.VPLocalSearchBox[data-v-5b749456]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-5b749456]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-5b749456]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-5b749456]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-5b749456]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 767px){.search-bar[data-v-5b749456]{padding:0 8px}}.search-bar[data-v-5b749456]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-5b749456]{display:block;font-size:18px}.navigate-icon[data-v-5b749456]{display:block;font-size:14px}.search-icon[data-v-5b749456]{margin:8px}@media (max-width: 767px){.search-icon[data-v-5b749456]{display:none}}.search-input[data-v-5b749456]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-5b749456]{padding:6px 4px}}.search-actions[data-v-5b749456]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-5b749456]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-5b749456]{display:none}}.search-actions button[data-v-5b749456]{padding:8px}.search-actions button[data-v-5b749456]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-5b749456]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-5b749456]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-5b749456]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-5b749456]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-5b749456]{display:none}}.search-keyboard-shortcuts kbd[data-v-5b749456]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-5b749456]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-5b749456]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-5b749456]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-5b749456]{margin:8px}}.titles[data-v-5b749456]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-5b749456]{display:flex;align-items:center;gap:4px}.title.main[data-v-5b749456]{font-weight:500}.title-icon[data-v-5b749456]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-5b749456]{opacity:.5}.result.selected[data-v-5b749456]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-5b749456]{position:relative}.excerpt[data-v-5b749456]{opacity:50%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;margin-top:4px}.result.selected .excerpt[data-v-5b749456]{opacity:1}.excerpt[data-v-5b749456] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-5b749456] mark,.excerpt[data-v-5b749456] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-5b749456] .vp-code-group .tabs{display:none}.excerpt[data-v-5b749456] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-5b749456]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-5b749456]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-5b749456],.result.selected .title-icon[data-v-5b749456]{color:var(--vp-c-brand-1)!important}.no-results[data-v-5b749456]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-5b749456]{flex:none} diff --git a/dev/examples.html b/dev/examples.html index 81e90b9..8fa598f 100644 --- a/dev/examples.html +++ b/dev/examples.html @@ -6,13 +6,13 @@ Jet Reconstruction Examples | JetReconstruction.jl - + - + - - - + + + @@ -23,7 +23,7 @@ ... julia --project=examples examples/jetreco.jl --maxevents=10 --strategy=N2Plain --algorithm=Kt --exclusive-njets=3 test/data/events.pp13TeV.hepmc3.gz ...

There are options to explicitly set the algorithm (use --help to see these).

instrumented-jetreco.jl

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

visualise-jets.jl

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.

visualise-jets.ipynb

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.

animate-reconstruction.jl

Performs jet reconstruction and then produces and animation of the process, showing how the jets merge from their different constituents.

- + \ No newline at end of file diff --git a/dev/hashmap.json b/dev/hashmap.json index c878528..e2b1dd2 100644 --- a/dev/hashmap.json +++ b/dev/hashmap.json @@ -1 +1 @@ -{"examples.md":"CtIAv1Hv","index.md":"D4zfwJ4T","lib_internal.md":"Bsq32pz1","lib_public.md":"CDXEV-o0","lib_visualisation.md":"BGH-rHrp"} +{"examples.md":"0mYAaYCb","index.md":"CDGdS60h","lib_internal.md":"oZWVn3YV","lib_public.md":"ClckhHDw","lib_visualisation.md":"Bjkk6jY3"} diff --git a/dev/index.html b/dev/index.html index 9ab2d93..6d106d4 100644 --- a/dev/index.html +++ b/dev/index.html @@ -6,13 +6,13 @@ Jet Reconstruction | JetReconstruction.jl - + - + - - - + + + @@ -39,7 +39,7 @@ archivePrefix={arXiv}, primaryClass={hep-ex} }

Code in this package is authored by:

  • Atell Krasnopolski <delta_atell@protonmail.com>

  • Graeme A Stewart <graeme.andrew.stewart@cern.ch>

  • Philippe Gras <philippe.gras@cern.ch>

and is Copyright 2022-2024 The Authors, CERN.

The code is under the MIT License.

- + \ No newline at end of file diff --git a/dev/lib/internal.html b/dev/lib/internal.html index 38d2b3f..09e0ccd 100644 --- a/dev/lib/internal.html +++ b/dev/lib/internal.html @@ -6,26 +6,26 @@ Jet Reconstruction Internal Documentation | JetReconstruction.jl - + - + - - - + + + -
Skip to content

Jet Reconstruction Internal Documentation

Documentation for JetReconstruction.jl's internal methods and types.

N.B. no guarantee is made of stability of these interfaces or types.

Index

Public Interface

Base.:+ Method
julia
+(j1::PseudoJet, j2::PseudoJet)

Addition operator for PseudoJet objects.

Arguments

  • j1::PseudoJet: The first PseudoJet object.

  • j2::PseudoJet: The second PseudoJet object.

Returns

A new PseudoJet object with the sum of the momenta and energy of j1 and j2.

source

Base.copy Method
julia
copy(j::TiledJet)

Create a copy of a TiledJet object.

Arguments

  • j::TiledJet: The TiledJet object to be copied.

Returns

A new TiledJet object with the same attributes as the input object.

source

Base.iterate Function
julia
Base.iterate(t::rightmost_tiles, state=1)

Iterate over the rightmost_tiles object, returning all the rightmost tiles for a given Cartesian tile index.

source

Base.iterate Function
julia
Base.iterate(t::neighbour_tiles, state=1)

Iterate over the neighbour_tiles object, returning all the neighbour tiles for a given Cartesian tile index.

source

Base.iterate Method
julia
Base.iterate(tj::TiledJet)

Iterate over a TiledJet object's linked list, walking over all jets until the end (then the next jet is invalid).

Arguments

  • tj::TiledJet: The TiledJet object to start to iterate over.

source

Base.show Method
julia
show(io::IO, jet::PseudoJet)

Print a PseudoJet object to the specified IO stream.

Arguments

  • io::IO: The IO stream to which the information will be printed.

  • jet::PseudoJet: The PseudoJet object whose information will be printed.

source

Base.tryparse Method
julia
Base.tryparse(E::Type{<:Enum}, str::String)

Parser that converts a string to an enum value if it exists, otherwise returns nothing.

source

JetReconstruction.CosTheta Method
julia
CosTheta(p::PseudoJet)

Compute the cosine of the angle between the momentum vector p and the z-axis.

Arguments

  • p::PseudoJet: The PseudoJet object representing the momentum vector.

Returns

  • The cosine of the angle between p and the z-axis.

source

JetReconstruction._ee_genkt_algorithm Method
julia
_ee_genkt_algorithm(; particles::Vector{EEjet}, p = 1, R = 4.0,
+    
Skip to content

Jet Reconstruction Internal Documentation

Documentation for JetReconstruction.jl's internal methods and types.

N.B. no guarantee is made of stability of these interfaces or types.

Index

Public Interface

Base.:+ Method
julia
+(j1::PseudoJet, j2::PseudoJet)

Addition operator for PseudoJet objects.

Arguments

  • j1::PseudoJet: The first PseudoJet object.

  • j2::PseudoJet: The second PseudoJet object.

Returns

A new PseudoJet object with the sum of the momenta and energy of j1 and j2.

source

Base.copy Method
julia
copy(j::TiledJet)

Create a copy of a TiledJet object.

Arguments

  • j::TiledJet: The TiledJet object to be copied.

Returns

A new TiledJet object with the same attributes as the input object.

source

Base.iterate Function
julia
Base.iterate(t::rightmost_tiles, state=1)

Iterate over the rightmost_tiles object, returning all the rightmost tiles for a given Cartesian tile index.

source

Base.iterate Function
julia
Base.iterate(t::neighbour_tiles, state=1)

Iterate over the neighbour_tiles object, returning all the neighbour tiles for a given Cartesian tile index.

source

Base.iterate Method
julia
Base.iterate(tj::TiledJet)

Iterate over a TiledJet object's linked list, walking over all jets until the end (then the next jet is invalid).

Arguments

  • tj::TiledJet: The TiledJet object to start to iterate over.

source

Base.show Method
julia
show(io::IO, jet::PseudoJet)

Print a PseudoJet object to the specified IO stream.

Arguments

  • io::IO: The IO stream to which the information will be printed.

  • jet::PseudoJet: The PseudoJet object whose information will be printed.

source

Base.tryparse Method
julia
Base.tryparse(E::Type{<:Enum}, str::String)

Parser that converts a string to an enum value if it exists, otherwise returns nothing.

source

JetReconstruction.CosTheta Method
julia
CosTheta(p::PseudoJet)

Compute the cosine of the angle between the momentum vector p and the z-axis.

Arguments

  • p::PseudoJet: The PseudoJet object representing the momentum vector.

Returns

  • The cosine of the angle between p and the z-axis.

source

JetReconstruction._ee_genkt_algorithm Method
julia
_ee_genkt_algorithm(; particles::Vector{EEjet}, p = 1, R = 4.0,
                    algorithm::JetAlgorithm.Algorithm = JetAlgorithm.Durham,
-                   recombine = +)

This function is the actual implementation of the e+e- jet clustering algorithm.

source

JetReconstruction._ensure_valid_rap_phi Method
julia
_ensure_valid_rap_phi(p::PseudoJet)

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.

source

JetReconstruction._plain_jet_reconstruct Method
julia
_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. Floating point values are allowed for generalised k_t algorithm.

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.

source

JetReconstruction._set_rap_phi! Method

_set_rap_phi!(p::PseudoJet)

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π).

source

JetReconstruction._tiled_jet_reconstruct Method
julia
_tiled_jet_reconstruct(particles::Vector{PseudoJet}; p = -1, R = 1.0, recombine = +) where {T}

Main jet reconstruction algorithm entry point for reconstructing jets once preprocessing of data types are done.

Arguments

  • particles::Vector{PseudoJet}: A vector of PseudoJet particles used as input for jet reconstruction.

  • 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{PseudoJet}; p = 1, R = 1.0, recombine = +)

source

JetReconstruction._tj_diJ Method
julia
_tj_diJ(jet)

Compute the dij metric value for a given jet.

Arguments

  • jet: The input jet.

Returns

  • The dij value for the jet.

Example

source

JetReconstruction._tj_dist Method
julia
_tj_dist(jetA, jetB)

Compute the geometric distance in the (y, ϕ)-plane between two jets in the TiledAlgoLL module.

Arguments

  • jetA: The first jet.

  • jetB: The second jet.

Returns

The squared distance between jetA and jetB.

Examples

source

JetReconstruction.add_step_to_history! Method
julia
add_step_to_history!(clusterseq::ClusterSequence, parent1, parent2, jetp_index, dij)

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.

source

JetReconstruction.add_untagged_neighbours_to_tile_union Method
julia
add_untagged_neighbours_to_tile_union(center_index, tile_union, n_near_tiles, tiling)

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.

Returns

The updated number of near tiles.

source

JetReconstruction.angular_distance Method
julia
angular_distance(eereco, i, j) -> Float64

Calculate the angular distance between two jets i and j using the formula 1cos(θij).

Arguments

  • eereco: The array of EERecoJet objects.

  • i: The first jet.

  • j: The second jet.

Returns

  • Float64: The angular distance between i and j, which is 1cosheta.

source

JetReconstruction.check_algorithm_power_consistency Method

Allow a check for algorithm and power consistency

source

JetReconstruction.detach! Method
julia
detach!(jet::TiledJet)

Detach a TiledJet from its linked list by updating the previous and next pointers.

Arguments

  • jet::TiledJet: The TiledJet object to detach.

source

JetReconstruction.determine_rapidity_extent Method
julia
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).

Arguments

  • eta::Vector{T}: A vector of rapidity values.

Returns

  • minrap::T: The minimum rapidity value.

  • maxrap::T: The maximum rapidity value.

source

JetReconstruction.dij Method
julia
dij(i, kt2_array, nn, nndist)

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.ßß

Arguments

  • i: The index of the element.

  • kt2_array: An array of kt2 values.

  • nn: An array of nearest neighbors.

  • nndist: An array of nearest neighbor distances.

Returns

  • The computed dij value.

source

JetReconstruction.dij_dist Method
julia
dij_dist(eereco, i, j, dij_factor)

Calculate the dij distance between two e+ejets.

Arguments

  • eereco: The array of EERecoJet objects.

  • i: The first jet.

  • j: The second jet.

  • dij_factor: The scaling factor to multiply the dij distance by.

Returns

  • The dij distance between i and j.

source

JetReconstruction.dist Method
julia
dist(i, j, rapidity_array, phi_array)

Compute the distance between points in a 2D space defined by rapidity and phi coordinates.

Arguments

  • i::Int: Index of the first point to consider (indexes into rapidity_array and phi_array).

  • j::Int: Index of the second point to consider (indexes into rapidity_array and phi_array).

  • rapidity_array::Vector{Float64}: Array of rapidity coordinates.

  • phi_array::Vector{Float64}: Array of phi coordinates.

Returns

  • distance::Float64: The distance between the two points.

source

JetReconstruction.do_iB_recombination_step! Method
julia
do_iB_recombination_step!(clusterseq::ClusterSequence, jet_i, diB)

Bookkeeping for recombining a jet with the beam (i.e., finalising the jet) by adding a step to the history of the cluster sequence.

Arguments

  • clusterseq::ClusterSequence: The cluster sequence object.

  • jet_i: The index of the jet.

  • diB: The diB value.

source

JetReconstruction.do_ij_recombination_step! Function
julia
do_ij_recombination_step!(clusterseq::ClusterSequence, jet_i, jet_j, dij, recombine=+)

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.

source

JetReconstruction.energy Method
julia
energy(p::PseudoJet)

Return the energy of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The energy of the PseudoJet.

source

JetReconstruction.eta Method
julia
eta(p::PseudoJet)

Compute the pseudorapidity (η) of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the pseudorapidity.

Returns

  • The pseudorapidity (η) of the PseudoJet.

source

JetReconstruction.fast_findmin Method
julia
fast_findmin(dij, n)

Find the minimum value and its index in the first n elements of the dij array. The use of @turbo macro gives a significiant performance boost.

Arguments

  • dij: An array of values.

  • n: The number of elements to consider in the dij array.

Returns

  • dij_min: The minimum value in the first n elements of the dij array.

  • best: The index of the minimum value in the dij array.

source

JetReconstruction.find_tile_neighbours! Method
julia
find_tile_neighbours!(tile_union, jetA, jetB, oldB, tiling)

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.

source

JetReconstruction.geometric_distance Method
julia
geometric_distance(eta1::AbstractFloat, phi1::AbstractFloat, eta2::AbstractFloat, phi2::AbstractFloat)

Compute the geometric distance between two points in the rap-phi plane.

Arguments

  • eta1::AbstractFloat: The eta coordinate of the first point.

  • phi1::AbstractFloat: The phi coordinate of the first point.

  • eta2::AbstractFloat: The eta coordinate of the second point.

  • phi2::AbstractFloat: The phi coordinate of the second point.

Returns

  • distance::Float64: The geometric distance between the two points.

source

JetReconstruction.get_algorithm_power_consistency Method
julia
get_algorithm_power_consistency(; p::Union{Real, Nothing}, algorithm::Union{JetAlgorithm, Nothing})

Get the algorithm and power consistency correct

This function checks the consistency between the algorithm and power parameters. If the algorithm is specified, it checks if the power parameter is consistent with the algorithm's known power. If the power parameter is not specified, it sets the power parameter based on the algorithm. If neither the algorithm nor the power parameter is specified, it throws an ArgumentError.

Arguments

  • p::Union{Real, Nothing}: The power value.

  • algorithm::Union{JetAlgorithm, Nothing}: The algorithm.

Returns

A named tuple of the consistent power and algorithm values.

Throws

  • ArgumentError: If the algorithm and power are inconsistent or if neither the algorithm nor the power is specified.

source

JetReconstruction.get_all_ancestors Method
julia
get_all_ancestors(idx, cs::ClusterSequence)

Recursively finds all ancestors of a given index in a ClusterSequence object.

Arguments

  • idx: The index of the jet for which to find ancestors.

  • cs: The ClusterSequence object containing the jet history.

Returns

An array of indices representing the ancestors of the given jet.

source

JetReconstruction.get_dij_dist Method
julia
get_dij_dist(nn_dist, kt2_1, kt2_2, R2)

Compute the dij metric distance between two jets.

Arguments

  • nn_dist: The nearest-neighbor distance between two jets.

  • kt2_1: The squared momentum metric value of the first jet.

  • kt2_2: The squared momentum metric value of the second jet.

  • R2: The jet radius parameter squared.

Returns

The distance between the two jets.

If kt2_2 is equal to 0.0, then the first jet doesn't actually have a valid neighbour, so it's treated as a single jet adjecent to the beam.

source

JetReconstruction.get_tile Method
julia
get_tile(tiling_setup::TilingDef, eta::AbstractFloat, phi::AbstractFloat)

Given a tiling_setup object, eta and phi values, this function calculates the tile indices for the given eta and phi values.

Arguments

  • tiling_setup: A TilingDef object that contains the tiling setup parameters.

  • eta: The eta value for which to calculate the tile index.

  • phi: The phi value for which to calculate the tile index.

Returns

  • ieta: The tile index along the eta direction.

  • iphi: The tile index along the phi direction.

source

JetReconstruction.get_tile_cartesian_indices Method
julia
get_tile_linear_index(tiling_setup::TilingDef, i_η::Int, i_ϕ::Int)

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.

Returns

  • The linear index of the tile.

source

JetReconstruction.initial_history Method
julia
initial_history(particles)

Create an initial history for the given particles.

Arguments

  • particles: The initial vector of stable particles.

Returns

  • history: An array of HistoryElement objects.

  • Qtot: The total energy in the event.

source

JetReconstruction.insert! Method
julia
insert!(nextjet::TiledJet, jettomove::TiledJet)

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.

Example

source

JetReconstruction.is_ee Method
julia
is_ee(algorithm::JetAlgorithm.Algorithm)

Check if the algorithm is a e+e- reconstruction algorithm.

Returns

true if the algorithm is a e+e- reconstruction algorithm, false otherwise.

source

JetReconstruction.is_pp Method
julia
is_pp(algorithm::JetAlgorithm.Algorithm)

Check if the algorithm is a pp reconstruction algorithm.

Returns

true if the algorithm is a pp reconstruction algorithm, false otherwise.

source

JetReconstruction.isvalid Method
julia
isvalid(t::TiledJet)

Check if a TiledJet is valid, by seeing if it is not the noTiledJet object.

Arguments

  • t::TiledJet: The TiledJet object to check.

Returns

  • Bool: true if the TiledJet object is valid, false otherwise.

source

JetReconstruction.jet_ranks Method
julia
jet_ranks(clusterseq::ClusterSequence; compare_fn = JetReconstruction.pt)

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.

source

JetReconstruction.m Method
julia
m(p::PseudoJet)

Compute the invariant mass of a PseudoJet object. By convention if m^2 < 0, then -sqrt{(-m^2)} is returned.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the invariant mass.

Returns

The invariant mass of the PseudoJet object.

source

JetReconstruction.m2 Method
julia
m2(p::PseudoJet)

Calculate the invariant mass squared (m^2) of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object for which to calculate the invariant mass squared.

Returns

  • The invariant mass squared (m^2) of the PseudoJet.

source

JetReconstruction.mag Method
julia
mag(p::PseudoJet)

Return the magnitude of the momentum of a PseudoJet, |p|.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the magnitude.

Returns

The magnitude of the PseudoJet object.

source

JetReconstruction.mass Method
julia
mass(p::PseudoJet)

Compute the invariant mass (alias for m(p)).

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the mass.

Returns

  • The mass of the PseudoJet.

source

JetReconstruction.mass2 Function

Alias for m2 function

source

JetReconstruction.merge_steps Method
julia
merge_steps(clusterseq::ClusterSequence)

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.

Returns

  • merge_steps::Int: The number of merge steps.

source

JetReconstruction.phi Method
julia
phi(p::PseudoJet)

Compute the ϕ angle of a PseudoJet object p.

Note this function is a wrapper for phi_02pi(p).

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the azimuthal angle.

Returns

  • The azimuthal angle of p in the range [0, 2π).

source

JetReconstruction.phi_02pi Method
julia
phi_02pi(p::PseudoJet)

Compute the azimuthal angle of a PseudoJet object p in the range [0, 2π).

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the azimuthal angle.

Returns

  • The azimuthal angle of p in the range [0, 2π).

source

JetReconstruction.pt Method
julia
pt(p::PseudoJet)

Compute the scalar transverse momentum (pt) of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the transverse momentum.

Returns

  • The transverse momentum (pt) of the PseudoJet.

source

JetReconstruction.pt2 Method
julia
pt2(p::PseudoJet)

Get the squared transverse momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The squared transverse momentum of the PseudoJet.

source

JetReconstruction.px Method
julia
px(p::PseudoJet)

Return the x-component of the momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The x-component of the momentum of the PseudoJet.

source

JetReconstruction.py Method
julia
py(p::PseudoJet)

Return the y-component of the momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The y-component of the momentum of the PseudoJet.

source

JetReconstruction.pz Method
julia
pz(p::PseudoJet)

Return the z-component of the momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The z-component of the momentum of the PseudoJet.

source

JetReconstruction.rapidity Method
julia
rapidity(p::PseudoJet)

Compute the rapidity of a PseudoJet object.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the rapidity.

Returns

The rapidity of the PseudoJet object.

source

JetReconstruction.reco_state Method
julia
reco_state(cs::ClusterSequence, pt_ranks; iteration=0)

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.

source

JetReconstruction.rightneighbours Method
julia
rightneighbours(center::Int, tiling::Tiling)

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.

source

JetReconstruction.set_momentum! Method
julia
set_momentum!(j::PseudoJet, px, py, pz, E)

Set the momentum components and energy of a PseudoJet object.

Arguments

  • j::PseudoJet: The PseudoJet object to set the momentum for.

  • px: The x-component of the momentum.

  • py: The y-component of the momentum.

  • pz: The z-component of the momentum.

  • E: The energy of the particle.

source

JetReconstruction.set_nearest_neighbours! Method
julia
set_nearest_neighbours!(clusterseq::ClusterSequence, tiling::Tiling, tiledjets::Vector{TiledJet})

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.

source

JetReconstruction.setup_tiling Method
julia
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.

source

JetReconstruction.surrounding Method
julia
surrounding(center::Int, tiling::Tiling)

Compute the surrounding indices of a given center index in a tiling.

Arguments

  • center::Int: The center index.

  • tiling::Tiling: The tiling object.

Returns

  • Surrounding: An object containing the surrounding indices.

source

JetReconstruction.tile_index Method
julia
tile_index(tiling_setup, eta::Float64, phi::Float64)

Compute the tile index for a given (eta, phi) coordinate.

Arguments

  • tiling_setup: The tiling setup object containing the tile size and number of tiles.

  • eta::Float64: The eta coordinate.

  • phi::Float64: The phi coordinate.

Returns

The tile index corresponding to the (eta, phi) coordinate.

source

JetReconstruction.tiledjet_remove_from_tiles! Method
julia
tiledjet_remove_from_tiles!(tiling, jet)

Remove a jet from the given tiling structure.

Arguments

  • tiling: The tiling structure from which the jet will be removed.

  • jet: The jet to be removed from the tiling structure.

Description

This function removes a jet from the tiling structure. It adjusts the linked list to be consistent with the removal of the jet.

source

JetReconstruction.tiledjet_set_jetinfo! Method
julia
tiledjet_set_jetinfo!(jet::TiledJet, clusterseq::ClusterSequence, tiling::Tiling, jets_index, R2, p)

Initialise a tiled jet from a PseudoJet (using an index into our ClusterSequence)

Arguments:

  • jet::TiledJet: The TiledJet object to set the information for.

  • clusterseq::ClusterSequence: The ClusterSequence object containing the jets.

  • tiling::Tiling: The Tiling object containing the tile information.

  • jets_index: The index of the jet in the ClusterSequence.

  • R2: The jet radius parameter squared.

  • p: The power to raise the pt2 value to.

This function sets the eta, phi, kt2, jets_index, NN_dist, NN, tile_index, previous, and next fields of the TiledJet object.

Returns:

  • nothing

source

JetReconstruction.upd_nn_crosscheck! Method
julia
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.

source

JetReconstruction.upd_nn_nocross! Method
julia
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.

source

JetReconstruction.upd_nn_step! Method
julia
upd_nn_step!(i, j, k, N, Nn, kt2_array, rapidity_array, phi_array, R2, nndist, nn, nndij)

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.

source

JetReconstruction.η Function
julia
const η = eta

Alias for the pseudorapidity function, eta.

source

JetReconstruction.FourMomentum Type

Interface for composite types that includes fields px, py, py, and E that represents the components of a four-momentum vector.

source

JetReconstruction.HistoryElement Type
julia
struct HistoryElement

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.

source

JetReconstruction.HistoryElement Method
julia
HistoryElement(jetp_index)

Constructs a HistoryElement object with the given jetp_index, used for initialising the history with original particles.

Arguments

  • jetp_index: The index of the jetp.

Returns

A HistoryElement object.

source

JetReconstruction.JetWithAncestors Type
julia
struct JetWithAncestors

A struct representing a jet with its origin ancestors.

Fields

  • self::PseudoJet: The PseudoJet object for this jet.

  • jetp_index::Int: The index of the jet in the corresponding cluster sequence.

  • ancestors::Set{Int}: A set of indices representing the jetp_indexes of ancestors of the jet (in the cluster sequence).

  • jet_rank::Int: The rank of the jet based on a comparison of all of the jet's ancestors

Note

This structure needs its associated cluster sequence origin to be useful.

source

JetReconstruction.Surrounding Type
julia
struct Surrounding{N}

Structure used for iterating over neighbour tiles.

Fields

  • indices::NTuple{N, Int}: A tuple of N integers representing the indices.

source

JetReconstruction.TiledJet Type
julia
struct TiledJet

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.

  • NN::TiledJet: The nearest neighbor.

  • previous::TiledJet: The previous jet.

  • next::TiledJet: The next jet.

source

JetReconstruction.TiledJet Method
julia
TiledJet(id)

Constructs a TiledJet object with the given id and initializes its properties to zero.

Arguments

  • id: The ID of the TiledJet object.

Returns

A TiledJet object with the specified id and values set to zero or noTiledJet.

source

JetReconstruction.Tiling Type
julia
struct Tiling

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).

source

JetReconstruction.Tiling Method
julia
Tiling(setup::TilingDef)

Constructs a intial Tiling object based on the provided setup parameters.

Arguments

  • setup::TilingDef: The setup parameters for the tiling.

Returns

A Tiling object.

source

JetReconstruction.TilingDef Type
julia
struct TilingDef

A struct representing the definition of a spcific tiling scheme.

Fields

  • _tiles_eta_min::Float64: The minimum rapidity of the tiles.

  • _tiles_eta_max::Float64: The maximum rapidity of the tiles.

  • _tile_size_eta::Float64: The size of a tile in rapidity (usually R^2).

  • _tile_size_phi::Float64: The size of a tile in phi (usually a bit more than R^2).

  • _n_tiles_eta::Int: The number of tiles across rapidity.

  • _n_tiles_phi::Int: The number of tiles across phi.

  • _n_tiles::Int: The total number of tiles.

  • _tiles_ieta_min::Int: The minimum rapidity tile index.

  • _tiles_ieta_max::Int: The maximum rapidity tile index.

Constructor

TilingDef(_tiles_eta_min, _tiles_eta_max, _tile_size_eta, _tile_size_phi,
-	_n_tiles_eta, _n_tiles_phi, _tiles_ieta_min, _tiles_ieta_max)

Constructs a TilingDef object with the given parameters.

source

JetReconstruction.neighbour_tiles Type
julia
struct neighbour_tiles

A struct representing the neighbouring tiles.

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
+                   recombine = +)

This function is the actual implementation of the e+e- jet clustering algorithm.

source

JetReconstruction._ensure_valid_rap_phi Method
julia
_ensure_valid_rap_phi(p::PseudoJet)

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.

source

JetReconstruction._plain_jet_reconstruct Method
julia
_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. Floating point values are allowed for generalised k_t algorithm.

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.

source

JetReconstruction._set_rap_phi! Method

_set_rap_phi!(p::PseudoJet)

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π).

source

JetReconstruction._tiled_jet_reconstruct Method
julia
_tiled_jet_reconstruct(particles::Vector{PseudoJet}; p = -1, R = 1.0, recombine = +) where {T}

Main jet reconstruction algorithm entry point for reconstructing jets once preprocessing of data types are done.

Arguments

  • particles::Vector{PseudoJet}: A vector of PseudoJet particles used as input for jet reconstruction.

  • 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{PseudoJet}; p = 1, R = 1.0, recombine = +)

source

JetReconstruction._tj_diJ Method
julia
_tj_diJ(jet)

Compute the dij metric value for a given jet.

Arguments

  • jet: The input jet.

Returns

  • The dij value for the jet.

Example

source

JetReconstruction._tj_dist Method
julia
_tj_dist(jetA, jetB)

Compute the geometric distance in the (y, ϕ)-plane between two jets in the TiledAlgoLL module.

Arguments

  • jetA: The first jet.

  • jetB: The second jet.

Returns

The squared distance between jetA and jetB.

Examples

source

JetReconstruction.add_step_to_history! Method
julia
add_step_to_history!(clusterseq::ClusterSequence, parent1, parent2, jetp_index, dij)

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.

source

JetReconstruction.add_untagged_neighbours_to_tile_union Method
julia
add_untagged_neighbours_to_tile_union(center_index, tile_union, n_near_tiles, tiling)

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.

Returns

The updated number of near tiles.

source

JetReconstruction.angular_distance Method
julia
angular_distance(eereco, i, j) -> Float64

Calculate the angular distance between two jets i and j using the formula 1cos(θij).

Arguments

  • eereco: The array of EERecoJet objects.

  • i: The first jet.

  • j: The second jet.

Returns

  • Float64: The angular distance between i and j, which is 1cosheta.

source

JetReconstruction.check_algorithm_power_consistency Method

Allow a check for algorithm and power consistency

source

JetReconstruction.detach! Method
julia
detach!(jet::TiledJet)

Detach a TiledJet from its linked list by updating the previous and next pointers.

Arguments

  • jet::TiledJet: The TiledJet object to detach.

source

JetReconstruction.determine_rapidity_extent Method
julia
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).

Arguments

  • eta::Vector{T}: A vector of rapidity values.

Returns

  • minrap::T: The minimum rapidity value.

  • maxrap::T: The maximum rapidity value.

source

JetReconstruction.dij Method
julia
dij(i, kt2_array, nn, nndist)

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.ßß

Arguments

  • i: The index of the element.

  • kt2_array: An array of kt2 values.

  • nn: An array of nearest neighbors.

  • nndist: An array of nearest neighbor distances.

Returns

  • The computed dij value.

source

JetReconstruction.dij_dist Method
julia
dij_dist(eereco, i, j, dij_factor)

Calculate the dij distance between two e+ejets.

Arguments

  • eereco: The array of EERecoJet objects.

  • i: The first jet.

  • j: The second jet.

  • dij_factor: The scaling factor to multiply the dij distance by.

Returns

  • The dij distance between i and j.

source

JetReconstruction.dist Method
julia
dist(i, j, rapidity_array, phi_array)

Compute the distance between points in a 2D space defined by rapidity and phi coordinates.

Arguments

  • i::Int: Index of the first point to consider (indexes into rapidity_array and phi_array).

  • j::Int: Index of the second point to consider (indexes into rapidity_array and phi_array).

  • rapidity_array::Vector{Float64}: Array of rapidity coordinates.

  • phi_array::Vector{Float64}: Array of phi coordinates.

Returns

  • distance::Float64: The distance between the two points.

source

JetReconstruction.do_iB_recombination_step! Method
julia
do_iB_recombination_step!(clusterseq::ClusterSequence, jet_i, diB)

Bookkeeping for recombining a jet with the beam (i.e., finalising the jet) by adding a step to the history of the cluster sequence.

Arguments

  • clusterseq::ClusterSequence: The cluster sequence object.

  • jet_i: The index of the jet.

  • diB: The diB value.

source

JetReconstruction.do_ij_recombination_step! Function
julia
do_ij_recombination_step!(clusterseq::ClusterSequence, jet_i, jet_j, dij, recombine=+)

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.

source

JetReconstruction.energy Method
julia
energy(p::PseudoJet)

Return the energy of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The energy of the PseudoJet.

source

JetReconstruction.eta Method
julia
eta(p::PseudoJet)

Compute the pseudorapidity (η) of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the pseudorapidity.

Returns

  • The pseudorapidity (η) of the PseudoJet.

source

JetReconstruction.fast_findmin Method
julia
fast_findmin(dij, n)

Find the minimum value and its index in the first n elements of the dij array. The use of @turbo macro gives a significiant performance boost.

Arguments

  • dij: An array of values.

  • n: The number of elements to consider in the dij array.

Returns

  • dij_min: The minimum value in the first n elements of the dij array.

  • best: The index of the minimum value in the dij array.

source

JetReconstruction.find_tile_neighbours! Method
julia
find_tile_neighbours!(tile_union, jetA, jetB, oldB, tiling)

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.

source

JetReconstruction.geometric_distance Method
julia
geometric_distance(eta1::AbstractFloat, phi1::AbstractFloat, eta2::AbstractFloat, phi2::AbstractFloat)

Compute the geometric distance between two points in the rap-phi plane.

Arguments

  • eta1::AbstractFloat: The eta coordinate of the first point.

  • phi1::AbstractFloat: The phi coordinate of the first point.

  • eta2::AbstractFloat: The eta coordinate of the second point.

  • phi2::AbstractFloat: The phi coordinate of the second point.

Returns

  • distance::Float64: The geometric distance between the two points.

source

JetReconstruction.get_algorithm_power_consistency Method
julia
get_algorithm_power_consistency(; p::Union{Real, Nothing}, algorithm::Union{JetAlgorithm, Nothing})

Get the algorithm and power consistency correct

This function checks the consistency between the algorithm and power parameters. If the algorithm is specified, it checks if the power parameter is consistent with the algorithm's known power. If the power parameter is not specified, it sets the power parameter based on the algorithm. If neither the algorithm nor the power parameter is specified, it throws an ArgumentError.

Arguments

  • p::Union{Real, Nothing}: The power value.

  • algorithm::Union{JetAlgorithm, Nothing}: The algorithm.

Returns

A named tuple of the consistent power and algorithm values.

Throws

  • ArgumentError: If the algorithm and power are inconsistent or if neither the algorithm nor the power is specified.

source

JetReconstruction.get_all_ancestors Method
julia
get_all_ancestors(idx, cs::ClusterSequence)

Recursively finds all ancestors of a given index in a ClusterSequence object.

Arguments

  • idx: The index of the jet for which to find ancestors.

  • cs: The ClusterSequence object containing the jet history.

Returns

An array of indices representing the ancestors of the given jet.

source

JetReconstruction.get_dij_dist Method
julia
get_dij_dist(nn_dist, kt2_1, kt2_2, R2)

Compute the dij metric distance between two jets.

Arguments

  • nn_dist: The nearest-neighbor distance between two jets.

  • kt2_1: The squared momentum metric value of the first jet.

  • kt2_2: The squared momentum metric value of the second jet.

  • R2: The jet radius parameter squared.

Returns

The distance between the two jets.

If kt2_2 is equal to 0.0, then the first jet doesn't actually have a valid neighbour, so it's treated as a single jet adjecent to the beam.

source

JetReconstruction.get_tile Method
julia
get_tile(tiling_setup::TilingDef, eta::AbstractFloat, phi::AbstractFloat)

Given a tiling_setup object, eta and phi values, this function calculates the tile indices for the given eta and phi values.

Arguments

  • tiling_setup: A TilingDef object that contains the tiling setup parameters.

  • eta: The eta value for which to calculate the tile index.

  • phi: The phi value for which to calculate the tile index.

Returns

  • ieta: The tile index along the eta direction.

  • iphi: The tile index along the phi direction.

source

JetReconstruction.get_tile_cartesian_indices Method
julia
get_tile_linear_index(tiling_setup::TilingDef, i_η::Int, i_ϕ::Int)

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.

Returns

  • The linear index of the tile.

source

JetReconstruction.initial_history Method
julia
initial_history(particles)

Create an initial history for the given particles.

Arguments

  • particles: The initial vector of stable particles.

Returns

  • history: An array of HistoryElement objects.

  • Qtot: The total energy in the event.

source

JetReconstruction.insert! Method
julia
insert!(nextjet::TiledJet, jettomove::TiledJet)

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.

Example

source

JetReconstruction.is_ee Method
julia
is_ee(algorithm::JetAlgorithm.Algorithm)

Check if the algorithm is a e+e- reconstruction algorithm.

Returns

true if the algorithm is a e+e- reconstruction algorithm, false otherwise.

source

JetReconstruction.is_pp Method
julia
is_pp(algorithm::JetAlgorithm.Algorithm)

Check if the algorithm is a pp reconstruction algorithm.

Returns

true if the algorithm is a pp reconstruction algorithm, false otherwise.

source

JetReconstruction.isvalid Method
julia
isvalid(t::TiledJet)

Check if a TiledJet is valid, by seeing if it is not the noTiledJet object.

Arguments

  • t::TiledJet: The TiledJet object to check.

Returns

  • Bool: true if the TiledJet object is valid, false otherwise.

source

JetReconstruction.jet_ranks Method
julia
jet_ranks(clusterseq::ClusterSequence; compare_fn = JetReconstruction.pt)

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.

source

JetReconstruction.m Method
julia
m(p::PseudoJet)

Compute the invariant mass of a PseudoJet object. By convention if m^2 < 0, then -sqrt{(-m^2)} is returned.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the invariant mass.

Returns

The invariant mass of the PseudoJet object.

source

JetReconstruction.m2 Method
julia
m2(p::PseudoJet)

Calculate the invariant mass squared (m^2) of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object for which to calculate the invariant mass squared.

Returns

  • The invariant mass squared (m^2) of the PseudoJet.

source

JetReconstruction.mag Method
julia
mag(p::PseudoJet)

Return the magnitude of the momentum of a PseudoJet, |p|.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the magnitude.

Returns

The magnitude of the PseudoJet object.

source

JetReconstruction.mass Method
julia
mass(p::PseudoJet)

Compute the invariant mass (alias for m(p)).

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the mass.

Returns

  • The mass of the PseudoJet.

source

JetReconstruction.mass2 Function

Alias for m2 function

source

JetReconstruction.merge_steps Method
julia
merge_steps(clusterseq::ClusterSequence)

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.

Returns

  • merge_steps::Int: The number of merge steps.

source

JetReconstruction.phi Method
julia
phi(p::PseudoJet)

Compute the ϕ angle of a PseudoJet object p.

Note this function is a wrapper for phi_02pi(p).

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the azimuthal angle.

Returns

  • The azimuthal angle of p in the range [0, 2π).

source

JetReconstruction.phi_02pi Method
julia
phi_02pi(p::PseudoJet)

Compute the azimuthal angle of a PseudoJet object p in the range [0, 2π).

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the azimuthal angle.

Returns

  • The azimuthal angle of p in the range [0, 2π).

source

JetReconstruction.pt Method
julia
pt(p::PseudoJet)

Compute the scalar transverse momentum (pt) of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the transverse momentum.

Returns

  • The transverse momentum (pt) of the PseudoJet.

source

JetReconstruction.pt2 Method
julia
pt2(p::PseudoJet)

Get the squared transverse momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The squared transverse momentum of the PseudoJet.

source

JetReconstruction.px Method
julia
px(p::PseudoJet)

Return the x-component of the momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The x-component of the momentum of the PseudoJet.

source

JetReconstruction.py Method
julia
py(p::PseudoJet)

Return the y-component of the momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The y-component of the momentum of the PseudoJet.

source

JetReconstruction.pz Method
julia
pz(p::PseudoJet)

Return the z-component of the momentum of a PseudoJet.

Arguments

  • p::PseudoJet: The PseudoJet object.

Returns

  • The z-component of the momentum of the PseudoJet.

source

JetReconstruction.rapidity Method
julia
rapidity(p::PseudoJet)

Compute the rapidity of a PseudoJet object.

Arguments

  • p::PseudoJet: The PseudoJet object for which to compute the rapidity.

Returns

The rapidity of the PseudoJet object.

source

JetReconstruction.reco_state Method
julia
reco_state(cs::ClusterSequence, pt_ranks; iteration=0)

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.

source

JetReconstruction.rightneighbours Method
julia
rightneighbours(center::Int, tiling::Tiling)

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.

source

JetReconstruction.set_momentum! Method
julia
set_momentum!(j::PseudoJet, px, py, pz, E)

Set the momentum components and energy of a PseudoJet object.

Arguments

  • j::PseudoJet: The PseudoJet object to set the momentum for.

  • px: The x-component of the momentum.

  • py: The y-component of the momentum.

  • pz: The z-component of the momentum.

  • E: The energy of the particle.

source

JetReconstruction.set_nearest_neighbours! Method
julia
set_nearest_neighbours!(clusterseq::ClusterSequence, tiling::Tiling, tiledjets::Vector{TiledJet})

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.

source

JetReconstruction.setup_tiling Method
julia
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.

source

JetReconstruction.surrounding Method
julia
surrounding(center::Int, tiling::Tiling)

Compute the surrounding indices of a given center index in a tiling.

Arguments

  • center::Int: The center index.

  • tiling::Tiling: The tiling object.

Returns

  • Surrounding: An object containing the surrounding indices.

source

JetReconstruction.tile_index Method
julia
tile_index(tiling_setup, eta::Float64, phi::Float64)

Compute the tile index for a given (eta, phi) coordinate.

Arguments

  • tiling_setup: The tiling setup object containing the tile size and number of tiles.

  • eta::Float64: The eta coordinate.

  • phi::Float64: The phi coordinate.

Returns

The tile index corresponding to the (eta, phi) coordinate.

source

JetReconstruction.tiledjet_remove_from_tiles! Method
julia
tiledjet_remove_from_tiles!(tiling, jet)

Remove a jet from the given tiling structure.

Arguments

  • tiling: The tiling structure from which the jet will be removed.

  • jet: The jet to be removed from the tiling structure.

Description

This function removes a jet from the tiling structure. It adjusts the linked list to be consistent with the removal of the jet.

source

JetReconstruction.tiledjet_set_jetinfo! Method
julia
tiledjet_set_jetinfo!(jet::TiledJet, clusterseq::ClusterSequence, tiling::Tiling, jets_index, R2, p)

Initialise a tiled jet from a PseudoJet (using an index into our ClusterSequence)

Arguments:

  • jet::TiledJet: The TiledJet object to set the information for.

  • clusterseq::ClusterSequence: The ClusterSequence object containing the jets.

  • tiling::Tiling: The Tiling object containing the tile information.

  • jets_index: The index of the jet in the ClusterSequence.

  • R2: The jet radius parameter squared.

  • p: The power to raise the pt2 value to.

This function sets the eta, phi, kt2, jets_index, NN_dist, NN, tile_index, previous, and next fields of the TiledJet object.

Returns:

  • nothing

source

JetReconstruction.upd_nn_crosscheck! Method
julia
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.

source

JetReconstruction.upd_nn_nocross! Method
julia
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.

source

JetReconstruction.upd_nn_step! Method
julia
upd_nn_step!(i, j, k, N, Nn, kt2_array, rapidity_array, phi_array, R2, nndist, nn, nndij)

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.

source

JetReconstruction.η Function
julia
const η = eta

Alias for the pseudorapidity function, eta.

source

JetReconstruction.FourMomentum Type

Interface for composite types that includes fields px, py, py, and E that represents the components of a four-momentum vector.

source

JetReconstruction.HistoryElement Type
julia
struct HistoryElement

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.

source

JetReconstruction.HistoryElement Method
julia
HistoryElement(jetp_index)

Constructs a HistoryElement object with the given jetp_index, used for initialising the history with original particles.

Arguments

  • jetp_index: The index of the jetp.

Returns

A HistoryElement object.

source

JetReconstruction.JetWithAncestors Type
julia
struct JetWithAncestors

A struct representing a jet with its origin ancestors.

Fields

  • self::PseudoJet: The PseudoJet object for this jet.

  • jetp_index::Int: The index of the jet in the corresponding cluster sequence.

  • ancestors::Set{Int}: A set of indices representing the jetp_indexes of ancestors of the jet (in the cluster sequence).

  • jet_rank::Int: The rank of the jet based on a comparison of all of the jet's ancestors

Note

This structure needs its associated cluster sequence origin to be useful.

source

JetReconstruction.Surrounding Type
julia
struct Surrounding{N}

Structure used for iterating over neighbour tiles.

Fields

  • indices::NTuple{N, Int}: A tuple of N integers representing the indices.

source

JetReconstruction.TiledJet Type
julia
struct TiledJet

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.

  • NN::TiledJet: The nearest neighbor.

  • previous::TiledJet: The previous jet.

  • next::TiledJet: The next jet.

source

JetReconstruction.TiledJet Method
julia
TiledJet(id)

Constructs a TiledJet object with the given id and initializes its properties to zero.

Arguments

  • id: The ID of the TiledJet object.

Returns

A TiledJet object with the specified id and values set to zero or noTiledJet.

source

JetReconstruction.Tiling Type
julia
struct Tiling

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).

source

JetReconstruction.Tiling Method
julia
Tiling(setup::TilingDef)

Constructs a intial Tiling object based on the provided setup parameters.

Arguments

  • setup::TilingDef: The setup parameters for the tiling.

Returns

A Tiling object.

source

JetReconstruction.TilingDef Type
julia
struct TilingDef

A struct representing the definition of a spcific tiling scheme.

Fields

  • _tiles_eta_min::Float64: The minimum rapidity of the tiles.

  • _tiles_eta_max::Float64: The maximum rapidity of the tiles.

  • _tile_size_eta::Float64: The size of a tile in rapidity (usually R^2).

  • _tile_size_phi::Float64: The size of a tile in phi (usually a bit more than R^2).

  • _n_tiles_eta::Int: The number of tiles across rapidity.

  • _n_tiles_phi::Int: The number of tiles across phi.

  • _n_tiles::Int: The total number of tiles.

  • _tiles_ieta_min::Int: The minimum rapidity tile index.

  • _tiles_ieta_max::Int: The maximum rapidity tile index.

Constructor

TilingDef(_tiles_eta_min, _tiles_eta_max, _tile_size_eta, _tile_size_phi,
+	_n_tiles_eta, _n_tiles_phi, _tiles_ieta_min, _tiles_ieta_max)

Constructs a TilingDef object with the given parameters.

source

JetReconstruction.neighbour_tiles Type
julia
struct neighbour_tiles

A struct representing the neighbouring tiles.

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

Fields

  • n_η::Int: Number of η tiles

  • n_ϕ::Int: Number of ϕ tiles

  • start_η::Int: Centre η tile coordinate

  • start_ϕ::Int: Centre ϕ tile coordinate

source

JetReconstruction.rightmost_tiles Type
julia
struct rightmost_tiles

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
+XXX

Note, rapidity coordinate must be in range, ϕ coordinate wraps

Fields

  • n_η::Int: Number of η tiles

  • n_ϕ::Int: Number of ϕ tiles

  • start_η::Int: Centre η tile coordinate

  • start_ϕ::Int: Centre ϕ tile coordinate

source

JetReconstruction.rightmost_tiles Type
julia
struct rightmost_tiles

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

Fields

  • n_η::Int: Number of η tiles

  • n_ϕ::Int: Number of ϕ tiles

  • start_η::Int: Centre η tile coordinate

  • start_ϕ::Int: Centre ϕ tile coordinate

source

- +OOO

Note, rapidity coordinate must be in range, ϕ coordinate wraps

Fields

  • n_η::Int: Number of η tiles

  • n_ϕ::Int: Number of ϕ tiles

  • start_η::Int: Centre η tile coordinate

  • start_ϕ::Int: Centre ϕ tile coordinate

source

+ \ No newline at end of file diff --git a/dev/lib/public.html b/dev/lib/public.html index 96c6464..24b7317 100644 --- a/dev/lib/public.html +++ b/dev/lib/public.html @@ -6,31 +6,31 @@ Jet Reconstruction Public Documentation | JetReconstruction.jl - + - + - - - + + + -
Skip to content

Jet Reconstruction Public Documentation

Documentation for JetReconstruction.jl's public interfaces.

Index

Public Methods and Types

JetReconstruction.constituents Method
julia
constituents(j::PseudoJet, cs::ClusterSequence)

Get the constituents of a given jet in a cluster sequence.

Arguments

  • cs::ClusterSequence: The cluster sequence object.

  • j::PseudoJet: The jet for which to retrieve the constituents.

Returns

An array of PseudoJet objects representing the constituents of the given jet. (That is, the original clusters that were recombined to form this jet.)

source

JetReconstruction.ee_genkt_algorithm Method
julia
ee_genkt_algorithm(particles::Vector{T}; p = -1, R = 4.0,
+    
Skip to content

Jet Reconstruction Public Documentation

Documentation for JetReconstruction.jl's public interfaces.

Index

Public Methods and Types

JetReconstruction.constituents Method
julia
constituents(j::PseudoJet, cs::ClusterSequence)

Get the constituents of a given jet in a cluster sequence.

Arguments

  • cs::ClusterSequence: The cluster sequence object.

  • j::PseudoJet: The jet for which to retrieve the constituents.

Returns

An array of PseudoJet objects representing the constituents of the given jet. (That is, the original clusters that were recombined to form this jet.)

source

JetReconstruction.ee_genkt_algorithm Method
julia
ee_genkt_algorithm(particles::Vector{T}; p = -1, R = 4.0,
                    algorithm::JetAlgorithm.Algorithm = JetAlgorithm.Durham,
-                   recombine = +) where {T}

Run an e+e- reconstruction algorithm on a set of initial particles.

Arguments

  • particles::Vector{T}: A vector of particles to be clustered.

  • p = 1: The power parameter for the algorithm. Not required / ignored for the Durham algorithm when it is set to 1.

  • R = 4.0: The jet radius parameter. Not required / ignored for the Durham algorithm.

  • algorithm::JetAlgorithm.Algorithm = JetAlgorithm.Durham: The specific jet algorithm to use.

  • recombine: The recombination scheme to use. Defaults to +.

Returns

  • The result of the jet clustering as a ClusterSequence object.

Notes

This is the public interface to the e+e- jet clustering algorithm. The function will check for consistency between the algorithm and the power parameter as needed. It will then prepare the internal EDM particles for the clustering itself, and call the actual reconstruction method _ee_genkt_algorithm.

If the algorithm is Durham, p is set to 1 and R is nominally set to 4.

Note that unlike pp reconstruction the algorithm has to be specified explicitly.

source

JetReconstruction.exclusive_jets Method
julia
exclusive_jets(clusterseq::ClusterSequence; dcut = nothing, njets = nothing, T = LorentzVectorCyl)

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.

  • T = LorentzVectorCyl: The return type used for the selected jets.

Note: Either dcut or njets must be provided (but not both).

Returns

  • An array of T objects representing the exclusive jets.

Valid return types are LorentzVectorCyl and PseudoJet (N.B. this will evolve in the future to be any subtype of FourMomemntumBase; currently unrecognised types will return LorentzVectorCyl)

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.

Examples

julia
exclusive_jets(clusterseq, dcut = 20.0)
-exclusive_jets(clusterseq, njets = 3, T = PseudoJet)

source

JetReconstruction.final_jets Function

Specialisation for final jets from LorentzVectorCyl (TODO: merge into more general function)

source

JetReconstruction.final_jets Function

Specialisation for final jets from LorentzVectors (TODO: merge into more general function)

source

JetReconstruction.final_jets Function
julia
final_jets(jets::Vector{PseudoJet}, ptmin::AbstractFloat=0.0)

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.

source

JetReconstruction.inclusive_jets Method
julia
inclusive_jets(clusterseq::ClusterSequence; ptmin = 0.0, T = LorentzVectorCyl)

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.

  • T = LorentzVectorCyl: The return type used for the selected jets.

Returns

An array of T 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.

Valid return types are LorentzVectorCyl and PseudoJet (N.B. this will evolve in the future to be any subtype of FourMomemntumBase; currently unrecognised types will return LorentzVectorCyl).

Example

julia
inclusive_jets(clusterseq; ptmin = 10.0)

source

JetReconstruction.jet_reconstruct Method
julia
jet_reconstruct(particles; p = -1, algorithm = nothing, 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::Union{Real, Nothing} = -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).

  • algorithm::Union{JetAlgorithm.Algorithm, Nothing} = nothing: The algorithm to use for jet reconstruction.

  • 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.

Consitency of p, algorithm and R arguments

If an algorithm is explicitly specified the p value should be consistent with it or nothing. If the algorithm is one where p can vary, then it has to be given, along with the algorithm.``

If the p parameter is passed and algorithm=nothing, then pp-type reconstruction is implied (i.e., AntiKt, CA, Kt or GenKt will be used, depending on the value of p).

When an algorithm has no R dependence the R parameter is ignored.

Example

julia
jet_reconstruct(particles; p = -1, R = 0.4)
+                   recombine = +) where {T}

Run an e+e- reconstruction algorithm on a set of initial particles.

Arguments

  • particles::Vector{T}: A vector of particles to be clustered.

  • p = 1: The power parameter for the algorithm. Not required / ignored for the Durham algorithm when it is set to 1.

  • R = 4.0: The jet radius parameter. Not required / ignored for the Durham algorithm.

  • algorithm::JetAlgorithm.Algorithm = JetAlgorithm.Durham: The specific jet algorithm to use.

  • recombine: The recombination scheme to use. Defaults to +.

Returns

  • The result of the jet clustering as a ClusterSequence object.

Notes

This is the public interface to the e+e- jet clustering algorithm. The function will check for consistency between the algorithm and the power parameter as needed. It will then prepare the internal EDM particles for the clustering itself, and call the actual reconstruction method _ee_genkt_algorithm.

If the algorithm is Durham, p is set to 1 and R is nominally set to 4.

Note that unlike pp reconstruction the algorithm has to be specified explicitly.

source

JetReconstruction.exclusive_jets Method
julia
exclusive_jets(clusterseq::ClusterSequence; dcut = nothing, njets = nothing, T = LorentzVectorCyl)

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.

  • T = LorentzVectorCyl: The return type used for the selected jets.

Note: Either dcut or njets must be provided (but not both).

Returns

  • An array of T objects representing the exclusive jets.

Valid return types are LorentzVectorCyl and PseudoJet (N.B. this will evolve in the future to be any subtype of FourMomemntumBase; currently unrecognised types will return LorentzVectorCyl)

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.

Examples

julia
exclusive_jets(clusterseq, dcut = 20.0)
+exclusive_jets(clusterseq, njets = 3, T = PseudoJet)

source

JetReconstruction.final_jets Function

Specialisation for final jets from LorentzVectorCyl (TODO: merge into more general function)

source

JetReconstruction.final_jets Function

Specialisation for final jets from LorentzVectors (TODO: merge into more general function)

source

JetReconstruction.final_jets Function
julia
final_jets(jets::Vector{PseudoJet}, ptmin::AbstractFloat=0.0)

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.

source

JetReconstruction.inclusive_jets Method
julia
inclusive_jets(clusterseq::ClusterSequence; ptmin = 0.0, T = LorentzVectorCyl)

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.

  • T = LorentzVectorCyl: The return type used for the selected jets.

Returns

An array of T 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.

Valid return types are LorentzVectorCyl and PseudoJet (N.B. this will evolve in the future to be any subtype of FourMomemntumBase; currently unrecognised types will return LorentzVectorCyl).

Example

julia
inclusive_jets(clusterseq; ptmin = 10.0)

source

JetReconstruction.jet_reconstruct Method
julia
jet_reconstruct(particles; p = -1, algorithm = nothing, 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::Union{Real, Nothing} = -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).

  • algorithm::Union{JetAlgorithm.Algorithm, Nothing} = nothing: The algorithm to use for jet reconstruction.

  • 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.

Consitency of p, algorithm and R arguments

If an algorithm is explicitly specified the p value should be consistent with it or nothing. If the algorithm is one where p can vary, then it has to be given, along with the algorithm.``

If the p parameter is passed and algorithm=nothing, then pp-type reconstruction is implied (i.e., AntiKt, CA, Kt or GenKt will be used, depending on the value of p).

When an algorithm has no R dependence the R parameter is ignored.

Example

julia
jet_reconstruct(particles; p = -1, R = 0.4)
 jet_reconstruct(particles; algorithm = JetAlgorithm.Kt, R = 1.0)
 jet_reconstruct(particles; algorithm = JetAlgorithm.Durham)
-jet_reconstruct(particles; algorithm = JetAlgorithm.GenKt, p = 0.5, R = 1.0)

source

JetReconstruction.loadjets! Method
julia
loadjets!(filename, jets; splitby=isspace, constructor=(px,py,pz,E)->LorentzVectorHEP(E,px,py,pz), dtype=Float64)

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
+jet_reconstruct(particles; algorithm = JetAlgorithm.GenKt, p = 0.5, R = 1.0)

source

JetReconstruction.loadjets! Method
julia
loadjets!(filename, jets; splitby=isspace, constructor=(px,py,pz,E)->LorentzVectorHEP(E,px,py,pz), dtype=Float64)

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)

source

JetReconstruction.loadjets Method
julia
loadjets(filename; splitby=isspace, constructor=(px,py,pz,E)->LorentzVectorHEP(E,px,py,pz), VT=LorentzVector)

Load jets from a file.

Arguments

  • filename: The name of the file to load jets from.

  • splitby: The delimiter used to split the data in the file. Default is isspace.

  • constructor: A function that constructs a VT object from the jet data. Default is (px,py,pz,E)->LorentzVector(E,px,py,pz).

  • VT: The type of the vector used to store the jet data. Default is LorentzVector.

Returns

  • A vector of VT objects representing the loaded jets.

source

JetReconstruction.n_exclusive_jets Method
julia
n_exclusive_jets(clusterseq::ClusterSequence; dcut::AbstractFloat)

Return the number of exclusive jets of a ClusterSequence that are above a certain dcut value.

Arguments

  • clusterseq::ClusterSequence: The ClusterSequence object containing the clustering history.

  • dcut::AbstractFloat: The maximum calue for the distance parameter in the reconstruction.

Returns

The number of exclusive jets in the ClusterSequence object.

Example

julia
n_exclusive_jets(clusterseq, dcut = 20.0)

source

JetReconstruction.plain_jet_reconstruct Method
julia
plain_jet_reconstruct(particles::Vector{T}; p = -1, R = 1.0, recombine = +) where T

Perform pp 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.

  • algorithm::Union{JetAlgorithm, Nothing} = nothing: The explicit jet algorithm to use.

  • 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.

This code will use the k_t algorithm types, operating in (rapidity, φ) space.

It is not necessary to specify both the algorithm and the p (power) value. If both are given they must be consistent or an exception is thrown.

Returns

  • Vector{PseudoJet}: A vector of reconstructed jets.

Example

julia
jets = plain_jet_reconstruct(particles; p = -1, R = 0.4)
-jets = plain_jet_reconstruct(particles; algorithm = JetAlgorithm.Kt, R = 1.0)

source

JetReconstruction.read_final_state_particles Method
julia
read_final_state_particles(fname; maxevents = -1, skipevents = 0, T=PseudoJet)

Reads final state particles from a file and returns them as a vector of type T.

Arguments

  • fname: The name of the HepMC3 ASCII file to read particles from. If the file is gzipped, the function will automatically decompress it.

  • maxevents=-1: The maximum number of events to read. -1 means all events will be read.

  • skipevents=0: The number of events to skip before an event is included.

  • T=PseudoJet: The type of object to contruct and return.

Returns

A vector of vectors of T objects, where each inner vector represents all the particles of a particular event. In particular T can be PseudoJet or a LorentzVector type. Note, if T is not PseudoJet, the order of the arguments in the constructor must be (t, x, y, z).

source

JetReconstruction.savejets Method
julia
savejets(filename, jets; format="px py pz E")

Save jet data to a file.

Arguments

  • 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.

source

JetReconstruction.tiled_jet_reconstruct Method
julia
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.

This code will use the k_t algorithm types, operating in (rapidity, φ) space.

It is not necessary to specify both the algorithm and the p (power) value. If both are given they must be consistent or an exception is thrown.

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::Union{Real, Nothing} = -1: The power parameter for the jet reconstruction algorithm, thus swiching between different algorithms.

  • algorithm::Union{JetAlgorithm, Nothing} = nothing: The explicit jet algorithm to use.

  • 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 = +)

source

JetReconstruction.ClusterSequence Type
julia
struct ClusterSequence

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.

  • power::Float64: The power value used for the clustering algorithm (not that this value is always stored as a Float64 to be type stable)

  • R::Float64: The R parameter used for the clustering algorithm.

  • 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.

  • Qtot::Any: The total energy of the event.

source

JetReconstruction.ClusterSequence Method
julia
ClusterSequence(algorithm::JetAlgorithm.Algorithm, p::Real, R::Float64, strategy::RecoStrategy.Strategy, jets, history, Qtot)

Construct a ClusterSequence object.

Arguments

  • algorithm::JetAlgorithm.Algorithm: The algorithm used for clustering.

  • p::Real: The power value used for the clustering algorithm.

  • R::Float64: The R parameter used for the clustering algorithm.

  • strategy::RecoStrategy.Strategy: The strategy used for clustering.

  • jets::Vector{PseudoJet}: The physical PseudoJets in the cluster sequence.

  • history::Vector{HistoryElement}: The branching history of the cluster sequence.

  • Qtot::Any: The total energy of the event.

source

JetReconstruction.EEjet Type
julia
struct EEjet

The EEjet struct is a 4-momentum object used for the e+e jet reconstruction routines.

Fields

  • px::Float64: The x-component of the jet momentum.

  • py::Float64: The y-component of the jet momentum.

  • pz::Float64: The z-component of the jet momentum.

  • E::Float64: The energy of the jet.

  • _cluster_hist_index::Int: The index of the cluster histogram.

  • _p2::Float64: The squared momentum of the jet.

  • _inv_p::Float64: The inverse momentum of the jet.

source

JetReconstruction.FinalJet Type
julia
struct FinalJet

A struct representing the final properties of a jet, used for JSON serialisation.

Fields

  • rap::Float64: The rapidity of the jet.

  • phi::Float64: The azimuthal angle of the jet.

  • pt::Float64: The transverse momentum of the jet.

source

JetReconstruction.FinalJets Type
julia
struct FinalJets

A struct with the vector of all jets for a certain jet identifier, used for JSON serialisation.

Fields

  • jetid::Int64: The ID of the jet.

  • jets::Vector{FinalJet}: A vector of FinalJet objects representing the jets.

source

JetReconstruction.PseudoJet Type
julia
mutable struct PseudoJet <: FourMomentum

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.

  • _rap::Float64: The rapidity.

  • _phi::Float64: The azimuthal angle.

source

JetReconstruction.PseudoJet Method
julia
PseudoJet(px::Float64, py::Float64, pz::Float64, E::Float64)

Constructs a PseudoJet object with the given momentum components and energy.

Arguments

  • 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.

Returns

A PseudoJet object.

source

JetReconstruction.PseudoJet Method
julia
PseudoJet(px::Float64, py::Float64, pz::Float64, E::Float64,
+loadjets!("myjets2.dat", jets)

source

JetReconstruction.loadjets Method
julia
loadjets(filename; splitby=isspace, constructor=(px,py,pz,E)->LorentzVectorHEP(E,px,py,pz), VT=LorentzVector)

Load jets from a file.

Arguments

  • filename: The name of the file to load jets from.

  • splitby: The delimiter used to split the data in the file. Default is isspace.

  • constructor: A function that constructs a VT object from the jet data. Default is (px,py,pz,E)->LorentzVector(E,px,py,pz).

  • VT: The type of the vector used to store the jet data. Default is LorentzVector.

Returns

  • A vector of VT objects representing the loaded jets.

source

JetReconstruction.n_exclusive_jets Method
julia
n_exclusive_jets(clusterseq::ClusterSequence; dcut::AbstractFloat)

Return the number of exclusive jets of a ClusterSequence that are above a certain dcut value.

Arguments

  • clusterseq::ClusterSequence: The ClusterSequence object containing the clustering history.

  • dcut::AbstractFloat: The maximum calue for the distance parameter in the reconstruction.

Returns

The number of exclusive jets in the ClusterSequence object.

Example

julia
n_exclusive_jets(clusterseq, dcut = 20.0)

source

JetReconstruction.plain_jet_reconstruct Method
julia
plain_jet_reconstruct(particles::Vector{T}; p = -1, R = 1.0, recombine = +) where T

Perform pp 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.

  • algorithm::Union{JetAlgorithm, Nothing} = nothing: The explicit jet algorithm to use.

  • 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.

This code will use the k_t algorithm types, operating in (rapidity, φ) space.

It is not necessary to specify both the algorithm and the p (power) value. If both are given they must be consistent or an exception is thrown.

Returns

  • Vector{PseudoJet}: A vector of reconstructed jets.

Example

julia
jets = plain_jet_reconstruct(particles; p = -1, R = 0.4)
+jets = plain_jet_reconstruct(particles; algorithm = JetAlgorithm.Kt, R = 1.0)

source

JetReconstruction.read_final_state_particles Method
julia
read_final_state_particles(fname; maxevents = -1, skipevents = 0, T=PseudoJet)

Reads final state particles from a file and returns them as a vector of type T.

Arguments

  • fname: The name of the HepMC3 ASCII file to read particles from. If the file is gzipped, the function will automatically decompress it.

  • maxevents=-1: The maximum number of events to read. -1 means all events will be read.

  • skipevents=0: The number of events to skip before an event is included.

  • T=PseudoJet: The type of object to contruct and return.

Returns

A vector of vectors of T objects, where each inner vector represents all the particles of a particular event. In particular T can be PseudoJet or a LorentzVector type. Note, if T is not PseudoJet, the order of the arguments in the constructor must be (t, x, y, z).

source

JetReconstruction.savejets Method
julia
savejets(filename, jets; format="px py pz E")

Save jet data to a file.

Arguments

  • 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.

source

JetReconstruction.tiled_jet_reconstruct Method
julia
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.

This code will use the k_t algorithm types, operating in (rapidity, φ) space.

It is not necessary to specify both the algorithm and the p (power) value. If both are given they must be consistent or an exception is thrown.

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::Union{Real, Nothing} = -1: The power parameter for the jet reconstruction algorithm, thus swiching between different algorithms.

  • algorithm::Union{JetAlgorithm, Nothing} = nothing: The explicit jet algorithm to use.

  • 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 = +)

source

JetReconstruction.ClusterSequence Type
julia
struct ClusterSequence

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.

  • power::Float64: The power value used for the clustering algorithm (not that this value is always stored as a Float64 to be type stable)

  • R::Float64: The R parameter used for the clustering algorithm.

  • 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.

  • Qtot::Any: The total energy of the event.

source

JetReconstruction.ClusterSequence Method
julia
ClusterSequence(algorithm::JetAlgorithm.Algorithm, p::Real, R::Float64, strategy::RecoStrategy.Strategy, jets, history, Qtot)

Construct a ClusterSequence object.

Arguments

  • algorithm::JetAlgorithm.Algorithm: The algorithm used for clustering.

  • p::Real: The power value used for the clustering algorithm.

  • R::Float64: The R parameter used for the clustering algorithm.

  • strategy::RecoStrategy.Strategy: The strategy used for clustering.

  • jets::Vector{PseudoJet}: The physical PseudoJets in the cluster sequence.

  • history::Vector{HistoryElement}: The branching history of the cluster sequence.

  • Qtot::Any: The total energy of the event.

source

JetReconstruction.EEjet Type
julia
struct EEjet

The EEjet struct is a 4-momentum object used for the e+e jet reconstruction routines.

Fields

  • px::Float64: The x-component of the jet momentum.

  • py::Float64: The y-component of the jet momentum.

  • pz::Float64: The z-component of the jet momentum.

  • E::Float64: The energy of the jet.

  • _cluster_hist_index::Int: The index of the cluster histogram.

  • _p2::Float64: The squared momentum of the jet.

  • _inv_p::Float64: The inverse momentum of the jet.

source

JetReconstruction.FinalJet Type
julia
struct FinalJet

A struct representing the final properties of a jet, used for JSON serialisation.

Fields

  • rap::Float64: The rapidity of the jet.

  • phi::Float64: The azimuthal angle of the jet.

  • pt::Float64: The transverse momentum of the jet.

source

JetReconstruction.FinalJets Type
julia
struct FinalJets

A struct with the vector of all jets for a certain jet identifier, used for JSON serialisation.

Fields

  • jetid::Int64: The ID of the jet.

  • jets::Vector{FinalJet}: A vector of FinalJet objects representing the jets.

source

JetReconstruction.PseudoJet Type
julia
mutable struct PseudoJet <: FourMomentum

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.

  • _rap::Float64: The rapidity.

  • _phi::Float64: The azimuthal angle.

source

JetReconstruction.PseudoJet Method
julia
PseudoJet(px::Float64, py::Float64, pz::Float64, E::Float64)

Constructs a PseudoJet object with the given momentum components and energy.

Arguments

  • 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.

Returns

A PseudoJet object.

source

JetReconstruction.PseudoJet Method
julia
PseudoJet(px::Float64, py::Float64, pz::Float64, E::Float64,
     _cluster_hist_index::Int,
-    pt2::Float64)

Constructs a PseudoJet object with the given momentum components and energy and history index.

Arguments

  • 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.

  • _cluster_hist_index::Int: The cluster history index.

  • pt2::Float64: The transverse momentum squared.

Returns

A PseudoJet object.

source

- + pt2::Float64)

Constructs a PseudoJet object with the given momentum components and energy and history index.

Arguments

  • 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.

  • _cluster_hist_index::Int: The cluster history index.

  • pt2::Float64: The transverse momentum squared.

Returns

A PseudoJet object.

source

+ \ No newline at end of file diff --git a/dev/lib/visualisation.html b/dev/lib/visualisation.html index 21b9328..7ba8761 100644 --- a/dev/lib/visualisation.html +++ b/dev/lib/visualisation.html @@ -6,13 +6,13 @@ Jet Visualisation Documentation | JetReconstruction.jl - + - + - - - + + + @@ -26,7 +26,7 @@ elevation = 0.5, framerate = 5, ancestors = false, - Module = Makie)

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.

source

JetReconstruction.jetsplot Method

jetsplot(objects, idx_arrays; barsize_phi=0.1, barsize_eta=0.1, colormap=:glasbey_hv_n256, Module=Main)

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
+            Module = Makie)

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.

source

JetReconstruction.jetsplot Method

jetsplot(objects, idx_arrays; barsize_phi=0.1, barsize_eta=0.1, colormap=:glasbey_hv_n256, Module=Main)

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:

import CairoMakie
@@ -36,7 +36,7 @@
 jetsplot(my_objects, my_colour_arrays, Module=GLMakie)
 
 using WGLMakie
-jetsplot(my_objects, my_colour_arrays, Module=Main) #default

source

JetReconstruction.jetsplot Method
julia
jetsplot(objects, cs::ClusterSequence; barsize_phi=0.1, barsize_eta=0.1, colormap=:glasbey_hv_n256, Module=Main)

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
+jetsplot(my_objects, my_colour_arrays, Module=Main) #default

source

JetReconstruction.jetsplot Method
julia
jetsplot(objects, cs::ClusterSequence; barsize_phi=0.1, barsize_eta=0.1, colormap=:glasbey_hv_n256, Module=Main)

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:

import CairoMakie
 jetsplot(my_objects, cs, Module=CairoMakie)
@@ -45,8 +45,8 @@
 jetsplot(my_objects, cs, Module=GLMakie)
 
 using WGLMakie
-jetsplot(my_objects, cs, Module=Main) #default

source

- +jetsplot(my_objects, cs, Module=Main) #default

source

+ \ No newline at end of file