EffiRadNet: Lightweight and User-Friendly... | 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/15-292" }, "headline": "EffiRadNet: Lightweight and User-Friendly Open-Source EfficientNet-Based Model for Radiology Image Binary...", "datePublished": "2026-02-18T06:47:59", "dateModified": "2026-02-18T06:47:59", "author": [ { "@type": "Person", "name": "Thomas Saliba" }, { "@type": "Person", "name": "David D. C. Rotzinger" }, { "@type": "Person", "name": "Gorun Ilanjan" }, { "@type": "Person", "name": "Guillaume Fahrni" } ], "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": " Objectives To develop and evaluate EffiRadNet, a lightweight, user-friendly, open-source image classification model based on EfficientNet-B0, tailored for simple binary classification tasks in radiology, involving visually distinct image. The model aims to provide high accuracy and usability while remaining computationally efficient and accessible to non-engineering users. Methods EffiRadNet was trained and validated on three task-specific, class-balanced datasets (200 training and 200 validation images per dataset) sourced from the Open Access Biomedical Image Search Engine. The three classification tasks included a “Medical” task distinguishing radiological from non-radiological medical images, a “Modality” task classifying X-rays versus other radological modalities, and a “X-rays” task differentiating chest X-rays from other anatomical X-rays. The model used transfer learning with EfficientNet-B0 pretrained on ImageNet, fine-tuned with a modified two-class output layer. Performance was assessed across different hyperparameter settings using AUC, sensitivity, specificity, positive predictive value and negative predictive value. Results EffiRadNet achieved strong classification performance across all tasks, with AUC values up to 1.0 under optimal hyperparameters (≥≤30 epochs, batch size = 16, learning rate = 0.0001). The “Medical” and “X-rays” models showed balanced sensitivity and specificity, while the “Modality” model displayed high sensitivity but variable specificity depending on hyperparameters. Training times ranged from 11 to 12 minutes, inference took less than 30 seconds per dataset. Conclusion EffiRadNet is a fast, accurate, and accessible AI tool for binary classification of radiological images. Its open-source availability and minimal hardware requirements make it well-suited for tasks such as image modality classification, dataset preprocessing, and quality control. " } { "@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/15-292/v1", "name": "EffiRadNet: Lightweight and User-Friendly Open-Source EfficientNet-Based..." } } ] } Home Browse EffiRadNet: Lightweight and User-Friendly Open-Source EfficientNet-Based... ALL Metrics - Views Downloads Get PDF Get XML Cite How to cite this article Saliba T, Rotzinger DDC, Ilanjan G and Fahrni G. EffiRadNet: Lightweight and User-Friendly Open-Source EfficientNet-Based Model for Radiology Image Binary Classification Tasks [version 1; peer review: awaiting peer review] . F1000Research 2026, 15 :292 ( https://doi.org/10.12688/f1000research.177499.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 ▬ ✚ Research Article EffiRadNet: Lightweight and User-Friendly Open-Source EfficientNet-Based Model for Radiology Image Binary Classification Tasks [version 1; peer review: awaiting peer review] Thomas Saliba 1 , David D. C. Rotzinger https://orcid.org/0000-0002-6321-3180 1 , Gorun Ilanjan https://orcid.org/0009-0000-9115-0108 1 , Guillaume Fahrni https://orcid.org/0000-0003-1583-9602 1 Thomas Saliba 1 , David D. C. Rotzinger https://orcid.org/0000-0002-6321-3180 1 , Gorun Ilanjan https://orcid.org/0009-0000-9115-0108 1 , Guillaume Fahrni https://orcid.org/0000-0003-1583-9602 1 PUBLISHED 18 Feb 2026 Author details Author details 1 Department of Diagnostic and Interventional Radiology, Lausanne University Hospital and University of Lausanne, Lausanne, Switzerland Thomas Saliba Roles: Conceptualization, Formal Analysis, Investigation, Resources, Writing – Original Draft Preparation David D. C. Rotzinger Roles: Conceptualization, Methodology, Resources, Validation, Visualization, Writing – Review & Editing Gorun Ilanjan Roles: Formal Analysis, Investigation, Methodology, Resources, Visualization, Writing – Review & Editing Guillaume Fahrni Roles: Conceptualization, Data Curation, Investigation, Methodology, Project Administration, Resources, Supervision, Validation, Visualization, Writing – Review & Editing OPEN PEER REVIEW REVIEWER STATUS AWAITING PEER REVIEW This article is included in the Software and Hardware Engineering gateway. This article is included in the Artificial Intelligence and Machine Learning gateway. This article is included in the NEUBIAS - the Bioimage Analysts Network gateway. Abstract Objectives To develop and evaluate EffiRadNet, a lightweight, user-friendly, open-source image classification model based on EfficientNet-B0, tailored for simple binary classification tasks in radiology, involving visually distinct image. The model aims to provide high accuracy and usability while remaining computationally efficient and accessible to non-engineering users. Methods EffiRadNet was trained and validated on three task-specific, class-balanced datasets (200 training and 200 validation images per dataset) sourced from the Open Access Biomedical Image Search Engine. The three classification tasks included a “Medical” task distinguishing radiological from non-radiological medical images, a “Modality” task classifying X-rays versus other radological modalities, and a “X-rays” task differentiating chest X-rays from other anatomical X-rays. The model used transfer learning with EfficientNet-B0 pretrained on ImageNet, fine-tuned with a modified two-class output layer. Performance was assessed across different hyperparameter settings using AUC, sensitivity, specificity, positive predictive value and negative predictive value. Results EffiRadNet achieved strong classification performance across all tasks, with AUC values up to 1.0 under optimal hyperparameters (≥≤30 epochs, batch size = 16, learning rate = 0.0001). The “Medical” and “X-rays” models showed balanced sensitivity and specificity, while the “Modality” model displayed high sensitivity but variable specificity depending on hyperparameters. Training times ranged from 11 to 12 minutes, inference took less than 30 seconds per dataset. Conclusion EffiRadNet is a fast, accurate, and accessible AI tool for binary classification of radiological images. Its open-source availability and minimal hardware requirements make it well-suited for tasks such as image modality classification, dataset preprocessing, and quality control. READ ALL READ LESS Keywords Radiology; Software; Machine Learning; Artificial Intelligence; Diagnostic Imaging Corresponding Author(s) Guillaume Fahrni ( [email protected] ) Close Corresponding author: Guillaume Fahrni Competing interests: No competing interests were disclosed. Grant information: The author(s) declared that no grants were involved in supporting this work. Copyright: © 2026 Saliba T 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: Saliba T, Rotzinger DDC, Ilanjan G and Fahrni G. EffiRadNet: Lightweight and User-Friendly Open-Source EfficientNet-Based Model for Radiology Image Binary Classification Tasks [version 1; peer review: awaiting peer review] . F1000Research 2026, 15 :292 ( https://doi.org/10.12688/f1000research.177499.1 ) First published: 18 Feb 2026, 15 :292 ( https://doi.org/10.12688/f1000research.177499.1 ) Latest published: 18 Feb 2026, 15 :292 ( https://doi.org/10.12688/f1000research.177499.1 ) Introduction In recent years, interest in artificial intelligence (AI) in radiology has increased. 1 , 2 Improvements in algorithms and technological progress have enabled this rapid evolution, generating significant interest due to its revolutionary potential in the field of radiology. 3 AI in radiology is currently applied in many different ways, from clinical tasks (lesion detection and characterization, segmentation, diagnosis, risk prediction, treatment response etc.) to image and workflow optimization (image reconstruction, report generation, integrated diagnostics, patient prioritization, etc.). 4 Image classification AI algorithms in particular are used for clinical tasks in radiology, which is a specialty fundamentally based on human image interpretation. Recent algorithmic advances have primarily focused on deep learning and the use of CNNs (Convolutional Neural Networks). 5 These algorithms are predominantly used for any task requiring image analysis, with numerous applications such as lung cancer screening, liver lesion characterization, or breast cancer detection. 6 – 8 However, image classification is complex and often requires specialized algorithms that are computationally intensive, costly in time and money, and require expertise, with increasingly complex algorithms needed to achieve high performance. 9 Not all image classification tasks are necessarily complex or require complex algorithms. For example, when classifying easily distinguishable images, where good performance can be achieved after training with as few as 100 images per class. 10 As the potential applications of simple classification tasks in radiology increase, many remain largely unexplored to date. For example, image modality classification (CT or MRI images), radiography incidence classification (frontal or lateral radiographs), acquisition phase classification (non-contrast, arterial or venous phase), or MRI sequence type classification (T1, T2, Flair) are applications that could be explored in an AI data labelling context, particularly for quality control or research purposes. For such simple classifications, complex algorithms are not necessary. There is value in having simple, fast, resource-efficient classification algorithms that don’t require advanced expertise and can be implemented and used locally. Several classification models exist for simple classification tasks. One popular and easy-to-use algorithm is EfficientNet. 11 EfficientNet is a CNN designed to be both lightweight and high performing. Unlike classical architectures like ResNet, it uses balanced scaling of depth, width and resolution, enabling high performance with compact models. Although EfficientNet offers an efficient architecture, it is not optimized for radiological images out of the box. This is because radiological image characteristics (artifacts, contrast, low variability) differ from classical datasets like ImageNet. Therefore, we present in this paper a simple and efficient classification model for easily distinguishable radiological images based on EfficientNet, with parameter optimization to achieve highly accurate, fast, resource-efficient classification that doesn’t require advanced expertise to operate. The model, named EffiRadNet, is available open-source under a MIT licence, with source code and pre-trained models for the three specific tasks described in this paper available at https://github.com/gfahrni/effiradnet . Methods Datasets All images used for training datasets were collected on the Open Access Biomedical Image Search Engine ( https://openi.nlm.nih.gov/ ), an open-access biomedical image search engine developed by the U.S. National Library of Medicine (NLM) that enables retrieval of annotated medical images from scientific literature and clinical datasets. 12 Three task-specific image datasets were created ( Figure 1 and Table 1 ) to train and assess the performance of three task-specific models using EffiRadNet. Figure 1. Overview of the study workflow illustrating the training and testing process of three task-specific datasets using EffiRadNet. Each dataset consists of 200 images, evenly divided into two classes (100 images per class). The models are trained on these datasets and subsequently evaluated using a validation set of 200 distinct images with identical class distribution. The first dataset, “Medical dataset”, is designed to classifies radiological images from other medical images. The second dataset, “Modality dataset”, classifies X-rays from other radiological images. The third dataset, “Validation dataset”, classifies chest X-rays versus other types of X-rays. Table 1. Summary of the three class-balanced image datasets used for model training. Identical validation datasets (same image distribution and sample sizes) were created for evaluation of the trained models. Dataset name Class 1 (n = 100) Class 2 (n = 100) Medical Dataset Radiological Images (100) Non-Radiological Medical Images (100) Subgroups distribution 5 subgroups: • Radiography (20) • CT (20) • MRI (20) • Ultrasound (20) • Fluoroscopy (20) 10 subgroups: • Pathology macro (10) • Pathology micro (10) • Pathology fluorescence (10) • Endoscopy thorax (10) • Endoscopy abdomen (10) • Surgery thorax (10) • Surgery abdomen (10) • Clinical ophthalmology (10) • Clinical dermatology (10) • Clinical dental (10) Modality Dataset X-ray Images (100) Other Radiological Modalities (100) Subgroup distribution 6 subgroups: • Chest x-ray (50) • Abdomen x-rays (10) • Foot x-rays (10) • Leg x-rays (10) • Neck x-rays (10) • Shoulder x-rays (10) 10 subgroups: • Chest CT (10) • Abdomen CT (10) • Head CT (10) • Abdomen MRI (10) • Head MRI (10) • Chest MRI (10) • Abdomen US (10) • Musculoskeletal US (10) • Chest XA (10) • Abdomen XA (10) X-rays Dataset Chest X-rays (100) Other Organs X-rays (100) Subgroup distribution No subgroups 10 subgroups (10 each): • Neck (10) • Shoulder (10) • Arm (10) • Wrist (10) • Hand (10) • Abdomen (10) • Leg (10) • Knee (10) • Ankle (10) • Foot (10) Each Dataset contained 400 images, 200 for training and 200 for validation. Both training and validation sets were class-balanced, with 100 images per class (class 1/class 2) to mitigate bias during model development. Given the limited dataset size and EfficientNet’s pre-trained efficiency, we prioritized a class-balanced training/validation split (200/200) over a traditional three-compartment paradigm (training/validation/test sets). The first image dataset, named the “ Medical ” dataset, was compiled with the aim of classifying between 100 radiological images and 100 non-radiological medical images. Non-radiological images included 10 subgroups of 10 images of different and popular non-radiological images (pathology macro, pathology micro, pathology fluorescence, endoscopy thorax, endoscopy abdomen, surgery thorax, surgery abdomen, clinical ophthalmology, clinical dermatology, clinical dental). Radiological images included 5 subgroups of 20 images of popular radiological images modality (radiography, CT-scan, MRI, ultrasound, fluroscopy). The second image dataset, named the “ Modality ” dataset, was compiled with the aim of classifying between 100 x-rays images and 100 other radiological modality images such as computed tomography (CT), magnetic resonance imaging (MRI), ultrasound (US) or x-ray angiography (XA). Other radiological modality images included 10 subgroups of 10 images of different modality and anatomical location (chest CT, abdomen CT, head CT, abdomen MRI, head MRI, chest MRI, abdomen US, musculoskeletal US, chest XA, abdomen XA). The third image datasets, named the “ Xrays ”, was compiled with the aim of classifying 100 chest x-rays images and 100 other organs x-rays images. X-ray images of other organs were put into 10 subgroups of 10 images of different organs x-rays (neck, shoulder, arm, wrist, hand, abdomen, leg, knee, ankle, foot). Images preprocessing Images were collected in JPEG (.jpg) format and labelled individually (e.g. abdomenCT001.jpg). If the images had any markings, such as letters, they were manually removed or hidden in order to prevent “shortcut learning” whereby the algorithm learns to recognize features such as letters or chest-tubes to prevent them being used as a proxy to classify images. 13 For each dataset and validation sets, images were organised in two separate folders, with each name corresponding to a class (e.g. one folder with all class A images and the other with all class B) images. Once the EfficientNet algorithm is initialized, input radiological images undergo the following preprocessing steps. All images were resized to a standardized 224×224 pixels to match the model’s input dimensions. Pixel values were automatically scaled to [0, 1] using PyTorch’s ToTensor() to normalise them. Data augmentation (e.g., rotation, flipping) was considered but not implemented in this version to keep in line with the concept of a straightforward, easy-to-use algorithm Code and model architecture The model is based on EfficientNet-B0, a lightweight and computationally efficient convolutional neural network known for its high performance on image classification tasks with relatively low resource usage. We employed transfer learning by using a pretrained EfficientNet-B0 model (ImageNet weights) and fine-tuning the final layers to adapt to our radiological classification task. The output layer was modified to include 2 output nodes, corresponding to the two target classes (ClassA and ClassB). Additional Dense layers were not introduced beyond the EfficientNet head, as the architecture provided sufficient representation power for the classification task. The model was trained using the Adam optimizer with a learning rate range of 0.01 to 0.001. We used cross-entropy loss, as it is suitable for multi-class classification problems. Dropout regularization (p = 0.5) was applied in the classifier head (as per EfficientNet-B0 default) to mitigate the risks of overfitting. The training parameters included a batch size range of 16 to 32 (shuffle=True), and training was performed for 5 to 40 epochs, depending on convergence behaviour observed during early experiments. All parameters are manually adjustable in the code. At each epoch, the model parameters were updated using backpropagation based on the computed loss. Model performance was monitored by printing the training loss after each epoch. No early stopping or learning rate scheduling was applied at this stage, as the goal was to establish a baseline for performance. After training, the final model weights were saved using PyTorch’s torch.save() function. The model’s state dictionary was exported to a.pth file, which is markedly smaller than standard pretrained architectures commonly used in medical imaging, such as DenseNet-121 (≈ 32 MB), or 3D UNet and Swin-UNETR models (≈ 300 MB – 1 GB), allowing for future loading and inference without retraining. Training protocol To the lightweight capability and accessibility of the lightweight model, a non-professional computer was deliberately chosen for training and testing EffiRadNet. The computer used was a 2021 Apple MacBook Pro M1 Pro, with 32 GB of unified memory, equipped with a 10-core CPU (8 performance and 2 efficiency cores), a 16-core integrated GPU, and a 16-core Neural Engine. This configuration supports efficient on-device AI computation and demonstrates that training and testing can be performed without access to high-end GPU clusters. The three training datasets (i.e., “Medical”, “Modality”, and “Xrays” datasets, as defined above) were organized into three folders named accordingly. Each folder contained two subfolders, one for each class, named using the dataset and class label (e.g., “medical-radiology” and “medical-other” for the “medical” dataset folder). The subfolders contained all the corresponding JPEG images. The three validation datasets were organized using the same folder structure and naming convention as the training datasets. Both the training and validation dataset folders were placed within a single root directory for each set, allowing for straightforward path input and identification within the EffiRadNet code during training and validation. All output models (.pth files) were saved within the corresponding set root directory. Reproducibility The model was implemented and trained using Visual Studio Code (VS Code; Version 1.99.3, Universal build, Microsoft Corporation, Redmond, WA, USA) on the macOS platform. All code was executed in a Python 3.10.1 environment with GPU acceleration via PyTorch’s Metal Performance Shaders (MPS) backend. To ensure consistency, VS Code was configured with default localization settings (English/US) and extensions for Python development (e.g., Pylance, Jupyter). To maximize accessibility and reproducibility for non-engineering users, the code was separated into main sections (i.e. “Training” and “Testing” sections) fully annotated in Python using clear, sectioned comments to help users understand each step, from data loading to performance evaluation. Key operations (e.g., model training, metric calculation) were explicitly labelled to enhance readability without requiring coding expertise. This study was conducted in accordance with the Checklist for Artificial Intelligence in Medical Imaging (CLAIM), a validated framework for assessing AI applications in medical imaging (available in the Data availability section). Model testing and metrics We evaluated the three distinct models (“Medical”, “Modality” and “Xray”) under identical conditions to compare performance. Our aim was to find the hyperparameter sets yielding the highest AUC and balanced sensitivity/specificity for each model. To identify trade-offs between metrics (e.g., high sensitivity vs. specificity) under different configurations we varied key hyperparameters. These were the number of epochs (5 to 40), the batch size (16 to 32) and the learning rate (0.0001 to 0.001). Grid searches were conducted to identify optimal hyperparameter combinations for each model. Finally, we evaluated the performance metrics, looking at the sensitivity (true positive rate) and specificity (true negative rate). The VPP (Positive Predictive Value) and VPN (Negative Predictive Value) were also evaluated. We computed an AUC (Area Under the ROC Curve) to evaluate overall discriminative ability. Training and testing times were automatically recorded for each experiment using Jupyter Notebook’s native output capture in order to maintain a record. Results The algorithm was tested on three validation datasets representing different clinical scenarios (“Medical” validation set: radiological images vs other images; “Modality” validation set: r-rays images vs other radiological modalites images; “Xrays” validation set: chest x-ray images vs other x-rays images). The “Medical” model achieved high specificity (often 1.0) and strong AUC (up to 1.0), with varying sensitivity (0.72 – 1.0). It achieved its best performance at num_epochs = 30, batch_size = 16, lr = 0.0001 (100% on all metrics). However, there were occasional drops in sensitivity to 0.01 (e.g., batch_size = 32, lr = 0.001). The “Modality” model achieved extremely high sensitivity (often 1.0) but inconsistent specificity (0.09 – 1.0). The greatest AUC (1.0) occured at num_epochs = 40, batch_size = 16/32, lr = 0.0001. It had low specificity (0.05 – 0.1) in some high-LR settings. The “Xrays” model balanced sensitivity (0.96 – 1.0) and specificity (0.58 – 1.0), with near-perfect AUC (up to 1.0). The best configuration was found to be num_epochs = 40, batch_size = 32, lr = 0.001, with a score of 100% on all metrics. During this experiment some general trends appeared such as increased epochs (e.g., 30 – 40) yielding improved performance across all models. Furthermore, a learning rate of 0.0001 yielded more stable results than 0.001. We also found that a batch_size = 16 often outperformed batch_size = 32 in sensitivity and AUC. All the models reached their peak performance (AUC = 1.0) under optimal hyperparameters (epochs ≥ 30, batch_size = 16, lr = 0.0001). These results are summarized in Tables 2 – 4 and Figure 2 . Table 2. Performance metrics for the “Medical” model (non-radiological images vs radiological images) across combinations of epochs, batch size, and learning rate. LR = Learning Rate; AUC = Area Under the Curve; PPV = Positive Predictive Value; NPV = Negative Predictive Value. Epochs Batch size LR Sensitivity Specificity PPV NPV AUC 5 16 0.0001 0.72 0.98 0.97 0.78 0.9704 5 16 0.001 0.84 0.99 0.99 0.86 0.9934 5 32 0.0001 0.82 0.93 0.92 0.84 0.9553 5 32 0.001 0.01 1.00 1.00 0.50 0.8742 10 16 0.0001 0.89 1.00 1.00 0.90 0.9967 10 16 0.001 1.00 0.56 0.69 1.00 0.9357 10 32 0.0001 0.64 1.00 1.00 0.74 0.9762 10 32 0.001 0.85 0.99 0.99 0.87 0.9949 15 16 0.0001 0.99 1.00 1.00 0.99 0.9999 15 16 0.001 0.86 0.89 0.89 0.86 0.9580 15 32 0.0001 0.86 1.00 1.00 0.88 0.9901 15 32 0.001 0.88 1.00 1.00 0.89 0.9919 20 16 0.0001 0.99 1.00 1.00 0.99 1.0000 20 16 0.001 0.99 0.98 0.98 0.99 0.9991 20 32 0.0001 0.86 1.00 1.00 0.88 0.9964 20 32 0.001 1.00 0.95 0.95 1.00 0.9995 25 16 0.0001 1.00 0.99 0.99 1.00 0.9999 25 16 0.001 0.91 0.32 0.57 0.78 0.6542 25 32 0.0001 0.84 1.00 1.00 0.86 0.9971 25 32 0.001 0.71 0.75 0.74 0.72 0.7617 30 16 0.0001 1.00 1.00 1.00 1.00 1.0000 30 16 0.001 1.00 0.85 0.87 1.00 0.9950 30 32 0.0001 0.84 1.00 1.00 0.86 0.9995 30 32 0.001 0.44 0.96 0.92 0.63 0.8511 40 16 0.0001 0.99 1.00 1.00 0.99 1.0000 40 16 0.001 1.00 0.99 0.99 1.00 1.0000 40 32 0.0001 0.98 1.00 1.00 0.98 1.0000 40 32 0.001 0.44 0.99 0.98 0.64 0.8564 Table 3. Performance metrics for the “Modality” model (x-rays images vs other modality images) across combinations of epochs, batch size, and learning rate. LR = Learning Rate; AUC = Area Under the Curve; PPV = Positive Predictive Value; NPV = Negative Predictive Value. Epochs Batch size LR Sensitivity Specificity PPV NPV AUC 5 16 0.0001 1.00 0.51 0.67 1.00 0.9893 5 16 0.001 1.00 0.10 0.53 1.00 0.8484 5 32 0.0001 1.00 0.53 0.68 1.00 0.9727 5 32 0.001 1.00 0.09 0.52 1.00 0.7423 10 16 0.0001 1.00 0.64 0.74 1.00 0.9984 10 16 0.001 0.83 0.99 0.99 0.85 0.9751 10 32 0.0001 1.00 0.59 0.71 1.00 0.9935 10 32 0.001 1.00 0.78 0.82 1.00 0.9962 15 16 0.0001 1.00 0.88 0.89 1.00 1.0000 15 16 0.001 1.00 0.82 0.85 1.00 0.9996 15 32 0.0001 1.00 0.74 0.79 1.00 0.9883 15 32 0.001 1.00 0.72 0.78 1.00 0.9753 20 16 0.0001 1.00 0.91 0.92 1.00 1.0000 20 16 0.001 1.00 0.67 0.75 1.00 0.9938 20 32 0.0001 1.00 0.71 0.78 1.00 0.9987 20 32 0.001 0.51 0.60 0.56 0.55 0.6665 25 16 0.0001 1.00 0.99 0.99 1.00 1.0000 25 16 0.001 0.97 1.00 1.00 0.97 0.9991 25 32 0.0001 1.00 0.90 0.91 1.00 0.9985 25 32 0.001 0.92 0.82 0.84 0.91 0.9665 30 16 0.0001 0.99 0.99 0.99 0.99 0.9999 30 16 0.001 0.99 0.88 0.89 0.99 0.9855 30 32 0.0001 1.00 0.93 0.93 1.00 1.0000 30 32 0.001 1.00 0.83 0.85 1.00 0.9977 40 16 0.0001 1.00 1.00 1.00 1.00 1.0000 40 16 0.001 0.97 1.00 1.00 0.97 0.9998 40 32 0.0001 1.00 1.00 1.00 1.00 1.0000 40 32 0.001 0.99 0.86 0.88 0.99 0.9953 Table 4. Performance metrics for the “Xrays” model (chest x-rays images vs other x-rays images) across combinations of epochs, batch size, and learning rate. LR = Learning Rate; AUC = Area Under the Curve; PPV = Positive Predictive Value; NPV = Negative Predictive Value. Epochs Batch size LR Sensitivity Specificity PPV NPV AUC 5 16 0.0001 1.00 0.76 0.81 1.00 0.9892 5 16 0.001 0.99 1.00 1.00 0.99 0.9999 5 32 0.0001 0.97 1.00 1.00 0.97 0.9996 5 32 0.001 0.99 0.98 0.98 0.99 0.9993 10 16 0.0001 1.00 0.58 0.70 1.00 0.9749 10 16 0.001 1.00 0.00 0.50 0.00 0.9567 10 32 0.0001 0.96 1.00 1.00 0.96 0.9990 10 32 0.001 0.99 0.98 0.98 0.99 0.9995 15 16 0.0001 1.00 0.85 0.87 1.00 0.9968 15 16 0.001 1.00 0.59 0.71 1.00 0.9669 15 32 0.0001 1.00 0.90 0.91 1.00 0.9982 15 32 0.001 1.00 0.77 0.81 1.00 0.9655 20 16 0.0001 1.00 0.93 0.93 1.00 0.9991 20 16 0.001 1.00 0.93 0.93 1.00 0.9974 20 32 0.0001 1.00 0.98 0.98 1.00 0.9989 20 32 0.001 1.00 0.85 0.87 1.00 0.9938 25 16 0.0001 1.00 0.99 0.99 1.00 0.9999 25 16 0.001 1.00 0.92 0.93 1.00 0.9999 25 32 0.0001 0.99 0.79 0.83 0.99 0.9828 25 32 0.001 1.00 0.84 0.86 1.00 0.9999 30 16 0.0001 0.99 1.00 1.00 0.99 0.9993 30 16 0.001 0.98 1.00 1.00 0.98 0.9924 30 32 0.0001 1.00 0.94 0.94 1.00 0.9994 30 32 0.001 1.00 0.05 0.51 1.00 0.8018 40 16 0.0001 0.99 1.00 1.00 0.99 1.0000 40 16 0.001 0.99 1.00 1.00 0.99 1.0000 40 32 0.0001 0.99 0.95 0.95 0.99 0.9992 40 32 0.001 1.00 1.00 1.00 1.00 1.0000 Figure 2. Training performance across epochs for the three models (Medical: green, Modality: blue, and Xrays: orange) showing AUC values under different hyperparameter combinations. Solid lines represent learning rate = 0.0001, dashed lines represent learning rate = 0.001. Circular markers indicate batch size = 16, while triangular markers indicate batch size = 32. All models were evaluated over 7 epochs (5, 10, 15, 20, 25, 30, 40). Shaded areas represent the 95% confidence interval (if applicable). Note: The y-axis is truncated at AUC = 0.5 to highlight performance differences. The computing times were 11 min38s for the Medical dataset, 11min43s for the Modality dataset and 12 min 22s for Xrays dataset. The testing time results were 25s, 29s and 27s for medical, modality and Xrays datasets, respectively. The final model file (model.pth) size remained lightweight at 16.3 mb for a fully trained model. Discussion This is, to our knowledge, the only open-source algorithm that is fast, easy to run and efficient for radiological image classification. Testing the models showed that good performances were attainable but that hyperparameters should always be adapted to each trained task-specific model. We found that setting epochs to 40, batch size to 16 and learning rate to 0.0001 was the best default starting point based on the results on the three models, but that it should always be adapted after the initial training is completed. The proposed model has the advantages of being simple and fast to run. It should be noted that for the purposes of our experiment we ran the model on a non-professional machine to obtain a proof of concept, but it can run much faster with dedicated GPU. Due to the simple implementation, it is possible for a coding novice to train and test the algorithm without the need for advanced code engineering knowledge. EfficientNet, as well as other efficient CNNs, have been explored with promising results, albeit rarely available as open-source implementations. It has been shown that EfficientNet-based CNN achieves 93.8% accuracy in classifying retinal diseases from fundus images 14 and that it outperforms other transfer learning models in breast cancer detection accuracy using mammography images. 15 Furthermore, an ensemble-based approach using EfficientNet was shown to achieve a high performance in automated malaria diagnosis from microscopic blood cell images. 16 Another ensemble of fine-tuned EfficientNet models achieved high accuracy in classifying tuberculosis from chest X-rays. 17 It has also been shown that an extremely lightweight CNN model called ExLNet could be applied for chest radiograph diagnosis in resource-constrained environments, however this model is not open source. 18 Sahu et al. (2018) also proposed a lightweight CNN model for the rapid and accurate identification of lung diseases from chest X-ray images, designed for resource-constrained environments; however, this model is not open source, is heavier than EfficientNet-based models, and requires more hyperparameter tuning and longer training times. 19 Lujan-Garcia et al. (2021) also developed NanoChest-Net, a simple yet effective convolutional neural network for classifying radiological images of diseases such as COVID-19, pneumonia, and tuberculosis; however, this model is also not available as open source. 20 Efficient models are expected to further develop, for example, EfficientNetV2 has the potential for faster training times. 21 Previous studies have explored classification of radiological images, but none have done so with the help of artificial intelligence. 22 , 23 Medical image classification, in a broader context, has been explored with one study demonstrating the use of deep learning for classification on biopsy images of coeliac disease. 24 Another paper from 2020 proposes an efficient and accurate deep learning-based approach for medical image modality classification using transfer learning with ResNet50. 25 However, this model was not open source and was also heavier to run and more complicated than our model. Another model, also proposed in 2017, explored radiological modality classification with CNN-6, VGGNet-16 and ResNet-50. 26 These models were also not open source and were equally heavy and complicated to run. Open-source AI models have been tested in the context of radiology. One such model suggested using an open source machine learning and natural language processing pipeline to classify temporal bone radiology reports. 27 Other models used 28 an open-source CNN for binary classification of chest radiograph normality to aid in optimizing clinician workload. Finally, it was shown that the 29 inclusion of radiologist-provided BI-RADS classification using open-source BI-RADS data sets in AI models improved accuracy for predicting histology compared to models using image parameters alone. However, despite a few forays into the field, there is still much work to be done. One notable area for improvement is the sharing of code, which is currently not the standard practice, thus making it difficult to verify the results and iterate and improve on the previous models. AI models have a wide range of potential applications that are only now beginning to be explored. One interesting possibility would be to use it for modality or sequence classification, such as for x-ray modality classification (e.g., chest, abdomen, spine), MRI sequence type classification (e.g., T1, T2, FLAIR, DWI) or post-injection time classification (e.g., early vs. delayed imaging). It could also be used to triage between diagnosis-related vs. administrative images (e.g., exclude protocol screens, localizer views). Another potential application is in quality control, where AI may have the potential to verify whether images are correctly tagged (e.g., wrong DICOM tags), or detect poor quality radiographs. It might also be used for preprocessing in complex AI pipelines to rapidly pre-select relevant images for training a more complex AI model (e.g., select only CT slices showing the liver across full abdomen series). Our model has some limitations. First, it only allows binary classification and is therefore not suitable for multi-class problems, although the architecture could be adapted for that purpose. Secondly, it can be used obvious features mainly as the model was trained on resized 2D images with visually distinct features. Thirdly, it can only be used for 2D images and cannot process 3D volumes. Finally, it was not designed for complex model optimization as the architecture and training pipeline are intentionally simplified for ease of use by non-engineers. Thus, it does not include advanced fine-tuning mechanisms, hyperparameter search, or automated optimization. In conclusion, EffiRadNet achieves high performance on simple binary classification tasks using a lightweight architecture that can be deployed and retrained without the need for engineering expertise or specialized hardware. Its open-source availability, combined with its accessibility and efficiency make it suitable for a wide range of simple applications, including modality or sequence classification, quality control, annotation support, and preprocessing in AI pipelines. Software availability Source code available from: https://github.com/gfahrni/effiradnet Archived software available from: https://doi.org/10.5281/zenodo.18491642 License: MIT Ethics and consent Ethical approval and consent were not required for this study, as all images were obtained from publicly available, anonymized open-access datasets. Data availability All datasets used for training and validation in this study are openly available in the Zenodo repository: Dataset Title: Datasets for EffiRadNet – Radiology Binary Classification Tasks Archived datasets available from: https://doi.org/10.5281/zenodo.18491814 30 License: CC-BY 4.0 The repository contains all 600 images (200 per dataset) organized in class-balanced training and validation folders, as described in the Methods section. The completed CLAIM checklist is included as extended data. Acknowledgments We thank Dr. C. Galetti for his valuable contribution in initial model testing and validation. The authors acknowledge the use of ChatGPT (OpenAI) for linguistic polishing and formatting assistance during the preparation of this manuscript. The authors are solely responsible for the content, ideas, and scientific integrity of this work. References 1. Thrall JH, Li X, Li Q, et al. : Artificial Intelligence and Machine Learning in Radiology: Opportunities, Challenges, Pitfalls, and Criteria for Success. J. Am. Coll. Radiol. 2018; 15 : 504–508. PubMed Abstract | Publisher Full Text 2. Jin D, Harrison AP, Zhang L, et al. : Artificial intelligence in radiology. Artif. Intell. Med. 2021; pp. 265–289. Elsevier. Publisher Full Text 3. Wichmann JL, Willemink MJ, De Cecco CN: Artificial Intelligence and Machine Learning in Radiology: Current State and Considerations for Routine Clinical Implementation. Investig. Radiol. 2020; 55 : 619–627. PubMed Abstract | Publisher Full Text 4. Hosny A, Parmar C, Quackenbush J, et al. : Artificial intelligence in radiology. Nat. Rev. Cancer. 2018; 18 : 500–510. PubMed Abstract | Publisher Full Text | Free Full Text 5. Yamashita R, Nishio M, Do RKG, et al. : Convolutional neural networks: an overview and application in radiology. Insights Imaging. 2018; 9 : 611–629. PubMed Abstract | Publisher Full Text | Free Full Text 6. Yan S, Li J, Wu W: Artificial intelligence in breast cancer: application and future perspectives. J. Cancer Res. Clin. Oncol. 2023; 149 : 16179–16190. PubMed Abstract | Publisher Full Text | Free Full Text 7. De Margerie-Mellon C, Chassagnon G: Artificial intelligence: A critical review of applications for lung nodule and lung cancer. Diagn. Interv. Imaging. 2023; 104 : 11–17. PubMed Abstract | Publisher Full Text 8. Zhou L-Q, Wang J-Y, Yu S-Y, et al. : Artificial intelligence in medical imaging of the liver. World J. Gastroenterol. 2019; 25 : 672–682. PubMed Abstract | Publisher Full Text | Free Full Text 9. Flory MN, Napel S, Tsai EB: Artificial Intelligence in Radiology: Opportunities and Challenges. Semin. Ultrasound CT MRI. 2024; 45 : 152–160. Publisher Full Text 10. Cho J, Lee K, Shin E, et al. : How much data is needed to train a medical image deep learning system to achieve necessary high accuracy? arXiv. 2016. Publisher Full Text 11. Tan M, Le QV: EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks. arXiv. 2020. Publisher Full Text 12. Demner-Fushman D, Antani S, Simpson M, et al. : Design and Development of a Multimodal Biomedical Information Retrieval System. J. Comput. Sci. Eng. 2012; 6 : 168–177. Publisher Full Text 13. Banerjee I, Bhattacharjee K, Burns JL, et al. : “Shortcuts” Causing Bias in Radiology Artificial Intelligence: Causes, Evaluation, and Mitigation. J. Am. Coll. Radiol. 2023; 20 : 842–851. PubMed Abstract | Publisher Full Text | Free Full Text 14. Al Rakib A, Billah MM, Ahamed AS, et al. : EfficientNet-Based Model for Automated Classification of Retinal Diseases Using Fundus Images. Eur. J. Comput. Sci. Inf. Technol. 2024; 12 : 48–61. Publisher Full Text 15. Oyebanji OS, Apampa AR, Idoko IP, et al. : Enhancing breast cancer detection accuracy through transfer learning: A case study using efficient net. World J. Adv. Eng. Technol. Sci. 2024; 13 : 285–318. Publisher Full Text 16. Marques G, Ferreras A, De La Torre-Diez I: An ensemble-based approach for automated medical diagnosis of malaria using EfficientNet. Multimed. Tools Appl. 2022; 81 : 28061–28078. PubMed Abstract | Publisher Full Text | Free Full Text 17. Oloko-Oba M, Viriri S: Ensemble of EfficientNets for the Diagnosis of Tuberculosis. Comput. Intell. Neurosci. 2021; 2021 : 9790894. PubMed Abstract | Publisher Full Text | Free Full Text 18. Kumar G, Sharma N, Paul A: An extremely lightweight CNN model for the diagnosis of chest radiographs in resource-constrained environments. Med. Phys. 2023; 50 : 7568–7578. PubMed Abstract | Publisher Full Text 19. Sahu P, Yu D, Dasari M, et al. : A Lightweight Multi-Section CNN for Lung Nodule Classification and Malignancy Estimation. IEEE J. Biomed. Health Inform. 2019; 23 : 960–968. PubMed Abstract | Publisher Full Text 20. Luján-García JE, Villuendas-Rey Y, López-Yáñez I, et al. : NanoChest-Net: A Simple Convolutional Network for Radiological Studies Classification. Diagnostics. 2021; 11 : 775. PubMed Abstract | Publisher Full Text | Free Full Text 21. Tan M, Le QV: EfficientNetV2: Smaller Models and Faster Training. arXiv. 2021. Publisher Full Text 22. Fesharaki N, Pourghassem H: Medical X-ray Image Hierarchical Classification Using a Merging and Splitting Scheme in Feature Space. J. Med. Signals Sens. 2013; 3 : 150. Publisher Full Text 23. Müller H, Kalpathy-Cramer J, Demner-Fushman D, et al. : Creating a classification of image types in the medical literature for visual categorization. Boonn WW, Liu BJ, editors. San Diego, California, USA: 2012; p. 83190. Publisher Full Text 24. Kowsari K, Sali R, Ehsan L, et al. : HMIC: Hierarchical Medical Image Classification, A Deep Learning Approach. Information. 2020; 11 : 318. PubMed Abstract | Publisher Full Text | Free Full Text 25. Hassan M, Ali S, Alquhayz H, et al. : Developing intelligent medical image modality classification system using deep transfer learning and LDA. Sci. Rep. 2020; 10 : 12868. PubMed Abstract | Publisher Full Text | Free Full Text 26. Yu Y, Lin H, Meng J, et al. : Deep Transfer Learning for Modality Classification of Medical Images. Information. 2017; 8 : 91. Publisher Full Text 27. Masino AJ, Grundmeier RW, Pennington JW, et al. : Temporal bone radiology report classification using open source machine learning and natural langue processing libraries. BMC Med. Inform. Decis. Mak. 2016; 16 : 65. PubMed Abstract | Publisher Full Text | Free Full Text 28. Yates EJ, Yates LC, Harvey H: Machine learning “red dot”: open-source, cloud, deep convolutional neural networks in chest radiograph binary normality classification. Clin. Radiol. 2018; 73 : 827–831. PubMed Abstract | Publisher Full Text 29. Ghosh A: Artificial Intelligence Using Open Source BI-RADS Data Exemplifying Potential Future Use. J. Am. Coll. Radiol. 2019; 16 : 64–72. PubMed Abstract | Publisher Full Text 30. Fahrni G: Datasets for EffiRadNet – Radiology Binary Classification Tasks. Zenodo. 2026. Publisher Full Text Comments on this article Comments (0) Version 1 VERSION 1 PUBLISHED 18 Feb 2026 ADD YOUR COMMENT Comment Author details Author details 1 Department of Diagnostic and Interventional Radiology, Lausanne University Hospital and University of Lausanne, Lausanne, Switzerland Thomas Saliba Roles: Conceptualization, Formal Analysis, Investigation, Resources, Writing – Original Draft Preparation David D. C. Rotzinger Roles: Conceptualization, Methodology, Resources, Validation, Visualization, Writing – Review & Editing Gorun Ilanjan Roles: Formal Analysis, Investigation, Methodology, Resources, Visualization, Writing – Review & Editing Guillaume Fahrni Roles: Conceptualization, Data Curation, Investigation, Methodology, Project Administration, Resources, Supervision, Validation, Visualization, Writing – Review & Editing Competing interests No competing interests were disclosed. Grant information The author(s) declared that no grants were involved in supporting this work. Article Versions (1) version 1 Published: 18 Feb 2026, 15:292 https://doi.org/10.12688/f1000research.177499.1 Copyright © 2026 Saliba T 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 Saliba T, Rotzinger DDC, Ilanjan G and Fahrni G. EffiRadNet: Lightweight and User-Friendly Open-Source EfficientNet-Based Model for Radiology Image Binary Classification Tasks [version 1; peer review: awaiting peer review] . F1000Research 2026, 15 :292 ( https://doi.org/10.12688/f1000research.177499.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: AWAITING PEER REVIEW AWAITING PEER REVIEW ? 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 Comments on this article Comments (0) Version 1 VERSION 1 PUBLISHED 18 Feb 2026 ADD YOUR COMMENT Comment keyboard_arrow_left keyboard_arrow_right Open Peer Review Reviewer Status AWAITING PEER REVIEW 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 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 = "EffiRadNet: Lightweight and User-Friendly...".replace("'", ''); var linkedInUrl = "http://www.linkedin.com/shareArticle?url=https://f1000research.com/articles/15-292/v1" + "&title=" + encodeURIComponent(lTitle) + "&summary=" + encodeURIComponent('Read the article by '); var deliciousUrl = "https://del.icio.us/post?url=https://f1000research.com/articles/15-292/v1&title=" + encodeURIComponent(lTitle); var redditUrl = "http://reddit.com/submit?url=https://f1000research.com/articles/15-292/v1" + "&title=" + encodeURIComponent(lTitle); linkedInUrl += encodeURIComponent('Saliba T 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/15-292/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/15-292", templates : { twitter : "EffiRadNet: Lightweight and User-Friendly Open-Source EfficientNet-Based.... Saliba T et al., published by " + "@F1000Research" + ", https://f1000research.com/articles/15-292/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/177499/195732") new F1000.Clipboard(); new F1000.ThesaurusTermsDisplay("articles", "article", "195732"); $(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 = { "482199": 0, "463511": 0, "482198": 0, "463510": 0, "482197": 0, "463509": 0, "482196": 0, "463508": 0, "482195": 0, "463507": 0, "482204": 0, "463516": 0, "482203": 0, "463515": 0, "482202": 0, "463514": 0, "482201": 0, "463513": 0, "482200": 0, "463512": 0, "467183": 0, "467182": 0, "467181": 0, "460663": 0, "470135": 0, "460662": 0, "467190": 0, "470134": 0, "460661": 0, "467189": 0, "470133": 0, "467188": 0, "470132": 0, "467187": 0, "470131": 0, "467186": 0, "470130": 0, "467185": 0, "470129": 0, "467184": 0, "460670": 0, "460669": 0, "460668": 0, "460667": 0, "460666": 0, "470138": 0, "460665": 0, "470137": 0, "460664": 0, "470136": 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 = "96a30b4b-2290-4a39-be2e-48962a7f6009"; 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.