A Bioconductor/R Workflow for the Detection and... | 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/13-1346" }, "headline": "A Bioconductor/R Workflow for the Detection and Visualization of Differential Chromatin Loops", "datePublished": "2024-11-11T10:23:10", "dateModified": "2024-11-11T10:23:10", "author": [ { "@type": "Person", "name": "JP Flores" }, { "@type": "Person", "name": "Eric Davis" }, { "@type": "Person", "name": "Nicole Kramer" }, { "@type": "Person", "name": "Michael I Love" }, { "@type": "Person", "name": "Douglas H Phanstiel" } ], "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 Chromatin loops play a critical role in gene regulation by connecting regulatory loci and gene promoters. The identification of changes in chromatin looping between cell types or biological conditions is an important task for understanding gene regulation; however, the manipulation, statistical analysis, and visualization of data sets describing 3D chromatin structure is challenging due to the large and complex nature of the relevant data sets. Methods Here, we describe a workflow for identifying and visualizing differential chromatin loops from Hi-C data from two biological conditions using the ‘mariner’, ‘DESeq2’ and ‘plotgardener’ Bioconductor/R packages. The workflow assumes that Hi-C data has been processed into ‘.hic’ or ‘.cool’ files and that loops have been identified using an existing loop-calling algorithm. Results First, the ‘mariner’ package is used to merge redundant loop calls and extract interaction frequency counts. Next, ‘DESeq2’ is used to identify loops that exhibit differential contact frequencies between conditions. Finally, ‘plotgardener’ is used to visualize differential loops. Conclusion Chromatin interaction data is an important modality for understanding the mechanisms of transcriptional regulation. The workflow presented here outlines the use of ‘mariner’ as a tool to manipulate, extract, and aggregate chromatin interaction data, ‘DESeq2’ to perform differential analysis of these data across conditions, samples, and replicates, and ‘plotgardener’ to explore and visualize the results. " } { "@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/13-1346/v1", "name": "A Bioconductor/R Workflow for the Detection and Visualization of Differential..." } } ] } Home Browse A Bioconductor/R Workflow for the Detection and Visualization of Differential... ALL Metrics - Views Downloads Get PDF Get XML Cite How to cite this article Flores J, Davis E, Kramer N et al. A Bioconductor/R Workflow for the Detection and Visualization of Differential Chromatin Loops [version 1; peer review: 3 approved, 1 approved with reservations] . F1000Research 2024, 13 :1346 ( https://doi.org/10.12688/f1000research.153949.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 ▬ ✚ Method Article A Bioconductor/R Workflow for the Detection and Visualization of Differential Chromatin Loops [version 1; peer review: 3 approved, 1 approved with reservations] JP Flores 1 , Eric Davis https://orcid.org/0000-0003-4051-3217 1,2 , Nicole Kramer https://orcid.org/0000-0001-9617-9671 1,2 , Michael I Love 1,3,4 , Douglas H Phanstiel https://orcid.org/0000-0003-2123-0051 1,2,5-7 JP Flores 1 , Eric Davis https://orcid.org/0000-0003-4051-3217 1,2 , [...] Nicole Kramer https://orcid.org/0000-0001-9617-9671 1,2 , Michael I Love 1,3,4 , Douglas H Phanstiel https://orcid.org/0000-0003-2123-0051 1,2,5-7 PUBLISHED 11 Nov 2024 Author details Author details 1 Curriculum in Bioinformatics & Computational Biology, Department of Genetics, University of North Carolina at Chapel Hill, Chapel Hill, NC, 27514, USA 2 Thurston Arthritis Research Center, University of North Carolina at Chapel Hill, Chapel Hill, NC, 27514, USA 3 Department of Genetics, University of North Carolina at Chapel Hill, Chapel Hill, NC, 27514, USA 4 Department of Biostatistics, University of North Carolina at Chapel Hill, Chapel Hill, NC, 27514, USA 5 Curriculum in Genetics & Molecular Biology, Department of Genetics, University of North Carolina at Chapel Hill, Chapel Hill, NC, 27514, USA 6 Department of Cell Biology & Physiology, University of North Carolina at Chapel Hill, Chapel Hill, North Carolina, 27514, USA 7 Lineberger Comprehensive Cancer Center, University of North Carolina at Chapel Hill, Chapel Hill, NC, 27514, USA JP Flores Roles: Data Curation, Formal Analysis, Visualization, Writing – Original Draft Preparation, Writing – Review & Editing Eric Davis Roles: Methodology, Software Nicole Kramer Roles: Software Michael I Love Roles: Supervision, Writing – Review & Editing Douglas H Phanstiel Roles: Project Administration, Supervision, Writing – Review & Editing OPEN PEER REVIEW DETAILS REVIEWER STATUS This article is included in the Bioconductor gateway. Abstract Background Chromatin loops play a critical role in gene regulation by connecting regulatory loci and gene promoters. The identification of changes in chromatin looping between cell types or biological conditions is an important task for understanding gene regulation; however, the manipulation, statistical analysis, and visualization of data sets describing 3D chromatin structure is challenging due to the large and complex nature of the relevant data sets. Methods Here, we describe a workflow for identifying and visualizing differential chromatin loops from Hi-C data from two biological conditions using the ‘mariner’, ‘DESeq2’ and ‘plotgardener’ Bioconductor/R packages. The workflow assumes that Hi-C data has been processed into ‘.hic’ or ‘.cool’ files and that loops have been identified using an existing loop-calling algorithm. Results First, the ‘mariner’ package is used to merge redundant loop calls and extract interaction frequency counts. Next, ‘DESeq2’ is used to identify loops that exhibit differential contact frequencies between conditions. Finally, ‘plotgardener’ is used to visualize differential loops. Conclusion Chromatin interaction data is an important modality for understanding the mechanisms of transcriptional regulation. The workflow presented here outlines the use of ‘mariner’ as a tool to manipulate, extract, and aggregate chromatin interaction data, ‘DESeq2’ to perform differential analysis of these data across conditions, samples, and replicates, and ‘plotgardener’ to explore and visualize the results. READ ALL READ LESS Keywords Hi-C, differential analysis, data visualization, 3D chromatin structure Corresponding Author(s) Douglas H Phanstiel ( [email protected] ) Close Corresponding author: Douglas H Phanstiel Competing interests: No competing interests were disclosed. Grant information: This work was supported by the National Institutes of Health [R35-GM128645 to D.H.P., T32-GM067553 to E.S.D. and N.E.K.], the National Science Foundation Graduate Research Fellowship Program [DGE-2040435 to J.P.F., and the HHMI Gilliam Fellows Program [J.P.F.]. M.I.L. was supported by EOSS awards from the Chan Zuckerberg Initiative and from the Wellcome Trust. The funders had no role in study design, data collection and analysis, decision to publish, or preparation of the manuscript. Copyright: © 2024 Flores J 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: Flores J, Davis E, Kramer N et al. A Bioconductor/R Workflow for the Detection and Visualization of Differential Chromatin Loops [version 1; peer review: 3 approved, 1 approved with reservations] . F1000Research 2024, 13 :1346 ( https://doi.org/10.12688/f1000research.153949.1 ) First published: 11 Nov 2024, 13 :1346 ( https://doi.org/10.12688/f1000research.153949.1 ) Latest published: 11 Nov 2024, 13 :1346 ( https://doi.org/10.12688/f1000research.153949.1 ) Introduction 3D chromatin structure plays a critical role in gene regulation, cellular differentiation, and response to external stimuli. 1 – 3 Specifically, chromatin loops connect regulatory loci, such as enhancers, to gene promoters tuning levels of transcriptional. 4 , 5 Understanding how these loops change across cell types and conditions is vital for a mechanistic understanding of transcriptional control in mammalian cells and can inform our understanding of human disease. 6 – 9 The most comprehensive views of 3D chromatin structure are provided by Hi-C 10 , 11 and Micro-C 12 data sets; however the large and complex nature of these data sets make them challenging to manipulate and analyze. Here, we describe a Bioconductor 13 workflow for the detection and visualization of differential loops from Hi-C data. We apply this workflow to identify loops formed by an oncogenic fusion protein that is associated with acute myeloid leukemia (AML) and related hematopoietic malignancies. Most loops identified to date are driven by CTCF and cohesin proteins, which work harmoniously via loop extrusion. 14 , 15 However, we have recently shown that an oncogenic fusion protein, NUP98-HOXA9 (NHA9), forms loops via phase separation independently of canonical loop extrusion machinery and helps drive oncogenic transcription. 6 Using data from that manuscript, we describe a workflow for identifying loops formed by NHA9. Specifically, we compare loops from HEK293 cells that express either wild-type NHA9 (NHA9-WT) or a phase-separation-incompetent NHA9 mutant (NHA9-MT). The assumption is that the majority of loops in both cell types are driven by CTCF/cohesin and will not change between conditions; however, loops specific to the NHA9-WT expressing cells are driven by the phase separation capabilities of NHA9. This workflow is based largely on three packages distributed as part of the R/Bioconductor initiative. R/Bioconductor is an open-source project that houses tools for the analysis of high-throughput biological data and provides an environment for these tools to be used in-concert. This workflow uses the ‘mariner’, 16 ‘DESeq2’ 17 and ‘plotgardener’ 18 packages and can be completed entirely within the R programming environment. The ‘mariner’ package allows users to manipulate, extract, and aggregate chromatin interaction data quickly and efficiently. ‘DESeq2’ provides statistical methods to detect biological differences in read counts observed in high-throughput sequencing experiments, with applications to RNA-seq, ChIP-seq, ATAC-seq, and Hi-C count matrices. ‘plotgardener’ is a genomic data visualization package for R that allows users to programmatically and flexibly generate publication-quality multi-panel figures incorporating both genomic and non-genomic data. We recommend using the RStudio 19 environment to perform these analyses because it provides an interface for smoother and more efficient coding practices, but any suitable development platform would work. The procedure described here can be applied to any comparison of Hi-C or Micro-C data from two or more cell types or conditions and provide robust detection of differential loops. Methods Requirements and assumptions This workflow can be applied to a variety of differential looping experiments but has several requirements and assumptions. First, the workflow requires that at least two replicates were generated in order to estimate variability and enable accurate statistical inferences. Second, it requires that the raw reads (typically ‘.fastq’ format) have been processed into Hi-C contact matrices that are stored in either ‘.hic’, ‘.cool’, or ‘.mcool’ format. This is a computationally expensive process that typically requires a computational cluster and is performed outside of the R/Bioconductor environment. Several pipelines are available to perform this initial processing step. 20 – 23 Third, this workflow assumes that the pixels representing loops have been identified. Again, this is typically performed outside the R/Bioconductor environment and can be achieved via multiple existing algorithms. 20 , 24 – 43 Finally, because we are using ‘DESeq2’ and must identify scaling factors, this workflow assumes that the majority of loops are not changing between conditions. Package installation Detailed instructions for installation of the packages used in this workflow can be found on the R/Bioconductor website but code to install the main packages used in this workflow is shown below. ## Install Packages BiocManager::install(c( "mariner" , "marinerData" , "InteractionSet" , "data.table" , "plyranges" , "apeglm" , "DESeq2" , "plotgardener" , "RColorBrewer" )) A list of all the packages loaded in this workflow is included at the end, in the Session information section. 16 – 18 , 44 – 48 Once installed, the packages are loaded with the ‘library()’ function. ## Load packages library (mariner) library (marinerData) library (InteractionSet) library (data.table) library (plyranges) library (DESeq2) library (plotgardener) library (RColorBrewer) Use cases Experimental data The ‘.hic’ files used in this workflow were generated by Ahn et al. 6 and are available via GEO with accession number GSE143465. These experiments include four replicate Hi-C experiments for each of the two conditions. The raw reads were processed into 8 ‘.hic’ files using the Juicer pipeline. 20 The .hic files can be downloaded using the following code (note-these are large files that take a substantial length of time to download). ## Access WT Hi-C data from GEO wt_hicFiles <- c( " https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM4259nnn/GSM4259896/suppl/GSM4259896_HEK_HiC_NUP_IDR_WT_A9_1_1_inter_30.hic " , " https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM4259nnn/GSM4259897/suppl/GSM4259897_HEK_HiC_NUP_IDR_WT_A9_1_2_inter_30.hic " , " https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM4259nnn/GSM4259898/suppl/GSM4259898_HEK_HiC_NUP_IDR_WT_A9_2_1_inter_30.hic " , " https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM4259nnn/GSM4259899/suppl/GSM4259899_HEK_HiC_NUP_IDR_WT_A9_2_2_inter_30.hic " ) ## Download all WT.hic files of interest using a ‘wget’ command for (i in seq_along(wt_hicFiles)){ system(paste0( "wget -c" , wt_hicFiles[i], " -P data/" )) } ## Access FS Hi-C data from GEO fs_hicFiles <- c( " https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM4259nnn/GSM4259900/suppl/GSM4259900_HEK_HiC_NUP_IDR_FS_A9_1_1_inter_30.hic " , " https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM4259nnn/GSM4259901/suppl/GSM4259901_HEK_HiC_NUP_IDR_FS_A9_1_2_inter_30.hic " , " https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM4259nnn/GSM4259902/suppl/GSM4259902_HEK_HiC_NUP_IDR_FS_A9_2_1_inter_30.hic " , " https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM4259nnn/GSM4259903/suppl/GSM4259903_HEK_HiC_NUP_IDR_FS_A9_2_2_inter_30.hic " ) ## Download all FS.hic files of interest using a ‘wget’ command for (i in seq_along(fs_hicFiles)){ system(paste0( "wget -c " , fs_hicFiles[i], " -P data/" )) } ## Create a variable for.hic file file paths hicFiles <- list.files( "data" , pattern = "GSM4259*" , full.names = T ) ## replace hicFile names with shorter easier to read names names(hicFiles) <- c( "WT_rep1" , "WT_rep2" , "WT_rep3" , "WT_rep4" , "FS_rep1" , "FS_rep2" , "FS_rep3" , "FS_rep4" ) ## Access megaMap Hi-C data from GEO megaMap_hicFiles <- c( " https://ftp.ncbi.nlm.nih.gov/geo/series/GSE143nnn/GSE143465/suppl/GSE143465%5FHEK%5FHiC%5FNUP%5FIDR%5FFS%5FA9%5FmegaMap%5Finter%5F30.hic " , " https://ftp.ncbi.nlm.nih.gov/geo/series/GSE143nnn/GSE143465/suppl/GSE143465%5FHEK%5FHiC%5FNUP%5FIDR%5FWT%5FA9%5FmegaMap%5Finter%5F30.hic " ) ## Download all megaMap.hic files of interest using a ‘wget’ command for (i in seq_along(megaMap_hicFiles)){ system(paste0( "wget -c " , megaMap_hicFiles[i], " -P data/" )) } ## Create a variable for megaMap.hic file file paths megaMap_files <- list.files( "data" , pattern = "*megaMap*" , full.names = T ) ## Replace megaMap_files names with shorter easier to read names names(megaMap_files) <- c( "megaMap_FS" , "megaMap_WT" ) The loops for this workflow were identified using the Significant Interaction Peak (SIP) 24 and stored in a ‘BEDPE’ file format. The loop calls were generated by first merging all four ‘.hic’ files for each condition and then running SIP on the two resulting ‘.hic’ files. We find that typically we get more accurate loop calls after merging replicates, but it is also acceptable to call loops on each of the 8 ‘.hic’ files individually. The loop calls are available via the ‘marinerData’ package and can be loaded with the following code. ## Convert loops into GInteractions objects & expand to 10kb resolution wtLoops <- fread(marinerData::WT_5kbLoops.txt()) wtLoopsGI as_ginteractions()|> snapToBins(binSize = 10e3 ) fsLoops <- fread (marinerData::FS_5kbLoops.txt()) fsLoopsGI as_ginteractions()|> snapToBins(binSize = 10e3 ) These loop coordinates must be modified in three ways for compatibility with the rest of the workflow. First, they must be converted from ‘BEDPE’ formatted ‘.txt’ files into ‘GInteractions’ objects in R, which we can do using the ‘as_ginteractions()’ function. Second, decreasing the resolution from 5kb to 10kb leads to increased power to detect differential loops due to an increase in the counts per pixel. For this reason, we expand the resolution of our loops from 5kb to 10kb with the ‘snapToBins()’ function. ## Show summaries of wtLoopsGI summary(wtLoopsGI) [ 1 ] "GInteractions object of length 12095 with 9 metadata columns" ## Show summary of fsLoopsGI summary(fsLoopsGI) [ 1 ] "GInteractions object of length 8566 with 9 metadata columns" Third, because the ‘.hic’ files were assembled using a human ENSEMBL genome build that lacks the “chr” prefix to chromosomes, we also remove the “chr” prefix from the merged loops using the ‘seqlevelsStyle’ function and set it to ‘“ENSEMBL”’. ## change seqlevelsStyle such that "chr" is removed from seqnames() columns seqlevelsStyle(wtLoopsGI) <- "ENSEMBL" seqlevelsStyle(fsLoopsGI) <- "ENSEMBL" ## Create list of loops loopList <- list( "WT" = wtLoopsGI, "FS" = fsLoopsGI) The resulting object contain ‘GInteractions’ data as well as several columns of metadata as shown below: ## View loops loopList $WT GInteractions object with 12095 interactions and 9 metadata columns: seqnames1 ranges1 seqnames2 ranges2| color APScoreAvg ProbabilityofEnrichment | [ 1 ] 9 14460000 - 14470000 --- 9 14760000 - 14770000 | 0 , 0 , 0 3.27213 0.986854 [ 2 ] 9 89560000 - 89570000 --- 9 89810000 - 89820000 | 0 , 0 , 0 2.06276 0.952864 [ 3 ] 9 23720000 - 23730000 --- 9 23780000 - 23790000 | 0 , 0 , 0 1.95374 0.933563 [ 4 ] 9 128160000 - 128170000 --- 9 128670000 - 128680000 | 0 , 0 , 0 4.21739 0.991990 [ 5 ] 9 113100000 - 113110000 --- 9 113380000 - 113390000 | 0 , 0 , 0 2.52749 0.968201 ... ... ... ... ... ... . ... ... ... [ 12091 ] 17 16900000 - 16910000 --- 17 17090000 - 17100000 | 0 , 0 , 0 3.04485 0.968145 [ 12092 ] 17 7250000 - 7260000 --- 17 7470000 - 7480000 | 0 , 0 , 0 2.96609 0.982038 [ 12093 ] 17 46880000 - 46890000 --- 17 46950000 - 46960000 | 0 , 0 , 0 3.60656 0.978988 [ 12094 ] 17 17580000 - 17590000 --- 17 17690000 - 17700000 | 0 , 0 , 0 2.25041 0.915219 [ 12095 ] 17 47640000 - 47650000 --- 17 48070000 - 48080000 | 0 , 0 , 0 3.52043 0.980169 RegAPScoreAvg Avg_diffMaxNeihgboor_1 Avg_diffMaxNeihgboor_2 avg std value [ 1 ] 2.23353 1.00594 1.645508 3.43788 0.516423 4.33205 [ 2 ] 1.32675 1.12752 1.139458 2.05279 0.586137 3.05503 [ 3 ] 1.40833 0.62122 0.872226 2.15958 0.377306 2.71178 [ 4 ] 2.14430 2.21301 2.601333 2.86042 1.079651 4.82754 [ 5 ] 1.47012 1.38765 1.560463 2.21521 0.666935 3.44868 ... ... ... ... ... ... ... [ 12091 ] 1.79613 1.273048 1.572243 2.31531 0.617247 3.44691 [ 12092 ] 1.78843 1.487051 1.750331 2.69810 0.691201 4.01992 [ 12093 ] 2.46229 1.035204 1.397471 2.94288 0.412916 3.86306 [ 12094 ] 1.58783 0.665246 0.802734 1.87661 0.317383 2.46794 [ 12095 ] 2.43317 0.810456 1.486894 3.20053 0.673346 3.92093 ------- regions: 18474 ranges and 0 metadata columns seqinfo: 23 sequences from an unspecified genome; no seqlengths $FS GInteractions object with 8566 interactions and 9 metadata columns: seqnames1 ranges1 seqnames2 ranges2| color APScoreAvg ProbabilityofEnrichment RegAPScoreAvg | [ 1 ] 9 118640000 - 118650000 --- 9 119330000 - 119340000 | 0 , 0 , 0 2.61103 0.986044 1.41438 [ 2 ] 9 15280000 - 15290000 --- 9 15400000 - 15410000 | 0 , 0 , 0 2.45301 0.982802 1.54370 [ 3 ] 9 90300000 - 90310000 --- 9 90430000 - 90440000 | 0 , 0 , 0 2.54382 0.944492 1.88797 [ 4 ] 9 17810000 - 17820000 --- 9 18200000 - 18210000 | 0 , 0 , 0 4.73751 0.996093 3.17874 [ 5 ] 9 110180000 - 110190000 --- 9 111520000 - 111530000 | 0 , 0 , 0 3.40635 0.996545 1.80221 ... ... ... ... ... ... . ... ... ... ... [ 8562 ] 17 58800000 - 58810000 --- 17 59470000 - 59480000 | 0 , 0 , 0 3.34789 0.990769 1.90331 [ 8563 ] 17 46880000 - 46890000 --- 17 46950000 - 46960000 | 0 , 0 , 0 3.89043 0.982768 2.73390 [ 8564 ] 17 6810000 - 6820000 --- 17 7020000 - 7030000 | 0 , 0 , 0 3.19561 1.000000 1.83052 [ 8565 ] 17 28700000 - 28710000 --- 17 29050000 - 29060000 | 0 , 0 , 0 3.05602 0.972453 1.58662 [ 8566 ] 17 80630000 - 80640000 --- 17 80920000 - 80930000 | 0 , 0 , 0 2.88957 0.971356 1.37937 Avg_diffMaxNeihgboor_1 Avg_diffMaxNeihgboor_2 avg std value [ 1 ] 1.875585 2.121637 2.60512 0.794220 4.27231 [ 2 ] 1.491568 1.607766 2.73756 0.856876 4.06339 [ 3 ] 0.734045 0.797816 2.23905 0.404984 2.89153 [ 4 ] 0.971099 2.365460 4.68239 0.683678 5.54559 [ 5 ] 3.768934 3.891115 4.49898 1.492786 7.84915 ... ... ... ... ... ... [ 8562 ] 1.968047 2.17504 2.93624 1.128197 4.68562 [ 8563 ] 0.906871 1.43305 3.25531 0.368257 4.06142 [ 8564 ] 0.975828 1.25194 1.73927 0.548582 2.60667 [ 8565 ] 1.361369 2.01811 2.38214 0.691422 3.59225 [ 8566 ] 1.910529 1.94636 1.85494 0.672978 3.55319 ------- regions: 14370 ranges and 0 metadata columns seqinfo: 23 sequences from an unspecified genome; no seqlengths Merging loops Since loops were called in each condition separately, the union of these two sets will include many redundant loops. Moreover, due to the imprecise nature of loop calling, some of these shared loops will be assigned to slightly different, but nearby, pixels in each data set. Testing these redundant loop calls can lead to overcounting of differential loops as well as decreased statistical power due to multiple hypothesis testing correction. To address this issue, the ‘mariner’ package can remove redundant loops and create a set of consensus loop calls by clustering and merging loops between conditions using the ‘mergePairs()’ function. This ‘mergePairs()’ function uses ‘dbscan’ to cluster loops according to a user-defined ‘radius’ that specifies the maximum distance between two pixels for them to be considered as part of the same cluster. The user can specify the exact distance as well as the method of calculating distance. In the example below, we use a radius of 10kb and as measured from the center of pixels using the Manhattan distance. Importantly, users can also provide a ‘column’ argument for how to choose which pixel to use as the consensus pixel. In this case, we choose the pixel with the highest peak analysis score (from SIP). ## Remove redundant loops (i.e. loops that are present in both WT & FS ) mergedLoops <- mergePairs (loopList, radius = 10e3 , method = "manhattan" , column = "APScoreAvg" , pos = "center" ) Once clustered, ‘mergePairs()’ selects a representative pixel for each cluster using either the metadata column provided or, if ‘column=NULL’, the median of modes. Before using ‘mergePairs()’, there were 20,661 loops called across conditions and after merging loops, we have 16,491. ## View number of loops after merging summary(mergedLoops) [ 1 ] "MergedGInteractions object of length 16491 with 9 metadata columns" Extracting Hi-C Counts To determine which loops exhibit a change in contact frequency between conditions, we next need to extract the Hi-C contacts for each loop pixel across each of our replicates and conditions. This is accomplished using the ‘mariner’ function ‘pullHicPixels()’. ## Extract pixels pixels <- pullHicPixels( x = mergedLoops, files = hicFiles, binSize = 10e3 ) pixels class: InteractionMatrix dim: count matrix with 16491 interactions and 8 file(s) metadata( 3 ): binSize norm matrix assays( 1 ): counts rownames: NULL rowData names( 9 ): color APScoreAvg … std value colnames( 8 ): WT_rep1 WT_rep2 … FS_rep3 FS_rep4 colData names( 2 ): files fileNames type: MergedGInteractions regions: 23999 To view the count matrix, we can use the ‘counts()’ function. To increase our power to detect differential loops, we filter for loops that have at least 10 counts in at least 4 samples. ## Show count matrix housed within ‘pixels’ counts(pixels) DelayedMatrix object of type "double" : WT_rep1 WT_rep2 WT_rep3 ... FS_rep3 FS_rep4 [ 1 ,] 19 22 16 . 14 13 [ 2 ,] 29 41 25 . 31 29 [ 3 ,] 22 20 10 . 10 5 [ 4 ,] 12 11 9 . 8 13 [ 5 ,] 22 16 21 . 4 5 … . . . . . . [ 16487 ,] 42 56 55 . 48 43 [ 16488 ,] 49 52 53 . 52 90 [ 16489 ,] 54 53 59 . 41 50 [ 16490 ,] 73 103 65 . 91 113 [ 16491 ,] 26 35 31 . 28 13 ## Filter out loops with low counts (at least 10 counts in at least 4 samples) keep = 10 ) >= 4 pixels_filt <- pixels [keep,] Differential loop calling Next, we use ‘DESeq2’ to detect loop pixels that exhibit a statistically significant change in contact frequency between conditions. ‘DEseq2’ requires three pieces of information to run: 1) a count matrix where each row represents a loop and each column represents a Hi-C replicate sample, 2) a ‘data.frame’ called ‘colData’ that contains experimental and technical information about the samples (columns of the counts matrix), and 3) a design formula that describes the way the variables in colData will be used to model the counts. We constructed our counts matrix above using the ‘pullHicPixels()’ mariner function. We construct our ‘colData’ data frame which describes each sample's genotype and assigned replicate number using base R functions. ## Construct colData colData <- data.frame(condition = factor (rep(c( "WT" , "FS" ), each = 4 )), replicate = factor (rep( 1 : 4 , 2 ))) ## Add rownames to colData for DESeq object rownames(colData) <- colnames (counts (pixels_filt)) ## Ensure the colnames of the count matrix is equal to the rownames of the colData all(colnames(counts(pixels_filt)) == rownames(colData)) We build a ‘DESeq’ dataset and test for significant changes in loop pixel counts between the “WT” and “FS” conditions. The design formula specifies the major sources of variation to control for, as well as, the covariate to test for during differential loop calling. The last factor entered in the formula should be the condition of interest, as it will be the default factor that is tested by functions called later: ## Build a DESeq Dataset dds <- DESeqDataSetFromMatrix( countData = counts(pixels_filt), colData = colData, design = ~ replicate + condition) ## Perform differential expression analysis based on the Negative Binomial (a.k.a. Gamma-Poisson) distribution dds <- DESeq (dds) dds class: DESeqDataSet dim: 11961 8 metadata( 1 ): version assays( 4 ): counts mu H cooks rownames: NULL rowData names( 34 ): baseMean baseVar … deviance maxCooks colnames( 8 ): WT_rep1 WT_rep2 … FS_rep3 FS_rep4 colData names( 3 ): condition replicate sizeFactor To generate more accurate ‘log2foldchange’ (LFC) estimates, ‘DESeq2’ and ‘apeglm’ 46 implement shrinkage of the LFC estimates toward zero when the information for a feature is low, e.g. when the counts are low or highly variable (high dispersion). As with the shrinkage of dispersion estimates, LFC shrinkage uses information from all features to generate more accurate estimates. Specifically, the distribution of LFC estimates for all features is used (as a prior) to shrink the LFC estimates of genes with little information or high dispersion toward LFC estimates closer to zero. We can get shrunken LFC estimates with the code shown below: ## Get shrunken results res <- lfcShrink(dds, coef = "condition_WT_vs_FS" , type = "apeglm" ) summary(res, alpha = 0.05 ) out of 11961 with nonzero total read count adjusted p-value 0 (up) : 285 , 2.4 % LFC < 0 (down) : 55 , 0.46 % outliers [ 1 ] : 0 , 0 % low counts [ 2 ] : 0 , 0 % (mean count < 6 ) [ 1 ] see 'cooksCutoff' argument of ?results [ 2 ] see 'independentFiltering' argument of ?results Evaluating differential results It is important to ensure that individual samples and replicates didn’t significantly skew our results. Principal Component Analysis (PCA) is a technique used to emphasize variation and bring out strong patterns in a dataset (dimensionality reduction). ‘DESeq2’ offers a simple function to generate a PCA plot from the top 500 features as shown below ( Figure 1 ): ## Inspect the results with a PCA plot varianceStabilizingTransformation (dds)|> plotPCA(intgroup= "condition" ) + ggplot2::theme(aspect.ratio = 1 ) Figure 1. Scatter plot depicting results of PCA. We next generate an MA plot to evaluate the magnitude of fold changes and how they are distributed relative to mean expression. The ‘plotMA()’ function provided by ‘DESeq2’ displays the mean of the normalized counts versus the log2 fold changes for all loops tested, and highlights differential loops in blue ( Figure 2 ). This allows us to assess the general distribution of effect sizes, determine their direction of effect, and provide insight into the number of differential events. ## Inspect the results with an MA plot plotMA(res, alpha = 0.05 , ylim = c(- 4 , 4 )) Figure 2. MA plot displaying normalized counts versus log2 fold change for all loops. Differential loops are shown in blue. We can add the differential output from DESeq2 back to our ‘pixels’ object, then separate WT-specific and FS-specific loops using a BH-adjusted p-value of 0.05 and log2FoldChange above or below 0: ## Add results to rowData of our ‘pixels_filt’ InteractionMatrix rowData(pixels_filt) <- res ## Filter for statistically significant differential loops diffLoops <- pixels_filt[which(rowData(pixels_filt)$padj 0 | rowData(pixels_filt)$log2FoldChange < 0 )] Plot differential loops with ‘plotgardener’ Now that we have identified differential loops between “WT” and “FS” conditions, we can visualize them with ‘plotgardener’. We can visualize the differential loop with the lowest p-value using the code shown below. First, we initialize a ‘plotgardener’ page: ## Initiate plotgardener page pageCreate(width = 4.1 , height = 4.25 , showGuides = F ) For convenience, we make ‘pgParams’ to set parameters that are shared for all plots: ## Define shared parameters p <- pgParams(assembly = "hg19" , resolution = 10e3 , chrom = "9" , chromstart = 128420000 , chromend = 128750000 , zrange = c( 0 , 300 ), norm = "SCALE" , x = 0.25 , width = 3.5 , length = 3.5 , height = 1.5 ) We plot our HiC data in rectangular format using ‘plotHicRectangle’, add loop call annotations with ‘annoPixels()’, and add a heatmap legend using ‘annoHeatmapLegend()’. ## Plot WT Hi-C Mega Map wt_hic <- plotHicRectangle(data = megaMap_files[[ "megaMap_WT" ]], params = p, y = 0.25 ) ## Plot FS Hi-C Map fs_hic <- plotHicRectangle(data = megaMap_files[[ "megaMap_FS" ]], params = p, y = 1.8 ) ## Add legend for WT Hi-C map annoHeatmapLegend(plot = wt_hic, x = 3.85 , y = 0.25 , width = 0.1 , height = 0.75 , fontcolor = 'black' ) ## Add legend for FS Hi-C map annoHeatmapLegend(plot = fs_hic, x = 3.85 , y = 1.8 , width = 0.1 , height = 0.75 , fontcolor = 'black' ) Next, we add arrows that point to differential loops using the ‘annoPixels’ function: ## Annotate loops annoPixels(plot = wt_hic, data = interactions (diffLoops), type = "arrow" , shift = 2 , col = 'black' ) annoPixels(plot = fs_hic, data = interactions (diffLoops), type = "arrow" , shift = 2 , col = 'black' ) Finally, we add text labels, a gene track for both strands, and genomic coordinates ( Figure 3 ): ## Add text labels plotText(label = "WT" , x = 0.3 , y = 0.3 , just = c( 'top' , 'left' )) plotText(label = "FS" , x = 0.3 , y = 1.85 , just = c( 'top' , 'left' )) ## Add Genes + Gene labels plotGenes(chrom = paste0( "chr" , p$chrom), params = p, height = 0.5 , y = 3.35 ) plotGenomeLabel(params = p, chrom = paste0( "chr" , p$chrom), y = 3.9 ) Figure 3. Hi-C contact maps at the PBX3 locus of cells expressing either HOXA9-NUP98-WT-IDR (top) or HOXA9-NUP98-FS-IDR. Differential loops are highlighted black. Survey differential loops with ‘plotgardener’ An advantage to using ‘plotgardener’ instead of a genome browser is the ability to create “survey plots”. Survey plots allow us to easily generate multi-page pdfs of large sets of genomic regions. In this case, we will make a 50 page pdf displaying the Hi-C data surrounding the 50 loops with the lowest p values. # Create Survey Plot ------------------------------------------------------ ## Take Top 50 FS loops fsLoops_50 <- head(diffLoops [order(rowData(diffLoops)$padj, decreasing = F )], 50 ) ## Convert to GRanges Object fsLoops_gr <- GRanges(seqnames = as.character(seqnames(anchors(x = fsLoops_50, "first" ))), ranges = IRanges(start = start(anchors(fsLoops_50, "first" )), end = end(anchors(fsLoops_50, "second" ))), mcols = mcols (fsLoops_50)) ## Add buffer buffer <- 200e3 fsLoops_gr_buffer <- fsLoops_gr + buffer ## Make pdf pdf(file = "surveyPlot.pdf" , width = 4.1 , height = 4.25 ) ## Loop through each region for (i in seq_along(fsLoops_gr_buffer)){ ## Initiate plotgardener page pageCreate(width = 4.1 , height = 4.25 , showGuides = F ) ## Define shared parameters p <- pgParams(assembly = "hg19" , resolution = 10e3 , chrom = as.character(seqnames(fsLoops_gr_buffer))[i], chromstart = start(fsLoops_gr_buffer)[i], chromend = end(fsLoops_gr_buffer)[i], zrange = c( 0 , 300 ), norm = "SCALE" , x = 0.25 , width = 3.5 , length = 3.5 , height = 1.5 ) ## Plot WT Hi-C Mega Map wt_hic <- plotHicRectangle(data = megaMap_files[[ "megaMap_WT" ]], params = p, y = 0.25 ) ## Plot FS Hi-C Map fs_hic <- plotHicRectangle(data = megaMap_files[[ "megaMap_FS" ]], params = p, y = 1.8 ) ## Add legend for WT Hi-C map annoHeatmapLegend(plot = wt_hic, x = 3.85 , y = 0.25 , width = 0.1 , height = 0.75 , fontcolor = 'black' ) ## Add legend for FS Hi-C map annoHeatmapLegend(plot = fs_hic, x = 3.85 , y = 1.8 , width = 0.1 , height = 0.75 , fontcolor = 'black' ) ## Annotate loops annoPixels(plot = wt_hic, data = interactions(diffLoops), type = "arrow" ,shift = 2 , col = 'black' ) annoPixels(plot = fs_hic, data = interactions(diffLoops), type = "arrow" ,shift = 2 , col = 'black' ) ## Add text labels plotText(label = "WT" , x = 0.3 , y = 0.3 , just = c( 'top' , 'left' )) plotText(label = "FS" , x = 0.3 , y = 1.85 , just = c( 'top' , 'left' )) ## Add Genes + Gene labels plotGenes(chrom = paste0( "chr" , p$chrom), params = p, height = 0.5 , y = 3.35 ) plotGenomeLabel(params = p, chrom = paste0( "chr" , p$chrom), y = 3.9 ) } dev.off() Conclusion Chromatin interaction data is an important modality for understanding the mechanisms of transcriptional regulation. The workflow presented here outlines the use of ‘mariner’ as a tool to manipulate, extract, and aggregate chromatin interaction data, ‘DESeq2’ to perform differential analysis of these data across conditions, samples, and replicates, and ‘plotgardener’ to explore and visualize the results. Importantly, these tools work in concert within the R/Bioconductor environment, allowing for this workflow to be modular and compatible with other R/Bioconductor packages. For example, alternative Bioconductor packages for differential testing or for visualization of genomic data could easily be used within the R/Bioconductor environment. Our workflow allows for flexible input of Hi-C and Micro-C data in the form of ‘.hic’, ‘.cool’, and ‘.mcool’ files and visualizations are amenable to customizations with ‘grid’ graphics. This workflow provides a user-friendly pipeline for new and experienced genomicists and bioinformaticians. Packages used Here, we report the software versions that were used to produce this workflow. To accomplish this, we run ‘sessionInfo()’: ## Get session information sessionInfo() R version 4.3.1 ( 2023 - 06 - 16 ) Platform: x86_64-pc-linux-gnu ( 64 -bit) Running under: Red Hat Enterprise Linux 8.9 (Ootpa) Matrix products: default BLAS/LAPACK: /nas/longleaf/rhel8/apps/r/ 4.3.1 /lib/libopenblas_zenp-r0.3.23.so; LAPACK version 3.11.0 locale: [ 1 ] LC_CTYPE=en_US.UTF- 8 LC_NUMERIC=C LC_TIME=en_US.UTF- 8 LC_COLLATE=en_US.UTF- 8 [ 5 ] LC_MONETARY=en_US.UTF- 8 LC_MESSAGES=en_US.UTF- 8 LC_PAPER=en_US.UTF- 8 LC_NAME=C [ 9 ] LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF- 8 LC_IDENTIFICATION=C time zone: America/New_York tzcode source : system (glibc) attached base packages: [ 1 ] stats4 stats graphics grDevices utils datasets methods base other attached packages: [ 1 ] RColorBrewer_1.1- 3 plotgardener_1.8.3 DESeq2_1.42.1 plyranges_1.22.0 [ 5 ] data.table_1.15.4 InteractionSet_1.30.0 SummarizedExperiment_1.32.0 Biobase_2.62.0 [ 9 ] MatrixGenerics_1.14.0 matrixStats_1.3.0 GenomicRanges_1.54.1 GenomeInfoDb_1.38.8 [ 13 ] IRanges_2.36.0 S4Vectors_0.40.2 BiocGenerics_0.48.1 marinerData_1.2.0 [ 17 ] mariner_1.2.1 loaded via a namespace (and not attached): [ 1 ] DBI_1.2.3 bitops_1.0- 7 biomaRt_2.58.2 [ 4 ] rlang_1.1.4 magrittr_2.0.3 compiler_4.3.1 [ 7 ] RSQLite_2.3.7 GenomicFeatures_1.54.4 png_0.1- 8 [ 10 ] vctrs_0.6.5 stringr_1.5.1 pkgconfig_2.0.3 [ 13 ] crayon_1.5.3 fastmap_1.2.0 dbplyr_2.5.0 [ 16 ] XVector_0.42.0 labeling_0.4.3 utf8_1.2.4 [ 19 ] promises_1.2.1 Rsamtools_2.18.0 strawr_0.0.92 [ 22 ] purrr_1.0.2 bit_4.0.5 zlibbioc_1.48.2 [ 25 ] cachem_1.1.0 progress_1.2.3 blob_1.2.4 [ 28 ] later_1.3.2 rhdf5filters_1.14.1 DelayedArray_0.28.0 [ 31 ] interactiveDisplayBase_1.40.0 Rhdf5lib_1.24.2 BiocParallel_1.36.0 [ 34 ] parallel_4.3.1 prettyunits_1.2.0 R6_2.5.1 [ 37 ] stringi_1.8.4 rtracklayer_1.62.0 Rcpp_1.0.13 [ 40 ] assertthat_0.2.1 httpuv_1.6.15 Matrix_1.6- 3 [ 43 ] tidyselect_1.2.1 rstudioapi_0.16.0 abind_1.4- 5 [ 46 ] yaml_2.3.10 codetools_0.2- 19 curl_5.2.1 [ 49 ] lattice_0.22- 5 tibble_3.2.1 KEGGREST_1.42.0 [ 52 ] shiny_1.9.1 withr_3.0.1 gridGraphics_0.5- 1 [ 55 ] BiocFileCache_2.10.2 xml2_1.3.5 ExperimentHub_2.10.0 [ 58 ] Biostrings_2.70.3 filelock_1.0.3 pillar_1.9.0 [ 61 ] BiocManager_1.30.22 TxDb.Hsapiens.UCSC.hg19.knownGene_3.2.2 generics_0.1.3 [ 64 ] dbscan_1.2- 0 RCurl_1.98- 1.16 BiocVersion_3.18.1 [ 67 ] hms_1.1.3 ggplot2_3.5.1 munsell_0.5.1 [ 70 ] scales_1.3.0 xtable_1.8- 4 glue_1.7.0 [ 73 ] tools_4.3.1 AnnotationHub_3.10.1 BiocIO_1.12.0 [ 76 ] locfit_1.5- 9.8 GenomicAlignments_1.38.2 fs_1.6.4 [ 79 ] XML_3.99- 0.17 rhdf5_2.46.1 grid_4.3.1 [ 82 ] AnnotationDbi_1.64.1 colorspace_2.1- 0 GenomeInfoDbData_1.2.11 [ 85 ] HDF5Array_1.30.1 restfulr_0.0.15 cli_3.6.3 [ 88 ] rappdirs_0.3.3 fansi_1.0.6 S4Arrays_1.2.1 [ 91 ] dplyr_1.1.4 gtable_0.3.5 yulab.utils_0.1.5 [ 94 ] digest_0.6.36 SparseArray_1.2.4 ggplotify_0.1.2 [ 97 ] org. Hs.eg.db_3.17.0 farver_2.1.2 rjson_0.2.21 [ 100 ] htmltools_0.5.8.1 memoise_2.0.1 lifecycle_1.0.4 [ 103 ] httr_1.4.7 colourvalues_0.3.9 mime_0.12 [ 106 ] bit64_4.0.5 Ethics and consent Ethical approval and consent were not required. Data & Software availability Underlying data Gene Expression Omnibus (GEO): The Hi-C data used in this study. Accession number GSE143465; https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE143465 . 6 The chromatin loop data is available as part the ‘marinerData’ package. The source code the multipage pdf file generated by this workflow are available on GitHub: https://github.com/jpflores-13/F1000R and Archived source code: Zenodo: https://doi.org/10.5281/zenodo.13899138 License for Github(‘plotgardener’ & ‘mariner’): MIT License License for Zenodo: Creative Commons Attribution 4.0 International License for ‘DESeq2’: LGPL (≥ 3) All the packages used in this workflow are publicly available from the Bioconductor project (version 3.18) and the Comprehensive R Archive Network ( CRAN ). References 1. Zheng H, Xie W: The role of 3D genome organization in development and cell differentiation. Nat. Rev. Mol. Cell Biol. 2019 Sep; 20 (9): 535–550. PubMed Abstract | Publisher Full Text 2. Winick-Ng W, Kukalev A, Harabula I, et al. : Cell-type specialization is encoded by specific chromatin topologies. Nature. 2021 Sep x; 599 (7886): 684–691. PubMed Abstract | Publisher Full Text | Free Full Text 3. Cai D, Feliciano D, Dong P, et al. : Phase separation of YAP reorganizes genome topology for long-term YAP target gene expression. Nat. Cell Biol. 12/2019; 21 (12): 1578–1589. PubMed Abstract | Publisher Full Text | Free Full Text 4. Xiao JY, Hafner A, Boettiger AN: How subtle changes in 3D structure can create large changes in transcription. elife. 2021 Jul 9; 10 . PubMed Abstract | Publisher Full Text | Free Full Text 5. Greenwald WW, Li H, Benaglio P, et al. : Subtle changes in chromatin loop contact propensity are associated with differential gene regulation and expression. Nat. Commun. 12/2019; 10 (1): 1054. PubMed Abstract | Publisher Full Text | Free Full Text 6. Ahn JH, Davis ES, Daugird TA, et al. : Phase separation drives aberrant chromatin looping and cancer development. Nature. 2021 Jun 23; 1–5. 7. Lettice LA, Heaney SJH, Purdie LA, et al. : A long-range Shh enhancer regulates expression in the developing limb and fin and is associated with preaxial polydactyly. Hum. Mol. Genet. 2003 Jul 15; 12 (14): 1725–1735. PubMed Abstract | Publisher Full Text 8. Panarotto M, Davidson IF, Litos G, et al. : Cornelia de Lange syndrome mutations in NIPBL can impair cohesin-mediated DNA loop extrusion. Proc. Natl. Acad. Sci. USA. 2022 May 3; 119 (18): e2201029119. PubMed Abstract | Publisher Full Text | Free Full Text 9. Kon A, Shih LY, Minamino M, et al. : Recurrent mutations in multiple components of the cohesin complex in myeloid neoplasms. Nat. Genet. 2013 Oct; 45 (10): 1232–1237. PubMed Abstract | Publisher Full Text 10. Lieberman-Aiden E, van Berkum NL , Williams L, et al. : Comprehensive mapping of long-range interactions reveals folding principles of the human genome. Science. 2009 Oct 9; 326 (5950): 289–293. PubMed Abstract | Publisher Full Text | Free Full Text 11. Rao SSP, Huntley MH, Durand NC, et al. : A 3D Map of the Human Genome at Kilobase Resolution Reveals Principles of Chromatin Looping. Cell. 2014 Dec 18; 159 (7): 1665–1680. PubMed Abstract | Publisher Full Text | Free Full Text 12. Hsieh THS, Weiner A, Lajoie B, et al. : Mapping Nucleosome Resolution Chromosome Folding in Yeast by Micro-C. Cell. 2015 Jul 2; 162 (1): 108–119. PubMed Abstract | Publisher Full Text | Free Full Text 13. Huber W, Carey VJ, Gentleman R, et al. : Orchestrating high-throughput genomic analysis with Bioconductor. Nat. Methods. 2015 Feb; 12 (2): 115–121. PubMed Abstract | Publisher Full Text | Free Full Text 14. Davidson IF, Bauer B, Goetz D, et al. : DNA loop extrusion by human cohesin. Science. 2019 Dec 13; 366 (6471): 1338–1345. Publisher Full Text 15. Sanborn AL, Rao SSP, Huang SC, et al. : Chromatin extrusion explains key features of loop and domain formation in wild-type and engineered genomes. Proc. Natl. Acad. Sci. USA. 2015 Nov 24; 112 (47): E6456–E6465. PubMed Abstract | Publisher Full Text 16. Davis ES, Parker SM, Kramer NE, et al. : Mariner: explore the Hi-Cs. Bioinformatics. 2024 Jun 3; 40 (6). PubMed Abstract | Publisher Full Text | Free Full Text 17. Love MI, Huber W, Anders S: Moderated estimation of fold change and dispersion for RNA-seq data with DESeq2. Genome Biol. 2014; 15 (12): 550. PubMed Abstract | Publisher Full Text | Free Full Text 18. Kramer NE, Davis ES, Wenger CD, et al. : Plotgardener: cultivating precise multi-panel figures in R. Bioinformatics. 2022 Mar 28; 38 (7): 2042–2045. PubMed Abstract | Publisher Full Text | Free Full Text 19. RStudio Team: RStudio: Integrated Development Environment for R. Boston, MA: RStudio, PBC.; 2020. Reference Source 20. Durand NC, Shamim MS, Machol I, et al. : Juicer Provides a One-Click System for Analyzing Loop-Resolution Hi-C Experiments. Cell Syst. 2016 Jul; 3 (1): 95–98. PubMed Abstract | Publisher Full Text | Free Full Text 21. Hi-C Processing Pipeline – 4DN Data Portal. http 22. HiC Data Standards and Processing Pipeline – ENCODE. http 23. Servant N, Varoquaux N, Lajoie BR, et al. : HiC-Pro: an optimized and flexible pipeline for Hi-C data processing. Genome Biol. 12/2015; 16 (1): 259. PubMed Abstract | Publisher Full Text | Free Full Text 24. Rowley MJ, Poulet A, Nichols MH, et al. : Analysis of Hi-C data using SIP effectively identifies loops in organisms from C. elegans to mammals. Genome Res. 2020 Mar; 30 (3): 447–458. PubMed Abstract | Publisher Full Text | Free Full Text 25. Galan S, Serra F, Marti-Renom MA: Identification of chromatin loops from Hi-C interaction matrices by CTCF–CTCF topology classification. NAR Genomics and Bioinformatics. 2022 Mar 1; 4 (1): lqac021. PubMed Abstract | Publisher Full Text | Free Full Text 26. Luzhin AV, Golov AK, Gavrilov AA, et al. : LASCA: loop and significant contact annotation pipeline. Sci. Rep. 2021 Mar 18; 11 (1): 6361. PubMed Abstract | Publisher Full Text | Free Full Text 27. Cao Y, Liu S, Ren G, et al. : cLoops2: a full-stack comprehensive analytical tool for chromatin interactions. Nucleic Acids Res. 2022 Jan 11; 50 (1): 57–71. PubMed Abstract | Publisher Full Text | Free Full Text 28. Cao Y, Chen Z, Chen X, et al. : Accurate loop calling for 3D genomic data with cLoops. Bioinformatics. 2020 Feb 1; 36 (3): 666–675. PubMed Abstract | Publisher Full Text 29. Wolff J, Backofen R, Grüning B: Loop detection using Hi-C data with HiCExplorer. Gigascience. 2022 Jan 1; 11 : giac061. PubMed Abstract | Publisher Full Text | Free Full Text 30. Lagler TM, Abnousi A, Hu M, et al. : HiC-ACT: improved detection of chromatin interactions from Hi-C data via aggregated Cauchy test. Am. J. Hum. Genet. 2021 Feb 4; 108 (2): 257–268. PubMed Abstract | Publisher Full Text | Free Full Text 31. Statistical confidence estimation for Hi-C data reveals regulatory chromatin contacts.[cited 2024 Jul 28]. Reference Source 32. Kaul A, Bhattacharyya S, Ay F: Identifying statistically significant chromatin contacts from Hi-C data with FitHiC2. Nat. Protoc. 2020 Mar; 15 (3): 991–1012. PubMed Abstract | Publisher Full Text | Free Full Text 33. Bhattacharyya S, Chandra V, Vijayanand P, et al. : Identification of significant chromatin contacts from HiChIP data by FitHiChIP. Nat. Commun. 2019 Sep 17; 10 : 4221. PubMed Abstract | Publisher Full Text | Free Full Text 34. Mifsud B, Martincorena I, Darbo E, et al. : GOTHiC, a probabilistic model to resolve complex biases and to identify real interactions in Hi-C data. PLoS One. 2017 Apr 5; 12 (4): e0174744. PubMed Abstract | Publisher Full Text | Free Full Text 35. Carty M, Zamparo L, Sahin M, et al. : An integrated model for detecting significant chromatin interactions from high-resolution Hi-C data. Nat. Commun. 2017 May 17; 8 (1): 15454. PubMed Abstract | Publisher Full Text | Free Full Text 36. Osuntoki IG, Harrison A, Dai H, et al. : ZipHiC: a novel Bayesian framework to identify enriched interactions and experimental biases in Hi-C data. Bioinformatics. 2022 Jul 11; 38 (14): 3523–3531. PubMed Abstract | Publisher Full Text | Free Full Text 37. Wang X, Xu J, Zhang B, et al. : Genome-wide detection of enhancer-hijacking events from chromatin interaction data in rearranged genomes. Nat. Methods. 2021 Jun; 18 (6): 661–668. PubMed Abstract | Publisher Full Text | Free Full Text 38. Xu Z, Zhang G, Jin F, et al. : A hidden Markov random field-based Bayesian method for the detection of long-range chromosomal interactions in Hi-C data. Bioinformatics. 2016 Mar 1; 32 (5): 650–656. PubMed Abstract | Publisher Full Text | Free Full Text 39. Crowley C, Yang Y, Qiu Y, et al. : FIREcaller: Detecting frequently interacting regions from Hi-C data. Comput. Struct. Biotechnol. J. 2020 Dec 29; 19 : 355–362. Publisher Full Text 40. Salameh TJ, Wang X, Song F, et al. : A supervised learning framework for chromatin loop detection in genome-wide contact maps. Nat. Commun. 2020 Jul 9; 11 (1): 3428. PubMed Abstract | Publisher Full Text | Free Full Text 41. Flyamer IM, Illingworth RS, Bickmore WA: Coolpup.py: versatile pile-up analysis of Hi-C data. Bioinformatics. 2020 May 15; 36 (10): 2980–2985. PubMed Abstract | Publisher Full Text | Free Full Text 42. Roayaei Ardakany A, Gezer HT, Lonardi S, et al. : Mustache: multi-scale detection of chromatin loops from Hi-C and Micro-C maps using scale-space representation. Genome Biol. 2020 Sep 30; 21 (1): 256. PubMed Abstract | Publisher Full Text | Free Full Text 43. Matthey-Doret C, Baudry L, Breuer A, et al. : Computer vision for pattern detection in chromosome contact maps. Nat. Commun. 2020 Nov 16; 11 (1): 5795. PubMed Abstract | Publisher Full Text | Free Full Text 44. Lee S, Cook D, Lawrence M: plyranges: a grammar of genomic data transformation. Genome Biol. 2019 Jan 4; 20 (1): 4. PubMed Abstract | Publisher Full Text | Free Full Text 45. Lun ATL, Perry M, Ing-Simmons E: Infrastructure for genomic interactions: Bioconductor classes for Hi-C, ChIA-PET and related experiments. F1000Res. 2016 May 20; 5 : 950. Publisher Full Text 46. Zhu A, Ibrahim JG, Love MI: Heavy-tailed prior distributions for sequence count data: removing the noise and preserving large differences. Bioinformatics. 2019 Jun 1; 35 (12): 2084–2092. PubMed Abstract | Publisher Full Text | Free Full Text 47. Neuwirth E: ColorBrewer Palettes [R Package RColorBrewer Version 1.1-3].April 2022. Reference Source Reference Source 48. Extension of “data.frame” [R package data.table version 1.15.4].2024 Mar 30. Reference Source Comments on this article Comments (0) Version 1 VERSION 1 PUBLISHED 11 Nov 2024 ADD YOUR COMMENT Comment Author details Author details 1 Curriculum in Bioinformatics & Computational Biology, Department of Genetics, University of North Carolina at Chapel Hill, Chapel Hill, NC, 27514, USA 2 Thurston Arthritis Research Center, University of North Carolina at Chapel Hill, Chapel Hill, NC, 27514, USA 3 Department of Genetics, University of North Carolina at Chapel Hill, Chapel Hill, NC, 27514, USA 4 Department of Biostatistics, University of North Carolina at Chapel Hill, Chapel Hill, NC, 27514, USA 5 Curriculum in Genetics & Molecular Biology, Department of Genetics, University of North Carolina at Chapel Hill, Chapel Hill, NC, 27514, USA 6 Department of Cell Biology & Physiology, University of North Carolina at Chapel Hill, Chapel Hill, North Carolina, 27514, USA 7 Lineberger Comprehensive Cancer Center, University of North Carolina at Chapel Hill, Chapel Hill, NC, 27514, USA JP Flores Roles: Data Curation, Formal Analysis, Visualization, Writing – Original Draft Preparation, Writing – Review & Editing Eric Davis Roles: Methodology, Software Nicole Kramer Roles: Software Michael I Love Roles: Supervision, Writing – Review & Editing Douglas H Phanstiel Roles: Project Administration, Supervision, Writing – Review & Editing Competing interests No competing interests were disclosed. Grant information This work was supported by the National Institutes of Health [R35-GM128645 to D.H.P., T32-GM067553 to E.S.D. and N.E.K.], the National Science Foundation Graduate Research Fellowship Program [DGE-2040435 to J.P.F., and the HHMI Gilliam Fellows Program [J.P.F.]. M.I.L. was supported by EOSS awards from the Chan Zuckerberg Initiative and from the Wellcome Trust. 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: 11 Nov 2024, 13:1346 https://doi.org/10.12688/f1000research.153949.1 Copyright © 2024 Flores J 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 Flores J, Davis E, Kramer N et al. A Bioconductor/R Workflow for the Detection and Visualization of Differential Chromatin Loops [version 1; peer review: 3 approved, 1 approved with reservations] . F1000Research 2024, 13 :1346 ( https://doi.org/10.12688/f1000research.153949.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 11 Nov 2024 Views 0 Cite How to cite this report: Johannes F and Schlegel L. Reviewer Report For: A Bioconductor/R Workflow for the Detection and Visualization of Differential Chromatin Loops [version 1; peer review: 3 approved, 1 approved with reservations] . F1000Research 2024, 13 :1346 ( https://doi.org/10.5256/f1000research.168915.r346529 ) The direct URL for this report is: https://f1000research.com/articles/13-1346/v1#referee-response-346529 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 31 Dec 2024 Frank Johannes , Technical University of Munich, Munich, Germany Luca Schlegel , Technical University of Munich, Germany, Germany Approved with Reservations VIEWS 0 https://doi.org/10.5256/f1000research.168915.r346529 The authors present an R-based pipeline to visualize (differential) chromatin loops using processed .hic (or .cool/.mcool) files. The final output consists of heatmap-like plots comparing chromatin loops between two conditions (e.g., wild-type NHA9 (WT) and mutant NHA9 (MT)) within a ... Continue reading READ ALL The authors present an R-based pipeline to visualize (differential) chromatin loops using processed .hic (or .cool/.mcool) files. The final output consists of heatmap-like plots comparing chromatin loops between two conditions (e.g., wild-type NHA9 (WT) and mutant NHA9 (MT)) within a defined genomic range. The pipeline can be applied to other comparisons with appropriate Hi-C data. While the pipeline is well structured, modular and with clear data visualization, a few things can be improved: Major Points: Lack of Biological Motivation. The authors mention that "chromatin loops are crucial for gene regulation," but this statement lacks sufficient biological depth. Please consider expanding this section, beside your specific example of NHA9. Need for a Workflow Figure. While the paper describes the workflow in text, a small schematic figure illustrating the pipeline would capture more readers attention. This figure could include the inputs (e.g., .hic files), processing steps (e.g., loop extraction, differential analysis), and outputs (e.g., heatmaps, survey plots). Lack of Comparison with Other Visualization Tools. It is not clear why one should use this R-based pipeline over other existing visualization tools like genome browsers or Hi-C heatmap generators like Juicebox and HiGlass. While the survey plot feature is highlighted as an advantage, it seems primarily focused on saving time. Are there additional benefits? A small comparison with other existing loop visualization methods would be beneficial. Minor Edits: Critical Typo. The first command wget -c is missing a space after -c. Without this, the downloads fail. Unspecified Dependency. It was necessary to load the library(XML) to run the pipeline successfully. Please verify and include this dependency if required. Clarify Dataset Labels. The manuscript contrasts wild-type NHA9 (WT) with a mutant (MT), but the meaning of "FS" in the filenames is not explained. Is the rationale for developing the new method (or application) clearly explained? Partly Is the description of the method technically sound? Yes Are sufficient details provided to allow replication of the method development and its use by others? Yes If any results are presented, are all the source data underlying the results available to ensure full reproducibility? Yes Are the conclusions about the method and its performance adequately supported by the findings presented in the article? Yes Competing Interests: No competing interests were disclosed. Reviewer Expertise: epigenomics We confirm that we have read this submission and believe that we have an appropriate level of expertise to confirm that it is of an acceptable scientific standard, however we have significant reservations, as outlined above. Close READ LESS CITE CITE HOW TO CITE THIS REPORT Johannes F and Schlegel L. Reviewer Report For: A Bioconductor/R Workflow for the Detection and Visualization of Differential Chromatin Loops [version 1; peer review: 3 approved, 1 approved with reservations] . F1000Research 2024, 13 :1346 ( https://doi.org/10.5256/f1000research.168915.r346529 ) The direct URL for this report is: https://f1000research.com/articles/13-1346/v1#referee-response-346529 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: de Haro Blázquez R. Reviewer Report For: A Bioconductor/R Workflow for the Detection and Visualization of Differential Chromatin Loops [version 1; peer review: 3 approved, 1 approved with reservations] . F1000Research 2024, 13 :1346 ( https://doi.org/10.5256/f1000research.168915.r346522 ) The direct URL for this report is: https://f1000research.com/articles/13-1346/v1#referee-response-346522 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 24 Dec 2024 Raúl de Haro Blázquez , Josep Carreras Leukaemia Research Institute, Barcelona, Spain Approved VIEWS 0 https://doi.org/10.5256/f1000research.168915.r346522 Summary of the article: The authors present a workflow that integrates three distinct packages to handle interaction data, perform loop differential analysis, and visualize the results. They provide an example using data from a previous study to demonstrate the ... Continue reading READ ALL Summary of the article: The authors present a workflow that integrates three distinct packages to handle interaction data, perform loop differential analysis, and visualize the results. They provide an example using data from a previous study to demonstrate the workflow's application. Is the rationale for developing the new method (or application) clearly explained? Yes, the authors clearly articulate the need for a well-structured combination of packages to address downstream analysis for Hi-C data. Is the description of the method technically sound? Yes, the authors provide a detailed explanation of the three different packages used in their workflow. Are sufficient details provided to allow replication of the method development and its use by others? Yes, the article offers comprehensive information to enable others to replicate the method. If any results are presented, are all the source data underlying the results available to ensure full reproducibility? Yes, the data and plots are accessible on GitHub and can be easily reproduced by following the code provided in the article. Are the conclusions about the method and its performance adequately supported by the findings presented in the article? Partly. The Conclusions section reiterates the individual conclusions of each package which are commented in the “Results” section . As the authors are presenting a workflow, a "tool" for manipulating interaction data, they should include a global conclusion about the workflow itself, highlighting the advantages of combining these specific three packages over using alternatives. Minor Comments Introduction: For a broader audience, it would be beneficial to provide more information about the biology behind the formation of the oncogenic fusion protein. The importance of selecting this specific protein becomes clearer upon consulting reference (6). Methods: The authors mention that "this workflow assumes that the majority of loops are not changing between conditions." How does this apply to situations where we need to compare two different cell types (e.g., two related cell types in a differentiation process) without information on the extent of shared interactions? They should address this scenario or offer an alternative differential analysis method. Use Cases: - Experimental Data: It would be helpful if the authors provided mock Hi-C files for easy download, allowing users to replicate the workflow more conveniently. - Extracting Hi-C Counts: The authors suggest filtering out data with fewer than 10 counts. They should explain why they chose a threshold of 10 counts. Is this based on data distribution? If so, they should mention it. Is the rationale for developing the new method (or application) clearly explained? Yes Is the description of the method technically sound? Yes Are sufficient details provided to allow replication of the method development and its use by others? Yes If any results are presented, are all the source data underlying the results available to ensure full reproducibility? Yes Are the conclusions about the method and its performance adequately supported by the findings presented in the article? Partly Competing Interests: No competing interests were disclosed. Reviewer Expertise: Genomics - Epigenomics - Bioinformatics 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 de Haro Blázquez R. Reviewer Report For: A Bioconductor/R Workflow for the Detection and Visualization of Differential Chromatin Loops [version 1; peer review: 3 approved, 1 approved with reservations] . F1000Research 2024, 13 :1346 ( https://doi.org/10.5256/f1000research.168915.r346522 ) The direct URL for this report is: https://f1000research.com/articles/13-1346/v1#referee-response-346522 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: Vermeirssen V. Reviewer Report For: A Bioconductor/R Workflow for the Detection and Visualization of Differential Chromatin Loops [version 1; peer review: 3 approved, 1 approved with reservations] . F1000Research 2024, 13 :1346 ( https://doi.org/10.5256/f1000research.168915.r346527 ) The direct URL for this report is: https://f1000research.com/articles/13-1346/v1#referee-response-346527 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 23 Dec 2024 Vanessa Vermeirssen , Ghent University, Ghent, Belgium Approved VIEWS 0 https://doi.org/10.5256/f1000research.168915.r346527 This paper describes a workflow for identifying and visualizing differential chromatin loops from Hi-C data from two biological conditions using the ‘mariner’, ‘DESeq2’ and ‘plotgardener’ Bioconductor/R packages. It is technically sound and clearly described. The only comment I have ... Continue reading READ ALL This paper describes a workflow for identifying and visualizing differential chromatin loops from Hi-C data from two biological conditions using the ‘mariner’, ‘DESeq2’ and ‘plotgardener’ Bioconductor/R packages. It is technically sound and clearly described. The only comment I have is to add more details to “Evaluating differential results”: When do you conclude from the PCA that samples/replicates are skewing the results? Is top 500 features enough to plot? Also provide a result interpretation sentence for Figure 2. Is the rationale for developing the new method (or application) clearly explained? Yes Is the description of the method technically sound? Yes Are sufficient details provided to allow replication of the method development and its use by others? Yes If any results are presented, are all the source data underlying the results available to ensure full reproducibility? Yes Are the conclusions about the method and its performance adequately supported by the findings presented in the article? Yes Competing Interests: No competing interests were disclosed. Reviewer Expertise: Computational biology 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 Vermeirssen V. Reviewer Report For: A Bioconductor/R Workflow for the Detection and Visualization of Differential Chromatin Loops [version 1; peer review: 3 approved, 1 approved with reservations] . F1000Research 2024, 13 :1346 ( https://doi.org/10.5256/f1000research.168915.r346527 ) The direct URL for this report is: https://f1000research.com/articles/13-1346/v1#referee-response-346527 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: Soibam B. Reviewer Report For: A Bioconductor/R Workflow for the Detection and Visualization of Differential Chromatin Loops [version 1; peer review: 3 approved, 1 approved with reservations] . F1000Research 2024, 13 :1346 ( https://doi.org/10.5256/f1000research.168915.r343622 ) The direct URL for this report is: https://f1000research.com/articles/13-1346/v1#referee-response-343622 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 14 Dec 2024 Benjamin Soibam , University of Houston- Downtown, Houston, TX, USA Approved VIEWS 0 https://doi.org/10.5256/f1000research.168915.r343622 The authors provide a workflow/tool to identify and visualize differential chromatin loops from Hi-C data from two biological conditions. The tool uses existing packages in R such as the ‘mariner’, ‘DESeq2’ and ‘plotgardener’. 3D chromatin data has been widely ... Continue reading READ ALL The authors provide a workflow/tool to identify and visualize differential chromatin loops from Hi-C data from two biological conditions. The tool uses existing packages in R such as the ‘mariner’, ‘DESeq2’ and ‘plotgardener’. 3D chromatin data has been widely used to understand infer genome function. The authors have provided a workflow to compare 3D genome organization data from two conditions. This can help identify differences between the two conditions at the chromatin organization level. This tool will be very useful for many who are interested in understanding the rules govern 3D genome function and and its role in cellular processes. Is the rationale for developing the new method (or application) clearly explained? Yes Is the description of the method technically sound? Yes Are sufficient details provided to allow replication of the method development and its use by others? Yes If any results are presented, are all the source data underlying the results available to ensure full reproducibility? Yes Are the conclusions about the method and its performance adequately supported by the findings presented in the article? Yes Competing Interests: No competing interests were disclosed. Reviewer Expertise: Computational genomics, Biological Data Science, Applied Machine learning to understand 3D genome organization. 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 Soibam B. Reviewer Report For: A Bioconductor/R Workflow for the Detection and Visualization of Differential Chromatin Loops [version 1; peer review: 3 approved, 1 approved with reservations] . F1000Research 2024, 13 :1346 ( https://doi.org/10.5256/f1000research.168915.r343622 ) The direct URL for this report is: https://f1000research.com/articles/13-1346/v1#referee-response-343622 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 11 Nov 2024 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 4 Version 1 11 Nov 24 read read read read Benjamin Soibam , University of Houston- Downtown, Houston, USA Vanessa Vermeirssen , Ghent University, Ghent, Belgium Raúl de Haro Blázquez , Josep Carreras Leukaemia Research Institute, Barcelona, Spain Frank Johannes , Technical University of Munich, Munich, Germany Luca Schlegel , Technical University of Munich, Germany, Germany 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 Johannes F et al. 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. 31 Dec 2024 | for Version 1 Frank Johannes , Technical University of Munich, Munich, Germany Luca Schlegel , Technical University of Munich, Germany, Germany 0 Views copyright © 2025 Johannes F et al. 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 authors present an R-based pipeline to visualize (differential) chromatin loops using processed .hic (or .cool/.mcool) files. The final output consists of heatmap-like plots comparing chromatin loops between two conditions (e.g., wild-type NHA9 (WT) and mutant NHA9 (MT)) within a defined genomic range. The pipeline can be applied to other comparisons with appropriate Hi-C data. While the pipeline is well structured, modular and with clear data visualization, a few things can be improved: Major Points: Lack of Biological Motivation. The authors mention that "chromatin loops are crucial for gene regulation," but this statement lacks sufficient biological depth. Please consider expanding this section, beside your specific example of NHA9. Need for a Workflow Figure. While the paper describes the workflow in text, a small schematic figure illustrating the pipeline would capture more readers attention. This figure could include the inputs (e.g., .hic files), processing steps (e.g., loop extraction, differential analysis), and outputs (e.g., heatmaps, survey plots). Lack of Comparison with Other Visualization Tools. It is not clear why one should use this R-based pipeline over other existing visualization tools like genome browsers or Hi-C heatmap generators like Juicebox and HiGlass. While the survey plot feature is highlighted as an advantage, it seems primarily focused on saving time. Are there additional benefits? A small comparison with other existing loop visualization methods would be beneficial. Minor Edits: Critical Typo. The first command wget -c is missing a space after -c. Without this, the downloads fail. Unspecified Dependency. It was necessary to load the library(XML) to run the pipeline successfully. Please verify and include this dependency if required. Clarify Dataset Labels. The manuscript contrasts wild-type NHA9 (WT) with a mutant (MT), but the meaning of "FS" in the filenames is not explained. Is the rationale for developing the new method (or application) clearly explained? Partly Is the description of the method technically sound? Yes Are sufficient details provided to allow replication of the method development and its use by others? Yes If any results are presented, are all the source data underlying the results available to ensure full reproducibility? Yes Are the conclusions about the method and its performance adequately supported by the findings presented in the article? Yes Competing Interests No competing interests were disclosed. Reviewer Expertise epigenomics We confirm that we have read this submission and believe that we have an appropriate level of expertise to confirm that it is of an acceptable scientific standard, however we have significant reservations, as outlined above. reply Respond to this report Responses (0) Johannes F and Schlegel L. Peer Review Report For: A Bioconductor/R Workflow for the Detection and Visualization of Differential Chromatin Loops [version 1; peer review: 3 approved, 1 approved with reservations] . F1000Research 2024, 13 :1346 ( https://doi.org/10.5256/f1000research.168915.r346529) 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/13-1346/v1#referee-response-346529 keyboard_arrow_left Back to all reports Reviewer Report 0 Views copyright © 2024 de Haro Blázquez R. 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. 24 Dec 2024 | for Version 1 Raúl de Haro Blázquez , Josep Carreras Leukaemia Research Institute, Barcelona, Spain 0 Views copyright © 2024 de Haro Blázquez R. 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 Summary of the article: The authors present a workflow that integrates three distinct packages to handle interaction data, perform loop differential analysis, and visualize the results. They provide an example using data from a previous study to demonstrate the workflow's application. Is the rationale for developing the new method (or application) clearly explained? Yes, the authors clearly articulate the need for a well-structured combination of packages to address downstream analysis for Hi-C data. Is the description of the method technically sound? Yes, the authors provide a detailed explanation of the three different packages used in their workflow. Are sufficient details provided to allow replication of the method development and its use by others? Yes, the article offers comprehensive information to enable others to replicate the method. If any results are presented, are all the source data underlying the results available to ensure full reproducibility? Yes, the data and plots are accessible on GitHub and can be easily reproduced by following the code provided in the article. Are the conclusions about the method and its performance adequately supported by the findings presented in the article? Partly. The Conclusions section reiterates the individual conclusions of each package which are commented in the “Results” section . As the authors are presenting a workflow, a "tool" for manipulating interaction data, they should include a global conclusion about the workflow itself, highlighting the advantages of combining these specific three packages over using alternatives. Minor Comments Introduction: For a broader audience, it would be beneficial to provide more information about the biology behind the formation of the oncogenic fusion protein. The importance of selecting this specific protein becomes clearer upon consulting reference (6). Methods: The authors mention that "this workflow assumes that the majority of loops are not changing between conditions." How does this apply to situations where we need to compare two different cell types (e.g., two related cell types in a differentiation process) without information on the extent of shared interactions? They should address this scenario or offer an alternative differential analysis method. Use Cases: - Experimental Data: It would be helpful if the authors provided mock Hi-C files for easy download, allowing users to replicate the workflow more conveniently. - Extracting Hi-C Counts: The authors suggest filtering out data with fewer than 10 counts. They should explain why they chose a threshold of 10 counts. Is this based on data distribution? If so, they should mention it. Is the rationale for developing the new method (or application) clearly explained? Yes Is the description of the method technically sound? Yes Are sufficient details provided to allow replication of the method development and its use by others? Yes If any results are presented, are all the source data underlying the results available to ensure full reproducibility? Yes Are the conclusions about the method and its performance adequately supported by the findings presented in the article? Partly Competing Interests No competing interests were disclosed. Reviewer Expertise Genomics - Epigenomics - Bioinformatics 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) de Haro Blázquez R. Peer Review Report For: A Bioconductor/R Workflow for the Detection and Visualization of Differential Chromatin Loops [version 1; peer review: 3 approved, 1 approved with reservations] . F1000Research 2024, 13 :1346 ( https://doi.org/10.5256/f1000research.168915.r346522) 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/13-1346/v1#referee-response-346522 keyboard_arrow_left Back to all reports Reviewer Report 0 Views copyright © 2024 Vermeirssen 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. 23 Dec 2024 | for Version 1 Vanessa Vermeirssen , Ghent University, Ghent, Belgium 0 Views copyright © 2024 Vermeirssen 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 This paper describes a workflow for identifying and visualizing differential chromatin loops from Hi-C data from two biological conditions using the ‘mariner’, ‘DESeq2’ and ‘plotgardener’ Bioconductor/R packages. It is technically sound and clearly described. The only comment I have is to add more details to “Evaluating differential results”: When do you conclude from the PCA that samples/replicates are skewing the results? Is top 500 features enough to plot? Also provide a result interpretation sentence for Figure 2. Is the rationale for developing the new method (or application) clearly explained? Yes Is the description of the method technically sound? Yes Are sufficient details provided to allow replication of the method development and its use by others? Yes If any results are presented, are all the source data underlying the results available to ensure full reproducibility? Yes Are the conclusions about the method and its performance adequately supported by the findings presented in the article? Yes Competing Interests No competing interests were disclosed. Reviewer Expertise Computational biology 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) Vermeirssen V. Peer Review Report For: A Bioconductor/R Workflow for the Detection and Visualization of Differential Chromatin Loops [version 1; peer review: 3 approved, 1 approved with reservations] . F1000Research 2024, 13 :1346 ( https://doi.org/10.5256/f1000research.168915.r346527) 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/13-1346/v1#referee-response-346527 keyboard_arrow_left Back to all reports Reviewer Report 0 Views copyright © 2024 Soibam B. 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. 14 Dec 2024 | for Version 1 Benjamin Soibam , University of Houston- Downtown, Houston, TX, USA 0 Views copyright © 2024 Soibam B. 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 provide a workflow/tool to identify and visualize differential chromatin loops from Hi-C data from two biological conditions. The tool uses existing packages in R such as the ‘mariner’, ‘DESeq2’ and ‘plotgardener’. 3D chromatin data has been widely used to understand infer genome function. The authors have provided a workflow to compare 3D genome organization data from two conditions. This can help identify differences between the two conditions at the chromatin organization level. This tool will be very useful for many who are interested in understanding the rules govern 3D genome function and and its role in cellular processes. Is the rationale for developing the new method (or application) clearly explained? Yes Is the description of the method technically sound? Yes Are sufficient details provided to allow replication of the method development and its use by others? Yes If any results are presented, are all the source data underlying the results available to ensure full reproducibility? Yes Are the conclusions about the method and its performance adequately supported by the findings presented in the article? Yes Competing Interests No competing interests were disclosed. Reviewer Expertise Computational genomics, Biological Data Science, Applied Machine learning to understand 3D genome organization. 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) Soibam B. Peer Review Report For: A Bioconductor/R Workflow for the Detection and Visualization of Differential Chromatin Loops [version 1; peer review: 3 approved, 1 approved with reservations] . F1000Research 2024, 13 :1346 ( https://doi.org/10.5256/f1000research.168915.r343622) 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/13-1346/v1#referee-response-343622 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 = "A Bioconductor\/R Workflow for the Detection...".replace("'", ''); var linkedInUrl = "http://www.linkedin.com/shareArticle?url=https://f1000research.com/articles/13-1346/v1" + "&title=" + encodeURIComponent(lTitle) + "&summary=" + encodeURIComponent('Read the article by '); var deliciousUrl = "https://del.icio.us/post?url=https://f1000research.com/articles/13-1346/v1&title=" + encodeURIComponent(lTitle); var redditUrl = "http://reddit.com/submit?url=https://f1000research.com/articles/13-1346/v1" + "&title=" + encodeURIComponent(lTitle); linkedInUrl += encodeURIComponent('Flores J 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/13-1346/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/13-1346", templates : { twitter : "A Bioconductor\/R Workflow for the Detection and Visualization.... Flores J et al., published by " + "@F1000Research" + ", https://f1000research.com/articles/13-1346/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/153949/168915") new F1000.Clipboard(); new F1000.ThesaurusTermsDisplay("articles", "article", "168915"); $(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 = { "343621": 0, "343623": 0, "343622": 12, "343629": 0, "343628": 0, "343630": 0, "343625": 0, "343624": 0, "343627": 0, "343626": 0, "341013": 0, "341012": 0, "341015": 0, "341014": 0, "341009": 0, "341008": 0, "341011": 0, "341010": 0, "346525": 0, "346524": 0, "346527": 9, "346526": 0, "341017": 0, "341016": 0, "346523": 0, "346522": 12, "346529": 15, "346528": 0, "346531": 0, "346530": 0, }; $(".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 = "307ff2bb-d049-4c47-897f-4dbe71b3e33c"; 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.