How To's: Difference between revisions

From bone.wiki
Jump to navigation Jump to search
Hbuie (talk | contribs)
Redirecting to Main Page
 
(159 intermediate revisions by 8 users not shown)
Line 1: Line 1:
__TOC__
#REDIRECT [[Main Page]]
 
 
 
 
=HowTo Library=
 
:In addition to this HowTo library, much information is also available at the [http://www.scanco.ch/cgi-bin/scanco.pl?menu=support&site=faq Scanco Medical FAQ].
:*users@scanco.ch
:*basser5dorf
 
==OpenVMS==
 
===HowTo: Helpful VMS commands===
 
:*UNIX to OpenVMS [http://seqaxp.bio.caltech.edu/www/vms_sheet.html]
*Directory listing
<pre>
$ dir /size=all /grand_total [...]
$ dir [...*.aim]
</pre>
 
*Delete
<pre>
$ delete *.aim;*
$ dl *.aim
</pre>
*Delete a directory that is full. CAUTION!
<pre>
$ SET FILE/PROT=O:RWED [.SUBDIR...]*.*;*
$ DELETE [.SUBDIR...]*.*;*                  ! Repeat until no error messages appear.  Each iteration gets rid of more sub directories.
$ SET FILE/PROT=O:RWED SUBDIR.DIR
$ DELETE SUBDIR.DIR;
</pre>
or
<pre>
$ dl disk2:[microct.projects...]*.dir    ! A for all; do until sub-dirs are gone
$ dl subdir.dir
$ @scom:dl.com subdir.dir
</pre>
 
*Copy
 
As user <code>system</code> you can copy files between accounts (e.g., microct and devel).  There is no need to set user/priv=bypass as this is set by default as user system.
 
If you want to use the backup command for copying multiple subdirectories with
the three dots (e.g., <code>disk2:[microct.data.00000034...]</code>) then you HAVE to put an <code>/owner=devel</code> at the end:
 
<pre>
$ backup/log disk2:[microct.data.00000034...] -
        disk2:[devel.data.00000034...]/own=devel
</pre>
 
*UNIX filenames on VMS with multiple '.'
 
The directory names would have been cvs-1.11.21.dir on Linux.  However VMS doesn't allow more than 1 . in the name.  If you enter
 
<pre>$ set process/parse=extended</pre>
 
in a terminal you'll be able to access these files.  You could consider renaming them i.e. cvs-1_11_21.dir.
 
*Change hosts
<pre>
$ mcr latcp show service *  ! and if it shows you SCTHIN:
$ set host scthin ! or
$ set host scthin/lat
</pre>
 
===HowTo: Monitor system usage===
 
<pre>
$ monitor/interval=1 processes/topcpu
$ monitor/interval=1 system
$ show error
$ show system
$ @SCOM:SHOW_DISKS.COM (or simply $ DISKS)
</pre>
 
The command <code>show error</code> may indicate errors.  One or two errors is OK.
 
To see what processes are running (specific to the machine, not cluster wide).
 
<pre>
$ show device disk2/file
$ show user /full
</pre>
 
===HowTo: Control processors on multi-processor machines===
 
For example, on the itanium there are two processors.  By default, only one takes reconstruction jobs.  The other is left for so that evaluations can take place without competing for the CPU.
 
But if a bottleneck is the reconstruction, it can be switched as user <code>system</code>:
 
<pre>
$ set que sceva2_slow/job=2
</pre>
 
so that it will do two reconstruction jobs simultaneously.
 
===HowTo: Check current licenses on VMS system===
 
This can be used to see what educational licenses (and other licenses) are currently on the system:
 
<pre>
$ SHOW LICENSE
</pre>
 
To apply for an educational license go to http://www.openvmsedu.com
 
===HowTo: Shut down the Alpha stations and start up again===
 
<b>Warning:</b> Do not do this unless absolutely necessary.
 
For shutdown
 
At the login screen, type "shutdown"/no password and hit enter.
Then, you can turn the computer off at the prompt.
 
Then, you may turn the disk array off (unplug it as there is no power switch).
 
After you move the computer, power on the disk array and then the computer.
 
===HowTo: Restart the screen server===
 
If the monitor fails to show the login prompt and displays a blank gray screen...telnet to the computer from another computer (e.g. a PC or so) and login as user system. Run the restart command:
 
<pre>$ @sys$startup:decw$startup restart</pre>
confirm (answer yes) and logout.
<pre>$ logout</pre>
 
This will kill all programs on your screen, but it will leave all batch jobs running, so if you do a BATCH measurement, this will survive! (but interactive scan will be killed)
 
===HowTo: Fix a computer that is running very slow and is non-responsive!===
 
This is usually caused by people logging in via SSH multiple times.  The solution involves resetting the SSH/TCPIP daemon.
 
:*If you are local at the computer:
 
You will need to log in as user <code>system</code>.  ONLY EXPERIENCED USERS SHOULD EVER LOG IN AS SYSTEM!
 
The system will be extremely slow (it will take 5 minutes just to get a log in prompt).  This is expected.
 
<pre>
$ set host 0  ! user name 'system' and password
$
$ @sys$startup:tcpip$ssh_shutdown    ! shutdown SSH
$
$ set host 0  ! user name 'system' and password
$
$ @sys$startup:tcpip$ssh_startup    ! restart SSH
</pre>
 
Alternatively, you can reboot the system to reset the SSH.  This is not an appropriate solution and it is solving the problem by hitting it with a jack hammer.  Sometimes it is the only choice though.
 
:*If you are remotely logged in:
 
You will have to log in as user <code>system</code> and run a script called STOP_START_TCPIP.COM. 
 
This works essentially the same as for the above method, except that since it would be impossible to restart SSH remotely once it is shut down, two separate scripts are called and submitted on SCEVAL_FAST (make sure the queue isn't clogged) separated by a 1 minute delay. The first script called is STOP_TCPIP.COM and the second is START_TCPIP.COM.
 
To execute this process, you must log in as system, go to the SYS$SCRATCH directory, and interactively execute the script:
<pre>
$ @STOP_START_TCPIP.COM
</pre>
 
===HowTo: Fix non-responsive tape drive===
 
This can occur if the user ejects the tape with the little button (and not with the recommended "dismount" button in the uct_backup program).  This can also occur if a tape is mounted immediately after one is dismounted.  You get the same error for both cases, "medium offline". 
 
:*Check all that all cables are connected.
 
:*Check that the number on the back of the drive says "5" (use +/- to adjust if necessary)
 
:*Check that the top connector has a cable connecting to the computer and the bottom one has a terminator.
 
:*Try turning the tape drive on and off again.
 
:*Log in as user <code>system</code> (you will need a password from Steve):
<pre>
$ mcr sysman io auto/sele=mk
$ @sys$startup:scanco_setup_devices.com
 
$ show device tp0
</pre>
 
If it's online again, then great.  If not, then the last resort is to reboot the entire system.  If this doesn't work, then shut down the system (see user manual for proper steps) and eject the tape.  You may need to turn the computer back on before it will eject.  The tape drive should be turned on first (no tape), then the server, and any other computers.  Check that the drive is online ($ show device mk).  If it is, then test the drive by initializing, mounting and dismounting a brand new tape.  If the drive is not online, do not insert any tapes or they will likely get stuck.  Log in as system and re-try the command lines shown above.
 
===HowTo: Understand difference between <code>mcr</code> and <code>run</code>===
 
The command <code>mcr</code> is the same as <code>run</code>, but only with mcr you can hand over 'in-line' parameters to an .exe file:
 
<pre>$ run ut:ctheader.exe c000124.isq</pre>
does not work, but you  have to say
<pre>$ mcr ut:ctheader.exe c000124.isq</pre>
 
But funnily if you define a symbol in <code>microct_setup_user.com</code> (or <code>login.com</code>),
 
<pre>$ ctheader :== $ut:ctheader.exe</pre>
 
with just neither run nor mcr, but the 'funny' $ sign, then you can also hand over the ISQ name in-line.
 
Small detail with big effect...
 
===HowTo: Make commands available to all users with symbols or paths===
 
DCL$PATH is one way to do that, WE don't use it...
<pre>
$ def dcl$path disk1:[microct.main],disk1:[microct.util]
</pre>
then, if you type
<code>
$ uct_t
</code>
it will first try to
 
<code>
$ @uct_t.com
</code>
and then
<code>
$ r uct_t.exe
</code>
 
however, we usually define it by giving full path:
 
<pre>
$ progx :== $disk1:[microct.main]progx.exe
$ com_proc_x :== @disk1:[microct.main]procedure.com
</pre>
 
then, you can just type the shortcut ('symbol' in VMS language)
 
We use the 'cd' to set the default path, you may also use this in your command procedure:
 
<code>proc.com</code>:
 
<pre>
$ cd 'p1'
$ dir *.*/size
 
$ define COM disk1:[microct.commands]
$ p :== @COM:PROC.COM
</pre>
 
these both go into <code>login.com</code>
 
then, you can just type:
 
<pre>
$ p disk4:[microct.data.0000007.000009]*.ISQ
</pre>
 
 
 
===HowTo: Edit a symbol set by Scanco such as AIX===
 
[[Image:Bones2.jpg|picture_position,left]] <b>Warning:</b> Extreme caution!  Explicit permission for this change or similar changes <b>must</b> be obtained from Dr. Steven Boyd.
 
Log in as user calibration
<pre>
$ set proc/priv=bypass
$ cdc (changes to MICROCT_COMMAND)
$ sea *.com aix
</pre>
Edit that file which is called <code>MICROCT_SETUP_COMMON.COM</code>
 
''Another example'': To make the backspace/insert keys work properly, edit the <code>login.com</code> and insert the line
<pre>
$ set terminal/insert
</pre>
Anywhere suitable.
 
===HowTo: File do all -- apply one command to a whole set of files===
 
<code>$ fda ctheader dk0:[microct.data.0001234...]*.isq </code>
 
to see the header of all isq files of sample 1234 (the three dots ... means all subdirectories)
 
Or:
 
<code>$ fda aix dk0:[microct.data.0001234.00005678]*.aim</code>
 
to see the processing log of all aim files of scan 5678
 
Wildcard "*" means multiple characters, "%" is for ONE character:
 
<code>$ fda aix dk0:[microct.data...]C%%%%%%%.aim</code>
 
(yes, 7 %'s)
 
to show the aim header of the gray-scale c0000135.aim (etc) files only, and NOT from the _seg.aims also.
 
<b>Warning: CAUTION! </b> Always test the wildcard expression first with
 
<code>$ dir dk0:[xxx...]*.aim </code>
 
 
The 'file do all' fda command can even be combined with a pipe, or an /output qualifier:
 
<code>$ pipe fda aix dk0:[microct...]*.aim | search sys$pipe "Slope" </code>
 
will show you all "Slopes" in a row. (but you may not see which slope belongs to which aim file anymore...)
 
or:
 
<code>$ fda/output=sys$scratch:all_headers.log aix dk0:[microct...]*.aim</code>
 
will write all the output into the .log file - which you can then either edit, or
<code>$ search sys$scratch:all_headers.log "String"</code>
 
or whatever you want.
 
Another example with output:
 
<pre>$ pipe fda type *.log | search sys$pipe "BV/TV" /output=BVTV.txt</pre>
 
"fda" is our self-written script, so you may have to try-n-error a bit...
 
<code>$ fda command file_wildcard [Optional: further parameters]</code>
 
If the command consists of multiple words with spaces inbetween (e.g. mcr ut:xxx.exe), then enclose the command in double-quotes
 
<code>$ fda "mcr ut:uct_ext_header_display" dk0:[microct...]*.isq 8</code>
 
Grab more than one line using pipe and search command:
 
<code>$ pipe fda aix *.aim | search sys$pipe "dim", "pos", "name"</code>
 
 
NB: the further parameters may not contain wildcards - so unfortunately, the fda can NOT be used to 'adaptively' rename a whole bunch of files.
 
===HowTo: Create a customized button in the session manager===
 
The session manager part to enable the double-click on the AIM file:
Session Manager, 'Options', 'Menu', enter new item
SAP
with command:
<pre>
@decw$user_defaults:sap$vue
</pre>
Then move that menu point into 'Applications' menu.
Also:
'Options', 'File types', Create 'AIM' file type.
Move 'rename', 'copy', 'purge' etc. into menu, Select 'SAP', click  on
'Change double click', and also move SAP into menu.
 
===HowTo: Export the VMS display to SUN or LINUX terminal===
 
<pre>
# - temple
$ - sceval
# xhost +temple.ucalgary.ca
# ssh -X microct@sceval.ucalgary.ca
$ set display /create /transport=tcpip /node=temple.ucalgary.ca
</pre>
 
<b>NOTE:</b> Do not use <code>xhost+</code>.  Always specific exactly which computer is being
allowed X access.
 
 
===HowTo: View the VMS filesystem from a Windows PC===
 
The HP program that allows the VMS file system to be viewed by a PC is called Pathworks.  The following information is needed to connect to the VMS system:
 
<pre>
USERNAME: xtremect
PASSWORD: uct
WORKGROUP: microct
</pre>
 
Then, in Windows explorer, while connected in the same network as the VMS station (i.e., .130) enter the following IP address for Thomas (SC3309):
 
<pre>\\136.159.130.28\</pre>
 
Some configuration of Pathworks may be necessary so that all the disks on the VMS file system are visible.  Scanco can help with that.
 
===HowTo: Mount a CDROM===
 
Device could be <code>dqa0</code> or <code>dqb0</code>.  I'm not sure which works:
<pre>
$ mount/foreign dqa0:
</pre>
OR
<pre>
$ mount/override=id dqa0:
</pre>
Then
<pre>
$ dismount dqa0:
</pre>
 
===HowTo: Use Hummingbird Exceed for remote access===
 
*Screen definition
:Server visual = PseudoColor
:Window mode = multiple
 
*Keyboard input
:Primary = decemus
:Alternate = us
 
*EVE commands
:select = "end"
:cut = "delete"
:paste = "insert"
 
:move forward a word = CTRL + right_arrow
:move to start of document = CTRL + up_arrow
:move to end of document = CTRL + down_arrow
 
 
 
===HowTo: Use XWin32 for remote access===
 
Run XWin32.  Run Putty and connect to sceval.ucalgary.ca.  Use the terminal normally to run programs, which should open with XWin32. 
 
Additional terminal windows can be opened with <code>$ dec</code>
 
If you try to connect from somewhere other than the university, you will probably get the following error when trying to open a window:
 
  Xlib: connection to "sceval.ucalgary.ca:10.0" refused by server
  Xlib: Can not connect to a host on a restricted network
  X Toolkit Error: Cannot Open Display
  %DWT-F-DWTABORT, xtoolkit fatal error
 
Type the following at the command prompt to direct the display:
 
  $ set display/create/transport=tcpip/node=Your_IP_Address/server=0
 
You can find your IP address from:  http://www.ip-adress.com/
 
If you're running XWin32 from off campus and behind a router, forward ports 6000 - 6010 TCP and 177 UDP to your computer.
 
===HowTo: Set up Putty with gold-key access===
 
Download putty:
http://www.chiark.greenend.org.uk/~sgtatham/putty/
 
Set 'keyboard' to Vt400, and 'initial state of numeric keyapad' to 'Application', and now the 'NumLock' key is the gold key (like PF1), and the editor can repeat stuff.
 
Then
 
<pre>$ set term/vt100</pre>
 
to enable the editor in the terminal.
 
And duplication of a line is:
<pre>
- (which would be PF4) to erase a line,
then twice "numlock, then -"  (gold-PF4 is 'restore line')
</pre>
 
===HowTo: Launch an editor such as EVE===
 
On the command line
<pre>$ edit/display=decwindows/tpu fname.txt</pre>
 
===HowTo: Configure the EVE editor===
 
The following file, called <code>tpu.dat</code>, should be installed in <code>disk1:[microct.xdefaults]:</code>
<pre>
#
# DECTPU V3.1 1993-04-22 15:50 defaults
# CHANGED B.KOLLER 21-JUN-90
#
# Copyright (c) 1993 Digital Equipment Corporation.  All rights reserved.
#
#
# The following are all the resource names that DECTPU supports.
#
Tpu.Tpu$MainWindow.Title: DECTPU Copyright © Digital Equipment Corporation 1992.  All Rights Reserved.
Tpu.Tpu$MainWindow.ApplicationTitle: DECTPU
Tpu.Tpu$MainWindow.IconName: DECTPU
Tpu.Tpu$MainWindow.X: 610
Tpu.Tpu$MainWindow.Y: 0
#
# The following resource names are commented out so that users can specify
# *rows and *columns and have DECTPU obey those directives.  If DECTPU finds
# finds no resource names governing the number of rows and columns it should
# have, it uses 24 rows and 80 columns.
#
#
Tpu.Tpu$MainWindow.Columns: 80
Tpu.Tpu$MainWindow.Rows: 56
*EVE_MENU_BAR*background: #ADADADADADAD
Tpu*XmScrollBar*background: #ADADADADADAD
Tpu*XmDialogShell*background: #ADADADADADAD
Tpu*XmMenuShell*background: #ADADADADADAD
*background: white
Tpu*condensedFont: OFF
Tpu*fontSetSelection: 0
 
# 0 = big font
# 1 = little font
# 2 = GS font (German Standard)
# 3 = Fine font (used only for non-latin 1 fonts?)
</pre>
 
===HowTo: Use EVE Editor Commands===
 
 
:* mark -> ctrl-space
:* delete -> remove (delete)
:* insert -> insert here (insert)
:* learn -> ctrl-k (ctrl-r to stop)
 
Note: The right 'alt' key on the PC accesses the menu for EVE.
 
<table border="1" cellspacing="1" cellpadding="1">
<tr>
<td valign="top" width="200">copy</td>
<td valign="top" width="500"><code>&lt;PF1&gt;&lt;Remove&gt;</code> on VMS</td>
</tr>
<tr>
<td valign="top" width="200">paste</td>
<td valign="top" width="500"><code><Insert Here&gt;</code> on VMS <i>or
</i> <code> <ctrl&gt;&lt;insert&gt;</code> on PC</td>
</tr>
<tr>
<td valign="top" width="200">cut</td>
<td valign="top" width="500"><code>&lt;Remove&gt; </code> on VMS <i>or
</i><code>&lt;delete&gt; </code> on PC</td>
</tr>
<tr>
<td valign="top" width="200">learn</td>
<td valign="top" width="500"><code>&lt;CTRL&gt;&lt;K&gt;</code></td>
</tr>
<tr>
<td valign="top" width="200">stop</td>
<td valign="top" width="500"><code>&lt;CTRL&gt;&lt;R&gt; </code> (then give a key
sequence such as <code>&lt;CTRL&gt;&lt;Q&gt;</code>)</td>
</tr>
<tr>
<td valign="top" width="200">repeat</td>
<td valign="top" width="500"><code>&lt;PF1&gt;&lt;#&gt;&lt;(CTRL-Q)&gt; </code>
(the <code>CTRL-Q </code> depends on the given key sequence).</td>
</tr>
<tr>
<td valign="top" width="200">find next</td>
<td valign="top" width="500"><code>&lt;PF3&gt;</code></td>
</tr>
<tr>
<td valign="top" width="200">enter search string</td>
<td valign="top" width="500"><code>&lt;PF1&gt;&lt;PF3&gt;</code></td>
</tr>
<tr>
<td valign="top" width="200">replace string</td>
<td valign="top" width="500"><code>&lt;PF1&gt;&lt;S&gt;</code></td>
</tr>
<tr>
<td valign="top" width="200">margins</td>
<td valign="top" width="500">Mouse click bottom of window type: <code>set
right 999</code></td>
</tr>
<tr>
<td valign="top" width="200">kill line</td>
<td valign="top" width="500"><code>&lt;PF4&gt;</code></td>
</tr>
<tr>
<td valign="top" width="200">kill word</td>
<td valign="top" width="500">- (minus key on number pad)</td>
</tr>
<tr>
<td valign="top" width="200">advance next line</td>
<td valign="top" width="500"><code>0</code> (zero on number pad)</td>
</tr>
<tr>
<td valign="top" width="200">select text</td>
<td valign="top" width="500"><code>&lt;CTRL&gt;&lt;SPACE&gt;</code></td>
</tr>
</table>
 
 
Helpfull hint: To avoid having the EVE editor automatically create multiple lines from a long input sequence set the margins [FORMAT - SET MARGINS] to some high number eg. 500.
 
 
===HowTo: Use EVE Editor Commands Remotely with XWin32===
 
Default key settings:
<table border="1" cellspacing="1" cellpadding="1">
<tr>
<td valign="top" width="200">remove (cut) and append to previous paste buffer</td>
<td valign="top" width="500"><code>9</code> (nine on number pad)</td>
</tr>
<tr>
<td valign="top" width="200">paste</td>
<td valign="top" width="500"><code>&lt;insert&gt;</code></td>
</tr>
<tr>
<td valign="top" width="200">learn</td>
<td valign="top" width="500"><code>&lt;CTRL&gt;&lt;K&gt;</code></td>
</tr>
<tr>
<td valign="top" width="200">stop</td>
<td valign="top" width="500"><code>&lt;CTRL&gt;&lt;R&gt; </code> (then give a key
sequence such as <code>&lt;CTRL&gt;&lt;Q&gt;</code>)</td>
</tr>
<tr>
<td valign="top" width="200">repeat</td>
<td valign="top" width="500"><code>&lt;CTRL&gt;-Q</code> or given key sequence</td>
</tr>
<tr>
<td valign="top" width="200">kill word</td>
<td valign="top" width="500">- (minus key on number pad)</td>
</tr>
<tr>
<td valign="top" width="200">advance next line</td>
<td valign="top" width="500"><code>0</code> (zero on number pad)</td>
</tr>
<tr>
<tr>
<td valign="top" width="200">go to end of line</td>
<td valign="top" width="500"><code>2</code> (two on number pad) or <code>&lt;CTRL&gt;&lt;E&gt;</code></td>
</tr>
<tr>
<td valign="top" width="200">go to start of line</td>
<td valign="top" width="500"><code>&lt;backspace&gt; or &lt;CTRL&gt;&lt;H&gt;</code></td>
</tr>
  <tr>
<td valign="top" width="200">go to start of word</td>
<td valign="top" width="500"><code>1</code> (one on number pad)</td>
</tr>
  <tr>
<td valign="top" width="200">delete line to left of cursor</td>
<td valign="top" width="500"><code>&lt;CTRL&gt;&lt;U&gt;</code></td>
</tr>
                        <tr>
<td valign="top" width="200">turn on/off select text</td>
<td valign="top" width="500"><code>&lt;CTRL&gt;&lt;SPACE&gt; or .</code> (on number pad)</td>
</tr>
                        <tr>
<td valign="top" width="200">select all text</td>
<td valign="top" width="500"><code>&lt;CTRL&gt;&lt;O&gt;</code></code></td>
</tr>
                        <tr>
<td valign="top" width="200">turn on/off overstrike</td>
<td valign="top" width="500"><code>&lt;CTRL&gt;&lt;A&gt;</code></code></td>
</tr>
                        <tr>
<td valign="top" width="200">save and exit</td>
<td valign="top" width="500"><code>&lt;CTRL&gt;&lt;Z&gt;</code></code></td>
</tr>
                        <tr>
<td valign="top" width="200">enter command</td>
<td valign="top" width="500"><code>&lt;CTRL&gt;&lt;B&gt;</code></code></td>
</tr>
</table>
<br>
You may find it useful to define keys. For example, define keys to cut, copy and paste:
 
    To Cut <code>&lt;CTRL&gt;&lt;X&gt;</code>:
    <code>&lt;CTRL&gt;&lt;B&gt;</code> (enter command)
    Command:  <code>define key=Ctrl/x cut</code>
 
    To Copy <code>&lt;CTRL&gt;&lt;C&gt;</code>:
    <code>&lt;CTRL&gt;&lt;B&gt;</code> (enter command)
    Command:  <code>define key=Ctrl/c copy</code>
 
    To Paste <code>&lt;CTRL&gt;&lt;V&gt;</code>:
    <code>&lt;CTRL&gt;&lt;B&gt;</code> (enter command)
    Command:  <code>define key=Ctrl/v paste</code>
 
 
<br>
 
===HowTo: Use terminal based editor (EVE)===
<pre>
$ edit file.txt
</pre>
If you are using this from a remote terminal, you will need to initiate a vt100 terminal.
<pre>
$ set term /vt100
</pre>
Some useful commands:
:* ctrl-z -> exit with save
:* ctrl-y -> kill without saving
:* do-key, then type 'quit' or 'exit' (what is the do key on a remote terminal?)
:* PF2 -> shows special keypad functions
:* GoldKey -> PF1
 
==Scanco System and Setup==
 
===HowTo: View the online schedule===
 
Open a web browser and go to http://hpl0.kin.ucalgary.ca/public.
 
Login to the relevant schedule:<br>
1. username: vivact_view, password: vivact<br>
2. username: uct40_view, password: uct40<br>
3. username: skyscan_view, password: skyscan
 
In "public folders" click on MicroCT Schedules and the relevant calendar can be seen.
 
 
===HowTo: Calculate vivaCT CTDI dose===
 
Assuming the following settings on the vivaCT for "high mode", we will calculate the CTDI dose.
 
2000 projections (360 degrees)
0.109 mA
200 ms IT
 
I calculate the time current value as:
 
0.109 mA * (0.200 + 0.012) S * 2000 proj= 46.22 mAs
 
The 0.012 is the integration time between projections.
 
Taking the proportion of the 68 mAs at 55 kV resulting in 720 mGy (see the document on example
dose calculation on this Wiki site), we have:
 
46.22 / 68 * 720 = 490 mGy
 
Since CTDI in air is approximately two times the weighted CTDI, and since our setup is more like in air, we get:
 
2 * 490 = 980 mGy per scan.
 
It's always a good idea to look at the time-current product in the control file to get an approximate estimate.
 
===HowTo: vivaCT CTDI dose chart and example===
 
We have measured the following CT dose indices (CTDI).
:*CTDIw:  Weighted CTDI (chart below)
:*CTDIair: CTDI in air (2 times CTDIw - calculate from chart below).
 
The detector was placed in the center of a 35 mm PMMA cylinder which was placed in the center of rotation.
 
<pre>
70kV  300ms 85uA  Field of view 38.9mm 1000 Proj./180°:  CTDI = 260 mGy
55kV  300ms 109uA Field of view 38.9mm 1000 Proj./180°:  CTDI = 220 mGy
45kV  300ms 133uA Field of view 38.9mm 1000 Proj./180°:  CTDI = 190 mGy
 
70kV  300ms 85uA  Field of view 30.7mm 1000 Proj./180°:  CTDI = 420 mGy
55kV  300ms 109uA Field of view 30.7mm 1000 Proj./180°:  CTDI = 350 mGy
45kV  300ms 133uA Field of view 30.7mm 1000 Proj./180°:  CTDI = 305 mGy
 
70kV  300ms 85uA  Field of view 21.5mm 1000 Proj./180°:  CTDI = 850 mGy
55kV  300ms 109uA Field of view 21.5mm 1000 Proj./180°:  CTDI = 720 mGy
45kV  300ms 133uA Field of view 21.5mm 1000 Proj./180°:  CTDI = 620 mGy
</pre>
 
high res = 1000 Proj./180°
medium  = 500 Proj./180°
standard  = 250 Proj./180°
 
The CTDI scales linear with the integration time (s), with the current (uA) and number of projections. If you have different settings there, it is easy to calculate the CTDI.
 
CTDI Definition:
<pre>
Integral from +50mm to -50mm of D(z)/NxT
</pre>
:*where D(z) is the dose profile along a line z which is perpendicular to the tomographic plane
:*N is the number of tomographic sections produced in a single rotation
:*T is the nominal tomographic section thickness
 
Example: How to estimate how much radiation would be incurred by a mouse scanned at 25
um resolution (medium resolution -- MR) at 55 kVp, 109 uA, 150 ms IT, for about 30 minutes?
 
If you take your settings you can calculate the CTDI.  First thing you have to be aware is that the CTDI is something like the local dose but it takes the cone beam geometry and the not perfect collimation of the x-ray beam into account (The CTDI value is always higher than a local dose measurement with for example TLDs). It does not matter how many stacks you are scanning. The dose you have at one point which is within the volume you are scanning gets the same local dose if you are performing a 1 stack or a 4 stack measurement.
 
With the 55kVp/109uA HR with 300ms we have a value at the 30.7 mm position of 350 mGy. Because you have MR we can divide the values by a factor of 2; and because you have 150ms instead of 300ms there is an other factor of 2. You would get 87.5 mGy for the position 30.7 mm. Because of the cone beam the dose has a quadratic dependency to the diameter of the field of view. (30.7 mm/25 mm)2 = 1.5. The CTDI value for your settings is in the order of 87.5 mGy * 1.5 = 132 mGy.
 
Note that for in vivo measurements, we should multiply the result by a factor of two since we are doing the measurement in AIR, not WATER.  The charts above are assuming the CTDI done in water.
 
===HowTo: Perform the QC1 and QC2 calibrations===
 
Instructions for the VivaCT40:  [[Media:VivaCT40_Calibration.pdf| Download PDF ]]<br>
Instructions for the uCT35:  [[Media:uCT35_Calibration.pdf| Download PDF ]]<br>
 
===HowTo: Determine the calibration drift from QC1===
 
The QC1 analyses provide an estimate of the calibration drift by considering 'mean5' values.  Use
<pre>
$ uct_list
</pre>
and make sure to use UU:UCT_3D_MEANS.TXT as the template.  Then give the measurement numbers of the QC1 measurements (or all of them and remove what's not needed later).
 
===HowTo: Browse the VMS files from a windows PC===
 
Pathworks gives you the ability to mount the Alpha as an external drive on your PC.  It would be mounted as an F: or G: drive, then you can navigate using windows explorer.
 
You can look for the vivaCT in your microsoft windows network neighborhood and see if you can find it...then log in.
 
===HowTo: Stop and restart the printer queue===
 
How to fix the printer queue when hung, not working or giving an error.
A full printer queue can seriously affect system performance. 
Be sure that the queue is cleaned up from time to time.
 
<pre>$ show queue</pre>
 
to first find out the real name of your printer queue.
* Replace "hpljet" and "...dcps_hpljet..." by your own queue (i.e., PRINTER1 for XtremeCT) name below.
* First approach, as normal user <code>microct</code>:
<pre>
$ stop/queue/reset hpljet
$ start/queue hpljet
</pre>
 
===HowTo: Stop and restart other queues (i.e., sys$slow, sys$fast)===
There are three methods.  First the nice method.
 
1. As for the printer queue, a normal user can stop and start other queues.
 
<pre>
$ stop/que/reset sceval_slow
$ start sceval_slow
</pre>
 
This kills the current process running.  If you want to let the current process complete before stopping the queue, use:
<pre>
$ stop/que/next sceval_slow
</pre>
 
2. Use the web browser Mozilla.
 
:*Open mozilla
:*'batch queues'
 
:*Resize the window so it occupies the right half of the screen
 
:*Click on 'delete job' once with the MIDDLE mouse button, this will open a new window on the right half of the screen. Ensure the two windows do not overlap, if they do resize the window which contains the batch queues list. Once window locations are correct MIDDLE click on the rest of the jobs which you wish to delete (click on 'Delete Job' in the batch queue list). The reason for locating the widows is because each successive click on 'Delete Job' will open a new window and you don't want it to cover the batch queues list.
 
:*Then Exit from mozilla, this will delete all the open windows, it may take a bit if you are deleting lots.
 
2. Now the harsh method.
 
[[Image:Bones2.jpg|picture_position,left]] <b>Warning:</b> Extreme caution!  Explicit permission for this change or similar changes <b>must</b> be obtained from Dr. Steven Boyd.
 
Completely remove the queue and re-generate, as user <code>system</code>
 
<pre>
$ stop/queue/reset sc3309_slow
$ delete/queue sc3309_slow
</pre>
 
Then you must restart the queue.  To learn how to do this refer to:
<pre>
$ eve sys$startup:dcps_hpljet_ip.com
</pre>
 
===HowTo: Show process info===
 
:* Find the process identification using <code>$ sh que</code>
<pre>
$ show entry 1131 /full
OR
$ se 1131
</pre>
 
 
===HowTo: See what is currently executing===
 
:* Find the process identification using <code>$ sh que/all/by_job_status=executing</code>
<pre>
$ show entry 1131 /full
OR
$ se 1131
</pre>
 
===HowTo: Requeue a process===
 
:* Find the process identification using <code>$ sh que</code>
:* The process must be <I>pending</I>, '''not''' <I>processing</I>!
<pre>
$ set entry 1131 /requeue=SCEVAL_SLOW
</pre>
 
===HowTo: Extract patient name from database===
 
<pre>
$ mcr um:uct_info 1234
</pre>
will show you sample-name of sample-number 1234
<pre>
$ mcr um:uct_info -m 1234
</pre>
will give you some (stupid) info about meas 1234
 
'''Note:''' If you use this function all the time, put the following into <code>microct_setup_user.com</code>
<pre>
$ uct_info  :== $um:uct_info
</pre>
and then the usage info will even be correct
 
===HowTo: Disable a patient database entry===
 
It is not possible to delete an evaluation from the database, but it can be disabled.
 
Log in as user calibration, and run
 
<pre>
$ @DISK1:[MICROCT]LOGIN.COM  ! set the logicals to point to user microct
$ set proc/priv=bypass
$ run disk1:[calibration.util]upat_correct_valid_flag.exe
</pre>
 
'''REMEMBER TO LOG OUT:''' This program takes the measurement number as input, and displays the current status of the valid flag in the last evaluation.  To disable erroneous evaluations, select valid flag = 0 to mark the evaluation as invalid.
 
===HowTo: Extract disk usage information===
 
To look at the RSQs in the database
<pre>
$ dir/siz dk0:[microct.data...]*.rsq
</pre>
the three dots means all subdirectories.
 
Other useful commands:
 
<code>$ ctheader xxxxxx.isq</code>
 
or
 
<code>$ ctheader xxxxxx.rsq</code>
 
shows you header.
<pre>
$ fda command file-wildcard
</pre>
does a 'file do all' of the command on all the given wildcard filenames.
<pre>
$ pipe xxxx | search sys$pipe "patient"
</pre>
is the pipe command in VMS.
 
So all three combined:
<pre>
$ pipe fda ctheader dk0:[microct.data...]*.rsq | search sys$pipe "patient name"
</pre>
or any other field you want to search for!
 
'''Other ideas''':
 
<pre>$ write_info</pre>
 
gives you a file <code>sys$scratch:info.txt</code> with info in it (leave defaults to get all samples ever scanned, otherwise 'zoom' in on some samples.)
 
Check out the <code>search</code> command:
<pre>
$ help search
</pre>
and <code>/match=and</code>
or <code>/match=or</code>
 
===HowTo: Edit Scanco <code>SCANCO_SUBMIT_COMMAND</code> symbol===
 
*Check the current setting:
<pre>
$ show sym *submit*
</pre>
 
In directory <code>DISK2:[MICROCT]MICROCT_SETUP_USER.COM</code> add the following line:
<pre>
$ SCANCO_SUBMIT_COMMAND :== SUBMIT/NOPRINT/QUE=SYS$SLOW /NOTIFY/LOG=SYS$SCRATCH:
</pre>
Then end session and log in again.  Definition of the symbol in the
<code>MICRO_SETUP_USER.COM</code> supersedes the standard setting.
 
===HowTo: Weekly backups with <code>UCT_BACKUP</code>===
 
The WEEKLY BACKUP can be run from the <code>UCT_BACKUP</code> program at the bottom.
 
The backup captures DISK1 and DISK0 (the MICROCT and MICROCT_COMMON stuff).  This includes the programs and databases.
 
A little helper terminal comes up and gives feedback of every file backed up.
 
The backup is very fast (and important).
 
===HowTo: Manage files with <code>UCT_BACKUP</code>===
 
Two possible ways to use <code>UCT_BACKUP</code>:
:* COPY TO -> this does not update the database.
:* MOVE TO -> this updates the database.
 
Scenario 1:
<pre>
1. Use UCT_BACKUP to 'move' the RSQ to 'tape'
2. Use UCT_BACKUP to 'move' the ISQ to 'garbage'
3. Use UCT_BACKUP to 'move' the remainder (AIM/GOBJ) to 'tape'
</pre>
At operation 3, the measurement directory will be deleted from the measurement disk.  The directory will automatically be restored if you restore your data from tape.
 
Scenario 2:
<pre>
1. Use UCT_BACKUP to 'move' the RSQ to 'tape'
2. Use UCT_BACKUP to 'move' the ISQ to 'garbage'
3. Move all the GOBJ/AIM/etc to a project directory.
4. Generate a .SAV file and put on the IMA tape.
</pre>
Note: You will have to delete the measurement directories (using UCT_BACKUP if you like). The disadvantage of this scenario is that the image data cannot be restored using UCT_BACKUP.
 
===HowTo: Use the new <code>UCT_BACKUP</code> software===
 
New Features (i) You can now select multiple samples with the Shift and/or the Ctrl key; and (2) You can use the sample name filter field on top to display only names containing the filter string.
 
Start the move/copy by clicking on <code>'Start...'</code>
The <code>'Script...'</code> button is for advanced users.
 
<b>Advanced Users:</b>
Use of the 'Script...' button: this will generate a script,
<code>sys$scratch:archive.com</code>,
that you may submit in batch mode later (e.g. over night) by typing:
<pre>$ scanco_submit_command sys$scratch:archive.com/after=23:59</pre>
 
(In a multi-computer cluster setup, you may want to specify the exact queue name of the computer that has the tape hooked up by giving e.g. <code>/que=sceval_fast</code> )
 
Insert a tape, but do NOT mount the tape in the normal program. (If necessary: if it's a new tape, initialize it as usual). The batch job will be started one minute before midnight in the example above.
<code>$ show entry</code> will show you that it is holding until then.
See <code>$ help submit /after</code> and <code>$ help dcl_tips date_time example</code> for more help on this.
 
<b>Little Reminder:</b>
While the tape is running and writing to it, DO NOT LOG OUT, DO NOT INTERRUPT THE PROGRAM! This would make that tape unusable from this point on - you could still read from that tape up to this point, but could not add more scans to this tape.
What to do when tape is full? It then displays some message about continuing on another tape. Hit <code>ctrl/c</code> to interrupt the program, take a fresh tape, initialize it, select the remaining scans to archive again, hit <code>'start'</code>.
 
And last but not least: WE STRONGLY URGE YOU TO DO THE WEEKLY BACKUP (SAFETY BACKUP OF USER DISK1 WITH YOUR DATABASES ON IT). Two users DID experience disk crashes last year, and without the weekly backup, you may still have all scans on the data disk (e.g. disk2), but without the databases you cannot tell which scans belong the which sample!
 
How to do weekly backup: insert 'special' weekly backup tape, e.g. week_a, and
just hit 'Full backup to tape'.
 
===HowTo: Move a whole directory structure with BACKUP command===
 
<pre>
$ backup disk2:[microct.projects...] disk3:[microct.projects...]/verif
</pre>
:* Yes, with the ... in BOTH places!
:* Of course, you can leave the /verify away, your choice.
 
:* If you want: add <code>/delete</code> at the end, and this will delete it on DISK2 after successful verify. But what I do normally: without the <code>/delete</code>
 
After checking that things look good:
 
<pre>
$ delete disk2:[microct.projects...]*.*;*
$ dl disk2:[microct.projects...]*.dir    ! A for all; do until sub-dirs are gone
</pre>
 
===HowTo: Fix a stubborn tape drive===
 
If the drive cannot be mounted, or it is not visible with
<pre>
$ show device tp0
</pre>
then something went wrong.  For example, the server computer was booted while the tape was turned off. It then does not load the driver.
 
You can 'force load' it - but this will disconnect the scanner for a moment, so only do it while no scan is running:
 
as user <code>system</code>, on sc3309:
<pre>
$ mcr sysman io auto
 
$ show dev tp0
</pre>
 
and you should see it now (otherwise turn on the tape drive, and do again)
 
Then you'll also have to make it available to all users:
<pre>
$ @sys$startup:scanco_setup_devices.com
</pre>
 
===HowTo: Archive a project onto tape with a SAV (save set) file===
 
Projects should be stored safely onto a backup tape once complete. 
 
<b>Summary</b>
 
The following steps summarize the process:
:* Archive the project directory to the tape (detailed instructions below).
:* Change tape to "read only" to protect contents
:* Check tape saveset to ensure proper backup
:* Write name of tape on the project LOG sheet
:* Copy project LOG sheet and bring to Bone Imaging Laboratory "completed" project book
:* Bring copy of tape to the Bone Imaging Laboratory for safe keeping
:* <b>Delete</b> the contents of the project from the disk
 
In the project, there should be the regular set of directories including DOC, COM, MODELS, LOG.  Once the project is stored to tape, ensure that the log sheet for that project include a note stating which tape it was backed up to.  Take a photocopy of the log sheet and add it to our Bone Imaging Laboratory project book for COMPLETED projects.
 
In the following example, a project titled BERN is backed up onto tape.  Ideally, the name of the SAV file on tape is the same as the project (i.e., BERN).  Note that <b>SAV files must have names with no more than 13 characters (including the .SAV)!</b>
 
The following example backs the BERN project/directory onto tape IMA001.  For large projects and/or critical projects, it is advisable to dedicate an entire tape.  The three dots (...) indicate that ALL subfolders of DK0:[MICROCT.PROJECTS.BERN] will be included.
 
<pre>
$ mount/foreign tp0
 
$ backup/log dk0:[microct.projects.bern...]*.*;* tp0:proj_bern.sav -
        /block=65534 /label=IMA001 -
        /media_format=nocompaction    ! NEVER use the /rewind option here
 
$ dismount tp0  ! use option /nounload if you want to remount immediately and check tape contents
</pre>
 
Note that the <code>/rewind</code> option should never be used for backup as it instructs the tape drive to rewind after backup is complete causing a major risk of over writing.
 
Sometimes it might be handy to exclude certain files.  For example, to exclude RSQ files: <code>/excl=*.rsq</code>
 
A good reference for backup commands and ideas are available in the <code>UM:UCT_MOVE_FILES.COM</code> script which is used by the <code>UCT_BACKUP</code> program.  See also the <code>help backup</code> instructions:
<pre>
$ help backup
</pre>
 
To view the contents of a tape to ensure you've successfully stored your project use the following commands (further details in "HowTo: View save set (SAV) contents"):
 
To just view if the saveset is on tape (but not its contents):
<pre>
$ mount/ov=id tp0:
$ dir/date tp0:*.*
$ dismount tp0:
</pre>
 
To view the files within a saveset on tape, and save the results in a file called <code>results.txt</code>:
<pre>
$ mount/foreign tp0:
$ backup/list=results.txt tp0:*.*
$ dismount tp0:
</pre>
 
To delete a set of directories, use the <code>dl</code> command.
<pre>
$ cd ur BERN
$ del *.*;*  ! Deletes ALL files in a directory
$ dl *.dir;*  ! Will only delete empty directories (not nested directories)
</pre>
 
===HowTo: View save set (SAV) contents===
 
To view contents of a saveset (SAV) on disk:
<pre>
$ backup/list upat_print_list_nomatch.sav/sav
</pre>
 
To view the savesets (SAV) on a tape:
<pre>
$ mount/ov=id tp0:
$ dir/date tp0:*.*
$ dismount tp0:
</pre>
 
To view contents of a saveset (SAV) on a tape:
<pre>
$ mount/foreign tp0:
$ backup/list tp0:*.*  ! OR, backup/list tp0:*.SAV
or
$ backup/list=results.txt tp0:*.*  ! save output in results.txt
$ dismount tp0:
</pre>
 
An idea to get the results of the backup/list into a text file: Run the procedure in a submitted script and save the resulting log file with all the output.
 
===How To: Extract a SAV file from tape===
 
To restore a project, you have two choices:
*1. Login as user <code>calibration</code> and then go to the projects directory. From there:
<pre>
$ spb (bypass priv)
$ backup/log tp0:proj_davison.sav/rewind [*...]
</pre>
This puts all the files back in their original directory structure.
 
*2. As user <code>microct</code>
<pre>
$ backup/log tp0:proj_davison.sav/rewind/select=[microct.projects.davison...]
    disk2:[microct.projects.davison...]
 
$ backup/log tp0:*.*/rewind disk3:[microct.projects.vitamink.models]
</pre>
Make sure to write the <b>same</b> path in the /select as the output (except for the
actual disk2 portion).  Alternatively, you could unpack it into a slightly different root
directory (i.e., TMP) by changing the output path.
 
The three dots infers to use the same paths in the saveset as the file structure put onto disk.
 
===HowTo: Transfer a SAV (save set) file of your project from VivaCT to Xtreme system===
 
You can create a SAV set of your project on the VivaCT and transfer it to the Xtreme system, or vice-versa.
First, create the SAV set using the command:
<pre>
For example:
$ BACKUP/LOG DISK3:[MICROCT.PROJECTS.SB.MYPROJECT...]*.*;* -
    SYS$SCRATCH:MYPROJECT.SAV/SAV
</pre>
This creates the MYPROJECT.SAV file in the scratch directory.  Now zip the file:
<pre>
$ cd sys$scratch
$ zip "-V" MYPROJECT.ZIP MYPROJECT.SAV  (NOTE: must use quotes and a capital V!!!!)
</pre>
FTP the .ZIP file to SODOR ( in binary mode!!!), and then FTP it off onto your destination system (Viva or Xtreme).  See the appropriate HowTo for FTP instructions.  Once you've FTP'd it, unzip the file:
<pre>
$ unzip MYPROJECT.ZIP
</pre>
Finally, unpack the contents of the .SAV file:
<pre>
$ BACKUP/LOG MYPROJECT.SAV/SAV DISK3:[MICROCT.PROJECTS.MYPROJECT] <--- or whatever destination directory
</pre>
NOTE:  transferring a .SAV directly from VMS to VMS should work, but not via any third operating system (like SODOR) - so zipping is always the safe way to make sure it works.
 
===HowTo: Transfer files using zipped archives between Scanco systems===
 
Files must be zipped before transfer by e-mail or ftp because important attributes will be lost in the transfer otherwise.
 
To transfer files from system A to B, do the following.
 
On system A:
<pre>
$ zip "-V" for_calgary.zip uctd:UCT_SAMPLES_TORONTOXT.DAT  ! for each filename
$ zip "-V" for_calgary.zip uctd:UCT_MEASUREMENTS_TORONTOXT.DAT
</pre>
This will add both files to the same zip file.
 
Note: "-V" is very important, it must be capital V!
 
Transfer the file by e-mail, or by ftp.
 
On system B:
<pre>
$ unzip -j for_calgary.zip  ! to unzip on your end them (-j to 'junk' the original file path)
</pre>
 
===HowTo: Unpack a ZIP file sent by Scanco===
In the .zip file, you'll find a .sav file. Unzip the .zip just by saying
 
<pre>$ unzip xxxx.zip</pre>
 
Then:
 
<pre>$ backup/log xxxx.sav/sav disk3:[steve.devel.temp]</pre>
 
and it will unpack everything into <code>disk3:[steve.devel.temp]</code>
 
Or:
 
<pre>$ backup/list xxxx.sav/sav</pre>
 
and you see what's in the .sav.
 
Then:
 
<pre>$ backup/log xxx.sav/sav/sel=[andres.uct.ipl_for_cust...] disk3:[steve.devel.cipl...]</pre>
 
and it will create the same diretory tree in steve.devel.cipl as it was when I
packed it into the .sav.
 
===HowTo: Measure several samples in one scan===
 
This quite often happens when you want to scan 6 rat bones, for example, but using our six-gun sample holder you scan them in one go.  But, you want to analyse them separately, so you have to import the ISQ multiple times as new MEASUREMENTS into each SAMPLE.
 
There are two options: manual and auto.  <b>Read this entire HowTo before proceeding.  There is significant potential for mistakes!</b>
 
<pre>
$ @com:import_manual.com
 
P1: Measurement Number to duplicate
P2: New Sample Number from Database
P3: New Start Letter of ISQ file
P4: Optional: Operator Number
P5: Optional: Controlfile Number
</pre>
 
So:
 
<pre>$ @com:import_manual.com 1234 342 D</pre>
 
will copy the ISQ from measurement 1234, import it into the database to sample 342, give some feedback lines with 'old' and the new samplename, CHECK IT, and at the end it gives the feedback line on the terminal which you take with the mouse and drop to rename the data over to the new location.
 
<b>IMPORTANT: BE VERY SURE NOT TO MIX UP MEASUREMENT AND SAMPLE NUMBER !!!</b>
 
This distiction needs to be VERY clear in your mind! Of course, you can duplicate one scan and give it to the same samplenumber again (e.g. to evaluate different parts of the same sample, and each has its database
entry).
 
Please build up some system so you see immediately that the right meas. goes to the right sample. E.g. all four bones in one scan have the same part in the name, distinct from other 4 bones. If there is any trace of a doubt later on that somebody MAY have messed up the samples in this duplication step, you'll most probably have to start from scratch again...
 
Of course, I'll have to make you aware that Scanco declines all responsibility - this program is NOT in the normal user-friendly, quite fool-proof Scanco controlbox, but it's up to you to use it carefully, and not on Friday night when you're sleepy and mistakenly mix up sample and meas. numbers...
 
The new startletter I built in so you always know which one was the 'original' measurement (which has an RSQ), and which are the duplicated ones.
 
<b>Backup</b>
And the organization of how you know which duplicated scan is which part is
completely up to you - as well as how you want to handle the backup - our
software allows you to back-up each duplicated scan (but this might be an
overkill, since it's the same ISQ always) so you may choose to delete the
duplicated ISQ by hand in the session manager (only keep the 'original' ISQ), and only backup the .gobj, .aim and _seg.aim etc. (but then you will need to know not to get scared if you retrieve a scan, and the ISQ is missing...) (Or you just 'move to trash' the duplicated scans to nicely delete them with the backup program if you want to remove them completely (but you still have the 3D results in the evaluation database))
 
<b>Autosubmit</b>
 
<pre>$ import_autosubmit.com</pre>
 
Please use the manual one for a while. Then, if you feel comfortable, use the autosubmit one (which also does the last command automatically, the renaming of the isq to the new location.) Because it goes into a batch que, you can quickly submit all duplications, and do not have to wait for the whole file-copying like in the manual one.
 
One thing you should check there:
$ show que sys$fast/full
 
This needs to be one single queue (/job_limit=1). In a clustered enviroment,
this might be a '/generic=' que that then gives the jobs to multiple queues in the cluster. This is NOT good. If this is the case, please edit the autosubmit script, and replace sys$fast in the following line at the end by ONE of the generic fast queues, e.g. SC4240_FAST or whatever the name is (preferrable the one computer where also the data disk DK0 is sitting:
 
<pre>
$!
$      SUBMIT/NOPRINT/QUE=SYS$FAST/DELETE/NOTIFY/LOG=SYS$SCRATCH: 'COMMANDFILE'
$!
</pre>
 
(Reason: if multiple uct_imports would run at exactly totally the very same time, both jobs might get the same new measurement number... bad...)
 
I also suggest to add the following line to your login.com
 
<pre>$ dupl*icate :== @com:import_autosubmit.com</pre>
 
then you can just start it with
 
<pre>$ dupl 1234 342 D</pre>
 
And I also recommend to put into login.com:
 
<pre>
$ check_dup :== search sys$scratch:import*.log """ name:""
</pre>
 
(yes, with all these double-quotes)
 
Then use it to check the feedback that the right scans were given to the right samples.
 
===HowTo: Import foreign data (or correct a mistake) into the Scanco database===
 
Only RSQ and ISQ files can be imported into the database, however it is possible to convert other types of data into ISQ files (i.e., stacks of BMPs into ISQ).
 
<b>PART 1:</b>
 
After transfering your data to the VMS system (use the data disk <code>disk2</code>, NOT the user disk <code>disk1</code>), use the IPL commands <code>/import_freeformat</code> or <code>/read_aim function</code> to import your data for conversion to an ISQ.
 
For DICOM files, start IPL and run the <code>/dicom</code> function to import. For DICOM, if your object is a single 3D file (-multifile false) or many many individual slice files (-multifile true, and give beginning of filenames, and –extension).
 
There may be requests by IPL to convert your data to <code>signed short</code> or <code>signed char</code> from other data types. Obey these requests and do it by running the <code>/convert_unsigned</code> function.
 
Then, write the ISQ file.
<pre>ipl> toisq in DK0:[MICROCT.DATA]D0000001.ISQ
    -square          true
    -original_pos    false</pre>
 
This writes the ISQ file.
<b>Remember</b>, the ISQ name must be 8 characters long (1 character followed by seven digits)!!! The letters and numbers can be chosen freely.
 
Fill out a log sheet with the original AIM names that were imported, and the resulting ISQ names that were generated.
 
<b>PART 2:</b>
 
Create a sample in the database and write down the sample and measurement number. Then, run:
 
<pre>$ run um:uct_import  ! will import both RSQ and ISQ (modify patient index, etc)</pre>
 
and give the new ISQ file, the new sample-number and check that the feedback is correct (i.e., that the name from the database is matching the name from the ISQ file header).  If the Patient Name in the ISQ header doesn't match the measurement database Patient Name (very likely), then upon importing the RSQ/ISQ the headers will be updated to the new Patient Name.
 
Operator and controlfile can be left 0 if you want.  However, controlfile should be set appropriately if the data being imported is for the XtremeCT patient database.
 
If you are also importing the RSQ, put it in the same directory as the ISQ.
 
Then it changes the sample and measurement number in the ISQ file, makes the correct directory on <code>DK0</code>, and gives you the line on the screen of how to rename the file to the correct, new directory. Take this line and use it on the command line.  Done! 
 
You can now use the normal <code>uct_evaluation</code> program with this file.  If the control file was set properly, then the evaluation will be done correctly (i.e., for XtremeCT patient measurements).
 
<b>Note:</b> Any AIMs created from the original ISQ should be recreated.  So, it is important that you re-evaluate your newly imported ISQ.  It is OK to move the GOBJ from the old directory to the same directly as the newly imported ISQ (it does not have a 'registry' in the database).
 
===HowTo: Change the Control file of a scan (ie RR scanned mistakenly under RL)===
 
<pre>$ show log *eval*</pre>
 
to see our site codes, e.g. 20 = RL, 21 = RR etc.
 
Login as user calibration
 
<pre>
$ spb
$ @[microct]login
 
$ cd util
$ dir *site* </pre>
 
and you see two programs:
 
<pre>
$ run uct_correct_meas_site</pre>
 
and enter the meas. number to be corrected and then enter the correct site code. This modifies the database (of user microct), so the correct site is displayed in the eval program. (Enter meas. number 0 to exit program)
 
Then we must also correct the ISQ file (and RSQ file if still on disk):
 
<pre>
$ run updh_site
('updh' = update header)</pre>
 
and enter the <b>full (i.e. pathname included)</b> ISQ and RSQ (if still on disk) filename. Then enter the correct site number.
 
make sure to <b>logout!</b> as user calibration
 
===HowTo: Modify the database so it knows where to find RSQ and ISQ files===
 
<b>Note:</b> If you are restoring RSQ or ISQ files from tape (or other source) it might be preferable to do your analysis without resetting the database info.  See the appropriate HowTo.
 
The database is specific to the user.  So, we have to modify the database for <code>microct</code>, and be careful not to modify the <code>calibration</code> (or other users) database.  However, we still need to have permissions from <code>calibration</code> in order to do the modification.
 
When we return an ISQ or RSQ to disk, the database needs to be updated to ensure it finds it.  We have to change the database back to say it's on disk.  To do this we need to log in as user <code>calibration</code>.
 
<pre>
$ @DISK1:[MICROCT]LOGIN.COM  ! set the logicals to point to user microct
$ set proc/priv=bypass
$ run DISK1:[CALIBRATION.UTIL]UCT_CORRECT_DIR.EXE  ! with full path
</pre>
 
<b>Note:</b> Only change those items which have to be changed (e.g. just hit RETURN for RAW fields if you only want to change the IMA location.  Also, when specifying the directories, use DK0, not DISK2.
 
<pre>
$ run ut:UCT_CORRECT_DIR.EXE
</pre>
 
<pre>
Measurement Nr.:        1234
MeasNr.                  1234
PatientNr:              268
RAW: RAW004
TP0:00001234_RAW
IMA: IMA002
TP0:00001234_IMA
</pre>
 
<pre>
RAW-Label: [ RAW004 ]
 
RAW-Dir  : [ TP0:00001234_RAW ]
 
IMA-Label: [ IMA002 ]  DISK
IMA-Dir  : [ TP0:00001234_IMA ]  DK0:[microct.data.00000456.00001234]
 
Measurement Nr.:            0
End of program
</pre>
 
The IMA-label does not matter on disk - but we have to write something to get rid of the IMA002, so 'DISK' makes sense.
 
Using the standard backup/archiving program, you can archive (MOVE TO) that IMA again to a tape, but use a DIFFERENT TAPE than where the first instance of this scan is on.
 
Background: Tapes just write file after file, without any directory structure or hierarchy, so the program will always find the first instance (the old dataset) if you try to read it again from that tape.
 
<b>Note</b> One other option is to change the permissions of UCT_CORRECT_DIR.EXE so that user <code>microct</code> can use it directly.  To do this, log in as users <code>calibration</code> and then:
 
<pre>
$ set proc/priv=bypass                        ! as user calibration
$ set prot=g:re ut:uct_correct_dir.exe
$ run disk1:[calibration.util]uct_correct_dir  ! as user microct
</pre>
 
===HowTo: Modify the RSQ header to account for in-air scanning===
 
This is necessary because the beam-hardening correction factor assumes scans were
done in soft tissue.  It is necessary to choose calibrations of 1200 or 700, instead of the default 200.
 
Currently, the XtremeCT has options for 200 (standard) or 1200 calibration (in air). The vivaCT calibrations are unknown.
 
To do this, log in as users <code>calibration</code> and then:
 
<pre>
$ set proc/priv=bypass                        ! as user calibration; modification of MICROCT user data
$ run ut:UCT_EXT_HEADER_ADD_CALIB.EXE
> Raw-Data-File []: DISK2:[MICROCT.DATA.00000401.00001495]C0001404.RSQ
> ...
> Add another BH-Corr from file again? (Y/N) [N]:    ! Enter yes (UCTD:UCT_BH_COEFF_60KV_1200HA_3309.TXT)
</pre>
 
Then, <b>delete</b> the old ISQ.  It must be deleted or else the header information will not be changed.  Finally, reconstruct the new ISQ and analyze...
 
===HowTo: Use <code>UCT_EVALUATION</code> without importing ISQ into the database===
 
<b>Warning!</b> If you don't import your data into the system (i.e., see appropriate HowTo) you cannot store your evaluation results in the measurement database.  You will have to use the LOG file to access your results.
 
Important: Use the whole pathname
 
<pre>
$ def uct_default_isq DISK3:[MICROCT.PROJECTS.VALIDATION.MODELS]C0000123.ISQ  ! or
$ def uct_default_isq DISK2:[MICROCT.DATA.00001234.00005678]C0003456.ISQ
$ uct_evaluation    ! or voi, evalc, cutout, etc
</pre>
 
Hit <code>cancel</code> when asked files to load, and the file you just set as default will be loaded.
 
<b>Warning!</b> Only start a 3D evaluation if and only if the sample (patient) and measurement index are <b>correct</b> in the ISQ full path!  Also, no results will be stored in the database unless the ISQ header info (samp/meas) is correct.
 
<b>Note</b>: Many of the UCT_xxx.COM scripts use the whole filename to extract the sample and measurement numbers, so it is possible that some evaluations will not run.  UCT_xxx_BATCH_V4.COM is an example of an evaluation that will not run, but UCT_CUTOUT.COM will run (doesn't need any sample/meas info).
 
===HowTo: Redirect to a temporary database===
 
We need to temporarily redefine the logicals UPAT_EVAL_DATABASE and UPAT_SLICE_DATABASE.  Normally, the definition is
 
<pre>
UPAT_EVAL_DATABASE = UCTD:UPAT_EVAL_CALGARY.DAT
UPAT_SLICE_DATABASE = UCTD:UPAT_SLICE_CALGARY.DAT
</pre>
 
Typically, we submit our jobs to the queue with an IPL script, so within the script we'll have to redefine the name of the database by adding lines such as
<pre>
$ def UPAT_EVAL_DATABASE SYS$SCRATCH:TEMP_UPAT_EVAL_CALGARY.DAT
$ def UPAT_SLICE_DATABASE SYS$SCRATCH:TEMP_UPAT_SLICE_CALGARY.DAT
</pre>
so that the results from the IPL evaluation are redirected to this temporary database.
 
Then, we need to extract the results from the database.  These results are provided on a slice by slice basis (at least with the UPAT data).  As user <code>microct</code> in a terminal window, we will again need to redefine the database and then run the program that translates the results to a text file:
 
<pre>
$ def UPAT_EVAL_DATABASE SYS$SCRATCH:TEMP_UPAT_EVAL_CALGARY.DAT
$ def UPAT_SLICE_DATABASE SYS$SCRATCH:TEMP_UPAT_SLICE_CALGARY.DAT
$ run disk1:[calibration.util]upat_export_measurement.exe  ! give the measurement number and output file
</pre>
 
Or extract the results from the temporary database with:
 
<pre>
$ def UPAT_EVAL_DATABASE SYS$SCRATCH:TEMP_UPAT_EVAL_CALGARY.DAT
$ def UPAT_SLICE_DATABASE SYS$SCRATCH:TEMP_UPAT_SLICE_CALGARY.DAT
$ upat_list  ! choose option [3]show, give the patient number and output file, e.g. sys$scratch:myvalues.txt
</pre>
 
For an example IPL script that redirects to a temporary database, see Percy:
<pre>
DISK1:[MICROCT.COMMANDS]IPL_UPAT_EVAL_AIMINPUT.COM
</pre>
 
'''IF MEASUREMENTS COME FROM A TOTALLY DIFFERENT DATABASE (such as Toronto's XCT):'''
 
You will need to redefine the logicals UCT_MEASUREMENT_DATABASE and UCT_SAMPLE_DATABASE
<pre>
def UCT_MEASUREMENT_DATABASE SYS$SCRATCH:UCT_MEASUREMENTS_TORONTOXT.DAT
def UCT_SAMPLE_DATABASE SYS$SCRATCH:UCT_SAMPLES_TORONTOXT.DAT
</pre>
 
===HowTo: Examine patient databases===
 
This is for advanced users only!
 
There are two patient databases that get updated every time an evaluation is performed.  Below is the name of the database, and the method used to check database values:
<pre>
$ show logical UPAT_EVAL_DATABASE
$ run disk1:[calibration.util]upat_export_measurement.exe  ! as microct
</pre>
<pre>
$ show logical UPAT_SLICE_DATABASE
$ set host 0  ! login as user calibration
$ @disk1:[microct]login.com
$ spb
$ run DISK1:[CALIBRATION.UTIL]UPAT_GET_DB_INFO.EXE  ! enter '1' to list records
</pre>
 
In the slice database every evaluation is recorded, but only one is currently active at a time.
 
===HowTo: Standard patient analysis===
 
All values are determined on a slice-by-slice basis, then averaged over all the slices to calculate morphological results:
 
:*BV/TV -> Sum all raw data withing the GOBJ and divide by 1200 mg/cc HA
:*Tb.N  -> As per standard method
:*Tb.Th and Tb.Sp -> Derived from BV/TV and Tb.N above (semi-derived method)
:*D100  -> Average density of entire cross section
:*DTrab -> Average density of trabecular region
:*Ct.Th -> Cortical area (from seg) divided by circumference (from GOBJ)
 
GOBJ circumference can be determined with /gobj_circum
 
===HowTo: Import file formats: DICOM===
 
In IPL, use the /dicom_to_aim function.  There is a bug in pre IPL v5.03 which requires that a small AIM be read in before doing the DCM conversion.
<pre>
ipl> read in tmp.aim
ipl> dicom_to_aim
  -aim_name                  [in] >
  -dicom_filename            [default_file_name] > 4F65038B3986.DCM
  -multifile                [false] > true
ipl> write in MYFILE.AIM
</pre>
 
===HowTo: Fix calibration data in ISQ header ===
 
If DICOM files are converted to ISQ with IPL and then used for patient evaluation, the calibration data in the ISQ header needs to be present and correct. If this information is missing, utilizing upat_list to extract the values will say 'Error: Density calibration not valid'. In order to add calibration data to an ISQ file, do the following as user calibration:
<pre>
$set proc/priv=bypass ! gain read/write access to the files
$mcr ut:uct_ext_header_add_calib ! provide ISQ file name and header type (I chose [2])
</pre>
 
===HowTo: Use @com:reco_all and/or UCT_reconstruction_angle===
 
 
These two functions rotate and reconstruct all (reco_all) or a selection of(UCT_reconstruction_angle) slices from an RSQ. Both functions are executed from the measurement directory. The following examples are for a 10 degree clockwise rotation of sample 610, measurement 2449. NB, when assigning the angle of rotation, use right-hand rule and include a single decimal place.
 
When reconstructing all slices, delete the ISQ file from the measurement directory.
<pre>
$ @com:reco_all.com -10.0 610 2449
</pre>
 
When reconstructing a selection of slices, a valid ISQ must exist. There is an offset of 1 slice when designating slice selection. The command line in the example below will actually result in rotation and reconstruction of slices 36:41.
<pre>
$ @com:uct_reconstruction_angle.com DISK2:MICROCT.DATA.00000610.00002449]C000####.RSQ 35:40 "" "" -10.0
</pre>
 
NB "" is used instead of [] [] for optional parameters
 
==Project Management==
 
===HowTo: Example filled out log sheet===
 
A log sheet, which is always kept near the scanner, must be filled out for
every measurement on the system.  A blank log sheet is available in the
Documents section of this Wiki page.
 
Here is an example log sheet:
 
::[[Image:Herzog_pic.jpg]]
 
==Evaluation==
 
===HowTo: Understand the morphological parameters===
 
<pre>
BV/TV  -> VOX-BV/TV
BS/BV  -> TRI-BS/BV
Tb.Th  -> DT-Tb.Th
Tb.Sp  -> DT-Tb.Sp
Tb.N  -> DT-Tb.N
ConnD  -> Conn-Dens
SMI    -> TRI-SMI
DA    -> TRI-DA
</pre>
 
Usually I'd use the names on the left for the plots, but these correspond to the names on the right of the arrow in the Scanco output files.
 
<b>Note</b>, if you use the TRI-Tb.Th rather than the DT-Tb.Th*, then you are using the derived (plate-model) morphological parameters.  These are less accurate than the direct parameters.  They are calculated by triangulating the surface (marching cubes) to get BS, and then calculate thickness
Th = 2 * BV / BS, etc...
 
'''Mean Values'''
<pre>
mean 1: mean of bone AND marrow --> 'apparent density'
mean 2: mean of what was considered bone only (i.e. what was segmented)
'bone tissue density'
</pre>
 
Note, there are five possible categories for the mean Mu.  They are assigned by setting <code>-region_number</code> in the <code>/voxgobj_scanco_param</code> function.  The region number is zero-based, so setting it to 0 corresponds to mean1, 1 corresponds to mean2, etc.  So, although mean1 and mean2 are typically apparent and tissue density, respectively, this can be adjusted in the IPL script by setting the region_number.  Mean3 might be useful for storing cortical bone density, for example.
 
<pre>
/voxgobj_scanco_param      Voxel or Mu Scanco Parameters
  -input                    Gray scale or Segmented AIM object
  -gobj_filename            GOBJ: input or Automatic
  -peel_iter                Peel Iterations or Automatic
  -region_number            Region number for Mu only
 
! -region_number            0  ! mean1
! -region_number            1  ! mean2
! -region_number            2  ! mean3
! -region_number            3  ! mean4
! -region_number            4  ! mean5
</pre>
 
<b>What you should also know</b>: because of partial voluming effects, for Mean2, we are DISCARDING the 2 surface voxels of EVERY trabeculae - thus, to get meaningful Mean2, you have to do your scan with the chosen resolution high enough, such that the mean trabeculae is depicted by at the very least 5 pixels, better actually more than 6 pixels thickness. (You can do this check at the end in the XLS sheet: divide DT-Tb.Th* by el-size-mm.x, and you need to get numbers bigger than 6 or 7 or 10 or so.
 
For parameters such as ConnD where no GOBJ is taken as input, the TV is determined from the processing log stored in an AIM that has previously had a GOBJ applied (stored as the relative region of interest; ROI).  So, it is important to apply a GOBJ prior to ConnD measurements to ensure the TV is correctly determined (and not taken as the whole AIM).
 
===HowTo: Erode and Dilate in IPL===
 
The erode/dilate function is available as of IPL version 501b. 
To redefine the ipl symbol for interactive use, type the following at the command line:
 
<code>$ ipl == "$um:ipl_scanco_m_v501b.exe /int"</code>
 
Note, the symbol will only be defined in that particular terminal window.  For batch analyses, define the ipl symbol in your script without the <code>/int</code>.
 
The filter is called <code>/erosion_dilat_variable</code> and allows erosion, dilation, opening and closing operations.
 
===HowTo: Include cortical thickness in the standard evaluation===
 
Use the IPL command <code>/dt_cortex_obj_param</code> to measure cortical thickness using direct methods.
 
When extracting the results from the database using <code>uct_list</code>, specify the <code>UCT_3D_LIST_W_CTH.TXT</code> template in directory <code>DISK0:[MICROCT_COMMMON.UIL]</code>.
 
<pre>
$ uct_list
UCT_LIST.EXE Version V5.1
Template-File [UCT_3D_LIST_SHEET]: DISK0:[MICROCT_COMMON.UIL]UCT_3D_LIST_W_CTH.TXT
</pre>
 
===HowTo: Use UCT_EVALUATION tool version 6===
 
<pre>$ run um:uct_k_v6</pre>
 
The new evaluation tool v6 should be used in place of the older v5.  Please see the Documents section of this wiki for a manual on its use.
 
Known bugs:
 
When you are producing your own EVAL scripts, and want to call your own ipl file
or such:
 
The 'EVAL:' keyword in the scripts has the filenames of the
uct_evaluation_v6.com, then the ipl_v6_xxxx.com, then additional filenames (such
as the _prs.com to print and the 3dresults_append.com)
 
Now, if you are in BASIC mode in the modify window, and you change any of the 3
filename fields, the last of the additional filenames is 'dropped'... ooops...
 
So please go to Advanced mode and check the long 'EVAL:' keyword that all wished
files are still in the list, otherwise add the last again (most of the time,
that's the useful _3dresult_append.com script...)
 
Will correct that of course in the next version.
 
===HowTo: Start a 3D evaulation from the terminal===
 
Warning: Do not change <code>uct_evaulation_v4.com</code> and <code>ipl_fixed_batch_v4.com</code> in .eval, but only work on your own file (i.e., eval_steve).
First, an explanation of how the normal evaluation runs by hitting the 'Start 3d' button.
<pre>$ scanco_submit_command ue:uct_evaluation_v4.com/para=(xxx,yyy,zzz,…)</pre>
There are 8 parameters:
*P1: number of print outs of our results sheet
*P2: the ISQ filename
*P3-5: start x (pos x), y, z
*P6-8: dim x, y, z
The parameters p3-p8 come from the white bounding box. The problem is that when you start from the terminal you do not have these. This problem can be overcome by using the <code>isq_to_aim_gobjbox.exe</code> and then give the relevant parameters. You can
<code>$ run um: isq_to_aim_gobjbox.exe </code>
to see what it's asking for.
By using gobjbox you do not need p3-p8. Therefore you can start the evaluation by giving:
<pre>$ scanco_submit_command ue:uct_evaluation_special_josh.com –
/para=(1,dk0:[microct.data.0000275.0000245]c0000332.ISQ)</pre>
Note that you can make <code>uct_evaluation_special_josh.com</code> such that there is no need for P1 (change p2 to p1 in the script, etc).
[Alternatively to using the gobjbox you could use the normal isq_to_aim, but hard code the dim and pos.]
Then call whatever IPL files you want to call. Look into <code>fixed_batch_v4</code> to see how we turn on the database always on the first line of every IPL part, and how we calculate parameters.
 
===HowTo: Associate the evaluation database with an evaluation===
 
When <code>/db_scanco_activate</code> is used in the IPL files, the correct association with the evaluation database is through the Index Patient and Index Measurement in the AIM header.
 
<pre>
Index Patient                                    3095
Index Measurement                                5962
!-------------------------------------------------------------------------------
</pre>
 
Using IPL
<pre>
$ ipl
$ read in xxx.aim
$ examine in log
$ db true          {activates database}
$ dt_object        {at end "writing results to database for measurement 1234"}
</pre>
 
 
 
===HowTo: Submit a job to the queue===
 
<pre>
$ submit/noprint /que=sys$slow ipl_voi_josh_m.com
  - /log=sys$scratch:test.log
</pre>
 
===HowTo: Extract patient results on a slice-by-slice basis===
 
There is an executable that was specially installed by Andres.  Run it as user <code>microct</code>:
 
<pre>
$ RUN DISK1:[CALIBRATION.UTIL]UPAT_EXPORT_MEASUREMENT.EXE
</pre>
 
This gives you the .txt file in scratch containing the morphological parameters determined for each slice.
 
===HowTo: Extract your results from the 3D database===
 
Assuming you've used the <code>SCANCO_SUBMIT_COMMAND</code> to initialize your evaluations (either manually or through the <code>uct_evaluation</code> tool) then you can get all of your results stored into a text file that can be easily imported in Excel.
<pre>$ uct_list</pre>
The output text file will be stored in <code>sys$scratch</code> and you can ftp this to a PC so that it can be imported into excel and further analysis can be performed.
 
Importing into Excel requires setting a deliminator based on the space.
 
<b>Customizing</b> the <code>uct_list</code> output.
 
The default list template is set by the logical <code>UCT_3D_LIST_SHEET</code> which is normally
set to point to <code>UU:UCT_3D_LIST.TXT</code>.  See the templates by
 
<pre>$ dir uu:*.txt</pre>
 
Almost all the available keywords are in <code>UCT_3D_LIST.TXT</code> enclosed
by \\ and //.
 
Only when you use the 'show directly on screen mode':
<pre>$ uct_list 1234</pre>
then you need to do this to override the default output:
<pre>
$ def/user uct_3d_single_sheet  my-template_file.txt
$ uct_list 1234
</pre>
 
Some example format files are:
<pre>
UCT_3D_LIST.TXT
UCT_3D_SINGLE.TXT
UCT_3D_LIST_W_CRH.TXT
UCT_3D_MEANS.TXT      --> Use this to get the 5 mean values (i.e., calibration)
</pre>
 
A summary of all the available keywords is available in <code>UU:UCT_3D_SINGLE_SHEET.TXT</code>
<pre>
Name            :\\UCTMEASFILENAME//
Sample-Name      :\\SAMPLENAME//
Sample-Nr        :\\SAMPLENUMBER//
Meas-Nr          :\\UCTMEASNR//
Date of Birth    :\\SAMPLEDOB//
Sample-Remarks :\\SAMPLEREM//
Meas-Remarks    :\\UCTMEASREM//
Meas-NrofSlices  :\\UCTMEASNUMSLI//
Direct: -------------------------------------------------------------------
TV        : \\VOX_TV//
BV        : \\VOX_BV//
BV/TV    : \\VOX_BV_TV//
Conn.Dens.: \\UCT_CONN//
SMI      : \\MC_SMI//
Tb.N*    : \\DT_N//
Tb.Th*    : \\DT_TH//
Tb.Sp*    : \\DT_SP//
Tb.1/N.SD*: \\DT_N_SD//
Tb.Th.SD* : \\DT_TH_SD//
Tb.Sp.SD* : \\DT_SP_SD//
Lin.Att.1 : \\UCT_MU0// +-\\UCT_MU0_SD//
Lin.Att.2 : \\UCT_MU1// +-\\UCT_MU1_SD//
Lin.Att.3 : \\UCT_MU2// +-\\UCT_MU2_SD//
Lin.Att.4 : \\UCT_MU3// +-\\UCT_MU3_SD//
Lin.Att.5 : \\UCT_MU4// +-\\UCT_MU4_SD//
TRI (Plate Model): --------------------------------------------------------
TV        : \\MC_TV//
BV        : \\MC_BV//
BS        : \\MC_BS//
BV/TV    : \\MC_BV_TV//
BS/BV    : \\MC_BS_BV//
Tb.Th    : \\MC_TH//
Tb.Sp    : \\MC_SP//
Tb.N      : \\MC_N//
Anisotropy:  --------------------------------------------------------------
|H1|      : \\MC_H1//  H1x: \\MC_H1X//  H1y: \\MC_H1Y//  H1z: \\MC_H1Z//
|H2|      : \\MC_H2//  H2x: \\MC_H2X//  H2y: \\MC_H2Y//  H2z: \\MC_H2Z//
|H3|      : \\MC_H3//  H3x: \\MC_H3X//  H3y: \\MC_H3Y//  H3z: \\MC_H3Z//
DA        : \\MC_DA//
Dim X   : \\VOX_DX//
Dim Y   : \\VOX_DY//
Dim Z   : \\VOX_DZ//
Pos X   : \\VOX_PX//
Pos Y   : \\VOX_PY//
Pos Z   : \\VOX_PZ//
El-Siz X  : \\VOX_ELSX//
El-Siz Y  : \\VOX_ELSY//
El-Siz Z  : \\VOX_ELSZ// 
</pre>
 
===HowTo: Tabulate your LOG file results from 3D evaluations===
 
Only use this if you have not used the standard <code>uct_evaluation</code> tool to generate your 3D evaluations (in which case see the HowTo related to the 3D database).
You can tabulate the LOG files:
<pre>$ search xxxx.log "ov "</pre>
Or whatever you want to search for can be stored in a text file
<pre>$ search/output=sys$scratch:ov.txt xxxx.log "ov "</pre>
To search more than one log file, and get the output into one single file:
<pre>$ fda/output=xxx.txt search *.log "ov "</pre>
 
The fda means 'file do all' and is a script made by Scanco to do one command (search) on a wildcard of files (*.log). Then put all the ov.txt, tv.txt, name.txt etc. files into excel.
Josh has made a .com file that does a similar job as described above.
 
===HowTo: Compile the evaluation logs into one file===
 
Call the <code>UE:UCT_EVALUATION_V4_3D_RESULT.COM</code> with the same construction
as <code>$ eval_special</code>.  If you need help with this, see the HowTo on this
Wiki site (HowTo: Assign special 3D evaluation to the UCT_EVALUATION tool).
 
Edit <code>UE:UCT_EVALUATION_V4_3D_RESULT.COM</code> file to call a specific ipl
script as you wish.
 
When you run the evaluation, you will have three new files created:
 
:*Two files in the measurement directory (on DK0!) (one with each eval 3D results in its own file, and one <code>APPENDED_ALL.TXT</code> file)
:*Then in sys$scratch, you will have one <code>SYS$SCRATCH:UCT_LIST_ALL_3D_RESULTS.LOG</code> file with ALL 3D evaluations of all measurements.
 
<b>Note:</b> You may need to edit the <code>SCANCO_SUBMIT_COMMAND</code> to specify a single queue (i.e., /que=sceval$fast)
 
===HowTo: Do cortical midshaft evaluation with moment of inertia calculation===
 
This explains what happens when you type
 
<pre>
$ midshaft      ! or
$ eval_midshaft
</pre>
 
Draw a rough contour around your slices: open the Contouring Sub-window, double-click on the big image, and it automatically finds the best contour. Then click on 'Selection' 'Forwards', then 'Iterate Forwards'.
 
Then 'cancel' the contouring sub-window, and start the 3D evaluation.  Make sure you have already set the correct threshold, sigma, support in file
<pre>DISK2:[MICROCT.EVAL]IPL_FIXED_BATCH_MIDSHAFT.COM</pre>
 
When you type
 
<pre>$ show queue</pre>
 
you should find a job called UCT_EVALUATION_MIDSHAFT and a SYS$SCRATCH:*_MIDSHAFT_*.LOG
 
The IPL_FIXED_BATCH_MIDSHAFT.COM by default does not calculate the direct measurement results because you must have many more than 20 slices for these to be valid.  You can uncomment these parts of the file if you contoured the whole stack (i.e., stack thickness is >> than cortex thickness).
 
TILDE: Note that you will see lots of tildes (~) on the result sheets. This is to tell you that, if the measurements were trabecular bone, those values would only be approximate. But now for the cortex, they are actually correct! (see below for more explanation about this) I would now use the tildes to check the 'excel' table that the operator has taken the correct script for the trab. or cort. evaluations for the respective measurements!
 
So what's the advantage of all this?  Now, also VOX-TV is correct!  So VOX-TV is the whole area, VOX-BV the doughnut, so TV - BV is the marrow area!  And still, TRI-Tb.Th is the cortical thickness (TRI-TV is NOT correct, because the .gobj feature was turned off).
 
I say 'area' above: depending on how many slices one individual scan has,
VOX-BV (and VOX-TV) might be different for different scans, so you will HAVE to
convert the volumes to area again:
 
<pre>
volume equals area times height
--> Bone Area = VOX-BV / height = BV / (dim.z * el_size_mm.z)
</pre>
 
and same for Total area, of course :-)
 
POROSITY: If you want porosity of the bone itself draw two contours: one around, counter-clockwise, on on the inside, clock-wise (thus a 'negative', excluding contour). Now, TV will be just that ring area, BV will be the bone within that ring area, and BV/TV will be 1 - porosity, thus BV/TV 94% means 6% porosity.
 
METAPHYSIS: Application of this script to metaphysis scan (with trab. in middle):
 
<pre>
$ midshaft
</pre>
 
Draw one contour around the cortex, and in the same slices, a NEGATIVE contour on
the inside (CW contour) to exclude the trabecular bone. You may potentially work with the BP (break-point) system to be able to morph the negative contours, even though there is already an 'outer' contour around the bone in every slice.
 
Start 3D eval, read out the data-base with <code>$ uct_list</code>.
 
NOTE: You CANNOT give the .gobj a special name such as c0001234_cortex.gobj if you are using the automatic evaluation button on UCT_EVALUATION.  Only after the eval (or midshaft eval) has finished, you may copy it to a more meaningful name, but all of the evaluations are just taking the STANDARD gobj name!
 
Afterwards (after renaming or copying the _seg.aim to _cortex.aim, and .gobj to _cortex.gobj), you may want to start the very normal eval with normal (inner) contours to evaluate the trabecular compartement.
 
<pre>
Remember: the values in our 3D result database then are OVERWRITTEN.
</pre>
 
If you have a large study, I would recommend to run the $ midshaft for ALL
samples, <code>$ uct_list</code> to e.g. <code>sys$scratch:mystudy_cortex.txt</code>,
rename/copy gobj and seg for all, and THEN run the trabecular evaluation for all samples.  <code>$ uct_list</code> and you have two nice complete excel sheets.
 
 
NOTE ON PLATE MODEL: More explanations of why the plate model is correct
 
Assume a ring (cortex).
 
<pre>
Area = thickness * 'middle line'.
'middle line' = average of outer and inner circumference
--> 'middle line' = 0.5 * 'bone surface'
 
--> thickness = bone volume * 2 / bone surface.
</pre>
 
And this is nothing else but the 'plate model' formula for Tb.Th!
 
NORMAL TRABECULAR EVALUATION?  And why not just run the 'normal trabecular eval'?  Because in the 'normal' TRI calculation, we are EXCLUDING all surfaces that are created artificially by a gobj line that cuts through a trabecula.
 
However, for the midshaft, this means the whole outer (or even inner, if also
inner contour is there) is SUPPRESSED, because it is touching the gobj line. So
this is where that midshaft script comes in: it turns off that suppression.
 
MORE EXPLANATIONS: Why the direct DT-Tb.Th* is NOT correct for a scan with
just 12 slices.
 
If we fill the structure with spheres, those spheres should be bounded by the
width of the cortex, not just by the fact that we only have 12 slices (and even more so, we are always doing 'aim box' suppression with the spheres) if a sphere touches the boundary of the aim box, it is suppressed!
 
So this is quite crucial for Tb.Sp and Tb.N. To get meaningful Tb.Sp, you would
need a LOT of slices. Also, then, you cannot have the inner contour - otherwise
the negative inner contour will delete the Tb.Sp. spheres.
 
If you have enough slices, you may opt to turn the <code>/dt_object</code> on again in the
midshaft script (second half). Then DT-Tb.Th* and TRI-Tb.Th just have a slightly different behaviour if there are little pores within the cortex:
 
<pre>
TRI: the little pore just adds a little BS, thus the influence is not that big.
DT: the little pore cuts the thickness sphere in half, thus at that location, the thickness is halved.
</pre>
 
MEAN1 and MEAN2: The script is also calculating Mean1 and Mean2 now.
 
<pre>
Mean1: 'apparent' density, average over whole TV
Mean2: 'tissue' density: average over what was segmented as bone only.
</pre>
 
These mean values will be in mg HA/ccm if you have the calibration option for bone density installed (and activated for those scans).  Remember: the bone has to have some soft-tissue (or equivalent) on the inside, and preferably also on the outside then.
 
===HowTo: Temporarily change the evaluation for any <code>UCT_EVALUATION</code>===
 
In a terminal window, we need to redefine the logical that determines which
3D evaluation is associated with the <code>UCT_EVALUATION</code> tool.
 
For example, typing <code>VOI</code> runs the <code>UCT_EVALUATION</code> tool
by executing <code>UE:UCT_EVALUATION_VOI.COM</code>
 
Type
<pre>$ show logical UCT_EVALUATION</pre>
and then you can redefine this to point to another evaluation script.
<pre>$ define UCT_EVALUATION UE:UCT_EVALUATION_CUTOUT.COM</pre>
 
This is only redefined in the particular terminal you are using, and it
will reset to its default in a new terminal.  It will also not work if you
try to submit the job to a queue.  It only works interactively.
 
===HowTo: Assign special 3D evaluation to the <code>UCT_EVALUATION</code> tool===
 
'''Warning''': This is for advanced users ONLY.  Do not attempt this without contacting Steve!
 
This will show how to set up <code>$ eval_kyle</code>:
It is easy to set up multiple .COM files for the 3D evalulation tool, one such set-up is already prepared on your computer:
<pre>
$ eval_special
</pre>
will do something similar to <code>$ voi</code> where the normal contour program opens, but if you start the 3D eval, the special script <code>um:uct_evaluation_special.com</code> is called (associated with eval_special), which then in turn calls <code>ipl_fixed_batch_special.com</code>, where you can specify your own set of thresholds, etc.
 
So it is a daisy chain of files which we will need to follow to set up a special <code>xxx_kyle.com</code> script, and where ever we encounter <code>_special.com</code>, we copy and change it to <code>_kyle.com</code>.
 
So to set up <code>$ eval_kyle</code> you will need to do the following:
 
*1. Edit <code>disk1:[microct]microct_setup_user.com</code> (double-click on file), please be careful here, it's very important! (and I hope you have done your 'weekly full backup' regularly, so you could always retrieve a good version of login.com...)
 
*2. Then, towards to bottom and duplicate the line
<code>$ eval_special :== @com:eval_var.com um:uct_evaluation_special.com</code>
and change duplicate to
<code>$ eval_kyle    :== @com:eval_var.com um:uct_evaluation_kyle.com</code>
 
This will make this command <code>eval_kyle</code> available after you login freshly. Save and Exit.
 
*3. Then go to <code>disk1:[microct.eval]</code> and copy the file <code>uct_evaluation_special.com</code> to the name <code>uct_evaluation_kyle.com</code> ('Commands', 'Copy ...', BUT CLICK ON THE THREE DOTS and give new output name.
If you do not see the <code>eval_special:</code> go to terminal, <code>$ dir ue:*special*.com</code> and take it from the <code>microct_common</code> directory)
 
*4. Edit the <code>_kyle.com</code> file: at the top, change <code>ipl_......_special.com</code> to <code>_kyle.com</code>
 
*5. Copy <code>ipl_fixed_batch_special.com</code> to <code>ipl_fixed_batch_kyle.com</code>
 
*6. Edit <code>ipl_fixed_batch_kyle.com</code> to your liking. If you want <code>$ eval_kyle</code> to not perform the full evaluation, but only something akin to <code>voi</code>, then, in the steps above, copy <code>uct_eval_voi.com</code> to <code>uct_evaluation_kyle.com</code>, and <code>ipl_voi.com</code> to <code>ipl_fixed_batch_kyle.com</code> (thus you take the <code>voi</code> script as template for the <code>_kyle</code> script).
 
*7. Then open a new terminal ('applications', 'decterm'), <code>$ eval_kyle</code> should work now!
 
'''Notes''': When you start the 3D eval, then
<code>$ que</code>
will show you your batch job with your name on it now!
 
And now a few more explanations how the whole thing works: in all eval programs, hitting 'Start 3d' just submits the logical <code>uct_evaluation</code>, <code>$ show log uct_evaluation</code> shows you that by default, this points to <code>ue:uct_evaluation_v4.com</code>.
 
Those little <code>voi</code> and <code>eval_steve</code> scripts then just temporarily redefine this logical so that a different script is submitted when you <code>'start 3d eval'</code>.
 
About the '''corelut eval''': Then we start a whole different eval program: the <code>.exe_corelut</code>. So, if you set up a <code>eval_steve_c</code> (or whatever you want to call it): Produce a <code>eval_var_c.com</code> in the directory commands (maybe copy from microct_common to [microct.commands]), and there, on the last line, instead of starting
<code>$ uct_evaluation</code>
(the normal program), replace by
<code>$ evalc</code>
which starts the <code>.exe_corelut</code> - and because the <code>eval_var.com</code> has over-ridden the <code>uct_evaluation</code> logical just before, then you are starting different script upon starting 3d eval.
NB: we have a logical AND a symbol called <code>uct_evalution</code>. Sorry for confusion. Symbol <code>uct_evaluation</code> starts normal <code>eval</code> program, so this is what you replace by symbol <code>evalc</code> now).
 
===HowTo: Convert CT numbers to mg HA/ccm===
 
The two byte numbers (short) can be converted to mu values by first dividing by mu_scaling which is probably 4096. Then apply the slope and intercept to get mg HA/ccm. A typical slope may be 2.95e+02 and intercept -1.896e+02.
 
These numbers are available in the AIM header, or the ISQ header (<code>$ run ut:ctheader</code>).
The conversion is as follows:
<pre>
mg HA/ccm = (AIM/mu_scaling) * slope + intercept
mg HA/ccm = (AIM/4096) * 295.494 – 189.695
</pre>
<pre>
!----------------------------------------------------------------------
Mu_Scaling                    4096
Calibration Data              55 kVp, 200mg HA wedge, 4096 scaling
Calib. default unit type      2 (Density)
Density: unit                mg HA/ccm
Density: slope                2.95493988e+02
Density: intercept            -1.89695007e+02
HU: mu water                  0.58200
!----------------------------------------------------------------------
</pre>
 
===HowTo: Create a list of registered measurements===
 
:* To generate a list of measurements that are registered in the data base, to determine where backups are stored, or if the data is still on disk:
 
::<code>$ write_info</code>
 
:*It asks you for a range of measurement numbers or sample names, and creates <code> sys$scratch:info.txt</code>
 
 
===HowTo: View the scout views===
Go to scout view directory
<pre>
XtremeCT side:
$ cd DISK1:[MICROCT.DATA.SCOUTS]
 
VivaCT side:
$ cd ADISK1:[VIVACT.DATA.SCOUTS]</pre>
 
 
Use the program ximage
<pre>$ x asdf.SCV</pre>
 
 
===HowTo: Rotate a dataset with IPL's turn3d function===
 
The turn3d function can be used to perform a single rotation about any axis in 3d.  The turnaxis_angle input is the angle between the x, y, and z axes and the line about which the rotation will be performed.  The turnangle input is the amount to be rotated about the specified line.  To use this function to perform three sequential rotations about the image's original x, y, and z axes requires compensation for the previous rotations.
 
Further instructions can be found here: [[Media:turn3d.pdf | turn3d.pdf]]
 
===HowTo: Fix SAP colours when green===
 
(using the standard gray colourmap), if changing color maps doesn't help.
 
:*Menu point 'Norm, Default is Bone = 16000.
 
:*Take max for 32000, or 'Adapt slice'.
 
::Note: Do NOT take 'adapt vol' - it will be extremely slow!  Every single mouse-click it re-calculates whole volume...
 
===HowTo: Run SAP from the command line===
 
<pre>
$ sap -s myfile.aim
</pre>
 
===HowTo: Use SAP, CoreLUT or XV with XWin32 or Hummingbird Exceed===
 
You need two things on your computer: (1) an X windows server (e.g., XWin32 or Hummingbird Exceed), and (2) an SSH client to run your X applications (e.g., Putty or SSH Secure Client).
 
For SAP, CoreLUT or XV to work with XWin32, the visual display must be set to 8-bit. The evaluation tool <code>evalc</code> can be used in place of <code>uct_evaluation</code> via the 8-bit display.
 
<b>XWin32</b>
 
In the XWin Configuration, choose the "Windows" tab, check the box for "Legacy PseudoColor Support".  It may be necessary to restart Putty and Xwin32 before the settings take effect.  If you want to switch back to 24-bit display, uncheck the "Legacy PseudoColor Support" and restart the programs.
 
<b>Hummingbird Exceed</b>
 
Under server settings, be sure to select "pseudocolor" display.
 
<b>SSH Client</b>
 
Make sure the X-tunneling is turned on so that X applications can be used with these SSH clients.  Two SSH clients are recommended:
:* putty
:* SSH Secure Shell v3.2.9 http://www.ssh.com
 
 
===HowTo: Fix Remove and Insert key function in Cutout or Evalc===
 
You probably have caplocks activated.  Deactivate it and the cut and paste functions of the remove and insert keys will be functional again.
 
==Print outs and visualization==
 
===HowTo: Print out report sheets===
 
The postscript report sheets can be generated and printed on the command line.  For the XtremeCT system, use <code>UPAT_PRINT_LIST.EXE</code> which can be run (using the symbol):
<pre>
$ UPAT_LIST
</pre>
 
Look in the UU: directory to see options for the template files (UPAT*.TXT) and the postscript output files (*.PS).
:* UU:UPAT_EVAL_FUP05_SCUSA.PS
:* UU:UPAT_EVAL_BASELINE_SCUSA.PS
 
For other options, see the upat_list help:
<pre>
$ UPAT_LIST -h
</pre>
 
One particular option that may be useful, is to turn off slice matching:
<pre>
$ UPAT_LIST -nomatch
</pre>
 
 
For reports from non-patient measurements (i.e., the vivaCT system or non-patient scans on the XtremeCT), the template files are different (UCT*.TXT) and the postscript outputs are different (UCT*.PS). To print a result sheet use:
<pre>
$ RUN UM:UCT_RAY_BATCH.EXE
</pre>
 
If you want to create a postscript file, but not send it to the printer, set the number of copies to zero (interactive).  Then, find the postscript file from the <code>SYS$SCRATCH</code> directory and transfer it to your PC.  You must transfer the postscript file in ASCII mode.  The files are typically called TEMP_3D.PS or UPAT_PAT_62_RR.PS.  A program such as Adobe Photoshop can convert the postscript file to a different format.
 
See also our custom scripts:
<pre>
$ @COM:PRINT_2D.COM
$ @COM:PRINT_3D.COM
</pre>
 
===Combining two volumes to create transparent image===
 
First create your two start "seg.aim" images
Start by running either the normal eval, or $ voi to get one _seg.aim file of one region
 
Rename it to a better name in the session manager, e.g. c0001234_all.aim
 
Then either by choosing different contours, or a different threshold, start the $ voi or the normal evaluation again, which will create another _seg.aim file.
 
Load them in the 3D viewer ('all files') to check that they look like expected.
 
Now we will go into IPL and concatenate those two volumes.
 
<pre>
$ ipl
/read all xx_all.aim
/read trab xx_seg.aim
/transparent
  -input_solid              trab
  -input_transp              all
  -output                    out
</pre>
 
Note: the solid volume is OVERWRITING the transparent input volume, so usually, it
is the smaller (inner) of the two.
 
<pre>
/write out xxx_transp.aim
/quit
</pre>
 
Then load the _transp.aim file in 3D, go to 3D program FAQ to see how to change transparency levels in the Display options there.
 
See IPL FAQ or 3D program FAQ if you need help with these parts.
 
<b>Step by Step Example:</b> Showing your chosen trab VOI within whole bone
:* $ voi, enter threshold in ipl_voi.com, start 3d eval WITHOUT contours
:* WAIT UNTIL THE JOB IS FINISHED!
:* Rename xxxx_seg.aim to xxxx_all.aim
:* Start up normal eval program, draw trabecular contours, check threshold in ipl_fixed_batch_v4.com, start 3D eval.
:* WAIT UNTIL THE JOB IS FINISHED!
:* go into ipl and combine the two, see code above
:* Voila, finished
 
<b>Step by Step Example:</b> Showing high-dense volume surronded by lower density volume
 
:* Start normal 3D eval with HIGH threshold entered in ipl_fixed_batch_v4.com
:* WAIT UNTIL THE JOB IS FINISHED!
:* Rename xxxx_seg.aim to xxxx_high.aim
:* If wished: read out 3d result database with $ uct_list
:* Start normal 3D eval with LOW threshold entered in ipl_fixed_batch_v4.com
:* WAIT UNTIL THE JOB IS FINISHED!
:* go into ipl and combine the two, see code above
:* Voila, finished
 
===Make an animation===
 
To calculate an Animation, two (separate) tools of the 3D program are used: the set-up of start and end point of the Animation, and the 'Auto-Print' tool that automatically creates the TIF files for every rendered image.
 
This is a 'step by step' guide to create an animation using TIFF files:
:* Open your sample in the 3D program.
:* Now, open 'options','Animation'
:* Render your Image the way you want your animation to start. e.g. observer rotation -179 degrees. You may interrupt if you want. If you are satisfied with all the settings (rotation, elevation, transparency, colors etc.) the Click on 'Get Settings A'
:* Then, adjust all the settings for the endpoint of your animation (with the mouse or the sliders) e.g. observer rotation +179, and start the rendering. If satisfied, click 'Get settings B'
 
<b>Note:</b> To test, put # of views to 5 or 10... You can also interrupt the build-ups for faster viewing.
:* Click the START button again, wait till the build-up of the 3D image is finished.
:* DO NOT HIT 'START CALCULATION' YET!
:* First, you also need to set-up the 'Auto-Print' mode:
:* Go to the 'Print' menu (file --> print), choose print to TIF and to File and enter THE BEGINNING OF A FILENAME, e.g. sys$scratch:test_ (the program will append 0000.TIF, 0001.TIF etc afterwards) Or enter (possibly with middle-mouse-click): "DK0:[MICROCT.DATA.00001234.00003456]ANIMATION_" to have the result go to the measurement directory.
:* Click on the 'Auto-Print' box. Then 'ok'
:* Adjust the number of views (e.g. 200), then click on 'Start Calculation', and it will render. This may well take a long time.
:* Take those TIFF files to your PC, and combine the sequences in the program that you are using to convert the TIFF files to AVI or MOV files (like Windows Movie Maker 2, or Quick Time Pro, or Adobe Premiere etc.)
 
<b>Notes/Hints:</b>
:* The order in the above list can also be reversed: You can first set up the 'Auto-Print', and then go into the 'Animation' menu, choose start and end settings, and hit 'Start Calculation'
:* The positions A and B can be any: e.g. with subdim, you can first take everything (A), then slide it back to nothing (B).
:* You can even slowly change the color of an object. Or slowly hiding objects: choose 'transparent' for object, but change from 0.0 (A) to 1.0 (B)
:* If you want to create a movie with different sections, e.g. first rotate around, then slowly make bone transparent, then cut in: Do this in multiple sections with the 3D program, e.g. first create Auto-Print files 'rotation_0000 to rotation_0200', then 'transp_0000 to transp_0050', and then 'cut_0000 to cut_0100'. Make sure ALL the settings from the last view of the previous section match those of the first view of the next section so you get smoot transitions.
:* The 'Auto-Print' box is also usable without the 'Animation' Menu: Activate it, Like above, with sys$scratch:test_ only the beginning of filename. 'ok' Then, whenever a 3D image is completely built-up (so when you are happy with a view and you do not interrupt the build-up), automatically a TIF file is generated, numbered sequentially.
 
==Writing Scripts==
 
===HowTo: Get information about a sample or measurement from database===
 
The following will create a <code>sys$scratch:info.txt</code> file.
<pre>$ write_info</pre>
 
===HowTo: Create an MSQ image and view it===
 
This is based on marching cubes.  See <code>IPL_UPAT_EVAL.COM</code> for an example as per below:
 
<pre>
/read seg C0000214_SEG.AIM
 
/sup_divide                              ! careful of the order of inputs here
  -input                    seg
  -suppos_pixels_local      -1 -1 -1
  -supdim_numbers            1 2 1
  -subdim_pixels            -1 -1 -1
  -testoff_pixels            0 0 0
 
/sub_pick
  -input                    seg
  -output                    segsub
  -subpos_numbers            0 1 0
 
/tri
  -input                    segsub
  -output                    tri
  -gobj_filename            none
  -peel_iter                0
  -ip_sigma                  0.8
  -ip_support                1
  -ip_threshold              40
  -nr_ave_iter              2
  -size_image                512 512
  -scale_image              0.800000
  -edges                    false
  -nr_views                  1            ! Important
 
/msq_from_aim
  -aim_name                  tri
  -msq_filename              C0000123_3D.MSQ
</pre>
 
Then, use <code>UCT_3D</code> to view it.  If you click on "animations" it will give you the option to read the MSQ file.
 
===HowTo: Create your own IPL script with some tips===
 
To make a script that would submit a job to the queue with the command as follows:
<pre>
$ @um:ipl_eval_only.com 'aim_file' 'gobj_file' 'p1' 0
</pre>
 
you need to create your own IPL file would be translated to the following command:
<pre>
$ submit /noprint /que=sys$slow ue:IPL_VOI_JOSH_M.COM
  - /log=sys$scratch:test.log /para=('aim_file','gobj_file','seg_file')
</pre>
The IPL file would look something like this…
<pre>
$  if p1 .EQS. ""
$ THEN
$ write sys$output "Give DK0:[xxx]C0001234_SEG.aim on the line."
$ write sys$output "Or: "
$ write sys$output "Type $ scanco_submit_command um:ipl_eval_autostart/para=(dk0:[xxx]c00123_seg.aim) "
$ exit
$  endif
$
$ gobj_file = p1-F$PARSE(p1,,,"VERSION")-"_SEG.AIM" + ".GOBJ"
$ aim_file = p1-F$PARSE(p1,,,"VERSION")-"_SEG.AIM" + ".AIM"
$
$!
$ @um:ipl_eval_only.com 'aim_file' 'gobj_file' 'p1' 0
$ exit
</pre>
 
Some more handy IPL sequences are:
<pre>
$    INPUT = F$SEARCH("UCT_MEASUREMENT_DATA:[*.*''P1']*.RSQ",1)
</pre>
 
and then you just need to give meas. number as P1 (and maybe slice range as p2),
<pre>
$ if p2 .eqs. "" then p2 := A
</pre>
OR, some nice starts are:
<pre>
$    IF P3 .EQS. ""
$    THEN
$      WRITE SYS$OUTPUT "P1: Measurement Number to duplicate"
$      WRITE SYS$OUTPUT "P2: New Sample Number from Database"
$      WRITE SYS$OUTPUT "P3: New Start Letter of ISQ file"
$      WRITE SYS$OUTPUT "P4: Optional: Operator Number"
$      WRITE SYS$OUTPUT "P5: Optional: Controlfile Number"
$      EXIT
$    ENDIF
</pre>
where you say which parameters HAVE to be there (up to p3), and which ones are optional.
 
All together, the script may look like this:
<pre>
$    IF P1 .EQS. ""
$    THEN
$      WRITE SYS$OUTPUT "P1: Measurement Number to reco"
$      WRITE SYS$OUTPUT "P2: Optional: Slice number N or Range M:N. Auto:All"
$      WRITE SYS$OUTPUT "P3: Optional: Queue. Auto: sys$slow"
$      EXIT
$    ENDIF
$ if p2 .eqs. "" then p2 := A
$ if p3 .eqs. "" then p3 := SYS$SLOW
$ slices  = p2
$ quename = p3
$ INPUT = F$SEARCH("UCT_MEASUREMENT_DATA:[*.*''P1']*.RSQ",1)
$ INPUT = INPUT - F$PARSE(INPUT,,,"VERSION")
$ logfile = "sys$scratch:RECO_" + f$PARSE(input,,,"NAME") + ".LOG"
$ submit/noprint/queue='quename' uct_reconstruction_file -
    /para=('input','slices','logfile')
$ exit
</pre>
Note that <code>uct_reconstruction_file</code> is a logical that points to <code>um:uct_reconstruction.com</code>.
 
Logicals are preferred in scripts to make them more universal.
 
==Errors and Fixes==
 
===HowTo: Align the whole body device to be in the field of view===
 
It's important to have your whole sample in the field of view for accurate density measurements.  Follow the instructions in this [[Media:wholebody.pdf | PDF to align the device.]]
 
===HowTo: Fix "last slice" error problem when extracting AIM from ISQ===
 
Sometimes the evaluation script (i.e., voi) converting the ISQ to an AIM fails because it tries to read one slice more than what is available in the ISQ data. The result of this failure is that the 3D analysis appears to fail and no .AIM or _SEG.AIM is created in the data directory. For example, it may have tried to read 261 slices, but there were only 260 slices available.
The easiest work around is to make sure that the white bounding box in the uct_evaluation program does not include the last slice (largest Z dimension). Scanco is aware of this problem and will fix it in future software releases (V5.2).
 
===HowTo: Fix sample data when results fail to print/list/show after evaluation===
 
There are a number of reasons the results may not print:
 
====Incorrect first measurement number====
When sample information (such as patient name, DOB, remark) is changed DURING scanning, this can over write the 1st Scan measurement number, resulting in the evaluation sheet not being printed, and data not shown when running upat_list. For example, this happens when:
 
1) open sample program, enter name, hit save, leave program open
 
2) start scan (which would write correct record with 1st meas. in sample database)
 
3) in sample program: then only enter DOB, and hit 'save' again in the sample program --> it 'overwrites' the 1st meas. with an empty string again.
 
If you want to enter DOB after the scan has started, you HAVE to 'Find...' and re-load that patient first (so it correctly loads the 1st meas. entry also). It is best to just not use the sample management program whilst scanning is taking place.
 
However, if you do encounter this problem, use the following to fix (shown using patient 668 as an example. 1st scan measurement number was 2672):
<pre>
$ set host 0
calibration
xxxxx
 
$ spb
$ @[microct]microct_setup
$ run [calibration.util]uct_correct_first
$ r UCT_CORRECT_FIRST
 
Patient Nr.: 668
SampleNr.:          668
First:            0
 
2672
 
Patient Nr.:
</pre>
and continue with next non-working patient, give patient number 0 to exit.
 
$ logout
 
====Evaluation completed (aim files produced) but results not written to database====
If the first measurement number and DOB are correct... check the .log file of the evaluation... However, if there is no upat*.log file available for that scan, use:
 
upat_list -v=2 and you will see (for eg sample 594):
 
<pre>
Found sample 594, CAMOS_0018
Found measurement 2536 made 19-MAR-2007 12:52:58.48
Measurement site RL found in list at index 0
Measurement 2536 within measurement period
ERROR finding evaluation for measurement 2536
 
No valid evaluation found for measurement 2536
</pre>
 
So it seems the 3D upat eval never wrote anything to the database for that scan. In this case, you can run:
 
<pre>
$ @ue:ipl_upat_eval_again_quick.com
</pre>
and let it run for the missing data.
'''NOTE''' it will only need the aim files and gobj files that you still have in your 'models' directory.
 
====Incorrect sequence of measurement numbers====
Finally, if none of these options work... check the order of measurement numbers: especially if an import has occured, first check the first measurement number is correct (as above). Then run sys$Scratch:uct_correct_prev_next.exe and correct the order of the measurements: The database keeps a 'daisy' chain of meas. numbers, each meas. knows which one was the previous meas and the next meas.
 
0 means: no prev. meas (or no next meas) So corrected the order for you like this:
 
<pre>
$ r UCT_CORRECT_prev_next
 
Measurement No. (0 to stop) [0]: 2821
MeasNo.:        2821 PatientNo:          723
 
Previous [0]:  <-- leave 0
Next    [0]: 2828  <-- give next meas number
Measurement No. (0 to stop) [2828]:
MeasNo.:        2828 PatientNo:          723
 
Previous [0]: 2821  <-- give prev. meas number
Next    [0]:  <-- leave 0 for very last meas.
 
</pre>
Please note: the series of meas. numbers per patient is NOT separate per meas. site, thus radius and tibia meas. are linking to each other. '''Do not mess up!'''
 
==File Transfer==
 
===HowTo: SC5019 (vivaCT) files to Sodor===
 
<pre>
$ ftp hal.kin.ucalgary.ca
220 Microsoft FTP Service
Connected to hal.kin.ucalgary.ca.
Name (hal.kin.ucalgary.ca:microct): hpl-nt\skboyd
331 Password required for hpl-nt\skboyd.
Password:
230 User hpl-nt\skboyd logged in.
FTP>
</pre>
 
Note that you can log in as either:
*hpl-nt\skboyd
*skboyd@kin.ucalgary.ca
 
On the HPL network, open the window file program and type:
<code>
\\hal\FTP Home
</code>
 
Other options for file transfer:
<pre>
$ sftp  ! haven't tried it much
$ scp    ! doesn't work well with openvms
</pre>
 
===HowTo: FTP to douglas and donald (only in KIN network)===
 
There are FTP servers running on douglas and donald for file transfer WITHIN the KIN network only, e.g. percy or your PC. If you are connecting from home, establish a PPTP VPN connection to nt-hpl first to be virtually in the KIN network. Access from scanners at the hospital (VivaCT) is not possible at the moment. Use user guest and correpsonding password for login to either douglas.kin.ucalgary.ca or donald.kin.ucalgary.ca:
<pre>
$ douglas.kin.ucalgary.ca
220 Welcome to Dougla's FTP Service
Name (douglas.kin.ucalgary.ca:ypauchard): guest
331 Password required for guest.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
FTP>
</pre>
 
==Scanco Finite Element Analysis==
 
===Running the FE code on the VMS system===
 
Read the PDF file that is located in the "documents" directory for documentation and pick a problem number and output type. Make sure that your image is suitable for the slected analysis (see page 7 in the Scanco FE guide). You can use your segmented AIM from morphological analysis for FE analysis.
 
Edit the IPl file used in batch job mode <code>DISK1:[MICROCT.EVAL]IPL_FE_VM.COM</code> on percy to include the desired analysis, e.g.:
<pre>
FE_PROBLEM :== 9 !combination of 1 - 6
FE_PAR_NO :== 42 ! von Mises equivalent stress
</pre>
 
Start the evaluation as a batch job in queue SC3309_FE
<pre>$ fem DISK3:[MICROCT.PROJECTS.DEFROM.MODELS]SHAM_A12_W12_SEG.AIM</pre>
 
Look at the log file <code>SYS$SCRATCH:SHAM_A12_W12_SEG_FE.LOG</code> during execution to  verify the process.
 
Alternatively, FE analysis can be run interactively
<pre>$ iplfe</pre>
 
 
===Extracting results===
 
Creates a total result file called <code>.post</code> file. 
Then, by default, it extracts one parameter (e.g. von mises stress), and produces stats file
<code>.postlist</code> and a colorful <code>.aim</code> file (<code>_fe_par_42.aim</code>)
which you can view with uct_3d.
 
If you then want other parameters extracted, or other colorful images, you only
need to do a very quick operation in iplfe:
<pre>
$ iplfe
/fe_post
</pre>
give .post file and write out the resulting .aim file, and it produces also the .postlist file.

Latest revision as of 15:48, 16 September 2010

Redirect to: