CINXE.COM
Search
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <meta charset="utf-8" /><script type="text/html" id="sf-tracking-consent-manager"> <style> /*Consent Form*/ #tracking-consent-dialog { padding: 15px; position: fixed; bottom: 0; right: 5px; width: 337px; border: 3px solid #1e82e0; border-radius: 5px 5px 0px 0px; background: rgba(255, 255, 255, .95); font-size: 16px; z-index: 999; } #tracking-consent-dialog-accept { background-color: #1e82e0; color: #fff; font-size: 16px; font-weight: 500; float: right; } .consent-close { font-weight: bold; float: right; padding: 2px 7px; right: 6px; top: 3px; cursor: pointer; font-size: 11px; position: absolute; background-color: #1e82e0; color: #fff; z-index: 999; border-radius: 50%; } @media (max-width: 767px) { #tracking-consent-dialog { width: 100%; font-size: 14px; } } </style> <div id="tracking-consent-dialog"> <div class="consent-close" onclick="TrackingConsentManager.updateUserConsent(true)">X</div> <strong>Cookie Policy</strong> <p>CII uses cookies to improve your website & conference experiences, including enhancing website navigation, personalized features & promotions, evaluating our services, and customizing content and ads based on your preferences as you browse or engage with us. By clicking "Continue" or continuing to use our site, you are agreeing to our and our partners use of cookies. See our <a href="https://www.cambridgeinnovationinstitute.com/Privacy-Policy/">Privacy Policy</a> for more information.</p> <button type="button" onclick="TrackingConsentManager.updateUserConsent(true)" id="tracking-consent-dialog-accept" class="btn btn-default">Continue</button> </div> </script><script type="text/javascript" src="/WebResource.axd?d=DzHrpQl5URXarFHAtrmzFrNeeCwCLwHK2gvGZ95fW9WnidZLXrfDlGTuxUr3l463ttkzDVh9D8Bug9pu7NHdr_V4jKJPpR5aBflu4f8Ts5edKoXW2sH8LcSZSfqlYNJ5LpoUn5WBE_fdKcz0yNVMxY3w_4XLcip6ESbZeM3DDdUqeeNFFCEiKQKGKqR186oo0&t=637922505220000000"> </script> <script src="/ScriptResource.axd?d=okuX3IVIBwfJlfEQK32K3iZZtiInnD21Q3naS01thH9-fzUaksT1ZtMUjWfsR2IfFrdwuSgx30ngwb9MjfyLwf8qicr33ktg3mwcpW2o3dsDH8d3-t4otTq9qT-5mrFfzK1f5nCn185AY5nCZScdoqJ1WOdlA_-4T4B_v3AbufPsc2J5Jr9-kOiHGAB_hap-0&t=4e1c7b51" type="text/javascript"></script><script src="/ScriptResource.axd?d=EydukmxBmDstn7gSYzQESGX1Bc6SUabUViYB9LpdmFW6eZLmGFNo26FA-YqkH5f3QjtPWjAHxth32_ExmLGGY1zv6AdaQenYAqaM29qW1bTxx1r5T--aFytKsL9IQMjnWBhhM3Ox0iMnCMCJK5xrzQardvmrid9DGkma-HwbE57flKsxZSkIFbT-h8oEIp2m0&t=4e1c7b51" type="text/javascript"></script><link href="/ResourcePackages/Bootstrap/assets/dist/css/main.min.css" rel="stylesheet" type="text/css" /><link href="/css/global.css" rel="stylesheet" type="text/css" /><link href="/css/editor.css" rel="stylesheet" type="text/css" /> <link href="//fonts.googleapis.com/css?family=Roboto:500,400,700" rel="stylesheet" type="text/css"> <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no" /> <meta property="og:title" content="Search" /><meta property="og:url" content="https://www.pegsummiteurope.com/search" /><meta property="og:type" content="website" /><meta property="og:site_name" content="Pegs Summit Europe" /><link href="/css/24/pge/style-pge.css" media="all" rel="stylesheet" type="text/css" /><script type="text/javascript"> var link = document.createElement('link'); link.id = 'dynamic-favicon'; link.rel = 'shortcut icon'; link.href = '/images/librariesprovider8/template-images/21/favicon.png'; document.head.appendChild(link); </script><script type="text/javascript"> (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;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-MZXW9KK'); </script><style type="text/css" media="all"> .agenda-search { font-size: 30px; margin-bottom: 20px; font-weight: 500; line-height: 1.1; } #searchInput { border: 2px solid #ed653d; height: 40px; } #searchButton { background-color: #ed653d; font-size: 16px; height: 40px; } #results { margin-top: 20px; } /* Add more custom styles as needed */ .highlight { display: inline; background-color: yellow; /* Example highlight */ } .card { margin-bottom: 30px; } .card-title { color: #011639; font-size: 20px; font-weight: bold; } .card-text.text-medium-small { font-size: 16px; } .card-date-footer { color: #011639; font-size: 16px; } .speakerX { font-style: italic; font-size: 16px; } a { text-decoration: none; } .margin-left-custom { margin-left: 0.5rem; /* Or 1rem, or whatever space you need */ } .margin-top-2 { margin-top: 5px; /* This emulates 'mb-3' in Bootstrap 4 which typically means 1rem (16px) */ } .margin-bottom-2 { margin-bottom: 5px; /* This emulates 'mb-3' in Bootstrap 4 which typically means 1rem (16px) */ } /*.margin-bottom-3 { margin-bottom: 10px; /* This emulates 'mb-3' in Bootstrap 4 which typically means 1rem (16px) */ } .padding-3 { padding: 10px; } .header-with-spinner { display: flex; align-items: center; /* Ensures vertical center alignment */ line-height: normal; /* Ensure the line height is normal for better control */ } .loader { border: 4px solid #f3f3f3; /* Light grey */ border-top: 4px solid rgb(89, 112, 178); /* Blue */ border-radius: 50%; width: 20px; height: 20px; animation: spin 2s linear infinite; display: none; /* Hidden by default */ margin-left: 10px; /* Adds some space between the text and the spinner */ margin-bottom: -8px; /* Adds some space between the text and the spinner */ } @keyframes spin { 0% { transform: translate(-50%, -50%) rotate(0deg); } 100% { transform: translate(-50%, -50%) rotate(360deg); } } </style><meta name="Generator" content="Sitefinity 14.2.7900.0 DX" /><link rel="canonical" href="https://www.pegsummiteurope.com/search" /><script type="application/json" id="sf-insight-metadata"> {"contentMetadata":"{\"Id\":\"7bc7282d-d8dd-4e0c-be0a-d0e689afa073\",\"ContentType\":\"Page\",\"Title\":\"Search\",\"CanonicalTitle\":\"Search\",\"CanonicalUrl\":\"https://www.pegsummiteurope.com/search\",\"CreatedOn\":\"2024-09-05T19:24:11Z\",\"ModifiedOn\":\"2024-09-12T17:19:00Z\",\"SiteName\":\"Pegs Summit Europe\",\"PageId\":\"7bc7282d-d8dd-4e0c-be0a-d0e689afa073\"}","videosMetadata":"[]"} </script><script type="application/json" id="sf-insight-settings"> {"apiServerUrl":"https://api.insight.sitefinity.com/","apiKey":"62dc77b5-9fbc-74c6-8f79-d05463f0565e","applicationName":"CII_DEC","trackingCookieDomain":"","keepDecTrackingCookieOnTrackingConsentRejection":false,"slidingExpirationForTrackingCookie":false,"maxAgeForTrackingCookieInDays":365,"trackYouTubeVideos":true,"strategy":"Persist|False","docsHrefTestExpressions":[".*\\/docs\\/.+\\.{1}.+((\\?|\\\u0026)sfvrsn=.+){1}$",".+((\\?|\\\u0026)sf_dm_key=.+){1}$"]} </script><script type="text/javascript" src="/WebResource.axd?d=HtQyXelCu6mzSPcVcvK_BrDGcMZ2eaAwTGCTL_5l9xvo0iV9h2YYkvXanQ1uf0LidxbxWd8AzxNrppPmU7C9KnzDV98eKbg88D2zgKyY_GVq-IK4cwpq3ApmVVQHZ20G6_cSyVvbsc3d7cEOVVpoZalFAGFOo2fFcbG9u0riPX3ha1PNvfZCNU2C8dj5lXB2aevtM9BprQUEvuhENe--svD7i9F-8WutvDj5rAfLCkI1&t=637922505220000000"> </script><script src="https://cdn.insight.sitefinity.com/sdk/sitefinity-insight-client.min.3.1.7.js" async="async"> </script><link href="/Telerik.Web.UI.WebResource.axd?d=PMrIT5dOWaVYIcpFWUE4nCGcRFDqtHj8a0dT9N7jtPAWgyp5t5fff0pvXeFargWg3kuRljuyyjKW8grLvrafOr9X0kIEdj24q9AbiZ0prs7qITvLoGQxdqYfpMFPSD250&t=638482241021526486&compress=0&_TSM_CombinedScripts_=%3b%3bTelerik.Sitefinity.Resources%2c+Version%3d14.2.7900.0%2c+Culture%3dneutral%2c+PublicKeyToken%3db28c218413bdf563%3aen%3aec7772cc-ee32-478e-8437-4242283bb12f%3a7a90d6a" type="text/css" rel="stylesheet" /><title> Search </title></head> <body><form method="post" action="./search" id="aspnetForm"> <div class="aspNetHidden"> <input type="hidden" name="ctl04_TSM" id="ctl04_TSM" value="" /> <input type="hidden" name="ctl05_TSSM" id="ctl05_TSSM" value="" /> <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="M7MWFpKqazGpRpNb7cGgohu1ZxQA+kGS4/I4+52oCGgoxg4FGaeL/iN5FUnNqCD5Vw0p9VZ7WDx8hL+Ze9IZthLeAEfQKFisOlyYsUlkLBo=" /> </div> <script type="text/javascript"> //<![CDATA[ var theForm = document.forms['aspnetForm']; if (!theForm) { theForm = document.aspnetForm; } function __doPostBack(eventTarget, eventArgument) { if (!theForm.onsubmit || (theForm.onsubmit() != false)) { theForm.__EVENTTARGET.value = eventTarget; theForm.__EVENTARGUMENT.value = eventArgument; theForm.submit(); } } //]]> </script> <script src="/WebResource.axd?d=pynGkmcFUV13He1Qd6_TZA_YQJD9xSUnUi70uTXUUGkw9zf_LlVkiouvQJnBXeCn1svgT4yxk9LfN7iuqrWtXg2&t=638459680569584809" type="text/javascript"></script> <script type="text/javascript"> //<![CDATA[ var __cultureInfo = {"name":"en","numberFormat":{"CurrencyDecimalDigits":2,"CurrencyDecimalSeparator":".","IsReadOnly":true,"CurrencyGroupSizes":[3],"NumberGroupSizes":[3],"PercentGroupSizes":[3],"CurrencyGroupSeparator":",","CurrencySymbol":"$","NaNSymbol":"NaN","CurrencyNegativePattern":0,"NumberNegativePattern":1,"PercentPositivePattern":1,"PercentNegativePattern":1,"NegativeInfinitySymbol":"-∞","NegativeSign":"-","NumberDecimalDigits":2,"NumberDecimalSeparator":".","NumberGroupSeparator":",","CurrencyPositivePattern":0,"PositiveInfinitySymbol":"∞","PositiveSign":"+","PercentDecimalDigits":2,"PercentDecimalSeparator":".","PercentGroupSeparator":",","PercentSymbol":"%","PerMilleSymbol":"‰","NativeDigits":["0","1","2","3","4","5","6","7","8","9"],"DigitSubstitution":1},"dateTimeFormat":{"AMDesignator":"AM","Calendar":{"MinSupportedDateTime":"\/Date(-62135578800000)\/","MaxSupportedDateTime":"\/Date(253402300799999)\/","AlgorithmType":1,"CalendarType":1,"Eras":[1],"TwoDigitYearMax":2029,"IsReadOnly":true},"DateSeparator":"/","FirstDayOfWeek":0,"CalendarWeekRule":0,"FullDateTimePattern":"dddd, MMMM d, yyyy h:mm:ss tt","LongDatePattern":"dddd, MMMM d, yyyy","LongTimePattern":"h:mm:ss tt","MonthDayPattern":"MMMM d","PMDesignator":"PM","RFC1123Pattern":"ddd, dd MMM yyyy HH\u0027:\u0027mm\u0027:\u0027ss \u0027GMT\u0027","ShortDatePattern":"M/d/yyyy","ShortTimePattern":"h:mm tt","SortableDateTimePattern":"yyyy\u0027-\u0027MM\u0027-\u0027dd\u0027T\u0027HH\u0027:\u0027mm\u0027:\u0027ss","TimeSeparator":":","UniversalSortableDateTimePattern":"yyyy\u0027-\u0027MM\u0027-\u0027dd HH\u0027:\u0027mm\u0027:\u0027ss\u0027Z\u0027","YearMonthPattern":"MMMM yyyy","AbbreviatedDayNames":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"ShortestDayNames":["Su","Mo","Tu","We","Th","Fr","Sa"],"DayNames":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"AbbreviatedMonthNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthNames":["January","February","March","April","May","June","July","August","September","October","November","December",""],"IsReadOnly":true,"NativeCalendarName":"Gregorian Calendar","AbbreviatedMonthGenitiveNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthGenitiveNames":["January","February","March","April","May","June","July","August","September","October","November","December",""]},"eras":[1,"A.D.",null,0]};//]]> </script> <script src="/Telerik.Web.UI.WebResource.axd?_TSM_HiddenField_=ctl04_TSM&compress=0&_TSM_CombinedScripts_=%3b%3bSystem.Web.Extensions%2c+Version%3d4.0.0.0%2c+Culture%3dneutral%2c+PublicKeyToken%3d31bf3856ad364e35%3aen%3a18f1b484-bbc5-4e2e-8ca4-477603537f34%3aea597d4b%3ab25378d2" type="text/javascript"></script> <script src="/ScriptResource.axd?d=oBrf1f-DLFBYf_XnAiQIerYbp6DB1yP-XX6e2f1MfVZVh0-b8UJuYKCCtCgeTZdgs__r0fZWEGLHIbAdafwt8M9e685ZdEjP_79w8Op8pqlhtK8RVD9yvuuHQYso7wAeipQsr1KNKlxF-82gFsHvkROGzjmcQ59FFLTFjwumrh-7zfhoHiIXFsqfCwU3VcIw0&t=4e1c7b51" type="text/javascript"></script> <script src="/Telerik.Web.UI.WebResource.axd?_TSM_HiddenField_=ctl04_TSM&compress=0&_TSM_CombinedScripts_=%3b%3bTelerik.Sitefinity.Resources%3aen%3aec7772cc-ee32-478e-8437-4242283bb12f%3ab162b7a1" type="text/javascript"></script> <script src="/Frontend-Assembly/Telerik.Sitefinity.Frontend/Mvc/Scripts/Bootstrap/js/bootstrap.min.js?package=Bootstrap&v=MTQuMi43OTAwLjA%3d" type="text/javascript"></script> <script src="/js/sgs/menu-wsub.js" type="text/javascript"></script> <div class="aspNetHidden"> <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="E1D77416" /> </div><script type="text/javascript"> //<![CDATA[ Sys.WebForms.PageRequestManager._initialize('ctl00$ctl04', 'aspnetForm', [], [], [], 90, 'ctl00'); //]]> </script> <input type="hidden" name="ctl00$ctl04" id="ctl04" /> <script type="text/javascript"> //<![CDATA[ Sys.Application.setServerId("ctl04", "ctl00$ctl04"); Sys.Application._enableHistoryInScriptManager(); //]]> </script> <iframe id="__historyFrame" src="/ScriptResource.axd?d=9vwbQNyyBmzrSR2ode0FVps1iBzWyiBAz4HesIDVKnBn9PwABVci8-c_7j5CzV0jb395-yn_sIzQBxjuHjE2hQ2" style="display:none;"> </iframe> <div> <div class="navbar navbar-default navbar-fixed-top"> <a class="navbar-brand large" href="/"></a> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> </div> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav large-nav" role="menu"> <li class="dropdown"> <a href="#" class="dropdown-toggle" role="button"> Agenda </a> <ul role="menu" class="dropdown-menu"> <li class=""> <a href="/programs" target="_self">Programs</a> </li> <li class=""> <a href="/speaker-biographies" target="_self">Speaker Biographies</a> </li> <li class=""> <a href="/keynote" target="_self">Keynotes</a> </li> <li class=""> <a href="/Top-Pharma" target="_self">Top Biopharma</a> </li> <li class=""> <a href="/short-courses" target="_self">Short Courses</a> </li> <li class=""> <a href="/PEGS-Europe-Training-Seminars" target="_self">Training Seminars</a> </li> <li class=""> <a href="/attendee-list" target="_self">Attendee List</a> </li> <li class=""> <a href="/agenda/search-agenda" target="_self">Search Agenda</a> </li> <li class=""> <a href="/testimonials" target="_self">Testimonials</a> </li> <li class=""> <a href="/networking" target="_self">Networking</a> </li> <li class=""> <a href="/archives" target="_self">Archives</a> </li> </ul> </li> <li class="dropdown"> <a href="#" class="dropdown-toggle" role="button"> Sponsor/Exhibit </a> <ul role="menu" class="dropdown-menu"> <li class=""> <a href="/sponsor" target="_self">Attendee Demographics + Event Features</a> </li> <li class=""> <a href="/sponsorship-opportunities" target="_self">Sponsorship Opportunities</a> </li> <li class=""> <a href="/sponsors" target="_self">Current Sponsors</a> </li> <li class=""> <a href="/sponsorship-prospectus-form" target="_self">Sponsorship Prospectus</a> </li> <li class=""> <a href="/docs/librariesprovider8/sponsor-and-exhibit/24/pge24-floorplan.pdf" target="_blank">Current Exhibitors/Floorplan</a> </li> <li class=""> <a href="https://www.intheorious.com/chi/pub/pge2025b_pub/" target="_blank">2025 Re-sign Floorplan</a> </li> <li class=""> <a href="/exhibit-services-schedule" target="_self">Exhibit Services/Schedule</a> </li> <li class=""> <a href="http://www.healthtech.com/Lead-Gen/" target="_blank">Lead Generation Opportunities</a> </li> </ul> </li> <li class="dropdown"> <a href="#" class="dropdown-toggle" role="button"> Downloads </a> <ul role="menu" class="dropdown-menu"> <li class=""> <a href="/brochures" target="_self">Brochures</a> </li> </ul> </li> <li class=""><a href="/travel" target="_self">Travel </a></li> <li class="dropdown"> <a href="#" class="dropdown-toggle" role="button"> Posters </a> <ul role="menu" class="dropdown-menu"> <li class=""> <a href="/posters" target="_self">Poster Information</a> </li> <li class=""> <a href="/poster-titles" target="_self">Poster Titles</a> </li> </ul> </li> <li class=""><a href="http://www.healthtech.com/press.aspx" target="_blank">Press</a></li> <li class="dropdown"> <a href="#" class="dropdown-toggle" role="button"> Register </a> <ul role="menu" class="dropdown-menu"> <li class=""> <a href="https://register.cambridgeinnovationinstitute.com/reg/pge" target="_self">Individual Pricing</a> </li> <li class=""> <a href="https://register.cambridgeinnovationinstitute.com/reg/pge/group" target="_self">Group Pricing</a> </li> <li class=""> <a href="https://register.cambridgeinnovationinstitute.com/reg/pge/ondemand" target="_self">On Demand Pricing</a> </li> </ul> </li> </ul> </div><!-- /.navbar-collapse --> </div> </div> <div > <div class="sf-Long-text" ><div class="mobile-header hidden-sm hidden-md hidden-lg"><a href="/"><img class="imageResize" src="/images/librariesprovider8/template-images/24/header-mob.png?sfvrsn=992d3334_1" alt="PEGS Summit Europe" /></a> </div></div> </div> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MZXW9KK" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <div class="main-content"> <div id="cph1" class="container internal"> <div class="row"> <div class="row" data-sf-element="Row"> <div class="col-sm-9"> <div id="Contentplaceholder1_T14051A0F003_Col00" class="sf_colsIn pad-lr" data-sf-element="Column 1" data-placeholder-label="Column 1"> <div > <div class="sf-Long-text" ><div class="container-relative"><div class="header-with-spinner"><div class="agenda-search">Search Agenda</div><div class="loader" id="spinner"></div></div><div class="row"><div class="col-md-12 col-lg-12 mx-auto"><div class="input-group"><input class="form-control" id="searchInput" maxlength="260" name="query" placeholder="Search..." type="text" /><span class="input-group-btn"><button class="btn btn-primary" id="searchButton" type="button">Search</button></span> </div></div></div><div class="mt-3" id="results"></div><div class="loader" id="spinner"></div></div></div> </div></div> </div> <div class="col-sm-3"> <div id="Contentplaceholder1_T14051A0F003_Col01" class="sf_colsIn pad-lr" data-sf-element="Column 2" data-placeholder-label="Column 2"><div class='sfContentBlock'><br class="hidden-md hidden-lg" /><p class="social-icons"><a target="_blank" href="/docs/librariesprovider8/ics/24/pge24.ics?sfvrsn=72f8204e_1&download=true" title="Outlook"><img src="/images/default-source/social/calendar-gray.png?sfvrsn=91696e36_6" title="Outlook" alt="Outlook" class="social-icon" /></a> <a href="https://www.facebook.com/PEGSummit" target="_blank" title="Facebook"><img src="/images/default-source/social/facebook-gray.png?sfvrsn=35d4a48c_4" title="Facebook" alt="Facebook" class="social-icon" /></a> <a href="https://www.linkedin.com/groups/1830195/" target="_blank" title="LinkedIn"><img src="/images/default-source/social/linkedin-gray.png?sfvrsn=ed70471e_4" title="LinkedIn" alt="LinkedIn" class="social-icon" /></a> <a href="https://twitter.com/PEGSboston" target="_blank" title="Twitter"><img src="/images/default-source/social/twitter-gray.png?sfvrsn=bac909e7_7" title="Twitter" alt="Twitter" class="social-icon" /></a> </p><div class="sidebar-hashtag"><b>#PEGSEurope</b> </div><hr /><div><a href="https://register.cambridgeinnovationinstitute.com/reg/pge"><img src="/images/librariesprovider8/home/24/register-today-rc.png?sfvrsn=a325bb55_8" class="imageResize" alt="Register Early for Maximum Savings" /></a></div><div class="sidebar-item"><a href="/2024-brochure-download-form"><img src="/images/librariesprovider8/home/24/download-brochure-rc.png?sfvrsn=7062d93b_2" class="imageResize" alt="Download Brochure" /></a></div><div class="sidebar-item"><a href="/search"><img src="/images/librariesprovider8/home/24/search-agenda-rc.png?sfvrsn=a6f56dd7_5" class="imageResize" alt="Download Brochure" /></a></div><div class="sidebar-item"><a href="/poster-titles"><img src="/images/librariesprovider8/home/24/poster-rc.png?sfvrsn=8290ae8c_2" class="imageResize" alt="Present a poster" /></a></div><hr /><!-- <div class="text-center"> <p class="terciary-text"><b>Premier Sponsors</b></p> </div> --> <div class="text-center"><a href="/sponsors" data-sf-ec-immutable=""><b>VIEW ALL SPONSORS</b></a> <div class="text-center pad-top"><a href="/media-partners" data-sf-ec-immutable=""><b>VIEW MEDIA PARTNERS</b></a> </div><hr /></div> </div> <div > <div class="sf-Long-text" ><p class="secondary-text"><b>Conference Programs</b></p><img src="/images/librariesprovider8/home/24/pge-icons_pge-engineering-eyebrow.png?sfvrsn=4c94b9a4_1" title="Engineering" alt="Engineering" class="imageResize" /><div><ul><li><a href="/phage-display" data-sf-ec-immutable="">Display of Biologics</a> </li><li><a href="/engineering-antibodies" data-sf-ec-immutable="">Engineering Antibodies</a> </li><li><a href="/machine-learning-part2" data-sf-ec-immutable="">Machine Learning: Part 2</a> </li></ul><img src="/images/librariesprovider8/home/24/pge-icons_pge-targets-eyebrow.png?sfvrsn=aeecb1c6_1" title="Targets" alt="Targets" class="imageResize" /><ul><li><a href="/antibody-based-cancer-therapies" data-sf-ec-immutable="">Antibody-Based Therapies</a> </li><li><a href="/emerging-targets" data-sf-ec-immutable="">Emerging Targets & Approaches</a> </li><li><a href="/membrane-proteins" data-sf-ec-immutable="">Membrane Protein Targets</a> </li></ul><img src="/images/librariesprovider8/home/24/pge-icons_pge-bispecifics-eyebrow.png?sfvrsn=1815c3ef_1" title="Bispecifics" alt="Bispecifics" class="imageResize" /><ul><li><a href="/bispecific-safety-efficacy" data-sf-ec-immutable="">Safety & Efficacy</a> </li><li><a href="/advancing-bispecifics" data-sf-ec-immutable="">Advancing Multispecifics</a> </li><li><a href="/engineering-bispecifics" data-sf-ec-immutable="">Engineering Bispecifics</a> </li></ul><img src="/images/librariesprovider8/home/24/pge-icons_pge-immunotherapy-eyebrow.png?sfvrsn=ff126dc9_1" title="Immunotherapy" alt="Immunotherapy" class="imageResize" /><ul><li><a href="/tumour-microenvironment" data-sf-ec-immutable="">Modulating the TME</a> </li><li><a href="/car-t-innovations" data-sf-ec-immutable="">Innovative CAR T Therapy</a> </li><li><a href="/next-generation-immunotherapies" data-sf-ec-immutable="">Next-Gen Immunotherapies</a> </li></ul><img src="/images/librariesprovider8/home/24/pge-icons_pge-analytical-eyebrow.png?sfvrsn=c472cb2c_1" title="Analytical" alt="Analytical" class="imageResize" /><ul><li><a href="/optimisation-developability" data-sf-ec-immutable="">Optimisation & Developability</a> </li><li><a href="/characterising-biotherapeutics" data-sf-ec-immutable="">Analytical Characterisation</a> </li><li><a href="/protein-stability" data-sf-ec-immutable="">Protein Stability & Formulation </a> </li></ul><img src="/images/librariesprovider8/home/24/pge-icons_pge-expression-eyebrow.png?sfvrsn=ea1913a9_1" title="Expression" alt="Expression" class="imageResize" /><ul><li><a href="/systems-engineering" data-sf-ec-immutable="">Data Science & Engineering</a></li><li><a href="/optimising-protein-expression" data-sf-ec-immutable="">Optimising Expression</a></li><li><a href="/protein-process-development" data-sf-ec-immutable="">Process Development</a></li></ul><img src="/images/librariesprovider8/home/24/pge-icons_pge-machine-learning-eyebrow.png?sfvrsn=b0bed8ca_1" class="imageResize" alt="Machine Learning" /><ul><li><a href="/PEGS-Europe-Training-Seminars" data-sf-ec-immutable="">Intro to Machine Learning</a> </li><li><a href="/machine-learning" data-sf-ec-immutable="">Machine Learning: Part 1</a> </li><li><a href="/machine-learning-part2" data-sf-ec-immutable="">Machine Learning: Part 2</a> </li></ul><img src="/images/librariesprovider8/home/24/pge-icons_pge-oncology-eyebrow.png?sfvrsn=abc93b1e_1" class="imageResize" alt="Oncology" /><ul><li><a href="/antibody-based-cancer-therapies" data-sf-ec-immutable="">Antibody-Based Therapies</a> </li><li><a href="/engineering-conjugates" data-sf-ec-immutable="">Engineering Conjugates</a> </li><li><a href="/next-generation-immunotherapies" data-sf-ec-immutable="">Next-Gen Immunotherapies</a> </li></ul><hr /><div><a href="/short-courses"><img src="/images/librariesprovider8/home/24/short-courses.png?sfvrsn=87846383_1" class="imageResize" alt="Short Courses" /></a></div><div class="sidebar-item"><a href="/PEGS-Europe-Training-Seminars"><img src="/images/librariesprovider8/home/24/training-seminars.png?sfvrsn=3cd22bc9_1" class="imageResize" alt="Training Seminars" /></a></div><hr /><p class="terciary-text text-center"><b>Related Event</b></p><a href="https://www.biologicsummit.com/" target="_blank"><img src="/images/librariesprovider8/side-bar/24/aibp25-400x175.jpg?sfvrsn=8c29de38_1" class="imageResize" alt="Bioloigics Summit 2025 - San Diego, CA" /></a> </div></div> </div></div> </div> </div> </div> </div> </div> <footer> <div > <div class="sf-Long-text" ><a href="https://register.cambridgeinnovationinstitute.com/reg/pge"><img src="/images/librariesprovider8/home/24/pge-banner-cta-final-days-1920x85.jpg?sfvrsn=7480aa37_8" alt="Register" class="imageResize" /></a></div> </div> <div > <div class="sf-Long-text" ><div class="footer"><div class="container"><div class="row"><div class="col-sm-3 col-xs-12"><div class="footer-small"><div class="footer-small-inner"><img alt="CHI | Cambridge HealthTech Institute" class="CII-footer" src="/UploadedImages/CHI-logo.png" data-sf-ec-immutable="" /><br /><p>250 First Avenue, Suite 300<br />Needham, MA 02494<br /><br />P: 781.972.5400<br />F: 781.972.5425 <br />E: <a href="mailto:chi@healthtech.com?cdtConferenceId=404272006.1663694140&cdtRollupId=404272006.1663694140" data-sf-ec-immutable="">chi@healthtech.com</a> </p><div class="row"><div class="col-sm-12 footer-social"><a href="https://twitter.com/CHI_Healthtech" data-sf-ec-immutable=""><img src="/images/default-source/social/twitter-gray.png?sfvrsn=bac909e7_7" alt="" class="footer-social-icons" /></a> <a href="https://www.linkedin.com/company/cambridge-healthtech-institute" data-sf-ec-immutable=""><img src="/images/default-source/social/linkedin-gray.png?sfvrsn=ed70471e_4" class="footer-social-icons" alt="" /></a> <a href="https://www.facebook.com/HealthtechConferences" data-sf-ec-immutable=""><img src="/images/default-source/social/facebook-gray.png?sfvrsn=35d4a48c_4" class="footer-social-icons" alt="" /></a> </div></div></div></div></div><div class="col-sm-4 footer-border hidden-xs"><div class="row"><div class="col-sm-12"><p>Life Science Portals</p></div><div class="col-sm-6"><p><a href="http://biologicaltherapeutics.cambridgeinnovationinstitute.com/home">Biological Therapeutic Products</a></p><p><a href="http://biomarkers.cambridgeinnovationinstitute.com/home">Biomarkers & Diagnostics</a></p><p><a href="http://biopharmastrategy.cambridgeinnovationinstitute.com/home">Biopharma Strategy</a></p><p><a href="https://bioprocessing.cambridgeinnovationinstitute.com/home">Bioprocess & Manufacturing</a></p><p><a href="http://chemistry.cambridgeinnovationinstitute.com/home">Chemistry</a></p><p><a href="http://clinicaltrials.cambridgeinnovationinstitute.com/home">Clinical Trials &<br data-sf-ec-immutable="" />Translational Medicine</a></p><p><a href="http://druganddevice.cambridgeinnovationinstitute.com/home">Drug & Device Safety</a></p></div><div class="col-sm-6"><p><a href="http://drugdevelopment.cambridgeinnovationinstitute.com/home">Drug Discovery & Development</a></p><p><a href="http://drugtargets.cambridgeinnovationinstitute.com/home">Drug Targets</a></p><p><a href="http://healthcare.cambridgeinnovationinstitute.com/home">Healthcare</a></p><p><a href="http://it.cambridgeinnovationinstitute.com/home">IT, AI, ML & Informatics</a></p><p><a href="http://techtools.cambridgeinnovationinstitute.com/home">Technology & Tools For<br data-sf-ec-immutable="" />Life Science</a></p><p><a href="http://therapeutics.cambridgeinnovationinstitute.com/home">Therapeutic Indications</a></p><p><a href="https://www.cambridgeinnovationinstitute.com/vip-series" data-sf-ec-immutable="">Venture, Innovation & Partnering</a></p></div></div></div><div class="col-sm-3 footer-border hidden-xs"><p>CHI Divisions</p><p><a href="https://www.healthtech.com/?cdtConferenceId=404272006.1663694140&cdtRollupId=404272006.1663694140" data-sf-ec-immutable="">Conferences</a></p><p><a href="https://www.insightpharmareports.com/" data-sf-ec-immutable="">Reports & Market Research</a></p><p><a href="https://www.barnettinternational.com/" data-sf-ec-immutable="">Barnett Educational Services</a></p><p><a href="https://www.healthtech.com/publishing" data-sf-ec-immutable="">News & Advertising</a></p><p><a href="https://proservices.healthtech.com/?cdtConferenceId=404272006.1663694140&cdtRollupId=404272006.1663694140" data-sf-ec-immutable="">Professional Services</a></p></div><div class="col-sm-2 footer-border hidden-xs"><p>Corporate Information</p><p><a href="https://www.cambridgeinnovationinstitute.com/" data-sf-ec-immutable="">Cambridge Innovation<br />Institute</a></p><p><a href="https://www.cambridgeinnovationinstitute.com/Executive-Team/" data-sf-ec-immutable="">Executive Team</a></p><p><a href="https://www.cambridgeinnovationinstitute.com/Testimonials/" data-sf-ec-immutable="">Testimonials</a></p><p><a href="https://www.cambridgeinnovationinstitute.com/mailing-list.html" data-sf-ec-immutable="">Mailing List</a></p><p><a href="https://www.cambridgeinnovationinstitute.com/Careers/" title="Careers" data-sf-ec-immutable="">Careers</a></p><hr /><p><a href="https://www.cambridgeinnovationinstitute.com/request-information" data-sf-ec-immutable="">Request Information</a></p><p><a href="https://www.cambridgeinnovationinstitute.com/Privacy-Policy/" data-sf-ec-immutable="">Privacy Policy</a></p></div></div></div></div></div> </div> </footer> <script type="text/javascript"> //<![CDATA[ window.__TsmHiddenField = $get('ctl04_TSM');;(function() { function loadHandler() { var hf = $get('ctl05_TSSM'); if (!hf._RSSM_init) { hf._RSSM_init = true; hf.value = ''; } hf.value += ';Telerik.Sitefinity.Resources, Version=14.2.7900.0, Culture=neutral, PublicKeyToken=b28c218413bdf563:en:ec7772cc-ee32-478e-8437-4242283bb12f:7a90d6a'; Sys.Application.remove_load(loadHandler); }; Sys.Application.add_load(loadHandler); })();//]]> </script> </form><script type="application/json" id="PersonalizationTracker"> {"IsPagePersonalizationTarget":false,"IsUrlPersonalizationTarget":false,"PageId":"7bc7282d-d8dd-4e0c-be0a-d0e689afa073"} </script><script type="text/javascript" src="/WebResource.axd?d=Oiw5o8i74rDb2VpVaCaMSouKRnJ2rn_cgRr8eXgFzWmU6yVv8fmvjGNlDReMboLSikSmK5y_KsDt9j-18b7ZqBNiz0-92AjY43-6qMcq4O__3MjW1Pd6kS68TTYuxCxnF4HnqcusO3ivgfHZzR9usujs8YAzvYku29ledrs3mezPir5ikBP0Pxh4nDmiJEk2WgW0YVPdsdMlu69MVd6jI94nvC3-40pMaRxtm9HTV2I1&t=637922505260000000"> </script><script type="text/javascript" src="/bower_components/js-url/url.min.js"></script><script type="text/javascript" src="/js/TrackClicks.js"></script><script type="text/javascript" src="/js/CrossDomainClient.js"></script><script type="text/javascript"> function loadEventData() { const apiEndpoint = 'https://api.speakers.healthtech.com/api/schedule/pge240900'; addLinkRedirector(); addSubmitHandling(); try { const cachedEntry = sessionStorage.getItem('cachedEventData'); if (cachedEntry) { console.log('loading from cache') const { data } = JSON.parse(cachedEntry); // Data is still fresh, use cached data const keywordData = extractKeywords(data); useData(data, keywordData); return; } } catch (error) { console.error('Error accessing sessionStorage:', error); // Optionally handle the error by logging it or showing user feedback } // If there's no cached data or an error occurs, fetch new data from the API fetchEventData(apiEndpoint); } function fetchEventData(apiEndpoint) { document.getElementById('spinner').style.display = 'block'; fetch(apiEndpoint) .then(response => response.json()) .then(data => extractFiltered(data)) .then(data => { if (data.agendaList) { data.agenda = preprocessAgendaData(data.agendaList); } if (data.speakerList) { data.speakers = preprocessSpeakerData(data.speakerList); } const keywordData = extractKeywords(data); // Try to cache the new data try { const dataToCache = { data: data, // keywords: keywordData }; sessionStorage.setItem('cachedEventData', JSON.stringify(dataToCache)); } catch (error) { console.error('Failed to cache data in sessionStorage:', error); // Here you could handle storage errors, maybe clear old data if needed } useData(data, keywordData); }) .catch(error => { console.error('Failed to fetch data from API:', error); document.getElementById('spinner').style.display = 'none'; // Optionally handle API fetch error, update UI to reflect error state }); } function useData(data, keywords) { document.getElementById('spinner').style.display = 'block'; window.eventData = data; window.keywords = keywords; const urlParams = new URLSearchParams(window.location.search); const query = urlParams.get('query'); if (query) { document.getElementById('searchInput').value = query; // Populate the search input with the query // Perform the search based on the query // Update the display based on the search results searchEvents() } // Hide the spinner document.getElementById('spinner').style.display = 'none'; // Check if there's a saved scroll position const lastScrollPosition = sessionStorage.getItem('lastScrollPosition'); if (lastScrollPosition) { window.scrollTo(0, parseInt(lastScrollPosition)); // Optionally, clear the saved position if it shouldn't be reused on the next load sessionStorage.removeItem('lastScrollPosition'); } } function addSubmitHandling() { document.getElementById('searchButton').addEventListener('click', function(event) { event.preventDefault(); // Prevent the default link behavior var searchInput = document.getElementById("searchInput").value; var currentUrl = window.location.href; // Encode the search input to ensure the URL is valid var updatedUrl = updateQueryStringParameter(currentUrl, "query", encodeURIComponent(searchInput)); // Redirect to the updated URL window.location.href = updatedUrl; }); document.getElementById('searchInput').addEventListener('keypress', function(event) { // Check if the key pressed was 'Enter' if (event.key === "Enter") { event.preventDefault(); // Prevent the default form submit behavior document.getElementById('searchButton').click(); // Trigger the button click } }); } // Function to update query parameter in URL function updateQueryStringParameter(uri, key, value) { var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i"); var separator = uri.indexOf("?") !== -1 ? "&" : "?"; if (uri.match(re)) { return uri.replace(re, '$1' + key + "=" + value + '$2'); } else { return uri + separator + key + "=" + value; } } async function extractFiltered(apiData) { let agendaList = []; let speakerList = []; for (let agendaData of apiData) { let programTitle = agendaData.program.title; let uri = agendaData.conference.cii_homeURI; if ('cii_homeURI' in agendaData.program) { uri = agendaData.program.cii_homeURI; } let agendaDataSpeaker = JSON.parse(JSON.stringify(agendaData)); // Deep copy in JavaScript removeNestedKeys(agendaData, listOfFlattenedKeysToRemoveAgenda); removeUnwantedAndEmpty(agendaData); removeNestedKeys(agendaDataSpeaker, listOfFlattenedKeysToRemovePeople); removeUnwantedAndEmpty(agendaDataSpeaker); agendaData = cleanup(agendaData); agendaDataSpeaker = cleanup(agendaDataSpeaker); let extractedPresentations = extractPresentations(agendaData, uri, programTitle); let extractedSpeakers = extractSpeakers(agendaDataSpeaker, uri, programTitle); agendaList = agendaList.concat(extractedPresentations); speakerList = speakerList.concat(extractedSpeakers); } speakerList = removeDuplicateSpeakers(speakerList); agendaList = removeDuplicateAgendaEntries(agendaList); speakerList = mapSpeakerLinks(speakerList) agendaList = mapAgendaLinks(agendaList) speakerList = mapAgendaDataToSpeakerOptimized(agendaList, speakerList); return {agendaList, speakerList}; } function mapSpeakerLinks(speakerList) { speakerList.forEach(speaker => { let proceedingId = String(speaker['proceedingId'] || ''); let firstName = speaker['first_name'] || ''; let lastName = speaker['last_name'] || ''; let uri_program_link = speaker['uri_program_link'] || ''; speaker['uri_speaker_bio_link'] = 'https://www.pegsummit.com/speaker-biographies' + '#' + firstName + lastName; let events = speaker['events'] || []; events.forEach((event, eventIndex) => { let eventProceedingId = String(event['proceedingId'] || ''); speaker['events'][eventIndex]['uri_proceeding_date_link'] = uri_program_link + '#' + firstName + lastName + eventProceedingId; }); }); return speakerList; } function mapAgendaLinks(agendaList) { agendaList.forEach(proceeding => { let proceedingId = String(proceeding['proceedingId'] || ''); let firstName = proceeding['speakerXFirstName'] || ''; let lastName = proceeding['speakerXLastName'] || ''; let uri_program_link = proceeding['uri_program_link'] || ''; proceeding['uri_program_link'] = uri_program_link; proceeding['uri_proceeding_date_link'] = uri_program_link + '#' + firstName + lastName + proceedingId; }); return agendaList; } function cleanup(data) { data = cleanJson(data); data = removeSingleKvObjects(data); data = cleanJson(data); data = removeObjectsWithOnlyStartTime(data); return cleanJson(data); } function removeDuplicateSpeakers(speakersList) { const seen = new Set(); const uniqueSpeakers = []; speakersList.forEach(speaker => { if (!seen.has(speaker.name)) { uniqueSpeakers.push(speaker); seen.add(speaker.name); } }); return uniqueSpeakers; } function mapAgendaDataToSpeakerOptimized(agendaData, agendaDataSpeaker) { const speakerEventsMap = {}; // Build a map of events for each speaker agendaData.forEach(agendaItem => { const speakerNames = agendaItem.speakerX || []; speakerNames.forEach(name => { let containsSubstring = /tessier/i.test(name); // 'i' for case-insensitive if (!name) { // Skip empty names return; } // Initialize the speaker in the map if not already present if (!speakerEventsMap[name]) { speakerEventsMap[name] = { eventsSet: new Set(), eventsList: [] }; } // Generate a unique key for the current event to check for duplicates const eventKey = `${agendaItem.title || ''}${agendaItem.session_time || ''}${agendaItem.date || ''}`; // Check if the event is already added for the speaker if (!speakerEventsMap[name].eventsSet.has(eventKey)) { // If not, add it to both the set and list speakerEventsMap[name].eventsSet.add(eventKey); speakerEventsMap[name].eventsList.push({ title: agendaItem.title, program_title: agendaItem.program_title, session_time: agendaItem.session_time, date: agendaItem.date, uri_program_link: agendaItem.uri_program_link, uri_proceeding_date_link: agendaItem.uri_proceeding_date_link, proceedingId: agendaItem.proceedingId, }); } }); }); // Update agenda_data_speaker with the found events, using the events_list agendaDataSpeaker.forEach(speaker => { const speakerName = speaker.name; // Directly access the speaker's events list from the map, if any speaker.events = (speakerEventsMap[speakerName] && speakerEventsMap[speakerName].eventsList.map(event => ({ ...event }))) || []; }); return agendaDataSpeaker; } function removeDuplicateAgendaEntries(data) { const seen = new Set(); const uniqueData = []; data.forEach(item => { const identifier = item.title + '|' + item.abstract; // Create a unique string identifier if (!seen.has(identifier)) { uniqueData.push(item); seen.add(identifier); } }); return uniqueData; } function cleanJson(obj) { if (Array.isArray(obj)) { return obj.map(item => cleanJson(item)).filter(item => item != null && typeof item !== 'object' || Object.keys(item).length > 0); } else if (obj !== null && typeof obj === 'object') { let newObj = {}; for (let [key, value] of Object.entries(obj)) { value = cleanJson(value); if (value != null && typeof value !== 'object' || Object.keys(value).length > 0) { newObj[key] = value; } } return newObj; } return obj; } function removeSingleKvObjects(obj) { if (obj !== null && typeof obj === 'object' && !Array.isArray(obj)) { for (let key in obj) { let value = obj[key]; if (typeof value === 'object' && value !== null && !Array.isArray(value) && Object.keys(value).length === 1) { let subKey = Object.keys(value)[0]; let subValue = value[subKey]; if (typeof subValue !== 'object' || Array.isArray(subValue) && subValue.length === 0) { delete obj[key]; } else { obj[key] = removeSingleKvObjects(value); } } else if (Array.isArray(value)) { obj[key] = value.map(item => removeSingleKvObjects(item)).filter(item => item != null && typeof item !== 'object' || Object.keys(item).length > 0); } else { obj[key] = removeSingleKvObjects(value); } } } return obj; } function removeObjectsWithOnlyStartTime(obj) { if (obj !== null && typeof obj === 'object') { for (let key in obj) { let value = obj[key]; if (typeof value === 'object' && value !== null && Object.keys(value).length === 1 && 'startTime' in value) { delete obj[key]; } else { obj[key] = removeObjectsWithOnlyStartTime(value); } } } return obj; } function removeNestedKeys(data, keysToRemove) { let removeRecursively = (currentData, keyParts) => { if (!keyParts.length) return; if (Array.isArray(currentData)) { currentData.forEach(item => removeRecursively(item, keyParts)); } else if (currentData !== null && typeof currentData === 'object') { let currentKey = keyParts[0]; if (currentKey in currentData) { if (keyParts.length === 1) { delete currentData[currentKey]; } else { removeRecursively(currentData[currentKey], keyParts.slice(1)); } } } }; keysToRemove.forEach(key => { let keyParts = key.split('**'); removeRecursively(data, keyParts); }); } function removeUnwantedAndEmpty(data) { if (Array.isArray(data)) { return data.map(item => removeUnwantedAndEmpty(item)).filter(item => item != null && typeof item !== 'object' || Object.keys(item).length > 0); } else if (data !== null && typeof data === 'object') { for (let key in data) { let value = data[key]; if (key == 'proceedingId'){ continue } if (value === null || value === false || typeof value === 'boolean' || (typeof value === 'number' && !isNaN(value)) || typeof value === 'string' && value.trim() === '') { delete data[key]; } else { data[key] = removeUnwantedAndEmpty(value); } } return data; } return data; } function extractSpeakers(data, uri, programTitle) { let speakers = []; // Recursive function to handle both arrays and objects function traverse(data) { if (Array.isArray(data)) { data.forEach(item => traverse(item)); } else if (data !== null && typeof data === 'object') { // Check if the current dictionary represents a speaker if ("preferredNameAndAfilliationAppellation" in data) { let firstName = data.firstName || ""; let lastName = data.lastName || ""; let speakerInfo = { name: data.preferredNameAndAfilliationAppellation || "Unknown", bio: data.bio || "No biography provided.", first_name: firstName, last_name: lastName, uri_program_link: uri, program_title: programTitle, title: data.proceedingTitleSanitized || "" }; speakers.push(speakerInfo); } // Recurse through each value of the object Object.values(data).forEach(value => traverse(value)); } } traverse(data); // Start the recursive traversal return speakers; } function extractPresentations(scheduleData, uri, programTitle) { let extractedPresentations = []; if (!scheduleData.scheduleBlocks) { return extractedPresentations; } // Iterate through each block in the schedule scheduleData.scheduleBlocks.forEach(block => { let blockDate = block.blockDate || ''; let sessionTimeBlock = block.blockDateStartTime || ''; // Check if there's content for this date if (block.scheduleBlockContent) { block.scheduleBlockContent.forEach(content => { let sessionTime = content.startTime || sessionTimeBlock; // Handle direct textBlock if (content.textBlock) { let textBlock = content.textBlock; let proceedingId = content.proceedingId || ''; extractedPresentations.push({ date: blockDate, session_time: sessionTime, session_name: 'Direct Event: ' + (textBlock.textBlockName || ''), presentation_time: sessionTime, title: textBlock.textBlockName || '', abstract: textBlock.textBlockDescription || '', uri_program_link: uri, proceedingId: proceedingId, program_title: programTitle, speakerX: [] }); } // Handle sessionBlock if (content.sessionBlock) { let sessionBlock = content.sessionBlock; let sessionName = sessionBlock.sessionBlockName || 'Unnamed Session'; if (sessionBlock.sessionBlockContent) { sessionBlock.sessionBlockContent.forEach(sessionContent => { let presentationTime = sessionContent.startTime || sessionTime; if (sessionContent.presentationBlock) { let presentationBlock = sessionContent.presentationBlock; let extractedPresentationsBlockList = []; if (presentationBlock.presentationBlockPresentations) { presentationBlock.presentationBlockPresentations.forEach(presentation => { let speakerData = presentation.speakerPortalPresentation || presentation.spexPresentation || {}; let title = speakerData.proceedingTitleSanitized || ''; let abstract = speakerData.webAbstractSanitized || ''; let preferredName = speakerData.preferredNameAndAfilliationAppellation || ''; let speakerXFirstName = speakerData.firstName || ''; let speakerXLastName = speakerData.lastName || ''; let proceedingId = speakerData.proceedingId || ''; let copresentors = (speakerData.copresentors || []).map(coP => ({ preferredNameAndAfilliationAppellation: coP.preferredNameAndAfilliationAppellation, firstName: coP.firstName, lastName: coP.lastName })); let speakerX_full = { preferredNameAndAfilliationAppellation: preferredName, firstName: speakerXFirstName, lastName: speakerXLastName }; extractedPresentationsBlockList.push({ date: blockDate, session_time: sessionTime, session_name: sessionName, presentation_time: presentationTime, title: title, abstract: abstract || 'No abstract provided', uri_program_link: uri, proceedingId: proceedingId, program_title: programTitle, speakerX: [preferredName].concat(copresentors.map(co => co.preferredNameAndAfilliationAppellation)), speakerXFirstName: speakerXFirstName, speakerXLastName: speakerXLastName, speakerX_full: [speakerX_full].concat(copresentors) }); }); // Add all presentations in the block list directly extractedPresentationsBlockList.forEach(presentation => { extractedPresentations.push(presentation); }); } } }); } } }); } }); return extractedPresentations; } function addLinkRedirector() { document.getElementById('results').addEventListener('click', function(event) { // Check if the clicked element is a search result link const target = event.target.closest('.search-result-link'); if (!target) return; event.preventDefault(); // Prevent the default link behavior // Getting the current search query from the input const currentQuery = document.getElementById('searchInput').value; // Constructing a new URL based on the current location const currentUrl = new URL(window.location.href); currentUrl.searchParams.set('query', currentQuery); // Update the query parameter with the current search query // Updating the address bar to reflect the new query parameter window.history.pushState({ path: currentUrl.toString() }, '', currentUrl.toString()); // Storing the current scroll position in sessionStorage const scrollPosition = window.scrollY; sessionStorage.setItem('lastScrollPosition', scrollPosition.toString()); // Redirecting to the target URL window.location.href = target.getAttribute('href'); }); } function handleKeyPress(event) { if (event.key === 'Enter') { event.preventDefault(); // Prevent the default link behavior } } // function formatDate(dateString) { // const [month, day, year] = dateString.split('/'); // const formattedDate = `${year}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`; // const date = new Date(formattedDate); // const dateOptions = { year: 'numeric', month: 'long', day: 'numeric' }; // return isNaN(date.getTime()) ? 'Invalid Date' : date.toLocaleDateString(undefined, dateOptions); // } // function formatDate(dateString) { // const [month, day, year] = dateString.split('/'); // // Create a new date object directly in local time, explicitly setting the hour to noon // const date = new Date(year, month - 1, day, 12); // Setting time to 12:00 prevents timezone affecting the date // // Define options for formatting the date // const dateOptions = { year: 'numeric', month: 'long', day: 'numeric' }; // // Check if the date is valid and format it, otherwise return 'Invalid Date' // return isNaN(date.getTime()) ? 'Invalid Date' : date.toLocaleDateString(undefined, dateOptions); // } function formatDate(dateString) { const [month, day, year] = dateString.split('/'); // Create a date object with the local date components at a neutral hour (noon to avoid DST issues) const date = new Date(year, month - 1, day, 12); // Define options for formatting the date without altering its time zone const dateOptions = { year: 'numeric', month: 'long', day: 'numeric', timeZone: 'UTC', // Use UTC to prevent automatic local time zone conversion }; // Return the formatted date using 'en-US' or another appropriate locale return isNaN(date.getTime()) ? 'Invalid Date' : date.toLocaleDateString('en-US', dateOptions); } function formatTime(timeString) { // Create a date object with a standard date and the provided time in UTC const time = new Date(`1970-01-01T${timeString}Z`); // Append 'Z' to indicate UTC time // Define options for formatting the time const timeOptions = { hour: '2-digit', minute: '2-digit', hour12: true, timeZone: 'UTC' // Specify UTC to ensure consistent time display }; // Return the formatted time, handling invalid inputs return isNaN(time.getTime()) ? 'Invalid Time' : time.toLocaleTimeString('en-US', timeOptions); } function preprocessAgendaData(agenda) { return agenda.map(item => { // Format the date if (item.date) { item.date = formatDate(item.date); } // Rename presentation_time to time and format it if (item.presentation_time) { item.time = formatTime(item.presentation_time); delete item.presentation_time; // Remove the original presentation_time field } // Create speakerX_string from speakerX list, joined by a space if (item.speakerX && Array.isArray(item.speakerX)) { item.speakerX_string = item.speakerX.join(' '); } // Remove session_time and session_name delete item.session_time; delete item.session_name; if (startsWithScOrTsDigit(item.program_title)) { item.abstract = item.abstract + '\n - Short Course or Training Seminar' } return item; }); } function preprocessSpeakerData(speaker) { return speaker.map(item => { // Format the date if (item.events && item.events.length > 0) { item.events.forEach(event => { if (event.date) { event.date = formatDate(event.date); } // Rename presentation_time to time and format it if (event.session_time) { event.time = formatTime(event.session_time); delete event.session_time; // Remove the original presentation_time field } }); } return item; }); } function searchEvents() { let query = document.getElementById('searchInput').value; query = query.trim(); // Trim the query to remove leading and trailing whitespace if (!query) { // Optionally, handle empty queries here, e.g., clear results or show a message return; } let results = bm25Search(query, window.eventData); displayResults(results, query); } function createHighlightElement(text, queryRegex) { const fragment = document.createDocumentFragment(); let lastIndex = 0; text.replace(queryRegex, (match, index) => { // Append text before the match if (index > lastIndex) { const textNode = document.createTextNode(text.slice(lastIndex, index)); fragment.appendChild(textNode); } // Highlight the matched text const highlightSpan = document.createElement('span'); highlightSpan.classList.add('highlight'); highlightSpan.textContent = match; fragment.appendChild(highlightSpan); lastIndex = index + match.length; }); // Append any remaining text after the last match if (lastIndex < text.length) { const textNode = document.createTextNode(text.slice(lastIndex)); fragment.appendChild(textNode); } return fragment; } function encodeURLWithFragment(url) { // Split the URL into the base part and the fragment part const [baseUrl, fragment] = url.split('#'); // Encode the fragment part only if it exists const encodedFragment = fragment ? encodeURIComponent(fragment) : ''; // Reassemble the URL return baseUrl + (encodedFragment ? '#' + encodedFragment : ''); } function displayResults(results, query) { const resultsDiv = document.getElementById('results'); // Clear previous results while (resultsDiv.firstChild) resultsDiv.removeChild(resultsDiv.firstChild); if (!query) return; const escapedQuery = query.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&'); const queryRegex = new RegExp(escapedQuery, 'gi'); results.forEach(result => { const cardDiv = document.createElement('div'); cardDiv.classList.add('card', 'margin-bottom-3'); const cardBodyDiv = document.createElement('div'); cardBodyDiv.classList.add('card-body','border-thin','padding-3'); if (result.title) { // Handling article objects // Common link element const commonLink = document.createElement('a'); // Course and training links are broken and are just being replaced with uri_program_link titleLink = encodeURLWithFragment(result.uri_proceeding_date_link); if (startsWithScOrTsDigit(result.program_title)) { hashRedirectNumber = getNumberAfterScOrTs(result.program_title) titleLink = encodeURLWithFragment(result.uri_program_link + '#' + hashRedirectNumber); } commonLink.href = titleLink; commonLink.classList.add('search-result-link'); // Add the class const titleH5 = document.createElement('h5'); titleH5.classList.add('card-title'); titleH5.appendChild(createHighlightElement(result.title, queryRegex)); commonLink.appendChild(titleH5); // Append title within link cardBodyDiv.appendChild(commonLink.cloneNode(true)); // Clone to use the link again if (result.speakerX && result.speakerX.length > 0) { result.speakerX.forEach(speaker => { const speakerDiv = document.createElement('div'); speakerDiv.classList.add('card-text', 'speakerX', 'margin-bottom-2'); speakerDiv.appendChild(createHighlightElement(speaker, queryRegex)); cardBodyDiv.appendChild(speakerDiv); }); } const abstractDiv = document.createElement('div'); abstractDiv.classList.add('card-text'); abstractDiv.appendChild(createHighlightElement(result.abstract, queryRegex)); abstractDiv.classList.add('text-medium-small'); cardBodyDiv.appendChild(abstractDiv); // Create SVG element for the calendar icon // const calendarIcon = document.createElement('i'); // calendarIcon.classList.add('fa-solid', 'fa-calendar-day', 'fa-1x'); const calendarIcon = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); calendarIcon.setAttribute("aria-hidden", "true"); calendarIcon.setAttribute("focusable", "false"); calendarIcon.setAttribute("data-prefix", "fas"); calendarIcon.setAttribute("data-icon", "user"); calendarIcon.setAttribute("class", "svg-inline--fa fa-user fa-w-14 fa-h-14"); calendarIcon.setAttribute("role", "img"); calendarIcon.setAttribute("xmlns", "http://www.w3.org/2000/svg"); calendarIcon.setAttribute("viewBox", "0 0 448 512"); calendarIcon.setAttribute("style", "width: 1em; height: 1em; vertical-align: -0.125em;"); const commonLink_footer = document.createElement('div'); commonLink_footer.classList.add('margin-top-2', 'card-date-footer'); // Create a path element const path = document.createElementNS('http://www.w3.org/2000/svg', 'path'); path.setAttribute("fill", "currentColor"); path.setAttribute("d", "M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64H64C28.7 64 0 92.7 0 128v16 48V448c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V192 144 128c0-35.3-28.7-64-64-64H344V24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64H152V24zM48 192h80v56H48V192zm0 104h80v64H48V296zm128 0h96v64H176V296zm144 0h80v64H320V296zm80-48H320V192h80v56zm0 160v40c0 8.8-7.2 16-16 16H320V408h80zm-128 0v56H176V408h96zm-144 0v56H64c-8.8 0-16-7.2-16-16V408h80zM272 248H176V192h96v56z"); // Append the path element to the svg calendarIcon.appendChild(path); // Date, time, and session name section const dateFooterIcon = document.createElement('span'); dateFooterIcon.classList.add('card-text','card-date-footer'); // Course and training links are broken and are just being replaced with uri_program_link let dateFooterLink = encodeURLWithFragment(result.uri_proceeding_date_link); let programFooterLink = encodeURLWithFragment(result.uri_program_link); const dateFooter = document.createElement('a'); if (startsWithScOrTsDigit(result.program_title)) { hashRedirectNumber = getNumberAfterScOrTs(result.program_title) dateFooterLink = encodeURLWithFragment(result.uri_program_link + '#' + hashRedirectNumber); programFooterLink = encodeURLWithFragment(result.uri_program_link + '#' + hashRedirectNumber); } dateFooter.href = dateFooterLink; dateFooter.classList.add('card-text', 'card-date-footer','search-result-link'); const dateFooter_pipe = document.createElement('span'); dateFooter_pipe.classList.add('card-text', 'card-date-footer'); const dateFooter_program = document.createElement('a'); dateFooter_program.href = programFooterLink; dateFooter_program.classList.add('card-text', 'card-date-footer','search-result-link'); const dateTimeSessionText = document.createTextNode(` ${result.date} at ${result.time}`); const dateTimeSessionText_pipe = document.createTextNode(` | `); const dateTimeSessionText_program = document.createTextNode(`${result.program_title ? result.program_title : ''}`); dateFooterIcon.appendChild(calendarIcon); dateFooter.appendChild(dateTimeSessionText); dateFooter_pipe.appendChild(dateTimeSessionText_pipe); dateFooter_program.appendChild(dateTimeSessionText_program); commonLink_footer.appendChild(dateFooterIcon); // Append date footer within link commonLink_footer.appendChild(dateFooter); // Append date footer within link commonLink_footer.appendChild(dateFooter_pipe); // Append date footer within link commonLink_footer.appendChild(dateFooter_program); // Append date footer within link cardBodyDiv.appendChild(commonLink_footer.cloneNode(true)); // Clone to use the link again } else if (result.name) { // Handling speaker objects const nameLink = document.createElement('a'); // Replace spaces with dashes const programTitleFormatted = result.program_title.replace(/\s+/g, '-'); const fullNameFormatted = (result.first_name + result.last_name).replace(/\s+/g, '-'); // Construct the full URL const uriWithName = `${result.uri_program_link}#${fullNameFormatted}`; nameLink.href = encodeURLWithFragment(result.uri_speaker_bio_link); nameLink.classList.add('search-result-link'); // Add the class const nameH5 = document.createElement('h5'); nameH5.classList.add('card-title'); nameH5.appendChild(createHighlightElement(result.name, queryRegex)); nameLink.appendChild(nameH5); cardBodyDiv.appendChild(nameLink); const bioDiv = document.createElement('div'); bioDiv.classList.add('card-text','text-medium-small'); bioDiv.appendChild(createHighlightElement(result.bio, queryRegex)); cardBodyDiv.appendChild(bioDiv); const eventLink = document.createElement('div'); eventLink.classList.add( 'margin-top-2'); if (result.events && result.events.length > 0) { result.events.forEach(event => { const eventDiv = document.createElement('div'); eventDiv.classList.add('card-text', 'card-date-footer'); // const calendarIcon = document.createElement('i'); // Create SVG element for the calendar icon // calendarIcon.classList.add('fa-solid', 'fa-user', 'fa-1x'); const calendarIcon = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); calendarIcon.setAttribute("aria-hidden", "true"); calendarIcon.setAttribute("focusable", "false"); calendarIcon.setAttribute("data-prefix", "fas"); calendarIcon.setAttribute("data-icon", "user"); calendarIcon.setAttribute("class", "svg-inline--fa fa-user fa-w-14 fa-h-14"); calendarIcon.setAttribute("role", "img"); calendarIcon.setAttribute("xmlns", "http://www.w3.org/2000/svg"); calendarIcon.setAttribute("viewBox", "0 0 448 512"); calendarIcon.setAttribute("style", "width: 1em; height: 1em; vertical-align: -0.125em;"); const path = document.createElementNS('http://www.w3.org/2000/svg', 'path'); path.setAttribute("fill", "currentColor"); path.setAttribute("d", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.1-46.6 16-72.9 16s-50.7-5.9-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4zM224 448c-70.7 0 128-57.3-128-128h256c0 70.7-57.3 128-128 128z"); calendarIcon.appendChild(path); eventDiv.appendChild(calendarIcon); let dateFooterLink = encodeURLWithFragment(event.uri_proceeding_date_link); let programFooterLink = encodeURLWithFragment(event.uri_program_link); // Course and training links are broken and are just being replaced with uri_program_link const dateFooter = document.createElement('a'); if (startsWithScOrTsDigit(event.program_title)) { hashRedirectNumber = getNumberAfterScOrTs(event.program_title) dateFooterLink = encodeURLWithFragment(event.uri_program_link + '#' + hashRedirectNumber); programFooterLink = encodeURLWithFragment(event.uri_program_link + '#' + hashRedirectNumber); } dateFooter.href = dateFooterLink; dateFooter.classList.add('card-text', 'card-date-footer', 'margin-left-custom','search-result-link'); const dateTimeSession = document.createTextNode(` ${event.date} at ${event.time}`); dateFooter.appendChild(dateTimeSession); eventDiv.appendChild(dateFooter); // pipe seperator const dateTimeSession_pipe = document.createTextNode(` |`); eventDiv.appendChild(dateTimeSession_pipe); // Program link const dateFooter_program = document.createElement('a'); dateFooter_program.href = programFooterLink; dateFooter_program.classList.add('card-text', 'card-date-footer', 'margin-left-custom','search-result-link'); const dateTimeSession_program = document.createTextNode(`${event.program_title || ''}`); dateFooter_program.appendChild(dateTimeSession_program); eventDiv.appendChild(dateFooter_program); eventLink.appendChild(eventDiv); cardBodyDiv.appendChild(eventLink); }); } } cardDiv.appendChild(cardBodyDiv); resultsDiv.appendChild(cardDiv); }); } function getHashFromURL(url) { // Split the URL by the hash symbol const parts = url.split('#'); // Check if there is a part after the hash if (parts.length > 1) { return parts[1]; // Return the part after the hash } else { return ''; // Return an empty string if no hash is found } } function startsWithScOrTsDigit(inputString) { const regex = /^(sc|ts)[0-9]/i; return regex.test(inputString); } function getNumberAfterScOrTs(inputString) { const regex = /^(sc|ts)([^:]+):/i; const match = inputString.match(regex); return match ? match[2] : null; } function extractTextForKeywords(text) { // Expanded list of common stop words const stopWords = new Set(["and", "the", "for", "with", "on", "in", "of", "to", "a", "an", "is", "it", "as", "are", "at", "by", "be", "this", "that", "from", "or", "have", "had", "not", "but", "they", "you", "she", "he", "we", "her", "him", "his", "hers", "its", "their", "theirs", "our", "ours", "who", "whom", "whose", "which", "what", "where", "when", "why", "how", "all", "any", "both", "each", "few", "more", "most", "other", "some", "such", "no", "nor", "too", "very", "can", "will", "just"]); let words = text.toLowerCase().match(/\b(\w+)\b/g); // Extract words using word boundary regex if (!words) return []; // Handle null match scenario words = words.filter(word => !stopWords.has(word) && word.length > 3); // Filter out stop words and short words let keywords = new Set(words); // Initialize keywords with filtered words // Add bigrams to keywords for (let i = 0; i < words.length - 1; i++) { let bigram = words[i] + " " + words[i + 1]; keywords.add(bigram); } // Add trigrams to keywords for (let i = 0; i < words.length - 2; i++) { let trigram = words[i] + " " + words[i + 1] + " " + words[i + 2]; keywords.add(trigram); } return Array.from(keywords); // Convert Set to Array for easy use } function extractKeywords(data) { let keywordsSet = new Set(); // Use a Set to avoid duplicates // Extract keywords from agenda items data.agenda.forEach(item => { extractTextForKeywords(item.title).forEach(word => keywordsSet.add(word)); extractTextForKeywords(item.abstract).forEach(word => keywordsSet.add(word)); // extractTextForKeywords(item.speakerX).forEach(word => keywordsSet.add(word)); extractTextForKeywords(item.speakerX_string).forEach(word => keywordsSet.add(word)); }); // Extract keywords from speaker details data.speakers.forEach(speaker => { extractTextForKeywords(speaker.name).forEach(word => keywordsSet.add(word)); if (speaker.bio) { extractTextForKeywords(speaker.bio).forEach(word => keywordsSet.add(word)); } }); return Array.from(keywordsSet); // Convert the Set to an Array } listOfFlattenedKeysToRemoveAgenda= [ 'scheduleBlocks**scheduleBlockName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**id', 'scheduleBlocks**scheduleBlockContent**id', 'scheduleBlocks**scheduleBlockContent**textBlock**id', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**headerBlock**id', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**id', 'scheduleBlocks**scheduleBlockContent**shareId', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**blockDefaultText', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**id', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**id', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**speakerGuid', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**programConfId', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**proceedingTitle', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**speakerTypeName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**fullName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**bio', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**stagePhotoUrl', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**productionPhotoUrl', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**title', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**organizationName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**speakerDescription', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**printAbstractSanitized', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**groupName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**proceedingTitle', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**speakerTypeName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**presentationTypeName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**fullName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**title', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**organizationName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**speakerDescription', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**printAbstractSanitized', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**groupName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**middleInitials', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**department', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**printAbstract', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**webAbstract', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**speakerGuid', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**programConfId', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**proceedingTitle', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**proceedingTitleSanitized', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**speakerTypeName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**middleInitials', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**fullName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**bio', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**stagePhotoUrl', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**productionPhotoUrl', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**title', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**department', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**organizationName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**speakerDescription', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**printAbstract', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**printAbstractSanitized', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**webAbstract', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**webAbstractSanitized', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**groupName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**preferredName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**preferredName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**stagePhotoUrl', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**productionPhotoUrl', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**organizationLogoEpsUri', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**logoUri', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**printAbstract', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**webAbstract', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**proceedingTitle', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**proceedingTitleSanitized', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**presentationTypeName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**fullName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**organizationLogoEpsUri', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**logoUri', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**title', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**organizationName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**speakerDescription', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**printAbstract', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**printAbstractSanitized', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**webAbstract', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**webAbstractSanitized', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**groupName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**department', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**stagePhotoUrl', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**productionPhotoUrl', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**department', 'scheduleBlocks**scheduleBlockContent**sharedProceedings**id', 'scheduleBlocks**scheduleBlockContent**textBlock**logoUri', 'scheduleBlocks**scheduleBlockContent**textBlock**logoId', 'scheduleBlocks**scheduleBlockProceedings**id', 'scheduleBlocks**id', 'scheduleBlocks**scheduleBlockContent**oldId', 'conference**proceedingGuid', 'conference**label', 'conference**title', 'conference**startTime', 'conference**endTime', 'conference**description', 'conference**tagLine', 'conference**cii_conf_id', 'conference**cii_confdate', 'conference**cii_confdate_end', 'conference**cii_conftitle', 'conference**cii_Acronym', 'conference**cii_Account_Code', 'conference**cii_homeURI', 'conference**cii_homeImageURI_square', 'conference**cii_currency_code', 'conference**cii_hotel_deadline', 'conference**timeZone', 'conference**venue**venueGuid', 'conference**venue**name', 'conference**venue**address', 'conference**venue**city', 'conference**venue**stateOrProvince', 'conference**venue**postalCode', 'conference**venue**phone', 'conference**venue**createdDtm', 'conference**venue**createdByUserId', 'conference**venue**lastModifiedDtm', 'conference**venue**lastModifiedByUserId', 'conference**swapcardEventId', 'conference**createdDtm', 'conference**createdByUserId', 'conference**lastModifiedDtm', 'conference**lastModifiedByUserId', 'program**proceedingGuid', 'program**title', 'program**startTime', 'program**endTime', 'program**description', 'program**tagLine', 'program**cii_conf_id', 'program**cii_confdate', 'program**cii_confdate_end', 'program**cii_conftitle', 'program**cii_Acronym', 'program**cii_Account_Code', 'program**cii_homeURI', 'program**timeZone', 'program**venue**venueGuid', 'program**venue**name', 'program**venue**address', 'program**venue**city', 'program**venue**stateOrProvince', 'program**venue**postalCode', 'program**venue**phone', 'program**venue**createdDtm', 'program**venue**createdByUserId', 'program**venue**lastModifiedDtm', 'program**venue**lastModifiedByUserId', 'program**createdDtm', 'program**createdByUserId', 'program**lastModifiedDtm', 'program**lastModifiedByUserId', 'id' ] listOfFlattenedKeysToRemovePeople = [ 'scheduleBlocks**scheduleBlockName', 'scheduleBlocks**blockDate', 'scheduleBlocks**scheduleBlockContent**startTime', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**id', 'scheduleBlocks**scheduleBlockContent**id', 'scheduleBlocks**scheduleBlockContent**textBlock**textBlockName', 'scheduleBlocks**scheduleBlockContent**textBlock**textBlockDescription', 'scheduleBlocks**scheduleBlockContent**textBlock**id', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**headerBlock**headerBlockName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**headerBlock**id', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**id', 'scheduleBlocks**scheduleBlockContent**shareId', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**startTime', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**blockDefaultText', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**id', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**id', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**speakerGuid', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**programConfId', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**proceedingTitle', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**proceedingTitleSanitized', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**speakerTypeName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**fullName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**stagePhotoUrl', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**productionPhotoUrl', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**title', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**organizationName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**speakerDescription', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**printAbstractSanitized', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**webAbstractSanitized', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**groupName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**proceedingTitle', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**proceedingTitleSanitized', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**speakerTypeName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**presentationTypeName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**fullName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**title', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**organizationName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**speakerDescription', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**printAbstractSanitized', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**webAbstractSanitized', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**groupName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**middleInitials', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**department', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**printAbstract', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**webAbstract', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**speakerGuid', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**programConfId', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**proceedingTitle', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**proceedingTitleSanitized', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**speakerTypeName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**middleInitials', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**stagePhotoUrl', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**productionPhotoUrl', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**title', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**department', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**organizationName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**speakerDescription', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**printAbstract', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**printAbstractSanitized', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**webAbstract', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**webAbstractSanitized', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**groupName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**preferredName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**speakerPortalPresentation**copresentors**preferredName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**stagePhotoUrl', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**productionPhotoUrl', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**organizationLogoEpsUri', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**logoUri', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**printAbstract', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**webAbstract', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**proceedingTitle', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**proceedingTitleSanitized', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**presentationTypeName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**organizationLogoEpsUri', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**logoUri', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**title', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**organizationName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**speakerDescription', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**printAbstract', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**printAbstractSanitized', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**webAbstract', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**webAbstractSanitized', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**groupName', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**department', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**stagePhotoUrl', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**productionPhotoUrl', 'scheduleBlocks**scheduleBlockContent**sessionBlock**sessionBlockContent**presentationBlock**presentationBlockPresentations**spexPresentation**copresentors**department', 'scheduleBlocks**scheduleBlockContent**sharedProceedings**id', 'scheduleBlocks**scheduleBlockContent**textBlock**logoUri', 'scheduleBlocks**scheduleBlockContent**textBlock**logoId', 'scheduleBlocks**scheduleBlockProceedings**id', 'scheduleBlocks**id', 'scheduleBlocks**scheduleBlockContent**oldId', 'conference**proceedingGuid', 'conference**label', 'conference**title', 'conference**startTime', 'conference**endTime', 'conference**description', 'conference**tagLine', 'conference**cii_conf_id', 'conference**cii_confdate', 'conference**cii_confdate_end', 'conference**cii_conftitle', 'conference**cii_Acronym', 'conference**cii_Account_Code', 'conference**cii_homeURI', 'conference**cii_homeImageURI_square', 'conference**cii_currency_code', 'conference**cii_hotel_deadline', 'conference**timeZone', 'conference**venue**venueGuid', 'conference**venue**name', 'conference**venue**address', 'conference**venue**city', 'conference**venue**stateOrProvince', 'conference**venue**postalCode', 'conference**venue**phone', 'conference**venue**createdDtm', 'conference**venue**createdByUserId', 'conference**venue**lastModifiedDtm', 'conference**venue**lastModifiedByUserId', 'conference**swapcardEventId', 'conference**createdDtm', 'conference**createdByUserId', 'conference**lastModifiedDtm', 'conference**lastModifiedByUserId', 'program**proceedingGuid', 'program**title', 'program**startTime', 'program**endTime', 'program**description', 'program**tagLine', 'program**cii_conf_id', 'program**cii_confdate', 'program**cii_confdate_end', 'program**cii_conftitle', 'program**cii_Acronym', 'program**cii_Account_Code', 'program**cii_homeURI', 'program**timeZone', 'program**venue**venueGuid', 'program**venue**name', 'program**venue**address', 'program**venue**city', 'program**venue**stateOrProvince', 'program**venue**postalCode', 'program**venue**phone', 'program**venue**createdDtm', 'program**venue**createdByUserId', 'program**venue**lastModifiedDtm', 'program**venue**lastModifiedByUserId', 'program**createdDtm', 'program**createdByUserId', 'program**lastModifiedDtm', 'program**lastModifiedByUserId', 'id' ] // Load event data when the page loads window.onload = loadEventData; </script><script type="text/javascript"> function preprocessDocument(document) { let agendaText = ''; let speakerText = ''; if (document.title) { agendaText = [document.title, document.abstract, document.speakerX].join(' ').toLowerCase(); } if (document.name) { speakerText = [document.name, document.bio].join(' ').toLowerCase(); } const combinedText = `${agendaText} ${speakerText}`; return replacePunctuationAndTokenize(combinedText); } const tokenCache = {}; function replacePunctuationAndTokenize(text) { // Check if the tokenized version of the text exists in the cache if (tokenCache[text]) { return tokenCache[text]; // Return cached result } // If not found in cache, tokenize the text const punctuationRegex = /[.,\/#!$%\^&\*;:{}=\-_`~()\[\]\"'’\s]/g; const cleanText = text.replace(punctuationRegex, ' ').toLowerCase(); const words = cleanText.match(/\b[\w']+\b/g) || []; // Generate partial word matches const partialMatches = words.flatMap(word => { return Array.from({ length: word.length }, (_, i) => word.slice(0, i + 1)); }); // Combine words and partial matches const tokens = [...words, ...partialMatches]; // Cache the tokenized version of the text tokenCache[text] = tokens; // Return the tokenized result return tokens; } // Function to calculate the inverse document frequency for a term function idf(term, documents) { let df = documents.filter(doc => doc.includes(term)).length; return Math.log((documents.length - df + 0.5) / (df + 0.5) + 1); } function calculateBM25Score(tokens, queryTokens, documentsAvgLength, k1, b, idfs) { let score = 0; const docLength = tokens.length; queryTokens.forEach(term => { const termFrequency = tokens.filter(token => token === term).length; const termIDF = idfs[term] || 0; // Ensure IDF is precomputed or set to 0 if not found score += termIDF * ((termFrequency * (k1 + 1)) / (termFrequency + k1 * (1 - b + b * docLength / documentsAvgLength))); }); return score; } // Adjusted to use preprocessDocument for each document in your dataset function bm25Search(query, data) { const k1 = 1.2; const b = 0.75; // Preprocess query using the same preprocessing steps const queryTokens = replacePunctuationAndTokenize(query); // Flatten the dataset and prepare it for scoring let documents = data.speakers.concat(data.agenda); let documentsAvgLength = documents.reduce((acc, doc) => acc + preprocessDocument(doc).length, 0) / documents.length; // Calculate idf values for query tokens let idfs = {}; queryTokens.forEach(term => { idfs[term] = idf(term, documents.map(doc => preprocessDocument(doc).join(' '))); }); // Score each document let scores = documents.map(doc => { const docTokens = preprocessDocument(doc); return { doc, score: calculateBM25Score(docTokens, queryTokens, documentsAvgLength, k1, b, idfs) }; }); // Sort by score scores.sort((a, b) => b.score - a.score); // Filter based on a threshold if needed and return let threshold = 1.0; // Adjust based on experimentation return scores.filter(item => item.score > threshold).map(item => item.doc); } </script></body> </html>