1547 lines
39 KiB
HTML
1547 lines
39 KiB
HTML
|
|
<!doctype html>
|
|
<html lang="en" class="no-js">
|
|
<head>
|
|
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
|
|
<meta name="description" content="User and developer documentation for the cSAXS beamline">
|
|
|
|
|
|
<meta name="author" content="Paul Scherrer Institute">
|
|
|
|
|
|
<link rel="canonical" href="https://bec.pages.psi.ch/csaxs_bec/developer/ptouch_label_printer_plan.html">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="icon" href="../assets/images/favicon.png">
|
|
<meta name="generator" content="zensical-0.0.11">
|
|
|
|
|
|
|
|
<title>Brother P-touch PT-P950NW label printing for BEC: design plan - SLS cSAXS</title>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../assets/stylesheets/modern/main.bd6182e7.min.css">
|
|
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../assets/stylesheets/modern/palette.dfe2e883.min.css">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<style>:root{}</style>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter:300,300i,400,400i,500,500i,700,700i%7CJetBrains+Mono:400,400i,700,700i&display=fallback">
|
|
<style>:root{--md-text-font:"Inter";--md-code-font:"JetBrains Mono"}</style>
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../stylesheets/extra.css">
|
|
|
|
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)),0),__md_get=(e,t=localStorage,a=__md_scope)=>JSON.parse(t.getItem(a.pathname+"."+e)),__md_set=(e,t,a=localStorage,_=__md_scope)=>{try{a.setItem(_.pathname+"."+e,JSON.stringify(t))}catch(e){}},document.documentElement.setAttribute("data-platform",navigator.platform)</script>
|
|
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
|
|
|
|
|
|
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
|
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
|
<label class="md-overlay" for="__drawer"></label>
|
|
<div data-md-component="skip">
|
|
|
|
|
|
<a href="#brother-p-touch-pt-p950nw-label-printing-for-bec-design-plan" class="md-skip">
|
|
Skip to content
|
|
</a>
|
|
|
|
</div>
|
|
<div data-md-component="announce">
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<header class="md-header" data-md-component="header">
|
|
<nav class="md-header__inner md-grid" aria-label="Header">
|
|
<a href="../index.html" title="SLS cSAXS" class="md-header__button md-logo" aria-label="SLS cSAXS" data-md-component="logo">
|
|
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg>
|
|
|
|
</a>
|
|
<label class="md-header__button md-icon" for="__drawer">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-menu" viewBox="0 0 24 24"><path d="M4 5h16M4 12h16M4 19h16"/></svg>
|
|
</label>
|
|
<div class="md-header__title" data-md-component="header-title">
|
|
<div class="md-header__ellipsis">
|
|
<div class="md-header__topic">
|
|
<span class="md-ellipsis">
|
|
SLS cSAXS
|
|
</span>
|
|
</div>
|
|
<div class="md-header__topic" data-md-component="header-topic">
|
|
<span class="md-ellipsis">
|
|
|
|
Brother P-touch PT-P950NW label printing for BEC: design plan
|
|
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<form class="md-header__option" data-md-component="palette">
|
|
|
|
|
|
|
|
|
|
<input class="md-option" data-md-color-media="(prefers-color-scheme)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_0">
|
|
|
|
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-sun-moon" viewBox="0 0 24 24"><path d="M12 2v2M14.837 16.385a6 6 0 1 1-7.223-7.222c.624-.147.97.66.715 1.248a4 4 0 0 0 5.26 5.259c.589-.255 1.396.09 1.248.715M16 12a4 4 0 0 0-4-4M19 5l-1.256 1.256M20 12h2"/></svg>
|
|
</label>
|
|
|
|
|
|
|
|
|
|
|
|
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
|
|
|
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
|
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-sun" viewBox="0 0 24 24"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41"/></svg>
|
|
</label>
|
|
|
|
|
|
|
|
|
|
|
|
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to system preference" type="radio" name="__palette" id="__palette_2">
|
|
|
|
<label class="md-header__button md-icon" title="Switch to system preference" for="__palette_0" hidden>
|
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-moon" viewBox="0 0 24 24"><path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"/></svg>
|
|
</label>
|
|
|
|
|
|
</form>
|
|
|
|
|
|
|
|
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-header__button md-icon" for="__search">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-search" viewBox="0 0 24 24"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></svg>
|
|
</label>
|
|
<div class="md-search" data-md-component="search" role="dialog" aria-label="Search">
|
|
<button type="button" class="md-search__button">
|
|
Search
|
|
</button>
|
|
</div>
|
|
|
|
|
|
<div class="md-header__source">
|
|
|
|
<a href="https://gitea.psi.ch/bec/csaxs_bec" title="Go to repository" class="md-source" data-md-component="source">
|
|
<div class="md-source__icon md-icon">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
|
</div>
|
|
<div class="md-source__repository">
|
|
bec/csaxs_bec
|
|
</div>
|
|
</a>
|
|
|
|
</div>
|
|
</nav>
|
|
|
|
</header>
|
|
|
|
<div class="md-container" data-md-component="container">
|
|
|
|
|
|
|
|
|
|
|
|
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
|
|
<div class="md-grid">
|
|
<ul class="md-tabs__list">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="../index.html" class="md-tabs__link">
|
|
|
|
|
|
Home
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="../introduction/introduction.html" class="md-tabs__link">
|
|
|
|
|
|
Introduction
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="../safety/safety.html" class="md-tabs__link">
|
|
|
|
|
|
Safety
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="../user/user.html" class="md-tabs__link">
|
|
|
|
|
|
User guide
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="developer.html" class="md-tabs__link">
|
|
|
|
|
|
Developer guide
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</div>
|
|
</nav>
|
|
|
|
|
|
|
|
<main class="md-main" data-md-component="main">
|
|
<div class="md-main__inner md-grid">
|
|
|
|
|
|
|
|
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
|
|
<div class="md-sidebar__scrollwrap">
|
|
<div class="md-sidebar__inner">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
|
|
<label class="md-nav__title" for="__drawer">
|
|
<a href="../index.html" title="SLS cSAXS" class="md-nav__button md-logo" aria-label="SLS cSAXS" data-md-component="logo">
|
|
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-book-open" viewBox="0 0 24 24"><path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/></svg>
|
|
|
|
</a>
|
|
SLS cSAXS
|
|
</label>
|
|
|
|
<div class="md-nav__source">
|
|
<a href="https://gitea.psi.ch/bec/csaxs_bec" title="Go to repository" class="md-source" data-md-component="source">
|
|
<div class="md-source__icon md-icon">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
|
</div>
|
|
<div class="md-source__repository">
|
|
bec/csaxs_bec
|
|
</div>
|
|
</a>
|
|
</div>
|
|
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../index.html" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Home
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../introduction/introduction.html" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Introduction
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../safety/safety.html" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Safety
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
User guide
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_4">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
|
|
|
|
User guide
|
|
|
|
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../user/user.html" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Overview
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../user/before_you_arrive/before_you_arrive.html" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Before you arrive
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="0">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Ptychography
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_4_3">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
|
|
|
|
Ptychography
|
|
|
|
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../user/ptychography/ptychography.html" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Overview
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../user/ptychography/flomni.html" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
flOMNI
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../user/ptychography/lamni.html" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
LamNI
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../user/ptychography/omny.html" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
OMNY
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../user/ptychography/reconstructions.html" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Ptychoshelves
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_4" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="0">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
SAXS
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_4_4">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
|
|
|
|
SAXS
|
|
|
|
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../user/saxs/saxs.html" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Overview
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../user/saxs/online_integration.html" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Online integration
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_5" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="0">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Data analysis
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_4_5">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
|
|
|
|
Data analysis
|
|
|
|
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../user/data_analysis/data_analysis.html" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Overview
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../user/data_analysis/computing.html" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Computing
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Developer guide
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_5">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
|
|
|
|
Developer guide
|
|
|
|
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="developer.html" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Overview
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="editing_docs.html" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Editing the documentation
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="lamni_smear_architecture.html" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
LamNI smear aid architecture
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="panda_box_free_running_setup.html" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
PandaBox free-running setup
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="panda_box_free_running_data_schema.html" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
PandaBox data schema
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
|
<div class="md-sidebar__scrollwrap">
|
|
<div class="md-sidebar__inner">
|
|
|
|
|
|
|
|
<nav class="md-nav md-nav--secondary" aria-label="On this page">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-nav__title" for="__toc">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
On this page
|
|
</label>
|
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#context" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Context
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#how-p-touch-template-mode-works-research-summary" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
How P-touch Template mode works (research summary)
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#implementation-plan" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Implementation plan
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Implementation plan">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#1-new-shared-module-ptouchlabelprinter" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
1. New shared module: PTouchLabelPrinter
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#2-wire-into-flomni" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
2. Wire into flomni
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#3-open-items-to-resolve-beforeduring-implementation" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
3. Open items to resolve before/during implementation
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#verification" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Verification
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="md-content" data-md-component="content">
|
|
|
|
<article class="md-content__inner md-typeset">
|
|
|
|
|
|
|
|
<h1 id="brother-p-touch-pt-p950nw-label-printing-for-bec-design-plan">Brother P-touch PT-P950NW label printing for BEC: design plan<a class="headerlink" href="#brother-p-touch-pt-p950nw-label-printing-for-bec-design-plan" title="Permanent link">¶</a></h1>
|
|
<blockquote>
|
|
<p><strong>Status: proposal, not yet implemented.</strong> This document captures the plan
|
|
from an initial feasibility/design session so it isn't lost; it should be
|
|
updated (or removed / folded into an architecture note) once the feature is
|
|
actually built.</p>
|
|
</blockquote>
|
|
<h2 id="context">Context<a class="headerlink" href="#context" title="Permanent link">¶</a></h2>
|
|
<p>When a measured sample is unloaded from the flomni sample tray, the only record
|
|
of "who owns it / when it was measured" today is digital (tray-slot metadata
|
|
in <code>dev.flomni_samples</code>, plus the OMNY sample database via <code>TomoIDManager</code>).
|
|
There is no physical label on the actual sample holder, so a user picking it
|
|
up later has no way to tell at a glance whose sample it is or when it was
|
|
run. The goal of this feature is to print a small paper label (account +
|
|
date, on TZ tape) at the moment a measured sample is stowed back in the tray,
|
|
so it can be stuck straight onto the sample holder.</p>
|
|
<p>This is explicitly <strong>not</strong> an experiment hardware component (no motion, no
|
|
staging, nothing that needs to be part of a scan) — it's a side-effect
|
|
utility, similar in spirit to the existing <code>TomoIDManager</code> (HTTP registration
|
|
call) and <code>HttpUploader</code> (webpage push) helpers, which are plain Python
|
|
classes invoked from the flomni/lamni plugin code at well-defined workflow
|
|
points, not ophyd devices.</p>
|
|
<p><strong>Decisions already made:</strong>
|
|
- Protocol: <strong>P-touch Template mode</strong> (Brother's official, documented
|
|
command protocol) rather than the raster/reverse-engineered protocol used
|
|
by third-party libraries like <code>rasterprynt</code>. This avoids needing an image
|
|
library (Pillow) client-side and avoids depending on an undocumented
|
|
protocol that could break on a firmware update — fits the goal of
|
|
minimizing external packages.
|
|
- Scope: build as a <strong>shared utility</strong> in
|
|
<code>bec_ipython_client/plugins/OMNY_shared/</code>, so lamni/omny can adopt it later
|
|
without duplicating printer/network code — mirrors where <code>TomoIDManager</code>
|
|
and <code>HttpUploader</code> already live.
|
|
- Trigger: <strong>both</strong>. Automatic prompt-then-print on sample unmount in flomni,
|
|
plus a manual/standalone command for on-demand (re-)printing.</p>
|
|
<h2 id="how-p-touch-template-mode-works-research-summary">How P-touch Template mode works (research summary)<a class="headerlink" href="#how-p-touch-template-mode-works-research-summary" title="Permanent link">¶</a></h2>
|
|
<ul>
|
|
<li>The PT-P950NW supports raw network printing on <strong>TCP port 9100</strong> (listed
|
|
in its spec sheet alongside LPR/IPP/mDNS etc.), the same "JetDirect-style"
|
|
raw port most network printers use — no CUPS/driver install needed.</li>
|
|
<li>"P-touch Template" is a printer-side mode built for exactly this use case
|
|
(the manual explicitly lists "data from a scale, testing machine,
|
|
controller, or PLC" as the target): you design a label layout <strong>once</strong> in
|
|
Brother's Windows-only <strong>P-touch Editor</strong> (place named text objects, e.g.
|
|
<code>ACCOUNT</code>, <code>DATE</code>), transfer that template onto the printer's internal
|
|
memory (via Editor's Transfer Manager over USB or network), and from then
|
|
on printing is just: connect to the printer, send a short <strong>ESC i X</strong>
|
|
command sequence selecting the template number and supplying the text for
|
|
each named field, then a print-start command.</li>
|
|
<li>The command set is documented in Brother's "P-touch Template Command
|
|
Reference" (per-printer-family PDF from Brother's support site — confirm
|
|
the PT-P900W/P950NW-specific revision before implementing, since control
|
|
codes can differ slightly between printer families/firmware generations).</li>
|
|
<li>No actively-maintained Python package implements this specific protocol
|
|
(unlike raster printing, which has <code>rasterprynt</code>/<code>brother_ql</code>-style
|
|
libraries). That's fine here: the runtime protocol is just building a byte
|
|
string and pushing it over a <code>socket</code> — stdlib only, no new dependency.</li>
|
|
</ul>
|
|
<h2 id="implementation-plan">Implementation plan<a class="headerlink" href="#implementation-plan" title="Permanent link">¶</a></h2>
|
|
<h3 id="1-new-shared-module-ptouchlabelprinter">1. New shared module: <code>PTouchLabelPrinter</code><a class="headerlink" href="#1-new-shared-module-ptouchlabelprinter" title="Permanent link">¶</a></h3>
|
|
<p>File: <code>csaxs_bec/bec_ipython_client/plugins/OMNY_shared/ptouch_printer.py</code>
|
|
(new file, alongside <code>omny_general_tools.py</code>/<code>web_common.py</code>).</p>
|
|
<div class="highlight"><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">PTouchLabelPrinter</span><span class="p">:</span>
|
|
<span class="w"> </span><span class="sd">"""Prints a label on a Brother PT-P950NW via P-touch Template mode."""</span>
|
|
|
|
<span class="n">DEFAULT_PORT</span> <span class="o">=</span> <span class="mi">9100</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">template_number</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">port</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="n">DEFAULT_PORT</span><span class="p">,</span> <span class="n">timeout</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">3.0</span><span class="p">):</span>
|
|
<span class="o">...</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">print_label</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fields</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="n">copies</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
|
|
<span class="w"> </span><span class="sd">"""Build the P-touch Template command for `fields` and send it.</span>
|
|
|
|
<span class="sd"> Returns True on success, False on any network/printer error --</span>
|
|
<span class="sd"> never raises, matching TomoIDManager's fail-soft convention so a</span>
|
|
<span class="sd"> printer being offline can never block a sample transfer.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="o">...</span>
|
|
</code></pre></div>
|
|
<ul>
|
|
<li>Builds the ESC-prefixed command sequence (select template mode, select
|
|
template number, set each named field's text, set copy count, print
|
|
command) as pure bytes, opens a short-lived <code>socket.create_connection((host,
|
|
port), timeout=timeout)</code>, sends, closes.</li>
|
|
<li>Wrap all I/O in <code>try/except</code>, <code>logger.warning(...)</code> on failure, return
|
|
<code>False</code> — same fail-soft style as <code>TomoIDManager.register()</code>
|
|
(<code>omny_general_tools.py:396-</code>) and <code>HttpUploader</code> (<code>web_common.py:48-114</code>).</li>
|
|
<li>Printer host/IP and template number are constructor args (not hardcoded
|
|
constants), passed in from each plugin's config — check how other
|
|
beamline-specific endpoints are configured in this repo (e.g. is there a
|
|
per-instrument config file, or are they class constants like
|
|
<code>TomoIDManager.OMNY_URL</code>?) and follow that convention when wiring it up.</li>
|
|
</ul>
|
|
<h3 id="2-wire-into-flomni">2. Wire into flomni<a class="headerlink" href="#2-wire-into-flomni" title="Permanent link">¶</a></h3>
|
|
<p>File: <code>csaxs_bec/bec_ipython_client/plugins/flomni/flomni.py</code></p>
|
|
<ul>
|
|
<li>Instantiate once in <code>__init__</code>, next to <code>self.OMNYTools = OMNYTools(...)</code>
|
|
(line ~1654) and <code>self.tomo_id_manager = TomoIDManager()</code>:
|
|
<code>self.label_printer = PTouchLabelPrinter(host=<printer-ip>, ...)</code>.</li>
|
|
<li><strong>Automatic path</strong>: in the unmount branch of <code>ftransfer_sample_change</code>
|
|
(the <code>new_sample_position == -1</code> case, <code>flomni.py:867-906</code>) or in
|
|
<code>ftransfer_get_sample</code> (<code>flomni.py:734</code>, name/owner already unpacked at
|
|
line 786-787 as <code>name, owner = unpack_desc(signal_name.get())</code>), after the
|
|
stow completes: ask <code>self.OMNYTools.yesno("Print a label for this sample?",
|
|
"y")</code> (same helper already used elsewhere, e.g. <code>flomni.py:2507</code>) and on
|
|
<code>True</code> call <code>self.label_printer.print_label({"ACCOUNT": owner, "DATE":
|
|
str(datetime.date.today())})</code>.</li>
|
|
<li><strong>Manual path</strong>: add a small method, e.g. <code>fprint_sample_label(position:
|
|
int)</code>, that reads name/owner via the same <code>unpack_desc(...)</code> pattern as
|
|
<code>sample_get_name</code> (<code>flomni.py:853</code>) and calls <code>label_printer.print_label</code>
|
|
directly — usable standalone for reprints, without going through a
|
|
transfer.</li>
|
|
</ul>
|
|
<h3 id="3-open-items-to-resolve-beforeduring-implementation">3. Open items to resolve before/during implementation<a class="headerlink" href="#3-open-items-to-resolve-beforeduring-implementation" title="Permanent link">¶</a></h3>
|
|
<ul>
|
|
<li><strong>No date is currently stored per sample slot</strong> — <code>pack_desc</code>/<code>unpack_desc</code>
|
|
(<code>devices/omny/sample_desc_codec.py:19,40</code>) only carry <code>(name, owner)</code>, no
|
|
timestamp. Using <code>datetime.date.today()</code> at unmount time is a reasonable
|
|
v1 approximation (unmount typically happens same-day as the scan), but if
|
|
an exact measurement date is wanted later, the DESC codec would need a
|
|
third field.</li>
|
|
<li><strong>Confirm the exact model-specific command reference.</strong> Brother publishes
|
|
a separate "P-touch Template Command Reference" per printer family;
|
|
download the PT-P900W/P950NW-specific PDF from Brother's support site
|
|
before writing the byte-level command builder.</li>
|
|
<li><strong>Template design is a one-time, Windows-only step</strong> (P-touch Editor +
|
|
Transfer Manager) — not scriptable from the Linux beamline control host.
|
|
Worth doing once per label layout/TZ tape width; layout changes require
|
|
redoing this step.</li>
|
|
<li><strong>Network reachability</strong>: confirm the printer's IP is reachable from
|
|
wherever <code>bec_ipython_client</code> runs (same VLAN/firewall rules as other
|
|
network endpoints it already calls, e.g. the OMNY/tomo-ID server) and
|
|
assign it a static/reserved IP.</li>
|
|
<li>Extend to lamni/omny by instantiating <code>PTouchLabelPrinter</code> in those
|
|
plugins too once flomni is validated — no code changes needed to the
|
|
shared module itself.</li>
|
|
</ul>
|
|
<h2 id="verification">Verification<a class="headerlink" href="#verification" title="Permanent link">¶</a></h2>
|
|
<ol>
|
|
<li><strong>Bench test the printer/template alone</strong>: install the PT-P950NW on the
|
|
beamline network with a fixed IP, design the label template once in
|
|
P-touch Editor (fields <code>ACCOUNT</code>/<code>DATE</code>, chosen TZ tape width), load it
|
|
via Transfer Manager, and print a manual test label from the desktop app
|
|
to confirm the template renders as expected.</li>
|
|
<li><strong>Bench test the protocol module standalone</strong>: write
|
|
<code>PTouchLabelPrinter</code>, then from a scratch script call
|
|
<code>print_label({"ACCOUNT": "e12345", "DATE": "2026-07-31"})</code> against the
|
|
real printer IP and confirm a correct physical label comes out (check
|
|
encoding, field placement, tape length/cut).</li>
|
|
<li><strong>Integration test in flomni</strong>: in a real or simulated
|
|
<code>bec_ipython_client</code> session, run <code>ftransfer_sample_change(-1)</code> (or
|
|
<code>ftransfer_get_sample</code>) end-to-end, confirm the yes/no prompt appears,
|
|
confirm printing on "y", confirm declining or a deliberately-unreachable
|
|
printer IP does <strong>not</strong> raise or block the sample transfer (only logs a
|
|
warning).</li>
|
|
<li>Test the manual <code>fprint_sample_label(position)</code> command independently of
|
|
any transfer, for reprints.</li>
|
|
</ol>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</article>
|
|
</div>
|
|
|
|
|
|
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
|
</div>
|
|
|
|
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="lucide lucide-circle-arrow-up" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="m16 12-4-4-4 4M12 16V8"/></svg>
|
|
Back to top
|
|
</button>
|
|
|
|
</main>
|
|
|
|
<footer class="md-footer">
|
|
|
|
<div class="md-footer-meta md-typeset">
|
|
<div class="md-footer-meta__inner md-grid">
|
|
<div class="md-copyright">
|
|
|
|
<div class="md-copyright__highlight">
|
|
Copyright © Paul Scherrer Institute
|
|
</div>
|
|
|
|
|
|
Made with
|
|
<a href="https://zensical.org/" target="_blank" rel="noopener">
|
|
Zensical
|
|
</a>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
|
|
</div>
|
|
<div class="md-dialog" data-md-component="dialog">
|
|
<div class="md-dialog__inner md-typeset"></div>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<script id="__config" type="application/json">{"annotate":null,"base":"..","features":["navigation.tabs","navigation.sections","navigation.top","content.code.copy","search.highlight"],"search":"../assets/javascripts/workers/search.5df7522c.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":null}</script>
|
|
|
|
|
|
<script src="../assets/javascripts/bundle.21aa498e.min.js"></script>
|
|
|
|
|
|
</body>
|
|
</html> |