Facilitating bootstrapped and rarefaction-based... | F1000Research "use strict";function _typeof(t){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}!function(){var t=function(){var t,e,o=[],n=window,r=n;for(;r;){try{if(r.frames.__tcfapiLocator){t=r;break}}catch(t){}if(r===n.top)break;r=r.parent}t||(!function t(){var e=n.document,o=!!n.frames.__tcfapiLocator;if(!o)if(e.body){var r=e.createElement("iframe");r.style.cssText="display:none",r.name="__tcfapiLocator",e.body.appendChild(r)}else setTimeout(t,5);return!o}(),n.__tcfapi=function(){for(var t=arguments.length,n=new Array(t),r=0;r 3&&2===parseInt(n[1],10)&&"boolean"==typeof n[3]&&(e=n[3],"function"==typeof n[2]&&n[2]("set",!0)):"ping"===n[0]?"function"==typeof n[2]&&n[2]({gdprApplies:e,cmpLoaded:!1,cmpStatus:"stub"}):o.push(n)},n.addEventListener("message",(function(t){var e="string"==typeof t.data,o={};if(e)try{o=JSON.parse(t.data)}catch(t){}else o=t.data;var n="object"===_typeof(o)&&null!==o?o.__tcfapiCall:null;n&&window.__tcfapi(n.command,n.version,(function(o,r){var a={__tcfapiReturn:{returnValue:o,success:r,callId:n.callId}};t&&t.source&&t.source.postMessage&&t.source.postMessage(e?JSON.stringify(a):a,"*")}),n.parameter)}),!1))};"undefined"!=typeof module?module.exports=t:t()}(); dataLayer = dataLayer || []; // Standard GTM initialization - Google Consent Mode handles consent automatically (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl+ '>m_auth=hzk0Vc3qFsQYhCrIoHz68A>m_preview=env-1>m_cookies_win=x';f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-MWFK8L5J'); ;window.NREUM||(NREUM={});NREUM.init={distributed_tracing:{enabled:true},privacy:{cookies_enabled:true},ajax:{deny_list:["bam.nr-data.net"]}}; ;NREUM.loader_config={accountID:"438030",trustKey:"438030",agentID:"772317073",licenseKey:"97f8f67f26",applicationID:"772317073"} ;NREUM.info={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",licenseKey:"97f8f67f26",applicationID:"772317073",sa:1} ;/*! For license information please see nr-loader-spa-1.236.0.min.js.LICENSE.txt */ (()=>{"use strict";var e,t,r={5763:(e,t,r)=>{r.d(t,{P_:()=>l,Mt:()=>g,C5:()=>s,DL:()=>v,OP:()=>T,lF:()=>D,Yu:()=>y,Dg:()=>h,CX:()=>c,GE:()=>b,sU:()=>_});var n=r(8632),i=r(9567);const o={beacon:n.ce.beacon,errorBeacon:n.ce.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0},a={};function s(e){if(!e)throw new Error("All info objects require an agent identifier!");if(!a[e])throw new Error("Info for ".concat(e," was never set"));return a[e]}function c(e,t){if(!e)throw new Error("All info objects require an agent identifier!");a[e]=(0,i.D)(t,o),(0,n.Qy)(e,a[e],"info")}var u=r(7056);const d=()=>{const e={blockSelector:"[data-nr-block]",maskInputOptions:{password:!0}};return{allow_bfcache:!0,privacy:{cookies_enabled:!0},ajax:{deny_list:void 0,enabled:!0,harvestTimeSeconds:10},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},session:{domain:void 0,expiresMs:u.oD,inactiveMs:u.Hb},ssl:void 0,obfuscate:void 0,jserrors:{enabled:!0,harvestTimeSeconds:10},metrics:{enabled:!0},page_action:{enabled:!0,harvestTimeSeconds:30},page_view_event:{enabled:!0},page_view_timing:{enabled:!0,harvestTimeSeconds:30,long_task:!1},session_trace:{enabled:!0,harvestTimeSeconds:10},harvest:{tooManyRequestsDelay:60},session_replay:{enabled:!1,harvestTimeSeconds:60,sampleRate:.1,errorSampleRate:.1,maskTextSelector:"*",maskAllInputs:!0,get blockClass(){return"nr-block"},get ignoreClass(){return"nr-ignore"},get maskTextClass(){return"nr-mask"},get blockSelector(){return e.blockSelector},set blockSelector(t){e.blockSelector+=",".concat(t)},get maskInputOptions(){return e.maskInputOptions},set maskInputOptions(t){e.maskInputOptions={...t,password:!0}}},spa:{enabled:!0,harvestTimeSeconds:10}}},f={};function l(e){if(!e)throw new Error("All configuration objects require an agent identifier!");if(!f[e])throw new Error("Configuration for ".concat(e," was never set"));return f[e]}function h(e,t){if(!e)throw new Error("All configuration objects require an agent identifier!");f[e]=(0,i.D)(t,d()),(0,n.Qy)(e,f[e],"config")}function g(e,t){if(!e)throw new Error("All configuration objects require an agent identifier!");var r=l(e);if(r){for(var n=t.split("."),i=0;i {r.d(t,{D:()=>i});var n=r(50);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.Z)("Setting a Configurable requires an object as input");if(!t||"object"!=typeof t)return(0,n.Z)("Setting a Configurable requires a model to set its initial properties");const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),o=0===Object.keys(r).length?e:r;for(let a in o)if(void 0!==e[a])try{"object"==typeof e[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){(0,n.Z)("An error occurred while setting a property of a Configurable",e)}return r}catch(e){(0,n.Z)("An error occured while setting a Configurable",e)}}},6818:(e,t,r)=>{r.d(t,{Re:()=>i,gF:()=>o,q4:()=>n});const n="1.236.0",i="PROD",o="CDN"},385:(e,t,r)=>{r.d(t,{FN:()=>a,IF:()=>u,Nk:()=>f,Tt:()=>s,_A:()=>o,il:()=>n,pL:()=>c,v6:()=>i,w1:()=>d});const n="undefined"!=typeof window&&!!window.document,i="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),o=n?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),a=""+o?.location,s=/iPad|iPhone|iPod/.test(navigator.userAgent),c=s&&"undefined"==typeof SharedWorker,u=(()=>{const e=navigator.userAgent.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),d=Boolean(n&&window.document.documentMode),f=!!navigator.sendBeacon},1117:(e,t,r)=>{r.d(t,{w:()=>o});var n=r(50);const i={agentIdentifier:"",ee:void 0};class o{constructor(e){try{if("object"!=typeof e)return(0,n.Z)("shared context requires an object as input");this.sharedContext={},Object.assign(this.sharedContext,i),Object.entries(e).forEach((e=>{let[t,r]=e;Object.keys(i).includes(t)&&(this.sharedContext[t]=r)}))}catch(e){(0,n.Z)("An error occured while setting SharedContext",e)}}}},8e3:(e,t,r)=>{r.d(t,{L:()=>d,R:()=>c});var n=r(2177),i=r(1284),o=r(4322),a=r(3325);const s={};function c(e,t){const r={staged:!1,priority:a.p[t]||0};u(e),s[e].get(t)||s[e].set(t,r)}function u(e){e&&(s[e]||(s[e]=new Map))}function d(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"feature";if(u(e),!e||!s[e].get(t))return a(t);s[e].get(t).staged=!0;const r=[...s[e]];function a(t){const r=e?n.ee.get(e):n.ee,a=o.X.handlers;if(r.backlog&&a){var s=r.backlog[t],c=a[t];if(c){for(var u=0;s&&u {let[t,r]=e;return r.staged}))&&(r.sort(((e,t)=>e[1].priority-t[1].priority)),r.forEach((e=>{let[t]=e;a(t)})))}function f(e,t){var r=e[1];(0,i.D)(t[r],(function(t,r){var n=e[0];if(r[0]===n){var i=r[1],o=e[3],a=e[2];i.apply(o,a)}}))}},2177:(e,t,r)=>{r.d(t,{c:()=>f,ee:()=>u});var n=r(8632),i=r(2210),o=r(1284),a=r(5763),s="nr@context";let c=(0,n.fP)();var u;function d(){}function f(e){return(0,i.X)(e,s,l)}function l(){return new d}function h(){u.aborted=!0,u.backlog={}}c.ee?u=c.ee:(u=function e(t,r){var n={},c={},f={},g=!1;try{g=16===r.length&&(0,a.OP)(r).isolatedBacklog}catch(e){}var p={on:b,addEventListener:b,removeEventListener:y,emit:v,get:x,listeners:w,context:m,buffer:A,abort:h,aborted:!1,isBuffering:E,debugId:r,backlog:g?{}:t&&"object"==typeof t.backlog?t.backlog:{}};return p;function m(e){return e&&e instanceof d?e:e?(0,i.X)(e,s,l):l()}function v(e,r,n,i,o){if(!1!==o&&(o=!0),!u.aborted||i){t&&o&&t.emit(e,r,n);for(var a=m(n),s=w(e),d=s.length,f=0;fn,p:()=>i});var n=r(2177).ee.get("handle");function i(e,t,r,i,o){o?(o.buffer([e],i),o.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},4322:(e,t,r)=>{r.d(t,{X:()=>o});var n=r(5546);o.on=a;var i=o.handlers={};function o(e,t,r,o){a(o||n.E,i,e,t,r)}function a(e,t,r,i,o){o||(o="feature"),e||(e=n.E);var a=t[o]=t[o]||{};(a[r]=a[r]||[]).push([e,i])}},3239:(e,t,r)=>{r.d(t,{bP:()=>s,iz:()=>c,m$:()=>a});var n=r(385);let i=!1,o=!1;try{const e={get passive(){return i=!0,!1},get signal(){return o=!0,!1}};n._A.addEventListener("test",null,e),n._A.removeEventListener("test",null,e)}catch(e){}function a(e,t){return i||o?{capture:!!e,passive:i,signal:t}:!!e}function s(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3?arguments[3]:void 0;window.addEventListener(e,t,a(r,n))}function c(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3?arguments[3]:void 0;document.addEventListener(e,t,a(r,n))}},4402:(e,t,r)=>{r.d(t,{Ht:()=>u,M:()=>c,Rl:()=>a,ky:()=>s});var n=r(385);const i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function o(e,t){return e?15&e[t]:16*Math.random()|0}function a(){const e=n._A?.crypto||n._A?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(31))),i.split("").map((e=>"x"===e?o(t,++r).toString(16):"y"===e?(3&o()|8).toString(16):e)).join("")}function s(e){const t=n._A?.crypto||n._A?.msCrypto;let r,i=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(31)));const a=[];for(var s=0;s {r.d(t,{Bq:()=>n,Hb:()=>o,oD:()=>i});const n="NRBA",i=144e5,o=18e5},7894:(e,t,r)=>{function n(){return Math.round(performance.now())}r.d(t,{z:()=>n})},7243:(e,t,r)=>{r.d(t,{e:()=>o});var n=r(385),i={};function o(e){if(e in i)return i[e];if(0===(e||"").indexOf("data:"))return{protocol:"data"};let t;var r=n._A?.location,o={};if(n.il)t=document.createElement("a"),t.href=e;else try{t=new URL(e,r.href)}catch(e){return o}o.port=t.port;var a=t.href.split("://");!o.port&&a[1]&&(o.port=a[1].split("/")[0].split("@").pop().split(":")[1]),o.port&&"0"!==o.port||(o.port="https"===a[0]?"443":"80"),o.hostname=t.hostname||r.hostname,o.pathname=t.pathname,o.protocol=a[0],"/"!==o.pathname.charAt(0)&&(o.pathname="/"+o.pathname);var s=!t.protocol||":"===t.protocol||t.protocol===r.protocol,c=t.hostname===r.hostname&&t.port===r.port;return o.sameOrigin=s&&(!t.hostname||c),"/"===o.pathname&&(i[e]=o),o}},50:(e,t,r)=>{function n(e,t){"function"==typeof console.warn&&(console.warn("New Relic: ".concat(e)),t&&console.warn(t))}r.d(t,{Z:()=>n})},2587:(e,t,r)=>{r.d(t,{N:()=>c,T:()=>u});var n=r(2177),i=r(5546),o=r(8e3),a=r(3325);const s={stn:[a.D.sessionTrace],err:[a.D.jserrors,a.D.metrics],ins:[a.D.pageAction],spa:[a.D.spa],sr:[a.D.sessionReplay,a.D.sessionTrace]};function c(e,t){const r=n.ee.get(t);e&&"object"==typeof e&&(Object.entries(e).forEach((e=>{let[t,n]=e;void 0===u[t]&&(s[t]?s[t].forEach((e=>{n?(0,i.p)("feat-"+t,[],void 0,e,r):(0,i.p)("block-"+t,[],void 0,e,r),(0,i.p)("rumresp-"+t,[Boolean(n)],void 0,e,r)})):n&&(0,i.p)("feat-"+t,[],void 0,void 0,r),u[t]=Boolean(n))})),Object.keys(s).forEach((e=>{void 0===u[e]&&(s[e]?.forEach((t=>(0,i.p)("rumresp-"+e,[!1],void 0,t,r))),u[e]=!1)})),(0,o.L)(t,a.D.pageViewEvent))}const u={}},2210:(e,t,r)=>{r.d(t,{X:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},1284:(e,t,r)=>{r.d(t,{D:()=>n});const n=(e,t)=>Object.entries(e||{}).map((e=>{let[r,n]=e;return t(r,n)}))},4351:(e,t,r)=>{r.d(t,{P:()=>o});var n=r(2177);const i=()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}};function o(e){try{return JSON.stringify(e,i())}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}}}},3960:(e,t,r)=>{r.d(t,{K:()=>a,b:()=>o});var n=r(3239);function i(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(i())return e();(0,n.bP)("load",e,t)}function a(e){if(i())return e();(0,n.iz)("DOMContentLoaded",e)}},8632:(e,t,r)=>{r.d(t,{EZ:()=>u,Qy:()=>c,ce:()=>o,fP:()=>a,gG:()=>d,mF:()=>s});var n=r(7894),i=r(385);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function a(){return i._A.NREUM||(i._A.NREUM={}),void 0===i._A.newrelic&&(i._A.newrelic=i._A.NREUM),i._A.NREUM}function s(){let e=a();return e.o||(e.o={ST:i._A.setTimeout,SI:i._A.setImmediate,CT:i._A.clearTimeout,XHR:i._A.XMLHttpRequest,REQ:i._A.Request,EV:i._A.Event,PR:i._A.Promise,MO:i._A.MutationObserver,FETCH:i._A.fetch}),e}function c(e,t,r){let i=a();const o=i.initializedAgents||{},s=o[e]||{};return Object.keys(s).length||(s.initializedAt={ms:(0,n.z)(),date:new Date}),i.initializedAgents={...o,[e]:{...s,[r]:t}},i}function u(e,t){a()[e]=t}function d(){return function(){let e=a();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=a();const t=e.init||{};e.init={...t}}(),s(),function(){let e=a();const t=e.loader_config||{};e.loader_config={...t}}(),a()}},7956:(e,t,r)=>{r.d(t,{N:()=>i});var n=r(3239);function i(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0;return void(0,n.iz)("visibilitychange",(function(){if(t)return void("hidden"==document.visibilityState&&e());e(document.visibilityState)}),r,i)}},1214:(e,t,r)=>{r.d(t,{em:()=>v,u5:()=>N,QU:()=>S,_L:()=>I,Gm:()=>L,Lg:()=>M,gy:()=>U,BV:()=>Q,Kf:()=>ee});var n=r(2177);const i="nr@original";var o=Object.prototype.hasOwnProperty,a=!1;function s(e,t){return e||(e=n.ee),r.inPlace=function(e,t,n,i,o){n||(n="");var a,s,c,u="-"===n.charAt(0);for(c=0;c 2?n-2:0),o=2;o {r(A[T],e,w),r(E[T],e,w)})),r(l._A,"fetch",y),t.on(y+"end",(function(e,r){var n=this;if(r){var i=r.headers.get("content-length");null!==i&&(n.rxSize=i),t.emit(y+"done",[null,r],n)}else t.emit(y+"done",[e],n)})),t}const O={},j=["pushState","replaceState"];function S(e){const t=function(e){return(e||n.ee).get("history")}(e);return!l.il||O[t.debugId]++||(O[t.debugId]=1,s(t).inPlace(window.history,j,"-")),t}var P=r(3239);const C={},R=["appendChild","insertBefore","replaceChild"];function I(e){const t=function(e){return(e||n.ee).get("jsonp")}(e);if(!l.il||C[t.debugId])return t;C[t.debugId]=!0;var r=s(t),i=/[?&](?:callback|cb)=([^&#]+)/,o=/(.*)\.([^.]+)/,a=/^(\w+)(\.|$)(.*)$/;function c(e,t){var r=e.match(a),n=r[1],i=r[3];return i?c(i,t[n]):t[n]}return r.inPlace(Node.prototype,R,"dom-"),t.on("dom-start",(function(e){!function(e){if(!e||"string"!=typeof e.nodeName||"script"!==e.nodeName.toLowerCase())return;if("function"!=typeof e.addEventListener)return;var n=(a=e.src,s=a.match(i),s?s[1]:null);var a,s;if(!n)return;var u=function(e){var t=e.match(o);if(t&&t.length>=3)return{key:t[2],parent:c(t[1],window)};return{key:e,parent:window}}(n);if("function"!=typeof u.parent[u.key])return;var d={};function f(){t.emit("jsonp-end",[],d),e.removeEventListener("load",f,(0,P.m$)(!1)),e.removeEventListener("error",l,(0,P.m$)(!1))}function l(){t.emit("jsonp-error",[],d),t.emit("jsonp-end",[],d),e.removeEventListener("load",f,(0,P.m$)(!1)),e.removeEventListener("error",l,(0,P.m$)(!1))}r.inPlace(u.parent,[u.key],"cb-",d),e.addEventListener("load",f,(0,P.m$)(!1)),e.addEventListener("error",l,(0,P.m$)(!1)),t.emit("new-jsonp",[e.src],d)}(e[0])})),t}var k=r(5763);const H={};function L(e){const t=function(e){return(e||n.ee).get("mutation")}(e);if(!l.il||H[t.debugId])return t;H[t.debugId]=!0;var r=s(t),i=k.Yu.MO;return i&&(window.MutationObserver=function(e){return this instanceof i?new i(r(e,"fn-")):i.apply(this,arguments)},MutationObserver.prototype=i.prototype),t}const z={};function M(e){const t=function(e){return(e||n.ee).get("promise")}(e);if(z[t.debugId])return t;z[t.debugId]=!0;var r=n.c,o=s(t),a=k.Yu.PR;return a&&function(){function e(r){var n=t.context(),i=o(r,"executor-",n,null,!1);const s=Reflect.construct(a,[i],e);return t.context(s).getCtx=function(){return n},s}l._A.Promise=e,Object.defineProperty(e,"name",{value:"Promise"}),e.toString=function(){return a.toString()},Object.setPrototypeOf(e,a),["all","race"].forEach((function(r){const n=a[r];e[r]=function(e){let i=!1;[...e||[]].forEach((e=>{this.resolve(e).then(a("all"===r),a(!1))}));const o=n.apply(this,arguments);return o;function a(e){return function(){t.emit("propagate",[null,!i],o,!1,!1),i=i||!e}}}})),["resolve","reject"].forEach((function(r){const n=a[r];e[r]=function(e){const r=n.apply(this,arguments);return e!==r&&t.emit("propagate",[e,!0],r,!1,!1),r}})),e.prototype=a.prototype;const n=a.prototype.then;a.prototype.then=function(){var e=this,i=r(e);i.promise=e;for(var a=arguments.length,s=new Array(a),c=0;c e())),t};function m(e,t){i.inPlace(t,["onreadystatechange"],"fn-",E)}function b(){var e=this,t=r.context(e);e.readyState>3&&!t.resolved&&(t.resolved=!0,r.emit("xhr-resolved",[],e)),i.inPlace(e,f,"fn-",E)}if(function(e,t){for(var r in e)t[r]=e[r]}(o,p),p.prototype=o.prototype,i.inPlace(p.prototype,J,"-xhr-",E),r.on("send-xhr-start",(function(e,t){m(e,t),function(e){h.push(e),a&&(y?y.then(A):u?u(A):(w=-w,x.data=w))}(t)})),r.on("open-xhr-start",m),a){var y=c&&c.resolve();if(!u&&!c){var w=1,x=document.createTextNode(w);new a(A).observe(x,{characterData:!0})}}else t.on("fn-end",(function(e){e[0]&&e[0].type===d||A()}));function A(){for(var e=0;e {r.d(t,{t:()=>n});const n=r(3325).D.ajax},6660:(e,t,r)=>{r.d(t,{A:()=>i,t:()=>n});const n=r(3325).D.jserrors,i="nr@seenError"},3081:(e,t,r)=>{r.d(t,{gF:()=>o,mY:()=>i,t9:()=>n,vz:()=>s,xS:()=>a});const n=r(3325).D.metrics,i="sm",o="cm",a="storeSupportabilityMetrics",s="storeEventMetrics"},4649:(e,t,r)=>{r.d(t,{t:()=>n});const n=r(3325).D.pageAction},7633:(e,t,r)=>{r.d(t,{Dz:()=>i,OJ:()=>a,qw:()=>o,t9:()=>n});const n=r(3325).D.pageViewEvent,i="firstbyte",o="domcontent",a="windowload"},9251:(e,t,r)=>{r.d(t,{t:()=>n});const n=r(3325).D.pageViewTiming},3614:(e,t,r)=>{r.d(t,{BST_RESOURCE:()=>i,END:()=>s,FEATURE_NAME:()=>n,FN_END:()=>u,FN_START:()=>c,PUSH_STATE:()=>d,RESOURCE:()=>o,START:()=>a});const n=r(3325).D.sessionTrace,i="bstResource",o="resource",a="-start",s="-end",c="fn"+a,u="fn"+s,d="pushState"},7836:(e,t,r)=>{r.d(t,{BODY:()=>A,CB_END:()=>E,CB_START:()=>u,END:()=>x,FEATURE_NAME:()=>i,FETCH:()=>_,FETCH_BODY:()=>v,FETCH_DONE:()=>m,FETCH_START:()=>p,FN_END:()=>c,FN_START:()=>s,INTERACTION:()=>l,INTERACTION_API:()=>d,INTERACTION_EVENTS:()=>o,JSONP_END:()=>b,JSONP_NODE:()=>g,JS_TIME:()=>T,MAX_TIMER_BUDGET:()=>a,REMAINING:()=>f,SPA_NODE:()=>h,START:()=>w,originalSetTimeout:()=>y});var n=r(5763);const i=r(3325).D.spa,o=["click","submit","keypress","keydown","keyup","change"],a=999,s="fn-start",c="fn-end",u="cb-start",d="api-ixn-",f="remaining",l="interaction",h="spaNode",g="jsonpNode",p="fetch-start",m="fetch-done",v="fetch-body-",b="jsonp-end",y=n.Yu.ST,w="-start",x="-end",A="-body",E="cb"+x,T="jsTime",_="fetch"},5938:(e,t,r)=>{r.d(t,{W:()=>o});var n=r(5763),i=r(2177);class o{constructor(e,t,r){this.agentIdentifier=e,this.aggregator=t,this.ee=i.ee.get(e,(0,n.OP)(this.agentIdentifier).isolatedBacklog),this.featureName=r,this.blocked=!1}}},9144:(e,t,r)=>{r.d(t,{j:()=>m});var n=r(3325),i=r(5763),o=r(5546),a=r(2177),s=r(7894),c=r(8e3),u=r(3960),d=r(385),f=r(50),l=r(3081),h=r(8632);function g(){const e=(0,h.gG)();["setErrorHandler","finished","addToTrace","inlineHit","addRelease","addPageAction","setCurrentRouteName","setPageViewName","setCustomAttribute","interaction","noticeError","setUserId"].forEach((t=>{e[t]=function(){for(var r=arguments.length,n=new Array(r),i=0;i 1?r-1:0),i=1;i {e.exposed&&e.api[t]&&o.push(e.api[t](...n))})),o.length>1?o:o[0]}(t,...n)}}))}var p=r(2587);function m(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},m=arguments.length>2?arguments[2]:void 0,v=arguments.length>3?arguments[3]:void 0,{init:b,info:y,loader_config:w,runtime:x={loaderType:m},exposed:A=!0}=t;const E=(0,h.gG)();y||(b=E.init,y=E.info,w=E.loader_config),(0,i.Dg)(e,b||{}),(0,i.GE)(e,w||{}),(0,i.sU)(e,x),y.jsAttributes??={},d.v6&&(y.jsAttributes.isWorker=!0),(0,i.CX)(e,y),g();const T=function(e,t){t||(0,c.R)(e,"api");const h={};var g=a.ee.get(e),p=g.get("tracer"),m="api-",v=m+"ixn-";function b(t,r,n,o){const a=(0,i.C5)(e);return null===r?delete a.jsAttributes[t]:(0,i.CX)(e,{...a,jsAttributes:{...a.jsAttributes,[t]:r}}),x(m,n,!0,o||null===r?"session":void 0)(t,r)}function y(){}["setErrorHandler","finished","addToTrace","inlineHit","addRelease"].forEach((e=>h[e]=x(m,e,!0,"api"))),h.addPageAction=x(m,"addPageAction",!0,n.D.pageAction),h.setCurrentRouteName=x(m,"routeName",!0,n.D.spa),h.setPageViewName=function(t,r){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),(0,i.OP)(e).customTransaction=(r||"http://custom.transaction")+t,x(m,"setPageViewName",!0)()},h.setCustomAttribute=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof e){if(["string","number"].includes(typeof t)||null===t)return b(e,t,"setCustomAttribute",r);(0,f.Z)("Failed to execute setCustomAttribute.\nNon-null value must be a string or number type, but a type of was provided."))}else(0,f.Z)("Failed to execute setCustomAttribute.\nName must be a string type, but a type of was provided."))},h.setUserId=function(e){if("string"==typeof e||null===e)return b("enduser.id",e,"setUserId",!0);(0,f.Z)("Failed to execute setUserId.\nNon-null value must be a string type, but a type of was provided."))},h.interaction=function(){return(new y).get()};var w=y.prototype={createTracer:function(e,t){var r={},i=this,a="function"==typeof t;return(0,o.p)(v+"tracer",[(0,s.z)(),e,r],i,n.D.spa,g),function(){if(p.emit((a?"":"no-")+"fn-start",[(0,s.z)(),i,a],r),a)try{return t.apply(this,arguments)}catch(e){throw p.emit("fn-err",[arguments,this,"string"==typeof e?new Error(e):e],r),e}finally{p.emit("fn-end",[(0,s.z)()],r)}}}};function x(e,t,r,i){return function(){return(0,o.p)(l.xS,["API/"+t+"/called"],void 0,n.D.metrics,g),i&&(0,o.p)(e+t,[(0,s.z)(),...arguments],r?null:this,i,g),r?void 0:this}}function A(){r.e(439).then(r.bind(r,7438)).then((t=>{let{setAPI:r}=t;r(e),(0,c.L)(e,"api")})).catch((()=>(0,f.Z)("Downloading runtime APIs failed...")))}return["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach((e=>{w[e]=x(v,e,void 0,n.D.spa)})),h.noticeError=function(e,t){"string"==typeof e&&(e=new Error(e)),(0,o.p)(l.xS,["API/noticeError/called"],void 0,n.D.metrics,g),(0,o.p)("err",[e,(0,s.z)(),!1,t],void 0,n.D.jserrors,g)},d.il?(0,u.b)((()=>A()),!0):A(),h}(e,v);return(0,h.Qy)(e,T,"api"),(0,h.Qy)(e,A,"exposed"),(0,h.EZ)("activatedFeatures",p.T),T}},3325:(e,t,r)=>{r.d(t,{D:()=>n,p:()=>i});const n={ajax:"ajax",jserrors:"jserrors",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",spa:"spa"},i={[n.pageViewEvent]:1,[n.pageViewTiming]:2,[n.metrics]:3,[n.jserrors]:4,[n.ajax]:5,[n.sessionTrace]:6,[n.pageAction]:7,[n.spa]:8,[n.sessionReplay]:9}}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var o=n[e]={exports:{}};return r[e](o,o.exports,i),o.exports}i.m=r,i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>(({78:"page_action-aggregate",147:"metrics-aggregate",242:"session-manager",317:"jserrors-aggregate",348:"page_view_timing-aggregate",412:"lazy-feature-loader",439:"async-api",538:"recorder",590:"session_replay-aggregate",675:"compressor",733:"session_trace-aggregate",786:"page_view_event-aggregate",873:"spa-aggregate",898:"ajax-aggregate"}[e]||e)+"."+{78:"ac76d497",147:"3dc53903",148:"1a20d5fe",242:"2a64278a",317:"49e41428",348:"bd6de33a",412:"2f55ce66",439:"30bd804e",538:"1b18459f",590:"cf0efb30",675:"ae9f91a8",733:"83105561",786:"06482edd",860:"03a8b7a5",873:"e6b09d52",898:"998ef92b"}[e]+"-1.236.0.min.js"),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA:",i.l=(r,n,o,a)=>{if(e[r])e[r].push(n);else{var s,c;if(void 0!==o)for(var u=document.getElementsByTagName("script"),d=0;d {s.onerror=s.onload=null,clearTimeout(h);var i=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),i&&i.forEach((e=>e(n))),t)return t(n)},h=setTimeout(l.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=l.bind(null,s.onerror),s.onload=l.bind(null,s.onload),c&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.j=364,i.p="https://js-agent.newrelic.com/",(()=>{var e={364:0,953:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,i)=>n=e[t]=[r,i]));r.push(n[2]=o);var a=i.p+i.u(t),s=new Error;i.l(a,(r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",s.name="ChunkLoadError",s.type=o,s.request=a,n[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[a,s,c]=r,u=0;if(a.some((t=>0!==e[t]))){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);if(c)c(i)}for(t&&t(r);u {i.r(o);var e=i(3325),t=i(5763);const r=Object.values(e.D);function n(e){const n={};return r.forEach((r=>{n[r]=function(e,r){return!1!==(0,t.Mt)(r,"".concat(e,".enabled"))}(r,e)})),n}var a=i(9144);var s=i(5546),c=i(385),u=i(8e3),d=i(5938),f=i(3960),l=i(50);class h extends d.W{constructor(e,t,r){let n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];super(e,t,r),this.auto=n,this.abortHandler,this.featAggregate,this.onAggregateImported,n&&(0,u.R)(e,r)}importAggregator(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(this.featAggregate||!this.auto)return;const r=c.il&&!0===(0,t.Mt)(this.agentIdentifier,"privacy.cookies_enabled");let n;this.onAggregateImported=new Promise((e=>{n=e}));const o=async()=>{let t;try{if(r){const{setupAgentSession:e}=await Promise.all([i.e(860),i.e(242)]).then(i.bind(i,3228));t=e(this.agentIdentifier)}}catch(e){(0,l.Z)("A problem occurred when starting up session manager. This page will not start or extend any session.",e)}try{if(!this.shouldImportAgg(this.featureName,t))return void(0,u.L)(this.agentIdentifier,this.featureName);const{lazyFeatureLoader:r}=await i.e(412).then(i.bind(i,8582)),{Aggregate:o}=await r(this.featureName,"aggregate");this.featAggregate=new o(this.agentIdentifier,this.aggregator,e),n(!0)}catch(e){(0,l.Z)("Downloading and initializing ".concat(this.featureName," failed..."),e),this.abortHandler?.(),n(!1)}};c.il?(0,f.b)((()=>o()),!0):o()}shouldImportAgg(r,n){return r!==e.D.sessionReplay||!1!==(0,t.Mt)(this.agentIdentifier,"session_trace.enabled")&&(!!n?.isNew||!!n?.state.sessionReplay)}}var g=i(7633),p=i(7894);class m extends h{static featureName=g.t9;constructor(r,n){let i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(super(r,n,g.t9,i),("undefined"==typeof PerformanceNavigationTiming||c.Tt)&&"undefined"!=typeof PerformanceTiming){const n=(0,t.OP)(r);n[g.Dz]=Math.max(Date.now()-n.offset,0),(0,f.K)((()=>n[g.qw]=Math.max((0,p.z)()-n[g.Dz],0))),(0,f.b)((()=>{const t=(0,p.z)();n[g.OJ]=Math.max(t-n[g.Dz],0),(0,s.p)("timing",["load",t],void 0,e.D.pageViewTiming,this.ee)}))}this.importAggregator()}}var v=i(1117),b=i(1284);class y extends v.w{constructor(e){super(e),this.aggregatedData={}}store(e,t,r,n,i){var o=this.getBucket(e,t,r,i);return o.metrics=function(e,t){t||(t={count:0});return t.count+=1,(0,b.D)(e,(function(e,r){t[e]=w(r,t[e])})),t}(n,o.metrics),o}merge(e,t,r,n,i){var o=this.getBucket(e,t,n,i);if(o.metrics){var a=o.metrics;a.count+=r.count,(0,b.D)(r,(function(e,t){if("count"!==e){var n=a[e],i=r[e];i&&!i.c?a[e]=w(i.t,n):a[e]=function(e,t){if(!t)return e;t.c||(t=x(t.t));return t.min=Math.min(e.min,t.min),t.max=Math.max(e.max,t.max),t.t+=e.t,t.sos+=e.sos,t.c+=e.c,t}(i,a[e])}}))}else o.metrics=r}storeMetric(e,t,r,n){var i=this.getBucket(e,t,r);return i.stats=w(n,i.stats),i}getBucket(e,t,r,n){this.aggregatedData[e]||(this.aggregatedData[e]={});var i=this.aggregatedData[e][t];return i||(i=this.aggregatedData[e][t]={params:r||{}},n&&(i.custom=n)),i}get(e,t){return t?this.aggregatedData[e]&&this.aggregatedData[e][t]:this.aggregatedData[e]}take(e){for(var t={},r="",n=!1,i=0;i t.max&&(t.max=e),e 2&&void 0!==arguments[2])||arguments[2];super(e,r,j.t,n),c.il&&((0,t.OP)(e).initHidden=Boolean("hidden"===document.visibilityState),(0,N.N)((()=>(0,s.p)("docHidden",[(0,p.z)()],void 0,j.t,this.ee)),!0),(0,O.bP)("pagehide",(()=>(0,s.p)("winPagehide",[(0,p.z)()],void 0,j.t,this.ee))),this.importAggregator())}}var P=i(3081);class C extends h{static featureName=P.t9;constructor(e,t){let r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];super(e,t,P.t9,r),this.importAggregator()}}var R,I=i(2210),k=i(1214),H=i(2177),L={};try{R=localStorage.getItem("__nr_flags").split(","),console&&"function"==typeof console.log&&(L.console=!0,-1!==R.indexOf("dev")&&(L.dev=!0),-1!==R.indexOf("nr_dev")&&(L.nrDev=!0))}catch(e){}function z(e){try{L.console&&z(e)}catch(e){}}L.nrDev&&H.ee.on("internal-error",(function(e){z(e.stack)})),L.dev&&H.ee.on("fn-err",(function(e,t,r){z(r.stack)})),L.dev&&(z("NR AGENT IN DEVELOPMENT MODE"),z("flags: "+(0,b.D)(L,(function(e,t){return e})).join(", ")));var M=i(6660);class B extends h{static featureName=M.t;constructor(r,n){let i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];super(r,n,M.t,i),this.skipNext=0;try{this.removeOnAbort=new AbortController}catch(e){}const o=this;o.ee.on("fn-start",(function(e,t,r){o.abortHandler&&(o.skipNext+=1)})),o.ee.on("fn-err",(function(t,r,n){o.abortHandler&&!n[M.A]&&((0,I.X)(n,M.A,(function(){return!0})),this.thrown=!0,(0,s.p)("err",[n,(0,p.z)()],void 0,e.D.jserrors,o.ee))})),o.ee.on("fn-end",(function(){o.abortHandler&&!this.thrown&&o.skipNext>0&&(o.skipNext-=1)})),o.ee.on("internal-error",(function(t){(0,s.p)("ierr",[t,(0,p.z)(),!0],void 0,e.D.jserrors,o.ee)})),this.origOnerror=c._A.onerror,c._A.onerror=this.onerrorHandler.bind(this),c._A.addEventListener("unhandledrejection",(t=>{const r=function(e){let t="Unhandled Promise Rejection: ";if(e instanceof Error)try{return e.message=t+e.message,e}catch(t){return e}if(void 0===e)return new Error(t);try{return new Error(t+(0,D.P)(e))}catch(e){return new Error(t)}}(t.reason);(0,s.p)("err",[r,(0,p.z)(),!1,{unhandledPromiseRejection:1}],void 0,e.D.jserrors,this.ee)}),(0,O.m$)(!1,this.removeOnAbort?.signal)),(0,k.gy)(this.ee),(0,k.BV)(this.ee),(0,k.em)(this.ee),(0,t.OP)(r).xhrWrappable&&(0,k.Kf)(this.ee),this.abortHandler=this.#e,this.importAggregator()}#e(){this.removeOnAbort?.abort(),this.abortHandler=void 0}onerrorHandler(t,r,n,i,o){"function"==typeof this.origOnerror&&this.origOnerror(...arguments);try{this.skipNext?this.skipNext-=1:(0,s.p)("err",[o||new F(t,r,n),(0,p.z)()],void 0,e.D.jserrors,this.ee)}catch(t){try{(0,s.p)("ierr",[t,(0,p.z)(),!0],void 0,e.D.jserrors,this.ee)}catch(e){}}return!1}}function F(e,t,r){this.message=e||"Uncaught error with no additional information",this.sourceURL=t,this.line=r}let U=1;const q="nr@id";function G(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===c._A?0:(0,I.X)(e,q,(function(){return U++}))}function V(e){if("string"==typeof e&&e.length)return e.length;if("object"==typeof e){if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer&&e.byteLength)return e.byteLength;if("undefined"!=typeof Blob&&e instanceof Blob&&e.size)return e.size;if(!("undefined"!=typeof FormData&&e instanceof FormData))try{return(0,D.P)(e).length}catch(e){return}}}var X=i(7243);class W{constructor(e){this.agentIdentifier=e,this.generateTracePayload=this.generateTracePayload.bind(this),this.shouldGenerateTrace=this.shouldGenerateTrace.bind(this)}generateTracePayload(e){if(!this.shouldGenerateTrace(e))return null;var r=(0,t.DL)(this.agentIdentifier);if(!r)return null;var n=(r.accountID||"").toString()||null,i=(r.agentID||"").toString()||null,o=(r.trustKey||"").toString()||null;if(!n||!i)return null;var a=(0,_.M)(),s=(0,_.Ht)(),c=Date.now(),u={spanId:a,traceId:s,timestamp:c};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(u.traceContextParentHeader=this.generateTraceContextParentHeader(a,s),u.traceContextStateHeader=this.generateTraceContextStateHeader(a,c,n,i,o)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(u.newrelicHeader=this.generateTraceHeader(a,s,c,n,i,o)),u}generateTraceContextParentHeader(e,t){return"00-"+t+"-"+e+"-01"}generateTraceContextStateHeader(e,t,r,n,i){return i+"@nr=0-1-"+r+"-"+n+"-"+e+"----"+t}generateTraceHeader(e,t,r,n,i,o){if(!("function"==typeof c._A?.btoa))return null;var a={v:[0,1],d:{ty:"Browser",ac:n,ap:i,id:e,tr:t,ti:r}};return o&&n!==o&&(a.d.tk=o),btoa((0,D.P)(a))}shouldGenerateTrace(e){return this.isDtEnabled()&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var r=!1,n={};if((0,t.Mt)(this.agentIdentifier,"distributed_tracing")&&(n=(0,t.P_)(this.agentIdentifier).distributed_tracing),e.sameOrigin)r=!0;else if(n.allowed_origins instanceof Array)for(var i=0;i 2&&void 0!==arguments[2])||arguments[2];super(r,n,Z.t,i),(0,t.OP)(r).xhrWrappable&&(this.dt=new W(r),this.handler=(e,t,r,n)=>(0,s.p)(e,t,r,n,this.ee),(0,k.u5)(this.ee),(0,k.Kf)(this.ee),function(r,n,i,o){function a(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=E,t.ended=!1,t.xhrGuids={},t.lastSize=null,t.loadCaptureCalled=!1,t.params=this.params||{},t.metrics=this.metrics||{},e.addEventListener("load",(function(r){_(t,e)}),(0,O.m$)(!1)),c.IF||e.addEventListener("progress",(function(e){t.lastSize=e.loaded}),(0,O.m$)(!1))}function s(e){this.params={method:e[0]},T(this,e[1]),this.metrics={}}function u(e,n){var i=(0,t.DL)(r);i.xpid&&this.sameOrigin&&n.setRequestHeader("X-NewRelic-ID",i.xpid);var a=o.generateTracePayload(this.parsedOrigin);if(a){var s=!1;a.newrelicHeader&&(n.setRequestHeader("newrelic",a.newrelicHeader),s=!0),a.traceContextParentHeader&&(n.setRequestHeader("traceparent",a.traceContextParentHeader),a.traceContextStateHeader&&n.setRequestHeader("tracestate",a.traceContextStateHeader),s=!0),s&&(this.dt=a)}}function d(e,t){var r=this.metrics,i=e[0],o=this;if(r&&i){var a=V(i);a&&(r.txSize=a)}this.startTime=(0,p.z)(),this.listener=function(e){try{"abort"!==e.type||o.loadCaptureCalled||(o.params.aborted=!0),("load"!==e.type||o.called===o.totalCbs&&(o.onloadCalled||"function"!=typeof t.onload)&&"function"==typeof o.end)&&o.end(t)}catch(e){try{n.emit("internal-error",[e])}catch(e){}}};for(var s=0;s 1?e[1]=i:e.push(i)}else e[0]&&e[0].headers&&s(e[0].headers,n)&&(this.dt=n);function s(e,t){var r=!1;return t.newrelicHeader&&(e.set("newrelic",t.newrelicHeader),r=!0),t.traceContextParentHeader&&(e.set("traceparent",t.traceContextParentHeader),t.traceContextStateHeader&&e.set("tracestate",t.traceContextStateHeader),r=!0),r}}function x(e,t){this.params={},this.metrics={},this.startTime=(0,p.z)(),this.dt=t,e.length>=1&&(this.target=e[0]),e.length>=2&&(this.opts=e[1]);var r,n=this.opts||{},i=this.target;"string"==typeof i?r=i:"object"==typeof i&&i instanceof Y?r=i.url:c._A?.URL&&"object"==typeof i&&i instanceof URL&&(r=i.href),T(this,r);var o=(""+(i&&i instanceof Y&&i.method||n.method||"GET")).toUpperCase();this.params.method=o,this.txSize=V(n.body)||0}function A(t,r){var n;this.endTime=(0,p.z)(),this.params||(this.params={}),this.params.status=r?r.status:0,"string"==typeof this.rxSize&&this.rxSize.length>0&&(n=+this.rxSize);var o={txSize:this.txSize,rxSize:n,duration:(0,p.z)()-this.startTime};i("xhr",[this.params,o,this.startTime,this.endTime,"fetch"],this,e.D.ajax)}function E(t){var r=this.params,n=this.metrics;if(!this.ended){this.ended=!0;for(var o=0;o 2&&void 0!==arguments[2])||arguments[2];super(e,t,we.t,r),this.importAggregator()}}new class{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,_.ky)(16);c._A?(this.agentIdentifier=t,this.sharedAggregator=new y({agentIdentifier:this.agentIdentifier}),this.features={},this.desiredFeatures=new Set(e.features||[]),this.desiredFeatures.add(m),Object.assign(this,(0,a.j)(this.agentIdentifier,e,e.loaderType||"agent")),this.start()):(0,l.Z)("Failed to initial the agent. Could not determine the runtime environment.")}get config(){return{info:(0,t.C5)(this.agentIdentifier),init:(0,t.P_)(this.agentIdentifier),loader_config:(0,t.DL)(this.agentIdentifier),runtime:(0,t.OP)(this.agentIdentifier)}}start(){const t="features";try{const r=n(this.agentIdentifier),i=[...this.desiredFeatures];i.sort(((t,r)=>e.p[t.featureName]-e.p[r.featureName])),i.forEach((t=>{if(r[t.featureName]||t.featureName===e.D.pageViewEvent){const n=function(t){switch(t){case e.D.ajax:return[e.D.jserrors];case e.D.sessionTrace:return[e.D.ajax,e.D.pageViewEvent];case e.D.sessionReplay:return[e.D.sessionTrace];case e.D.pageViewTiming:return[e.D.pageViewEvent];default:return[]}}(t.featureName);n.every((e=>r[e]))||(0,l.Z)("".concat(t.featureName," is enabled but one or more dependent features has been disabled (").concat((0,D.P)(n),"). This may cause unintended consequences or missing data...")),this.features[t.featureName]=new t(this.agentIdentifier,this.sharedAggregator)}})),(0,T.Qy)(this.agentIdentifier,this.features,t)}catch(e){(0,l.Z)("Failed to initialize all enabled instrument classes (agent aborted) -",e);for(const e in this.features)this.features[e].abortHandler?.();const r=(0,T.fP)();return delete r.initializedAgents[this.agentIdentifier]?.api,delete r.initializedAgents[this.agentIdentifier]?.[t],delete this.sharedAggregator,r.ee?.abort(),delete r.ee?.get(this.agentIdentifier),!1}}}({features:[J,m,S,class extends h{static featureName=oe;constructor(t,r){if(super(t,r,oe,!(arguments.length>2&&void 0!==arguments[2])||arguments[2]),!c.il)return;const n=this.ee;let i;(0,k.QU)(n),this.eventsEE=(0,k.em)(n),this.eventsEE.on(se,(function(e,t){this.bstStart=(0,p.z)()})),this.eventsEE.on(ae,(function(t,r){(0,s.p)("bst",[t[0],r,this.bstStart,(0,p.z)()],void 0,e.D.sessionTrace,n)})),n.on(ce+ne,(function(e){this.time=(0,p.z)(),this.startPath=location.pathname+location.hash})),n.on(ce+ie,(function(t){(0,s.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,e.D.sessionTrace,n)}));try{i=new PerformanceObserver((t=>{const r=t.getEntries();(0,s.p)(te,[r],void 0,e.D.sessionTrace,n)})),i.observe({type:re,buffered:!0})}catch(e){}this.importAggregator({resourceObserver:i})}},C,xe,B,class extends h{static featureName=de;constructor(e,r){if(super(e,r,de,!(arguments.length>2&&void 0!==arguments[2])||arguments[2]),!c.il)return;if(!(0,t.OP)(e).xhrWrappable)return;try{this.removeOnAbort=new AbortController}catch(e){}let n,i=0;const o=this.ee.get("tracer"),a=(0,k._L)(this.ee),s=(0,k.Lg)(this.ee),u=(0,k.BV)(this.ee),d=(0,k.Kf)(this.ee),f=this.ee.get("events"),l=(0,k.u5)(this.ee),h=(0,k.QU)(this.ee),g=(0,k.Gm)(this.ee);function m(e,t){h.emit("newURL",[""+window.location,t])}function v(){i++,n=window.location.hash,this[ve]=(0,p.z)()}function b(){i--,window.location.hash!==n&&m(0,!0);var e=(0,p.z)();this[pe]=~~this[pe]+e-this[ve],this[ye]=e}function y(e,t){e.on(t,(function(){this[t]=(0,p.z)()}))}this.ee.on(ve,v),s.on(be,v),a.on(be,v),this.ee.on(ye,b),s.on(ge,b),a.on(ge,b),this.ee.buffer([ve,ye,"xhr-resolved"],this.featureName),f.buffer([ve],this.featureName),u.buffer(["setTimeout"+le,"clearTimeout"+fe,ve],this.featureName),d.buffer([ve,"new-xhr","send-xhr"+fe],this.featureName),l.buffer([me+fe,me+"-done",me+he+fe,me+he+le],this.featureName),h.buffer(["newURL"],this.featureName),g.buffer([ve],this.featureName),s.buffer(["propagate",be,ge,"executor-err","resolve"+fe],this.featureName),o.buffer([ve,"no-"+ve],this.featureName),a.buffer(["new-jsonp","cb-start","jsonp-error","jsonp-end"],this.featureName),y(l,me+fe),y(l,me+"-done"),y(a,"new-jsonp"),y(a,"jsonp-end"),y(a,"cb-start"),h.on("pushState-end",m),h.on("replaceState-end",m),window.addEventListener("hashchange",m,(0,O.m$)(!0,this.removeOnAbort?.signal)),window.addEventListener("load",m,(0,O.m$)(!0,this.removeOnAbort?.signal)),window.addEventListener("popstate",(function(){m(0,i>1)}),(0,O.m$)(!0,this.removeOnAbort?.signal)),this.abortHandler=this.#e,this.importAggregator()}#e(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}],loaderType:"spa"})})(),window.NRBA=o})(); window.jQuery || document.write(' ') CKEDITOR_BASEPATH='https://f1000research.com/js/vendor/ckeditor/' window.reactTheme = 'research'; window.MathJax = { CommonHTML: { linebreaks: { automatic: true } }, 'HTML-CSS': { linebreaks: { automatic: true } }, SVG: { linebreaks: { automatic: true } }, AuthorInit: function() { MathJax.Hub.Register.MessageHook('End Process', function () { let timeout = false; // holder for timeout id const delay = 250; // delay after event is "complete" to run callback const reflowMath = function() { const dispFormulas = document.querySelectorAll('.disp-formula.panel'); if (!dispFormulas) { return; } for (const dispFormula of dispFormulas) { const child = dispFormula.querySelector('.MathJax_Preview').nextSibling.firstChild; const isMultiline = MathJax.Hub.getAllJax(dispFormula)[0].root.isMultiline; if (dispFormula.offsetWidth < child.offsetWidth || isMultiline) { MathJax.Hub.Queue(['Rerender', MathJax.Hub, dispFormula]); } } }; window.addEventListener('resize', function() { clearTimeout(timeout); // clear the timeout timeout = setTimeout(reflowMath, delay); // start timing for event "completion" }); }); }, }; if (window.location.hash == '#_=_'){ window.location = window.location.href.split('#')[0] } !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function() {n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)} ;if(!f._fbq)f._fbq=n; n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js'); fbq('init', '1641728616063202'); fbq('track', "PixelInitialized", {}); (function(h,o,t,j,a,r){ h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)}; h._hjSettings={hjid:2318163,hjsv:6}; a=o.getElementsByTagName('head')[0]; r=o.createElement('script');r.async=1; r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv; a.appendChild(r); })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv='); search file_upload Submit your research search menu close search Browse Gateways & Collections How to Publish Submit your Research My Submissions Article Guidelines Article Guidelines (New Versions) Open Data, Software and Code Guidelines Open Data and Accessible Source Materials Guidelines (HSS) Open Data, Software and Code Guidelines (PSE) Prepublication Checks Production Process Posters and Slides Guidelines Document Guidelines Article Processing Charges Peer Review Finding Article Reviewers About How it Works For Reviewers Our Advisors Policies Glossary FAQs For Developers Newsroom Contact My Research Submissions Content and Tracking Alerts My Details Sign In file_upload Submit your research { "@context": "https://schema.org", "@type": "ScholarlyArticle", "mainEntityOfPage": { "@type": "WebPage", "@id": "https://f1000research.com/articles/14-87" }, "headline": "Facilitating bootstrapped and rarefaction-based microbiome diversity analysis with q2-boots", "datePublished": "2025-01-15T14:56:55", "dateModified": "2025-01-15T14:56:55", "author": [ { "@type": "Person", "name": "Isaiah Raspet" }, { "@type": "Person", "name": "Elizabeth Gehret" }, { "@type": "Person", "name": "Chloe Herman" }, { "@type": "Person", "name": "Jeff Meilander" }, { "@type": "Person", "name": "Andrew Manley" }, { "@type": "Person", "name": "Anthony Simard" }, { "@type": "Person", "name": "Evan Bolyen" }, { "@type": "Person", "name": "J Gregory Caporaso" } ], "publisher": { "@type": "Organization", "name": "F1000Research", "logo": { "@type": "ImageObject", "url": "https://f1000research.com/img/AMP/F1000Research_image.png", "height": 480, "width": 60 } }, "image": { "@type": "ImageObject", "url": "https://f1000research.com/img/AMP/F1000Research_image.png", "height": 1200, "width": 150 }, "description": " Background We present q2-boots, a QIIME 2 plugin that facilitates bootstrapped and rarefaction-based microbiome diversity analysis. This plugin provides eight new actions that allow users to apply any of thirty different alpha diversity metrics and twenty-two beta diversity metrics to bootstrapped or rarefied feature tables, using a single QIIME 2 Pipeline command, or more granular QIIME 2 Action commands. Results Given a feature table, an even sampling depth, and the number of iterations to perform (n), the command qiime boots core-metrics will resample the feature table n times and compute alpha and beta diversity metrics on each resampled table. The results will be integrated in summary data artifacts that are identical in structure and type to results that would be generated by applying diversity metrics to a single table. This enables all the same downstream analytic tools to be applied to these tables and ensures that all collected data is considered when computing microbiome diversity metrics. Conclusions A challenge of this work was deciding how to integrate distance matrices that were computed on n resampled feature tables, as a simple average of pairwise distances (median or mean) does not account for the structure of distance matrices. q2-boots provides three options, and we show here that the results of these approaches are highly correlated. q2-boots is free and open source. Source code can be found at https://github.com/caporaso-lab/q2-boots; installation instructions and a tutorial can be found in the project’s documentation at https://q2-boots.readthedocs.io. " } { "@context": "http://schema.org", "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": "1", "item": { "@id": "https://f1000research.com/", "name": "Home" } }, { "@type": "ListItem", "position": "2", "item": { "@id": "https://f1000research.com/browse/articles", "name": "Browse" } }, { "@type": "ListItem", "position": "3", "item": { "@id": "https://f1000research.com/articles/14-87", "name": "Facilitating bootstrapped and rarefaction-based microbiome diversity..." } } ] } Home Browse Facilitating bootstrapped and rarefaction-based microbiome diversity... ALL Metrics - Views Downloads Get PDF Get XML Cite How to cite this article Raspet I, Gehret E, Herman C et al. Facilitating bootstrapped and rarefaction-based microbiome diversity analysis with q2-boots [version 1; peer review: 1 approved, 2 approved with reservations] . F1000Research 2025, 14 :87 ( https://doi.org/10.12688/f1000research.156295.1 ) NOTE: If applicable, it is important to ensure the information in square brackets after the title is included in all citations of this article. Close Copy Citation Details Export Export Citation Sciwheel EndNote Ref. Manager Bibtex ProCite Sente EXPORT Select a format first Track Share ▬ ✚ Software Tool Article Facilitating bootstrapped and rarefaction-based microbiome diversity analysis with q2-boots [version 1; peer review: 1 approved, 2 approved with reservations] Isaiah Raspet 1,2 , Elizabeth Gehret 1 , Chloe Herman 1,2 , [...] Jeff Meilander https://orcid.org/0009-0005-4519-1896 1 , Andrew Manley 1 , Anthony Simard 1 , Evan Bolyen 1 , J Gregory Caporaso https://orcid.org/0000-0002-8865-1670 1,2 Isaiah Raspet 1,2 , Elizabeth Gehret 1 , [...] Chloe Herman 1,2 , Jeff Meilander https://orcid.org/0009-0005-4519-1896 1 , Andrew Manley 1 , Anthony Simard 1 , Evan Bolyen 1 , J Gregory Caporaso https://orcid.org/0000-0002-8865-1670 1,2 PUBLISHED 15 Jan 2025 Author details Author details 1 Pathogen and Microbiome Institute, Northern Arizona University, Flagstaff, Arizona, 86011, USA 2 School of Informatics, Computing and Cyber Systems, Northern Arizona University, Flagstaff, Arizona, 86011, USA Isaiah Raspet Roles: Software, Writing – Original Draft Preparation Elizabeth Gehret Roles: Supervision, Writing – Review & Editing Chloe Herman Roles: Supervision, Validation, Writing – Review & Editing Jeff Meilander Roles: Data Curation, Validation Andrew Manley Roles: Validation, Writing – Review & Editing Anthony Simard Roles: Software, Supervision, Writing – Review & Editing Evan Bolyen Roles: Conceptualization, Software, Supervision, Writing – Review & Editing J Gregory Caporaso Roles: Conceptualization, Software, Supervision, Validation, Writing – Original Draft Preparation, Writing – Review & Editing OPEN PEER REVIEW DETAILS REVIEWER STATUS Abstract Background We present q2-boots, a QIIME 2 plugin that facilitates bootstrapped and rarefaction-based microbiome diversity analysis. This plugin provides eight new actions that allow users to apply any of thirty different alpha diversity metrics and twenty-two beta diversity metrics to bootstrapped or rarefied feature tables, using a single QIIME 2 Pipeline command, or more granular QIIME 2 Action commands. Results Given a feature table, an even sampling depth, and the number of iterations to perform (n), the command qiime boots core-metrics will resample the feature table n times and compute alpha and beta diversity metrics on each resampled table. The results will be integrated in summary data artifacts that are identical in structure and type to results that would be generated by applying diversity metrics to a single table. This enables all the same downstream analytic tools to be applied to these tables and ensures that all collected data is considered when computing microbiome diversity metrics. Conclusions A challenge of this work was deciding how to integrate distance matrices that were computed on n resampled feature tables, as a simple average of pairwise distances (median or mean) does not account for the structure of distance matrices. q2-boots provides three options, and we show here that the results of these approaches are highly correlated. q2-boots is free and open source. Source code can be found at https://github.com/caporaso-lab/q2-boots; installation instructions and a tutorial can be found in the project’s documentation at https://q2-boots.readthedocs.io. READ ALL READ LESS Keywords microbiome, rarefaction, bootstrap, QIIME 2 Corresponding Author(s) J Gregory Caporaso ( [email protected] ) Close Corresponding author: J Gregory Caporaso Competing interests: EB and JGC are co-founders and hold equity in Cymis Benefit Corporation, a biological data science software company. Grant information: This work was funded in part by the National Cancer Institute grant 1U24CA248454-01 to JGC. The funders had no role in study design, data collection and analysis, decision to publish, or preparation of the manuscript. Copyright: © 2025 Raspet I et al . This is an open access article distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. How to cite: Raspet I, Gehret E, Herman C et al. Facilitating bootstrapped and rarefaction-based microbiome diversity analysis with q2-boots [version 1; peer review: 1 approved, 2 approved with reservations] . F1000Research 2025, 14 :87 ( https://doi.org/10.12688/f1000research.156295.1 ) First published: 15 Jan 2025, 14 :87 ( https://doi.org/10.12688/f1000research.156295.1 ) Latest published: 15 Jan 2025, 14 :87 ( https://doi.org/10.12688/f1000research.156295.1 ) Background Two recent papers 1 , 2 have brought discussion about rarefaction back into focus in microbiome diversity analysis. Inspired by this work we developed q2-boots, a new QIIME 2 3 plugin that facilitates bootstrapped and rarefaction-based diversity analysis for microbiome researchers and data scientists. While rarefaction analysis has always been possible in QIIME 2, the diversity analysis workflow that most users consider the default (i.e., running qiime diversity core-metrics , or qiime diversity core-metrics-phylogenetic ) only includes a single step of rarefying the input feature table to a user-specified sequencing depth. Other workflows, such as qiime diversity alpha-rarefaction and qiime diversity beta-rarefaction , enable rarefaction analysis (i.e., multiple iterations of rarefying the input feature table and comparison of the diversity metrics computed on each of the rarefied tables), but because these result in terminal QIIME 2 Visualizations, rather than QIIME 2 Artifacts that can be used in downstream steps such as statistical analysis, performing analysis on rarefaction data in QIIME 2 is currently not common in practice. Implementation q2-boots was designed to serve as a stand-in replacement for the widely used q2-diversity plugin. It provides eight new Actions (i.e., qiime2.Action objects) that broadly fall into four categories: resampling ( Figure 1 ), the alpha diversity suite of Actions ( Figure 2 ), the beta diversity suite of Actions ( Figure 3 ), and the core metrics Pipeline. Figure 1. q2-boots workflow for resampling a feature table with or without replacement. Figure 2. q2-boots workflow for performing alpha diversity analysis, integrating resampling. Figure 3. q2-boots workflow for performing beta diversity analysis, integrating resampling. The computationally expensive steps of the q2-boots plugin (i.e., resampling tables, and diversity calculations on the many resulting tables) can all be run in parallel if requested by the user, supported by QIIME 2’s use of parsl 4 for its formal parallel computing support. This enables full use of individual multiprocessor computers (such as laptops or cloud-based virtual machines such as those available from Amazon Web Services or Digital Ocean) or multi-node high performance computing machinery (e.g., university cluster computers). Additionally, by nature of being a QIIME 2 plugin, failed Pipeline runs can be resumed avoiding the need to recompute results. This is useful, for example, if an out-of-memory error requires a re-run of analysis with a larger memory allocation after a large portion of work has already been completed. As we discuss implementation details in the following subsections we use some terms that have specific meaning in QIIME 2, such as Action, Pipeline, and Artifact Class. The glossary of Developing with QIIME 2 5 is the canonical reference for definitions of these terms. Operation As of this writing, q2-boots can be installed in the latest development version (2025.4) and release version (2024.10) of the amplicon and metagenome distributions of QIIME 2 by following instructions in the project’s documentation. q2-boots can be installed on macOS, Linux, and Windows Subsystem for Linux (WSL), or installed in QIIME 2 Docker containers. The Actions and Pipelines provided in q2-boots provide different operational workflows which are documented in the following sub-sections. Resampling A single Action, resample , supports resampling an input feature table (QIIME 2 artifact class: FeatureTable [Frequency] ) to a user-specified per-sample sampling depth n times. Sampling is performed with replacement (i.e., bootstrapped) or without replacement (i.e., rarefied 2 ). Samples with total frequencies less than the specified sampling depth are dropped from the resulting feature tables. The output of this Action is n feature tables that can be used in downstream QIIME 2 Actions, or which can be exported to biom-formatted files 6 for analysis with other tools. In a comparison of bootstrapped and rarefaction-based diversity analysis on a collection of 1,018 samples spanning human excrement, compost, and soil samples from the Meilander et al. (2024) “gut-to-soil axis” human excrement composting (HEC) experiment, 7 we find that the results are effectively identical when comparing averaged alpha and beta diversity metrics computed from the resulting tables (Supplementary Table 1). In two iterations each of bootstrapped and rarefaction-based diversity analysis, 100 resampled tables were created. Four alpha and four beta diversity metrics were computed on each resampled table, and the resulting alpha diversity vectors and beta diversity distance matrices were averaged. On a per-diversity metric basis, correlation between the averaged alpha diversity vectors or beta diversity distance matrices resulting from bootstrapped or rarefaction-based resampled feature tables, measured with Spearman rank correlation and Mantel test using Spearman rank correlation respectively, all achieved correlation coefficient (rho) values greater than 0.99 and p-values less than 0.001. These results, and all code used to perform the analysis, are presented in Supplementary Data. Rarefaction-based diversity analysis is more common than bootstrapped diversity analysis in microbiome research, but has its roots in macro-ecology, where the population sizes being sampled from are small relative to those sampled in microbial ecology. The availability of both approaches through a common interface will facilitate assessment of whether one is more appropriate in microbiome diversity analysis generally, or under specific circumstances. Alpha diversity suite The alpha diversity suite introduces three Actions: alpha , alpha-collection , and alpha-average . alpha is an analog of q2-diversity’s alpha and alpha-phylogenetic actions. Those Actions were introduced in q2-diversity before optional input Artifacts were supported in QIIME 2, so two Actions were required to support phylogenetic diversity metrics (which take a feature table and a phylogenetic tree as input) and non-phylogenetic diversity metrics (which only take a feature table as input). The implementation of alpha in q2-boots improves upon this by making the phylogenetic tree an optional input and therefore supports both phylogenetic and non-phylogenetic diversity metrics. This same change relative to q2-diversity was made for the beta diversity suite of Actions and core metrics. (Because the QIIME 2 Amplicon Distribution strives to maintain backward compatibility, q2-diversity has not been updated to use optional inputs for these Actions.) The implementation of alpha in q2-boots integrates resampling of the input feature table n times. In addition to providing the typical inputs and parameters for an alpha diversity computation (a feature table, an optional phylogenetic tree, and the name of a supported diversity metric to compute), the user provides an even sampling depth, whether to sample with or without replacement, and the number of resampled feature tables to compute when calling qiime boots alpha . These parameters are passed through to the resample Action described above. The input feature table is resampled n times to create n feature tables, the user-specified alpha diversity metric is computed on all samples in each feature table, the per sample diversity metrics computed on each table are averaged (the averaging method is median, by default), and the Action outputs a single vector of the averaged per-sample alpha diversity metric values. The resulting vector can be used in any downstream actions compatible with this type (QIIME 2 artifact class: SampleData [AlphaDiversity] ) in the QIIME 2 ecosystem, or exported as tab-separated text for use elsewhere. This facilitates the use of bootstrapping or rarefaction in alpha diversity analysis. The alpha-collection Action works similarly to the alpha Action, but rather than integrating the averaging step, it outputs the full collection of alpha diversity vectors that were computed on each of the resampled feature tables. It thus allows users to interact directly with these diversity vectors to support estimates of variance across resampled tables, or other computations that require the full data rather than simple averages. The final tool in the alpha suite, alpha-average , takes a collection of alpha diversity vectors, such as those generated by alpha-collection , computes their average (the default averaging method is median) and outputs a single vector containing per-sample averages. alpha is implemented as a Pipeline (i.e., a qiime2.Pipeline object) that integrates the resample , alpha-collection , and alpha-average Actions into a single command. The availability of the Pipeline facilitates the use of this workflow by all QIIME 2 users. The availability of the component Actions ( alpha-collection and alpha-average ) provides flexibility for more advanced users who may need access to the intermediary data. Beta diversity suite The beta diversity suite of Actions in q2-boots mirrors the Actions in the alpha diversity suite. beta is the analog to q2-diversity’s beta and beta-phylogenetic Actions, integrating bootstrapping or rarefaction and outputting a distance matrix (QIIME 2 artifact class: DistanceMatrix ). Like alpha , beta is a Pipeline composed of calls to resample , beta-collection , and beta-average . beta-collection outputs the collection of distance matrices computed on each resampled table, and beta-average averages those to create a single distance matrix that can be used in any downstream analysis that operates on distance matrices in the QIIME 2 ecosystem or exported as tab-separated text for analysis with other tools. Averaging distance matrices is more complex than averaging alpha diversity vectors because distance matrices are observations within a metric space with specific properties: 1. Hollowness (i.e., the diagonal of the distance matrix must be zero); 2. Non-negative (i.e., all values must be greater than or equal to zero); 3. Symmetry (i.e., the values must be symmetric across the diagonal, such that the distance between samples A and B is always equal to the distance between samples B and A); and 4. Triangle Inequality (e.g., the distance between sample A and C is always greater than or equal to the distance between samples A and B plus the distance between samples B and C). beta-average , and all other Actions that use it in q2-boots, provides three options for averaging distance matrices: medoid , which retains all of these properties (assuming the distance metric used produces distance matrices with these properties), and non-metric-median and non-metric-mean , which retain properties 1-3, but may not retain property 4. medoid takes a set of distance matrices, identifies the distance matrix with the smallest sum of dissimilarities (by Euclidean distance) to all of the other distance matrices in the set, and returns that distance matrix as a representative of the set. Thus if all distance matrices in the set are metric, the selected representative will also be metric. non-metric-median and non-metric-mean are naive approaches that take a set of distance matrices and compute the per-cell median or mean, respectively, across the set of distance matrices. The result is a new distance matrix composed of the averaged pairwise distances. q2-boots uses the medoid implementation from hdmedians ( https://github.com/daleroberts/hdmedians , accessed 9 May 2024). In practice, we have found that the memory requirements of this method don’t scale well to large numbers of n (e.g., n > 100). To assess whether non-metric-median or non-metric-mean is a suitable surrogate for medoid in lieu of a more memory efficient medoid implementation, we computed distance matrices for the HEC experiment described above using four beta diversity metrics. We find that on a per-distance-metric basis, the distance matrices resulting from applying qiime boots beta-average with the medoid, non-metric-mean, and non-metric-median averaging methods across 100 bootstrap and rarefaction iterations are effectively identical (Supplementary Table 1). All Mantel tests achieved correlation coefficients greater than 0.99 and p-values less than 0.001. We additionally compared multiple iterations of bootstrapping and rarefaction followed by averaging of the resulting distance matrices with medoid , non-metric-median , and non-metric-mean , to assess whether different random seeds during resampling would impact the similarity of the resulting distance matrices. Using the same four distance metrics, we again found that all Mantel rho scores were greater than 0.99 and all p-values were less than 0.001. These results, and all code used to perform the analysis, are presented in Supplementary Data. Core metrics q2-boots provides an omnibus Action, core-metrics , that captures the behavior of q2-diversity’s core-metrics and core-metrics-phylogenetic Actions. Like the alpha and beta Actions, core-metrics integrates bootstrapping and rarefaction. The output it creates mirrors that of the corresponding Actions in q2-diversity: alpha diversity vectors that are averaged across the collection of alpha diversity vectors computed for each rarefied feature table; beta diversity distance matrices that are averaged across the collection of distance matrices computed for each rarefied feature table; principal coordinates analysis (PCoA) matrices computed on each average distance matrix; and Emperor-based interactive ordination plots 8 for each PCoA matrix. This Action enables QIIME 2 users to run bootstrapped or rarefaction-based diversity analysis with no additional work relative to running diversity analysis through the widely used core-metrics and core-metrics-phylogenetic Actions in q2-diversity. Testing, distribution, and maintenance q2-boots integrates unit tests that cover the breadth of its functionality. These tests are automatically run on every commit to the main branch of the code repository, and on all pull requests. q2-boots is distributed as a QIIME 2 community plugin, meaning that at this time it is not included in the canonical QIIME 2 distributions, but rather is built and distributed as recommended in Developing with QIIME 2. As of this writing, q2-boots can be installed in the latest development version (2025.4) and release version (2024.10) of the amplicon and metagenome distributions of QIIME 2 by following instructions in the project’s documentation at https://q2-boots.readthedocs.io . Source code for q2-boots is available on GitHub at https://github.com/caporaso-lab/q2-boots . q2-boots was developed for a master’s degree in computer science project and will be maintained by the Caporaso Lab at Northern Arizona University. Technical support is available on the QIIME 2 Forum ( https://forum.qiime2.org ). Conclusions q2-boots provides eight actions that facilitate bootstrapped and rarefaction-based microbiome diversity analysis workflows. The topic of rarefaction in microbiome analysis remains controversial, though as pointed out in, 1 these analyses do enable consideration of all data, including low abundance features such as rare taxa. Whether using these Actions directly, as advocated in, 2 or as a basis for comparison against more sophisticated normalization techniques, q2-boots makes it straightforward for researchers to integrate bootstrapped and/or rarefaction-based microbiome diversity analysis in their workflows. Ethics and consent to participate Human fecal samples were collected under Northern Arizona University IRB protocol 1773199-3, Bridging the Gap between Gut and Soil Microbiomes with written informed consent from the study participants. Ethical approval for this study was provided on 9 Jul 2021. Authors’ contributions IR and JGC were the primary developers of q2-boots. EG, CH, AS, EB, and JGC advised on the development of q2-boots. AS and EB performed code review prior to the initial release of q2-boots. JM and JGC generated the data used in Supplementary Table 1. AO and JGC performed testing of q2-boots on real-world data. EB and JGC conceived of the project. IR and JGC drafted the first version of the manuscript. All authors reviewed and provided feedback on the manuscript. Supplementary files Supplementary Data and Supplementary Table 1 are available at https://doi.org/10.5281/zenodo.13287126 . 9 They are not included in this pre-print due to size. Data are available under the terms of the Creative Commons Attribution 4.0 International license (CC-BY 4.0). Availability of data and material All data analyzed in this study, including Supplementary Table 1 and the code used to generate it, are available in Supplementary Data at https://doi.org/10.5281/zenodo.13287126 . 9 Data are available under the terms of the Creative Commons Attribution 4.0 International license (CC-BY 4.0). Software availability The q2-boots source code is available on GitHub at https://github.com/caporaso-lab/q2-boots under the BSD 3-clause license. The specific version used for the analyses presented here (version 0.0.1+46.g1c32499) is archived at https://doi.org/10.5281/zenodo.13287126 . 9 q2-boots is open source and free for all use, including commercial. q2-boots is written in Python 3. The project documentation can be found at https://q2-boots.readthedocs.io . References 1. Schloss PD: Waste not, want not: revisiting the analysis that called into question the practice of rarefaction. mSphere. 2023 Dec 6; e0035523. 2. Schloss PD: Rarefaction is currently the best approach to control for uneven sequencing effort in amplicon sequence analyses. mSphere. 2024 Feb 28; 9 (2): e0035423. PubMed Abstract | Publisher Full Text | Free Full Text 3. Bolyen E, Rideout JR, Dillon MR, et al. : Reproducible, interactive, scalable and extensible microbiome data science using QIIME 2. Nat. Biotechnol. 2019 Jul 24. 4. Babuji Y, Woodard A, Li Z, et al. : Parsl: Pervasive Parallel Programming in Python. Proceedings of the 28th International Symposium on High-Performance Parallel and Distributed Computing. New York, NY, USA: Association for Computing Machinery; 2019; pp. 25–36. (HPDC’19). 5. Caporaso JG, Bolyen E: Developing with QIIME 2.2024. Reference Source 6. McDonald D, Clemente JC, Kuczynski J, et al. : The Biological Observation Matrix (BIOM) format or: how I learned to stop worrying and love the ome-ome. Gigascience. 2012 Jul 12; 1 (1): 7. PubMed Abstract | Publisher Full Text | Free Full Text 7. Meilander J, Herman C, Manley A, et al. : Upcycling human excrement: The gut microbiome to soil microbiome axis. arXiv [q-bio.GN]. 2024. 8. Vázquez-Baeza Y, Pirrung M, Gonzalez A, et al. : EMPeror: a tool for visualizing high-throughput microbial community data. Gigascience. 2013 Nov 26; 2 (1): 16. PubMed Abstract | Publisher Full Text 9. Raspet I, Gehret E, Herman C, et al. : Data supporting q2-boots manuscript analysis. [Dataset]. Zenodo. 2024. Publisher Full Text Comments on this article Comments (0) Version 1 VERSION 1 PUBLISHED 15 Jan 2025 ADD YOUR COMMENT Comment Author details Author details 1 Pathogen and Microbiome Institute, Northern Arizona University, Flagstaff, Arizona, 86011, USA 2 School of Informatics, Computing and Cyber Systems, Northern Arizona University, Flagstaff, Arizona, 86011, USA Isaiah Raspet Roles: Software, Writing – Original Draft Preparation Elizabeth Gehret Roles: Supervision, Writing – Review & Editing Chloe Herman Roles: Supervision, Validation, Writing – Review & Editing Jeff Meilander Roles: Data Curation, Validation Andrew Manley Roles: Validation, Writing – Review & Editing Anthony Simard Roles: Software, Supervision, Writing – Review & Editing Evan Bolyen Roles: Conceptualization, Software, Supervision, Writing – Review & Editing J Gregory Caporaso Roles: Conceptualization, Software, Supervision, Validation, Writing – Original Draft Preparation, Writing – Review & Editing Competing interests EB and JGC are co-founders and hold equity in Cymis Benefit Corporation, a biological data science software company. Grant information This work was funded in part by the National Cancer Institute grant 1U24CA248454-01 to JGC. The funders had no role in study design, data collection and analysis, decision to publish, or preparation of the manuscript. Article Versions (1) version 1 Published: 15 Jan 2025, 14:87 https://doi.org/10.12688/f1000research.156295.1 Copyright © 2025 Raspet I et al . This is an open access article distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. Download Export To Sciwheel Bibtex EndNote ProCite Ref. Manager (RIS) Sente metrics Views Downloads F1000Research - - PubMed Central info_outline Data from PMC are received and updated monthly. - - Citations open_in_new 0 open_in_new 0 open_in_new SEE MORE DETAILS CITE how to cite this article Raspet I, Gehret E, Herman C et al. Facilitating bootstrapped and rarefaction-based microbiome diversity analysis with q2-boots [version 1; peer review: 1 approved, 2 approved with reservations] . F1000Research 2025, 14 :87 ( https://doi.org/10.12688/f1000research.156295.1 ) NOTE: If applicable, it is important to ensure the information in square brackets after the title is included in all citations of this article. COPY CITATION DETAILS track receive updates on this article Track an article to receive email alerts on any updates to this article. TRACK THIS ARTICLE Share Open Peer Review Current Reviewer Status: ? Key to Reviewer Statuses VIEW HIDE Approved The paper is scientifically sound in its current form and only minor, if any, improvements are suggested Approved with reservations A number of small changes, sometimes more significant revisions are required to address specific details and improve the papers academic merit. Not approved Fundamental flaws in the paper seriously undermine the findings and conclusions Version 1 VERSION 1 PUBLISHED 15 Jan 2025 Views 0 Cite How to cite this report: Thompson LR. Reviewer Report For: Facilitating bootstrapped and rarefaction-based microbiome diversity analysis with q2-boots [version 1; peer review: 1 approved, 2 approved with reservations] . F1000Research 2025, 14 :87 ( https://doi.org/10.5256/f1000research.171585.r374737 ) The direct URL for this report is: https://f1000research.com/articles/14-87/v1#referee-response-374737 NOTE: it is important to ensure the information in square brackets after the title is included in this citation. Close Copy Citation Details Reviewer Report 05 May 2025 Luke R Thompson , Northern Gulf Institute, Mississippi State University, Oktibbeha, USA Approved with Reservations VIEWS 0 https://doi.org/10.5256/f1000research.171585.r374737 This articles describes a new QIIME 2 plugin, q2-boots, which provides bootstrapping and rarefaction of feature tables, perform alpha and beta diversity analysis on those tables, and summarize the output. The article provides an overview of the plugin and its ... Continue reading READ ALL This articles describes a new QIIME 2 plugin, q2-boots, which provides bootstrapping and rarefaction of feature tables, perform alpha and beta diversity analysis on those tables, and summarize the output. The article provides an overview of the plugin and its commands, plus an example dataset and analysis. Much more detailed guidance and a full tutorial are provided in the online documentation. This software should be broadly useful to microbiome researchers and represents a valuable contribution to the microbiome field. Abstract - In the first sentence of the results section, it might be helpful to insert "n times—with replacement (bootstrapped) or without replacement (rarefied)—and compute" to define these two related terms in the abstract. - In the conclusion, it's unclear why the fact that the three metrics for averaging beta-diversity matrices being highly correlated would be relevant. Could you briefly add that this allows selection of a more computationally efficient metric with minimal tradeoffs? Keywords - Suggest adding "environmental DNA", "metabarcoding", and "amplicon sequencing", as these are related fields/techniques that share many features with microbiome research and whose practitioners may be interested in this plugin. Background - In second sentence, suggest changing "microbiome researchers and data scientists" to "microbiome and environmental DNA researchers and other data scientists working with biological feature tables." - I agree with the other reviewer that some additional background on why bootstrapping/rarefaction are important would be helpful. Just a few sentences summarizing the two papers by Schloss would provide more justification for using this plugin. - Related, the advantages to researchers of using this plugin could be highlighted in the figures and perhaps in the Conclusions. Figures - The fonts in the workflow diagrams are very small. Would it be possible to make them bigger, perhaps by adding line breaks? - The figures do not help show what the tool does or why it's useful. Would it be possible to include some figures showing how bootstrapping/rarefaction improve an analysis? These could be extracted from the tutorial. A short explanation of the value added by this plugin could go in the main text, perhaps in the Conclusions. Is the rationale for developing the new software tool clearly explained? Yes Is the description of the software tool technically sound? Yes Are sufficient details of the code, methods and analysis (if applicable) provided to allow replication of the software development and its use by others? Yes Is sufficient information provided to allow interpretation of the expected output datasets and any results generated using the tool? Yes Are the conclusions about the tool and its performance adequately supported by the findings presented in the article? Yes Competing Interests: No competing interests were disclosed. Reviewer Expertise: Microbiome and environmental DNA research, including metabarcoding analysis and data science I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard, however I have significant reservations, as outlined above. Close READ LESS CITE CITE HOW TO CITE THIS REPORT Thompson LR. Reviewer Report For: Facilitating bootstrapped and rarefaction-based microbiome diversity analysis with q2-boots [version 1; peer review: 1 approved, 2 approved with reservations] . F1000Research 2025, 14 :87 ( https://doi.org/10.5256/f1000research.171585.r374737 ) The direct URL for this report is: https://f1000research.com/articles/14-87/v1#referee-response-374737 NOTE: it is important to ensure the information in square brackets after the title is included in all citations of this article. COPY CITATION DETAILS Report a concern Respond or Comment COMMENT ON THIS REPORT Views 0 Cite How to cite this report: Heidrich V. Reviewer Report For: Facilitating bootstrapped and rarefaction-based microbiome diversity analysis with q2-boots [version 1; peer review: 1 approved, 2 approved with reservations] . F1000Research 2025, 14 :87 ( https://doi.org/10.5256/f1000research.171585.r374740 ) The direct URL for this report is: https://f1000research.com/articles/14-87/v1#referee-response-374740 NOTE: it is important to ensure the information in square brackets after the title is included in this citation. Close Copy Citation Details Reviewer Report 18 Apr 2025 Vitor Heidrich , CIBIO, Universita degli Studi di Trento, Trento, Trentino-Alto Adige/South Tyrol, Italy Approved VIEWS 0 https://doi.org/10.5256/f1000research.171585.r374740 The authors developed a QIIME 2 plugin allowing to perform diversity analyses following repeated rarefaction of feature-tables followed by summarizing the results generated by each rarefaction run. I agree with the authors that the plugin developed was much needed by ... Continue reading READ ALL The authors developed a QIIME 2 plugin allowing to perform diversity analyses following repeated rarefaction of feature-tables followed by summarizing the results generated by each rarefaction run. I agree with the authors that the plugin developed was much needed by the QIIME 2 community, as I also have followed the discussion brought to light by PD Schloss in his recent papers and was surprised to realize it was not possible to perform repeated rarefaction in QIIME 2. The rational for the plugin is clearly and concisely stated, as well as the actions implemented in it. The authors were also very fair in stating that other normalization techniques (possibly more tailored to a particular kind of analysis) do exist. Although not essential for the understanding of this work, I only wonder whether mentioning some examples of those other non-rarefaction-based normalization approaches (or specifically those available in QIIME 2) could be useful for the reader (could be an "e.g." in this sentence of the Conclusions: "or as a basis for comparison against more sophisticated normalization techniques"). Is the rationale for developing the new software tool clearly explained? Yes Is the description of the software tool technically sound? Yes Are sufficient details of the code, methods and analysis (if applicable) provided to allow replication of the software development and its use by others? Yes Is sufficient information provided to allow interpretation of the expected output datasets and any results generated using the tool? Yes Are the conclusions about the tool and its performance adequately supported by the findings presented in the article? Yes Competing Interests: No competing interests were disclosed. Reviewer Expertise: Computational biology, metagenomics, human microbiome I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard. Close READ LESS CITE CITE HOW TO CITE THIS REPORT Heidrich V. Reviewer Report For: Facilitating bootstrapped and rarefaction-based microbiome diversity analysis with q2-boots [version 1; peer review: 1 approved, 2 approved with reservations] . F1000Research 2025, 14 :87 ( https://doi.org/10.5256/f1000research.171585.r374740 ) The direct URL for this report is: https://f1000research.com/articles/14-87/v1#referee-response-374740 NOTE: it is important to ensure the information in square brackets after the title is included in all citations of this article. COPY CITATION DETAILS Report a concern Respond or Comment COMMENT ON THIS REPORT Views 0 Cite How to cite this report: Verma D. Reviewer Report For: Facilitating bootstrapped and rarefaction-based microbiome diversity analysis with q2-boots [version 1; peer review: 1 approved, 2 approved with reservations] . F1000Research 2025, 14 :87 ( https://doi.org/10.5256/f1000research.171585.r370290 ) The direct URL for this report is: https://f1000research.com/articles/14-87/v1#referee-response-370290 NOTE: it is important to ensure the information in square brackets after the title is included in this citation. Close Copy Citation Details Reviewer Report 10 Apr 2025 Digvijay Verma , Babasaheb Bhimrao Ambedkar University, Lucknow, India Approved with Reservations VIEWS 0 https://doi.org/10.5256/f1000research.171585.r370290 The manuscript introduces q2-boots, a plugin for QIIME 2 aimed at simplifying the analysis of microbiome diversity through bootstrapping and rarefaction techniques. The authors present a comprehensive set of functionalities that allow for the calculation of thirty distinct alpha diversity ... Continue reading READ ALL The manuscript introduces q2-boots, a plugin for QIIME 2 aimed at simplifying the analysis of microbiome diversity through bootstrapping and rarefaction techniques. The authors present a comprehensive set of functionalities that allow for the calculation of thirty distinct alpha diversity metrics and twenty-two beta diversity metrics on resampled or rarefied feature tables. This tool's incorporation into the QIIME 2 framework is a significant advancement in microbiome research, effectively filling a notable gap in existing QIIME 2 methodologies. The manuscript clearly outlines the various functionalities offered by q2-boots and their integration within the broader QIIME 2 ecosystem. Furthermore, the authors provide a thorough comparison of bootstrapping and rarefaction-based diversity analyses, demonstrating a strong correlation between the results derived from both approaches. This analysis addresses a critical methodological issue and reassures users regarding the effectiveness of either method. In summary, this manuscript makes a significant contribution to the QIIME 2 ecosystem and the field of microbiome research as a whole. The user-friendly integration of bootstrapping and rarefaction-based diversity analysis has the potential to improve the rigor and reproducibility of microbiome studies. The writing is clear and showcases robust experimental validation, making this tool a valuable addition to the QIIME 2 suite. With minor clarifications and further details on certain methodological aspects, it could serve as an even more beneficial resource for the researchers. The following suggestions may be incorporated to further improve the manuscript. While the authors describe three methods for averaging distance matrices—medoid, non-metric-median, and non-metric-mean—there could be more discussion on the implications of each method for downstream analysis. Specifically, the manuscript mentions that all methods provide highly similar results in the specific case study but does not delve deeply into which approach might be preferable in various contexts (e.g., for different types of microbiome data or diversity metrics). Additional guidance on when to use each method would be valuable for users. Although the manuscript mentions the parallel computing capabilities, a more detailed discussion on the performance of q2-boots with large datasets, for example, when n > 100, would be beneficial. The results from the HEC experiment are promising, but the paper could emphasize how q2-boots scales with dataset size and the corresponding computational requirements e.g., memory usage. The manuscript does not mention how q2-boots interacts with other QIIME 2 plugins outside of the core-diversity workflows. For example, it would be helpful to discuss any potential compatibility with statistical or visualization tools in QIIME 2, such as q2-longitudinal or q2-phylogeny. This would give users a better idea of how q2-boots fits within a larger analysis pipeline. A more detailed example of how q2-boots can be used in practice, including a step-by-step guide or case study, would help potential users understand how to incorporate it into their workflows. This could be particularly useful for new QIIME 2 users. A more explicit discussion on the limitations of bootstrapping and rarefaction in microbiome studies, and how q2-boots addresses or mitigates these limitations, would be helpful. The authors briefly mention the controversy around rarefaction but could benefit from elaborating on the pros and cons of rarefaction versus bootstrapping and under what conditions each method might be preferred. Minor suggestions: Please double-check for consistency in the use of terms, particularly the distinction between "alpha diversity" and "beta diversity." Clarify the averaging method for diversity vectors (e.g., median by default) in relevant sections for better transparency. Is the rationale for developing the new software tool clearly explained? Yes Is the description of the software tool technically sound? Yes Are sufficient details of the code, methods and analysis (if applicable) provided to allow replication of the software development and its use by others? Yes Is sufficient information provided to allow interpretation of the expected output datasets and any results generated using the tool? Yes Are the conclusions about the tool and its performance adequately supported by the findings presented in the article? Yes Competing Interests: No competing interests were disclosed. Reviewer Expertise: Metagenomics, Microbial divrsity, Extremozymes I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard, however I have significant reservations, as outlined above. Close READ LESS CITE CITE HOW TO CITE THIS REPORT Verma D. Reviewer Report For: Facilitating bootstrapped and rarefaction-based microbiome diversity analysis with q2-boots [version 1; peer review: 1 approved, 2 approved with reservations] . F1000Research 2025, 14 :87 ( https://doi.org/10.5256/f1000research.171585.r370290 ) The direct URL for this report is: https://f1000research.com/articles/14-87/v1#referee-response-370290 NOTE: it is important to ensure the information in square brackets after the title is included in all citations of this article. COPY CITATION DETAILS Report a concern Respond or Comment COMMENT ON THIS REPORT Comments on this article Comments (0) Version 1 VERSION 1 PUBLISHED 15 Jan 2025 ADD YOUR COMMENT Comment keyboard_arrow_left keyboard_arrow_right Open Peer Review Reviewer Status info_outline Alongside their report, reviewers assign a status to the article: Approved The paper is scientifically sound in its current form and only minor, if any, improvements are suggested Approved with reservations A number of small changes, sometimes more significant revisions are required to address specific details and improve the papers academic merit. Not approved Fundamental flaws in the paper seriously undermine the findings and conclusions Reviewer Reports Invited Reviewers 1 2 3 Version 1 15 Jan 25 read read read Digvijay Verma , Babasaheb Bhimrao Ambedkar University, Lucknow, India Vitor Heidrich , Universita degli Studi di Trento, Trento, Italy Luke R Thompson , Northern Gulf Institute, Mississippi State University, Oktibbeha, USA Comments on this article All Comments (0) Add a comment Sign up for content alerts Sign Up You are now signed up to receive this alert Browse by related subjects keyboard_arrow_left Back to all reports Reviewer Report 0 Views copyright © 2025 Thompson L. This is an open access peer review report distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. 05 May 2025 | for Version 1 Luke R Thompson , Northern Gulf Institute, Mississippi State University, Oktibbeha, USA 0 Views copyright © 2025 Thompson L. This is an open access peer review report distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. format_quote Cite this report speaker_notes Responses (0) Approved With Reservations info_outline Alongside their report, reviewers assign a status to the article: Approved The paper is scientifically sound in its current form and only minor, if any, improvements are suggested Approved with reservations A number of small changes, sometimes more significant revisions are required to address specific details and improve the papers academic merit. Not approved Fundamental flaws in the paper seriously undermine the findings and conclusions This articles describes a new QIIME 2 plugin, q2-boots, which provides bootstrapping and rarefaction of feature tables, perform alpha and beta diversity analysis on those tables, and summarize the output. The article provides an overview of the plugin and its commands, plus an example dataset and analysis. Much more detailed guidance and a full tutorial are provided in the online documentation. This software should be broadly useful to microbiome researchers and represents a valuable contribution to the microbiome field. Abstract - In the first sentence of the results section, it might be helpful to insert "n times—with replacement (bootstrapped) or without replacement (rarefied)—and compute" to define these two related terms in the abstract. - In the conclusion, it's unclear why the fact that the three metrics for averaging beta-diversity matrices being highly correlated would be relevant. Could you briefly add that this allows selection of a more computationally efficient metric with minimal tradeoffs? Keywords - Suggest adding "environmental DNA", "metabarcoding", and "amplicon sequencing", as these are related fields/techniques that share many features with microbiome research and whose practitioners may be interested in this plugin. Background - In second sentence, suggest changing "microbiome researchers and data scientists" to "microbiome and environmental DNA researchers and other data scientists working with biological feature tables." - I agree with the other reviewer that some additional background on why bootstrapping/rarefaction are important would be helpful. Just a few sentences summarizing the two papers by Schloss would provide more justification for using this plugin. - Related, the advantages to researchers of using this plugin could be highlighted in the figures and perhaps in the Conclusions. Figures - The fonts in the workflow diagrams are very small. Would it be possible to make them bigger, perhaps by adding line breaks? - The figures do not help show what the tool does or why it's useful. Would it be possible to include some figures showing how bootstrapping/rarefaction improve an analysis? These could be extracted from the tutorial. A short explanation of the value added by this plugin could go in the main text, perhaps in the Conclusions. Is the rationale for developing the new software tool clearly explained? Yes Is the description of the software tool technically sound? Yes Are sufficient details of the code, methods and analysis (if applicable) provided to allow replication of the software development and its use by others? Yes Is sufficient information provided to allow interpretation of the expected output datasets and any results generated using the tool? Yes Are the conclusions about the tool and its performance adequately supported by the findings presented in the article? Yes Competing Interests No competing interests were disclosed. Reviewer Expertise Microbiome and environmental DNA research, including metabarcoding analysis and data science I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard, however I have significant reservations, as outlined above. reply Respond to this report Responses (0) Thompson LR. Peer Review Report For: Facilitating bootstrapped and rarefaction-based microbiome diversity analysis with q2-boots [version 1; peer review: 1 approved, 2 approved with reservations] . F1000Research 2025, 14 :87 ( https://doi.org/10.5256/f1000research.171585.r374737) NOTE: it is important to ensure the information in square brackets after the title is included in this citation. The direct URL for this report is: https://f1000research.com/articles/14-87/v1#referee-response-374737 keyboard_arrow_left Back to all reports Reviewer Report 0 Views copyright © 2025 Heidrich V. This is an open access peer review report distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. 18 Apr 2025 | for Version 1 Vitor Heidrich , CIBIO, Universita degli Studi di Trento, Trento, Trentino-Alto Adige/South Tyrol, Italy 0 Views copyright © 2025 Heidrich V. This is an open access peer review report distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. format_quote Cite this report speaker_notes Responses (0) Approved info_outline Alongside their report, reviewers assign a status to the article: Approved The paper is scientifically sound in its current form and only minor, if any, improvements are suggested Approved with reservations A number of small changes, sometimes more significant revisions are required to address specific details and improve the papers academic merit. Not approved Fundamental flaws in the paper seriously undermine the findings and conclusions The authors developed a QIIME 2 plugin allowing to perform diversity analyses following repeated rarefaction of feature-tables followed by summarizing the results generated by each rarefaction run. I agree with the authors that the plugin developed was much needed by the QIIME 2 community, as I also have followed the discussion brought to light by PD Schloss in his recent papers and was surprised to realize it was not possible to perform repeated rarefaction in QIIME 2. The rational for the plugin is clearly and concisely stated, as well as the actions implemented in it. The authors were also very fair in stating that other normalization techniques (possibly more tailored to a particular kind of analysis) do exist. Although not essential for the understanding of this work, I only wonder whether mentioning some examples of those other non-rarefaction-based normalization approaches (or specifically those available in QIIME 2) could be useful for the reader (could be an "e.g." in this sentence of the Conclusions: "or as a basis for comparison against more sophisticated normalization techniques"). Is the rationale for developing the new software tool clearly explained? Yes Is the description of the software tool technically sound? Yes Are sufficient details of the code, methods and analysis (if applicable) provided to allow replication of the software development and its use by others? Yes Is sufficient information provided to allow interpretation of the expected output datasets and any results generated using the tool? Yes Are the conclusions about the tool and its performance adequately supported by the findings presented in the article? Yes Competing Interests No competing interests were disclosed. Reviewer Expertise Computational biology, metagenomics, human microbiome I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard. reply Respond to this report Responses (0) Heidrich V. Peer Review Report For: Facilitating bootstrapped and rarefaction-based microbiome diversity analysis with q2-boots [version 1; peer review: 1 approved, 2 approved with reservations] . F1000Research 2025, 14 :87 ( https://doi.org/10.5256/f1000research.171585.r374740) NOTE: it is important to ensure the information in square brackets after the title is included in this citation. The direct URL for this report is: https://f1000research.com/articles/14-87/v1#referee-response-374740 keyboard_arrow_left Back to all reports Reviewer Report 0 Views copyright © 2025 Verma D. This is an open access peer review report distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. 10 Apr 2025 | for Version 1 Digvijay Verma , Babasaheb Bhimrao Ambedkar University, Lucknow, India 0 Views copyright © 2025 Verma D. This is an open access peer review report distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. format_quote Cite this report speaker_notes Responses (0) Approved With Reservations info_outline Alongside their report, reviewers assign a status to the article: Approved The paper is scientifically sound in its current form and only minor, if any, improvements are suggested Approved with reservations A number of small changes, sometimes more significant revisions are required to address specific details and improve the papers academic merit. Not approved Fundamental flaws in the paper seriously undermine the findings and conclusions The manuscript introduces q2-boots, a plugin for QIIME 2 aimed at simplifying the analysis of microbiome diversity through bootstrapping and rarefaction techniques. The authors present a comprehensive set of functionalities that allow for the calculation of thirty distinct alpha diversity metrics and twenty-two beta diversity metrics on resampled or rarefied feature tables. This tool's incorporation into the QIIME 2 framework is a significant advancement in microbiome research, effectively filling a notable gap in existing QIIME 2 methodologies. The manuscript clearly outlines the various functionalities offered by q2-boots and their integration within the broader QIIME 2 ecosystem. Furthermore, the authors provide a thorough comparison of bootstrapping and rarefaction-based diversity analyses, demonstrating a strong correlation between the results derived from both approaches. This analysis addresses a critical methodological issue and reassures users regarding the effectiveness of either method. In summary, this manuscript makes a significant contribution to the QIIME 2 ecosystem and the field of microbiome research as a whole. The user-friendly integration of bootstrapping and rarefaction-based diversity analysis has the potential to improve the rigor and reproducibility of microbiome studies. The writing is clear and showcases robust experimental validation, making this tool a valuable addition to the QIIME 2 suite. With minor clarifications and further details on certain methodological aspects, it could serve as an even more beneficial resource for the researchers. The following suggestions may be incorporated to further improve the manuscript. While the authors describe three methods for averaging distance matrices—medoid, non-metric-median, and non-metric-mean—there could be more discussion on the implications of each method for downstream analysis. Specifically, the manuscript mentions that all methods provide highly similar results in the specific case study but does not delve deeply into which approach might be preferable in various contexts (e.g., for different types of microbiome data or diversity metrics). Additional guidance on when to use each method would be valuable for users. Although the manuscript mentions the parallel computing capabilities, a more detailed discussion on the performance of q2-boots with large datasets, for example, when n > 100, would be beneficial. The results from the HEC experiment are promising, but the paper could emphasize how q2-boots scales with dataset size and the corresponding computational requirements e.g., memory usage. The manuscript does not mention how q2-boots interacts with other QIIME 2 plugins outside of the core-diversity workflows. For example, it would be helpful to discuss any potential compatibility with statistical or visualization tools in QIIME 2, such as q2-longitudinal or q2-phylogeny. This would give users a better idea of how q2-boots fits within a larger analysis pipeline. A more detailed example of how q2-boots can be used in practice, including a step-by-step guide or case study, would help potential users understand how to incorporate it into their workflows. This could be particularly useful for new QIIME 2 users. A more explicit discussion on the limitations of bootstrapping and rarefaction in microbiome studies, and how q2-boots addresses or mitigates these limitations, would be helpful. The authors briefly mention the controversy around rarefaction but could benefit from elaborating on the pros and cons of rarefaction versus bootstrapping and under what conditions each method might be preferred. Minor suggestions: Please double-check for consistency in the use of terms, particularly the distinction between "alpha diversity" and "beta diversity." Clarify the averaging method for diversity vectors (e.g., median by default) in relevant sections for better transparency. Is the rationale for developing the new software tool clearly explained? Yes Is the description of the software tool technically sound? Yes Are sufficient details of the code, methods and analysis (if applicable) provided to allow replication of the software development and its use by others? Yes Is sufficient information provided to allow interpretation of the expected output datasets and any results generated using the tool? Yes Are the conclusions about the tool and its performance adequately supported by the findings presented in the article? Yes Competing Interests No competing interests were disclosed. Reviewer Expertise Metagenomics, Microbial divrsity, Extremozymes I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard, however I have significant reservations, as outlined above. reply Respond to this report Responses (0) Verma D. Peer Review Report For: Facilitating bootstrapped and rarefaction-based microbiome diversity analysis with q2-boots [version 1; peer review: 1 approved, 2 approved with reservations] . F1000Research 2025, 14 :87 ( https://doi.org/10.5256/f1000research.171585.r370290) NOTE: it is important to ensure the information in square brackets after the title is included in this citation. The direct URL for this report is: https://f1000research.com/articles/14-87/v1#referee-response-370290 Alongside their report, reviewers assign a status to the article: Approved - the paper is scientifically sound in its current form and only minor, if any, improvements are suggested Approved with reservations - A number of small changes, sometimes more significant revisions are required to address specific details and improve the papers academic merit. Not approved - fundamental flaws in the paper seriously undermine the findings and conclusions Adjust parameters to alter display View on desktop for interactive features Includes Interactive Elements View on desktop for interactive features Competing Interests Policy Provide sufficient details of any financial or non-financial competing interests to enable users to assess whether your comments might lead a reasonable person to question your impartiality. Consider the following examples, but note that this is not an exhaustive list: Examples of 'Non-Financial Competing Interests' Within the past 4 years, you have held joint grants, published or collaborated with any of the authors of the selected paper. You have a close personal relationship (e.g. parent, spouse, sibling, or domestic partner) with any of the authors. You are a close professional associate of any of the authors (e.g. scientific mentor, recent student). You work at the same institute as any of the authors. You hope/expect to benefit (e.g. favour or employment) as a result of your submission. You are an Editor for the journal in which the article is published. Examples of 'Financial Competing Interests' You expect to receive, or in the past 4 years have received, any of the following from any commercial organisation that may gain financially from your submission: a salary, fees, funding, reimbursements. You expect to receive, or in the past 4 years have received, shared grant support or other funding with any of the authors. You hold, or are currently applying for, any patents or significant stocks/shares relating to the subject matter of the paper you are commenting on. Stay Updated Sign up for content alerts and receive a weekly or monthly email with all newly published articles Register with F1000Research Already registered? Sign in Not now, thanks close PLEASE NOTE If you are an AUTHOR of this article, please check that you signed in with the account associated with this article otherwise we cannot automatically identify your role as an author and your comment will be labelled as a “User Comment”. If you are a REVIEWER of this article, please check that you have signed in with the account associated with this article and then go to your account to submit your report, please do not post your review here. If you do not have access to your original account, please contact us . All commenters must hold a formal affiliation as per our Policies . The information that you give us will be displayed next to your comment. User comments must be in English, comprehensible and relevant to the article under discussion. We reserve the right to remove any comments that we consider to be inappropriate, offensive or otherwise in breach of the User Comment Terms and Conditions . Commenters must not use a comment for personal attacks. When criticisms of the article are based on unpublished data, the data should be made available. I accept the User Comment Terms and Conditions Please confirm that you accept the User Comment Terms and Conditions. Affiliation ✕ refresh Please enter your institution. Note: To add your institution or organisation, start typing the name and then select the correct name from the list. Where applicable, the name will appear in both the original language and in English. Do not paste in the name. If the name does not appear in the drop-down list, we will display the information you have entered. ✕ refresh Country/Region * USA UK Canada China France Germany Afghanistan Aland Islands Albania Algeria American Samoa Andorra Angola Anguilla Antarctica Antigua and Barbuda Argentina Armenia Aruba Australia Austria Azerbaijan Bahamas Bahrain Bangladesh Barbados Belarus Belgium Belize Benin Bermuda Bhutan Bolivia Bosnia and Herzegovina Botswana Bouvet Island Brazil British Indian Ocean Territory British Virgin Islands Brunei Bulgaria Burkina Faso Burundi Cambodia Cameroon Canada Cape Verde Cayman Islands Central African Republic Chad Chile China Christmas Island Cocos (Keeling) Islands Colombia Comoros Congo Cook Islands Costa Rica Cote d'Ivoire Croatia Cuba Cyprus Czech Republic Democratic Republic of the Congo Denmark Djibouti Dominica Dominican Republic Ecuador Egypt El Salvador Equatorial Guinea Eritrea Estonia Ethiopia Falkland Islands Faroe Islands Federated States of Micronesia Fiji Finland France French Guiana French Polynesia French Southern Territories Gabon Georgia Germany Ghana Gibraltar Greece Greenland Grenada Guadeloupe Guam Guatemala Guernsey Guinea Guinea-Bissau Guyana Haiti Heard Island and Mcdonald Islands Holy See (Vatican City State) Honduras Hong Kong Hungary Iceland India Indonesia Iran Iraq Ireland Israel Italy Jamaica Japan Jersey Jordan Kazakhstan Kenya Kiribati Kosovo (Serbia and Montenegro) Kuwait Kyrgyzstan Lao People's Democratic Republic Latvia Lebanon Lesotho Liberia Libya Liechtenstein Lithuania Luxembourg Macao Madagascar Malawi Malaysia Maldives Mali Malta Marshall Islands Martinique Mauritania Mauritius Mayotte Mexico Minor Outlying Islands of the United States Moldova Monaco Mongolia Montenegro Montserrat Morocco Mozambique Myanmar Namibia Nauru Nepal Netherlands Antilles New Caledonia New Zealand Nicaragua Niger Nigeria Niue Norfolk Island North Korea North Macedonia Northern Mariana Islands Norway Oman Pakistan Palau Palestinian Territory Panama Papua New Guinea Paraguay Peru Philippines Pitcairn Poland Portugal Puerto Rico Qatar Reunion Romania Russian Federation Rwanda Saint Helena Saint Kitts and Nevis Saint Lucia Saint Pierre and Miquelon Saint Vincent and the Grenadines Samoa San Marino Sao Tome and Principe Saudi Arabia Senegal Serbia Seychelles Sierra Leone Singapore Slovakia Slovenia Solomon Islands Somalia South Africa South Georgia and the South Sandwich Is South Korea South Sudan Spain Sri Lanka Sudan Suriname Svalbard and Jan Mayen Swaziland Sweden Switzerland Syria Taiwan Tajikistan Tanzania Thailand The Gambia The Netherlands Timor-Leste Togo Tokelau Tonga Trinidad and Tobago Tunisia Turkey Turkmenistan Turks and Caicos Islands Tuvalu UK USA Uganda Ukraine United Arab Emirates United States Virgin Islands Uruguay Uzbekistan Vanuatu Venezuela Vietnam Wallis and Futuna West Bank and Gaza Strip Western Sahara Yemen Zambia Zimbabwe Please select your country/region. You must enter a comment. Competing Interests Please disclose any competing interests that might be construed to influence your judgment of the article's or peer review report's validity or importance. Competing Interests Policy Provide sufficient details of any financial or non-financial competing interests to enable users to assess whether your comments might lead a reasonable person to question your impartiality. Consider the following examples, but note that this is not an exhaustive list: Examples of 'Non-Financial Competing Interests' Within the past 4 years, you have held joint grants, published or collaborated with any of the authors of the selected paper. You have a close personal relationship (e.g. parent, spouse, sibling, or domestic partner) with any of the authors. You are a close professional associate of any of the authors (e.g. scientific mentor, recent student). You work at the same institute as any of the authors. You hope/expect to benefit (e.g. favour or employment) as a result of your submission. You are an Editor for the journal in which the article is published. Examples of 'Financial Competing Interests' You expect to receive, or in the past 4 years have received, any of the following from any commercial organisation that may gain financially from your submission: a salary, fees, funding, reimbursements. You expect to receive, or in the past 4 years have received, shared grant support or other funding with any of the authors. You hold, or are currently applying for, any patents or significant stocks/shares relating to the subject matter of the paper you are commenting on. Please state your competing interests The comment has been saved. An error has occurred. Please try again. Cancel Post var lTitle = "Facilitating bootstrapped and rarefaction-based...".replace("'", ''); var linkedInUrl = "http://www.linkedin.com/shareArticle?url=https://f1000research.com/articles/14-87/v1" + "&title=" + encodeURIComponent(lTitle) + "&summary=" + encodeURIComponent('Read the article by '); var deliciousUrl = "https://del.icio.us/post?url=https://f1000research.com/articles/14-87/v1&title=" + encodeURIComponent(lTitle); var redditUrl = "http://reddit.com/submit?url=https://f1000research.com/articles/14-87/v1" + "&title=" + encodeURIComponent(lTitle); linkedInUrl += encodeURIComponent('Raspet I et al.'); var offsetTop = /chrome/i.test( navigator.userAgent ) ? 4 : -10; var addthis_config = { ui_offset_top: offsetTop, services_compact : "facebook,twitter,www.linkedin.com,www.mendeley.com,reddit.com", services_expanded : "facebook,twitter,www.linkedin.com,www.mendeley.com,reddit.com", services_custom : [ { name: "LinkedIn", url: linkedInUrl, icon:"/img/icon/at_linkedin.svg" }, { name: "Mendeley", url: "http://www.mendeley.com/import/?url=https://f1000research.com/articles/14-87/v1/mendeley", icon:"/img/icon/at_mendeley.svg" }, { name: "Reddit", url: redditUrl, icon:"/img/icon/at_reddit.svg" }, ] }; var addthis_share = { url: "https://f1000research.com/articles/14-87", templates : { twitter : "Facilitating bootstrapped and rarefaction-based microbiome diversity.... Raspet I et al., published by " + "@F1000Research" + ", https://f1000research.com/articles/14-87/v1" } }; if (typeof(addthis) != "undefined"){ addthis.addEventListener('addthis.ready', checkCount); addthis.addEventListener('addthis.menu.share', checkCount); } $(".f1r-shares-twitter").attr("href", "https://twitter.com/intent/tweet?text=" + addthis_share.templates.twitter); $(".f1r-shares-facebook").attr("href", "https://www.facebook.com/sharer/sharer.php?u=" + addthis_share.url); $(".f1r-shares-linkedin").attr("href", addthis_config.services_custom[0].url); $(".f1r-shares-reddit").attr("href", addthis_config.services_custom[2].url); $(".f1r-shares-mendelay").attr("href", addthis_config.services_custom[1].url); function checkCount(){ setTimeout(function(){ $(".addthis_button_expanded").each(function(){ var count = $(this).text(); if (count !== "" && count != "0") $(this).removeClass("is-hidden"); else $(this).addClass("is-hidden"); }); }, 1000); } close How to cite this report {{reportCitation}} Cancel Copy Citation Details $(function(){R.ui.buttonDropdowns('.dropdown-for-downloads');}); $(function(){R.ui.toolbarDropdowns('.toolbar-dropdown-for-downloads');}); $.get("/articles/acj/156295/171585") new F1000.Clipboard(); new F1000.ThesaurusTermsDisplay("articles", "article", "171585"); $(document).ready(function() { $( "#frame1" ).on('load', function() { var mydiv = $(this).contents().find("div"); var h = mydiv.height(); console.log(h) }); var tooltipLivingFigure = jQuery(".interactive-living-figure-label .icon-more-info"), titleLivingFigure = tooltipLivingFigure.attr("title"); tooltipLivingFigure.simpletip({ fixed: true, position: ["-115", "30"], baseClass: 'small-tooltip', content:titleLivingFigure + " " }); tooltipLivingFigure.removeAttr("title"); $("body").on("click", ".cite-living-figure", function(e) { e.preventDefault(); var ref = $(this).attr("data-ref"); $(this).closest(".living-figure-list-container").find("#" + ref).fadeIn(200); }); $("body").on("click", ".close-cite-living-figure", function(e) { e.preventDefault(); $(this).closest(".popup-window-wrapper").fadeOut(200); }); $(document).on("mouseup", function(e) { var metricsContainer = $(".article-metrics-popover-wrapper"); if (!metricsContainer.is(e.target) && metricsContainer.has(e.target).length === 0) { $(".article-metrics-close-button").click(); } }); var articleId = $('#articleId').val(); if($("#main-article-count-box").attachArticleMetrics) { $("#main-article-count-box").attachArticleMetrics(articleId, { articleMetricsView: true }); } }); var figshareWidget = $(".new_figshare_widget"); if (figshareWidget.length > 0) { window.figshare.load("f1000", function(Widget) { // Select a tag/tags defined in your page. In this tag we will place the widget. _.map(figshareWidget, function(el){ var widget = new Widget({ articleId: $(el).attr("figshare_articleId") //height:300 // this is the height of the viewer part. [Default: 550] }); widget.initialize(); // initialize the widget widget.mount(el); // mount it in a tag that's on your page // this will save the widget on the global scope for later use from // your JS scripts. This line is optional. //window.widget = widget; }); }); } close Error Close Add Reset F1000.MICROSERVICES.AFFILIATION = ''; $(document).ready(function () { $('.js-affiliations-form').each((index, form) => { new AffiliationForm({ formId: form.id, institutionErrorSelector: '.comment-enter-institution', departmentErrorSelector: '.comment-enter-department', placeSelector: '.js-add-comment-place', stateSelector: '.js-add-comment-state', zipCodeSelector: '.js-add-comment-zipcode', countrySelector: '.js-add-comment-country', countryErrorSelector: '.comment-enter-country', }); }); }); $(document).ready(function () { var reportIds = { "369093": 0, "369092": 0, "369095": 0, "369094": 0, "369091": 0, "374733": 0, "369100": 0, "374735": 0, "374734": 0, "369097": 0, "369096": 0, "369099": 0, "369098": 0, "374741": 0, "374740": 12, "374742": 0, "374737": 9, "374736": 0, "374739": 0, "374738": 0, "370285": 0, "370287": 0, "370286": 0, "370293": 0, "370292": 0, "370294": 0, "370289": 0, "370288": 0, "370291": 0, "370290": 13, }; $(".referee-response-container,.js-referee-report").each(function(index, el) { var reportId = $(el).attr("data-reportid"), reportCount = reportIds[reportId] || 0; $(el).find(".comments-count-container,.js-referee-report-views").html(reportCount); }); var uuidInput = $("#article_uuid"), oldUUId = uuidInput.val(), newUUId = "a271c46b-c2e9-477b-af44-e906386827ee"; uuidInput.val(newUUId); $("a[href*='article_uuid=']").each(function(index, el) { var newHref = $(el).attr("href").replace(oldUUId, newUUId); $(el).attr("href", newHref); }); }); An innovative open access publishing platform offering rapid publication and open peer review, whilst supporting data deposition and sharing. Browse Gateways Collections How it Works Contact For Developers Cookie Notice Privacy Notice RSS Submit Your Research Follow us © 2012-2026 F1000 Research Ltd. ISSN 2046-1402 | Legal | Partner of Research4Life • CrossRef • ORCID • FAIRSharing R.templateTests.simpleTemplate = R.template(' $text $text $text $text $text '); R.templateTests.runTests(); var F1000platform = new F1000.Platform({ name: "f1000research", displayName: "F1000Research", hostName: "f1000research.com", id: "1", editorialEmail: "
[email protected]", infoEmail: "
[email protected]", usePmcStats: true }); $(function(){R.ui.dropdowns('.dropdown-for-authors, .dropdown-for-about, .dropdown-for-myresearch');}); // $(function(){R.ui.dropdowns('.dropdown-for-referees');}); $(document).ready(function () { if ($(".cookie-warning").is(":visible")) { $(".sticky").css("margin-bottom", "35px"); $(".devices").addClass("devices-and-cookie-warning"); } $(".cookie-warning .close-button").click(function (e) { $(".devices").removeClass("devices-and-cookie-warning"); $(".sticky").css("margin-bottom", "0"); }); $("#tweeter-feed .tweet-message").each(function (i, message) { var self = $(message); self.html(linkify(self.html())); }); $(".partner").on("mouseenter mouseleave", function() { $(this).find(".gray-scale, .colour").toggleClass("is-hidden"); }); }); Sign In Remember me Forgotten your password? Sign In Cancel Email or password not correct. Please try again Please wait... $(function(){ // Note: All the setup needs to run against a name attribute and *not* the id due the clonish // nature of facebox... $("a[id=googleSignInButton]").click(function(event){ event.preventDefault(); $("input[id=oAuthSystem]").val("GOOGLE"); $("form[id=oAuthForm]").submit(); }); $("a[id=facebookSignInButton]").click(function(event){ event.preventDefault(); $("input[id=oAuthSystem]").val("FACEBOOK"); $("form[id=oAuthForm]").submit(); }); $("a[id=orcidSignInButton]").click(function(event){ event.preventDefault(); $("input[id=oAuthSystem]").val("ORCID"); $("form[id=oAuthForm]").submit(); }); }); If you've forgotten your password, please enter your email address below and we'll send you instructions on how to reset your password. The email address should be the one you originally registered with F1000. Email address not valid, please try again You registered with F1000 via Google, so we cannot reset your password. To sign in, please click here . If you still need help with your Google account password, please click here . You registered with F1000 via Facebook, so we cannot reset your password. To sign in, please click here . If you still need help with your Facebook account password, please click here . Code not correct, please try again Reset password Cancel Email us for further assistance. Server error, please try again. If your email address is registered with us, we will email you instructions to reset your password. If you think you should have received this email but it has not arrived, please check your spam filters and/or contact for further assistance. Please wait... Register $(document).ready(function () { signIn.createSignInAsRow($("#sign-in-form-gfb-popup")); $(".target-field").each(function () { var uris = $(this).val().split("/"); if (uris.pop() === "login") { $(this).val(uris.toString().replace(",","/")); } }); });
Text is read by the "Ask this paper" AI Q&A widget below.
Extraction quality varies by source — PMC NXML preserves structure
cleanly, OA-HTML may include some navigation residue, and OA-PDF can
have broken hyphenation. The publisher copy
(via DOI)
is the canonical version.