How To's: Difference between revisions
| Line 293: | Line 293: | ||
Be sure that the queue is cleaned up from time to time. | Be sure that the queue is cleaned up from time to time. | ||
:* Completely remove the queue and re-generate | $ show queue | ||
to first find out the real name of your printer queue. Replace hpljet by your own queue name below. | |||
First approach, as normal user microct: | |||
<pre> | |||
$ stop/que/reset hpljet | |||
$ start/que hpljet | |||
>/pre> | |||
:* Completely remove the queue and re-generate, as user system | |||
<pre> | <pre> | ||
$ stop/que/reset hpljet | $ stop/que/reset hpljet | ||
Revision as of 12:23, 7 November 2005
HowTo Library
OpenVMS
HowTo: Helpful VMS commands
- Delete
$ delete *.aim;* $ dl *.aim
HowTo: Shut down the Alpha stations and start up again
Warning: 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: Understand difference between mcr and run
The command mcr is the same as run, but only with mcr you can hand over 'in-line' parameters to an .exe file:
$ run ut:ctheader.exe c000124.isq
does not work, but you have to say
$ mcr ut:ctheader.exe c000124.isq
But funnily if you define a symbol in microct_setup_user.com (or login.com),
$ ctheader :== $ut:ctheader.exe
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...
$ def dcl$path disk1:[microct.main],disk1:[microct.util]
then, if you type
$ uct_t
it will first try to
$ @uct_t.com
and then
$ r uct_t.exe
however, we usually define it by giving full path:
$ progx :== $disk1:[microct.main]progx.exe $ com_proc_x :== @disk1:[microct.main]procedure.com
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:
proc.com:
$ cd 'p1' $ dir *.*/size $ define COM disk1:[microct.commands] $ p :== @COM:PROC.COM
these both go into login.com
then, you can just type:
$ p disk4:[microct.data.0000007.000009]*.ISQ
HowTo: Launch an editor such as EVE
On the command line
$ edit/display=decwindows/tpu fname.txt
HowTo: Edit a symbol set by Scanco such as AIX
Warning: Extreme caution! Explicit permission for this change or similar changes must be obtained from Dr. Steven Boyd.
Log in as user calibration
$ set proc/priv=bypass $ cdc (changes to microct_common) $ sea *.com aix
Edit that file which is called microct_setup_common.com
Another example: To make the backspace/insert keys work properly, edit the login.com and insert the line
$ set terminal/insert
Anywhere suitable.
HowTo: File do all -- apply one command to a whole set of files
$ fda ctheader dk0:[microct.data.0001234...]*.isq
to see the header of all isq files of sample 1234 (the three dots ... means all subdirectories)
Or:
$ fda aix dk0:[microct.data.0001234.00005678]*.aim
to see the processing log of all aim files of scan 5678
Wildcard "*" means multiple characters, "%" is for ONE character:
$ fda aix dk0:[microct.data...]C%%%%%%%.aim
(yes, 7 %'s)
to show the aim header of the gray-scale c0000135.aim (etc) files only, and NOT from the _seg.aims also.
Warning: CAUTION! Always test the wildcard expression first with
$ dir dk0:[xxx...]*.aim
The 'file do all' fda command can even be combined with a pipe, or an /output qualifier:
$ pipe fda aix dk0:[microct...]*.aim | search sys$pipe "Slope"
will show you all "Slopes" in a row. (but you may not see which slope belongs to which aim file anymore...)
or:
$ fda/output=sys$scratch:all_headers.log aix dk0:[microct...]*.aim
will write all the output into the .log file - which you can then either edit, or
$ search sys$scratch:all_headers.log "String"
or whatever you want.
"fda" is our self-written script, so you may have to try-n-error a bit...
$ fda command file_wildcard [Optional: further parameters]
If the command consists of multiple words with spaces inbetween (e.g. mcr ut:xxx.exe), then enclose the command in double-quotes
$ fda "mcr ut:uct_ext_header_display" dk0:[microct...]*.isq 8
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:
@decw$user_defaults:sap$vue
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
# - temple
$ - sceval
# xhost +temple.ucalgary.ca
# ssh -X microct@sceval.ucalgary.ca
$ set display /create /transport=tcpip /node=temple.ucalgary.ca
NOTE: Do not use xhost+. Always specific exactly which computer is being
allowed X access.
HowTo: Monitor system usage
$ monitor/interval=1 processes/topcpu
$ monitor/interval=1 system
$ show error
$ show system
The command show error may indicate errors. One or two errors is OK.
HowTo: Configure the EVE editor
The following file, called tpu.dat, should be installed in disk1:[microct.xdefaults]:
#
# 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?)
Scanco System and Setup
HowTo: Calculate vivaCT CTDI dose
Assuming the following settings on the vivaCT, we will calculate the CTDI dose.
HIGH MODE:
1000 projections
0.109 mA
200 ms IT
I calculate the time current value as:
0.109 mA * (0.200 + 0.012) S * 1000 proj= 23.11 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:
23.11 / 68 * 720 = 245 mGy
Then multiplying by your factor 2 (because for our setup our CTDI is more like in air), we get:
2 * 245 = 490 mGy per scan.
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.
$ show queue
to first find out the real name of your printer queue. Replace hpljet by your own queue name below.
First approach, as normal user microct:
$ stop/que/reset hpljet
$ start/que hpljet
>/pre>
:* Completely remove the queue and re-generate, as user system
<pre>
$ stop/que/reset hpljet
$ dele/que hpljet
$ @sys$startup:dcps_hpljet_ip
HowTo: Requeue a process
- Find the process identification using
see
- The process must be pending, not processing!
set entry 1131 /requeue=SCEVAL_SLOW .
HowTo: Extract patient name from database
$ mcr um:uct_info 1234
will show you sample-name of sample-number 1234
$ mcr um:uct_info -m 1234
will give you some (stupid) info about meas 1234
Note: If you use this function all the time, put the following into microct_setup_user.com
$ uct_info :== $um:uct_info
and then the usage info will even be correct
HowTo: Extract disk usage information
To look at the RSQs in the database
$ dir/siz dk0:[microct.data...]*.rsq
the three dots means all subdirectories.
Other useful commands:
$ ctheader xxxxxx.isq
or
$ ctheader xxxxxx.rsq
shows you header.
$ fda command file-wildcard
does a 'file do all' of the command on all the given wildcard filenames.
$ pipe xxxx | search sys$pipe "patient"
is the pipe command in VMS.
So all three combined:
$ pipe fda ctheader dk0:[microct.data...]*.rsq | search sys$pipe "patient name"
or any other field you want to search for!
Other ideas:
$ write_info
gives you a file sys$scratch:info.txt with info in it (leave defaults to get all samples ever scanned, otherwise 'zoom' in on some samples.)
Check out the search command:
$ help search
and /match=and
or /match=or
HowTo: Edit Scanco SCANCO_SUBMIT_COMMAND symbol
- Check the current setting:
$ show sym *submit*
In directory DISK2:[MICROCT]MICROCT_SETUP_USER.COM add the following line:
$ SCANCO_SUBMIT_COMMAND :== SUBMIT/NOPRINT/QUE=SYS$SLOW /NOTIFY/LOG=SYS$SCRATCH:
Then end session and log in again. Definition of the symbol in the
MICRO_SETUP_USER.COM supersedes the standard setting.
HowTo: Use the new UCT_BACKUP 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 'Start...'
The 'Script...' button is for advanced users.
Advanced Users:
Use of the 'Script...' button: this will generate a script,
sys$scratch:archive.com,
that you may submit in batch mode later (e.g. over night) by typing:
$ scanco_submit_command sys$scratch:archive.com/after=23:59
(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. /que=sceval_fast )
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.
$ show entry will show you that it is holding until then.
See $ help submit /after and $ help dcl_tips date_time example for more help on this.
Little Reminder:
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 ctrl/c to interrupt the program, take a fresh tape, initialize it, select the remaining scans to archive again, hit 'start'.
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: Import foreign data into the Scanco database on the VMS system
Only 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).
PART 1:
After transfering your data to the VMS system (use the data disk disk2, NOT the user disk disk1), use the IPL commands /import_freeformat or /read_aim function to import your data for conversion to an ISQ.
For DICOM files, start IPL and run the /dicom 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 signed short or signed char from other data types. Obey these requests and do it by running the /convert_unsigned function.
Then, write the ISQ file.
ipl> toisq in DK0:[MICROCT.DATA]D0000001.ISQ
-square true
-original_pos falseThis writes the ISQ file.
Remember, 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.
PART 2:
Create a sample in the database and write down the sample and measurement number. Then, run:
$ run um:uct_import
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).
Operator and controlfile can be left 0 if you want.
Then it changes the sample and measurement number in the ISQ file, makes the correct directory on DK0, 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 uct_evaluation program with this file.
Note, if you were importing an AIM file, delete the original file as it will have the wrong measurement indexes in its log header. You will have to produce the AIM file again from the ISQ so our database writes the evaluation results into the correct sample fields.
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:
Evaluation
HowTo: Understand the morphological parameters
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
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.
Note, 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
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'. (so this does depend on threshold a little bit)
mean 3: empty, or can be used to store mean of cortex, e.g.
The function /voxgobj has -region number (zero-based) to goveren which
mean value is filled, 1 - 5 (thus region 0 - 4).]
What you should also know: 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.
HowTo: Start a 3D evaulation from the terminal
Warning: Do not change uct_evaulation_v4.com and ipl_fixed_batch_v4.com 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.
$ scanco_submit_command ue:uct_evaluation_v4.com/para=(xxx,yyy,zzz,…)
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 isq_to_aim_gobjbox.exe and then give the relevant parameters. You can
$ run um: isq_to_aim_gobjbox.exe
to see what it's asking for.
By using gobjbox you do not need p3-p8. Therefore you can start the evaluation by giving:
$ scanco_submit_command ue:uct_evaluation_special_josh.com –
/para=(1,dk0:[microct.data.0000275.0000245]c0000332.ISQ)
Note that you can make uct_evaluation_special_josh.com 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 fixed_batch_v4 to see how we turn on the database always on the first line of every IPL part, and how we calculate parameters.
HowTo: Use EVAL PROGRAM (Slice Viewer) without importing ISQ into the database
Warning! It is strongly suggested to properly import that ISQ into the database before you run a full 3D evaluation! See the appropriate HowTo.
In a terminal, $ def uct_default_isq xxxxxxxx.isq
Then start the uct_evaluation tool (or voi, evalc).
Hit cancel when asked for a file to read and the default ISQ that was set will be read.
Warning! Only start a 3D evaluation if and only if the sample (patient) and measurement
index are correct in the ISQ header!
HowTo: Submit a job to the queue
$ submit/noprint /que=sys$slow ipl_voi_josh_m.com
- /log=sys$scratch:test.log
HowTo: Extract your results from the 3D database
Assuming you've used the scanco_submit_command to initialize your evaluations (either manually or through the uct_evaluation tool) then you can get all of your results stored into a text file that can be easily imported in Excel.
$ uct_list
The output text file will be stored in sys$scratch 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.
HowTo: Tabulate your LOG file results from 3D evaluations
Only use this if you have not used the standard uct_evaluation tool to generate your 3D evaluations (in which case see the HowTo related to the 3D database).
You can tabulate the LOG files:
$ search xxxx.log "ov "
Or whatever you want to search for can be stored in a text file
$ search/output=sys$scratch:ov.txt xxxx.log "ov "
To search more than one log file, and get the output into one single file:
$ fda/output=xxx.txt search *.log "ov "
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: Do cortical midshaft evaluation with moment of inertia calculation
This explains what happens when you type
$ midshaft or $ eval_midshaft
Draw a rough contour in the first of your 20 (or 12 or whatever) 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', and it finds the best contour for every of your (about) 20 slices.
Then 'cancel' the contouring sub-window, and start the 3D evaluation.
FIRST: set the correct threshold, sigma, support in the file:
[microct.main]ipl_fixed_batch_midshaft.com (or in [microct.eval])!
(Save contours when it asks you). Exit the program.
When you now type $ que in the terminal, you will see some job called
'uct_evaluation_midshaft'
(or similar), whereas the trabecular evaluations were called
'uct_evaluation_v4'.
Also the .log file in Scratch has the _midshaft name.
I now only calculate the TRI values (Plate Model), and not the direct stuff
anymore, since for only 20 slices, the truly 3D Tb.Th might be quite off.
Also, you will see lots of tildes on the result sheets. This is to tell
you that, if the meas. were trab. bone, those values would only be approximate.
But now for the cortex, they are actually correct ! (see below for more explan about this)
So 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:
volume equals area times height
--> Bone Area = VOX-BV / height = BV / (dim.z * el_size_mm.z)
(and same for Total area, of course :-)
All clear ???
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.
Application of this script to metaphysis scan (with trab. in middle):
$ midshaft
draw one contour around the cortex, and in same slices, a NEGATIVE contour on
the inside (CW contour) to exclude the trab.
(potentially work with the BP (brake-point) system to be able to morph the
negative contours, even though there is already a 'outer' contour around the
bone in every slice.)
Start 3D eval, read out the data-base with uct_list.
NB: you CANNOT give that used .gobj a special name such as c0001234_cortex.gobj!
Only after the eval (or midshaft eval) has finished, you may copy it to a more
meaningful name - but all of our evaluations are just taking the STANDARD gobj name!
Then 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.
Remember: the values in our 3D result database then are OVERWRITTEN.
(if you have a whole study, I would recommend to run the $ midshaft for ALL
samples, $ uct_list to e.g. sys$scratch:mystudy_cortex.txt, rename/copy gobj and
seg for all, and THEN run the trab. eval for all samples, $ ust_list and you
have two nice complete xls sheets.)
More explanations of why the plate model is correct:
Assume a ring (cortex).
Area = thickness * 'middle line'.
'middle line' = average of outer and inner circumference
--> 'middle line' = 0.5 * 'bone surface'
--> thickness = bone volume * 2 / bone surface.
And this is nothing else but the 'plate model' formula for Tb.Th!
nice, no ?
And why not just run the 'normal trabecular eval'?
in the 'normal' TRI calculation, we are EXCLUDING all surfaces that are created
artificially by a gobj line that cuts through a trab.
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.
and some explanations, why the direct DT-Tb.Th* is NOT correct for a scan with
just e.g. 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 /dt_object 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:
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.
The script is also calculating Mean1 and Mean2 now:
Mean1: 'apparent' density, average over whole TV
Mean2: 'tissue' density: average over what was segmented as bone only.
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 UCT_EVALUATION
In a terminal window, we need to redefine the logical that determines which
3D evaluation is associated with the UCT_EVALUATION tool.
For example, typing VOI runs the UCT_EVALUATION tool
by executing UE:UCT_EVALUATION_VOI.COM
Type
$ show logical UCT_EVALUATION
and then you can redefine this to point to another evaluation script.
$ define UCT_EVALUATION UE:UCT_EVALUATION_CUTOUT.COM
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 UCT_EVALUATION tool
Warning: This is for advanced users ONLY. Do not attempt this without contacting Steve!
This will show how to set up $ eval_kyle:
It is easy to set up multiple .COM files for the 3D evalulation tool, one such set-up is already prepared on your computer:
$ eval_special
will do something similar to $ voi where the normal contour program opens, but if you start the 3D eval, the special script um:uct_evaluation_special.com is called (associated with eval_special), which then in turn calls ipl_fixed_batch_special.com, 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 xxx_kyle.com script, and where ever we encounter _special.com, we copy and change it to _kyle.com.
So to set up $ eval_kyle you will need to do the following:
- 1. Edit
disk1:[microct]microct_setup_user.com (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
$ eval_special :== @com:eval_var.com um:uct_evaluation_special.com
and change duplicate to
$ eval_kyle :== @com:eval_var.com um:uct_evaluation_kyle.com
This will make this command eval_kyle available after you login freshly. Save and Exit.
- 3. Then go to
disk1:[microct.eval] and copy the file uct_evaluation_special.com to the name uct_evaluation_kyle.com ('Commands', 'Copy ...', BUT CLICK ON THE THREE DOTS and give new output name.
If you do not see the eval_special: go to terminal, $ dir ue:*special*.com and take it from the microct_common directory)
- 4. Edit the
_kyle.com file: at the top, change ipl_......_special.com to _kyle.com
- 5. Copy
ipl_fixed_batch_special.com to ipl_fixed_batch_kyle.com
- 6. Edit
ipl_fixed_batch_kyle.com to your liking. If you want $ eval_kyle to not perform the full evaluation, but only something akin to voi, then, in the steps above, copy uct_eval_voi.com to uct_evaluation_kyle.com, and ipl_voi.com to ipl_fixed_batch_kyle.com (thus you take the voi script as template for the _kyle script).
- 7. Then open a new terminal ('applications', 'decterm'),
$ eval_kyle should work now!
Notes: When you start the 3D eval, then
$ que
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 uct_evaluation, $ show log uct_evaluation shows you that by default, this points to ue:uct_evaluation_v4.com.
Those little voi and eval_steve scripts then just temporarily redefine this logical so that a different script is submitted when you 'start 3d eval'.
About the corelut eval: Then we start a whole different eval program: the .exe_corelut. So, if you set up a eval_steve_c (or whatever you want to call it): Produce a eval_var_c.com in the directory commands (maybe copy from microct_common to [microct.commands]), and there, on the last line, instead of starting
$ uct_evaluation
(the normal program), replace by
$ evalc
which starts the .exe_corelut - and because the eval_var.com has over-ridden the uct_evaluation logical just before, then you are starting different script upon starting 3d eval.
NB: we have a logical AND a symbol called uct_evalution. Sorry for confusion. Symbol uct_evaluation starts normal eval program, so this is what you replace by symbol evalc 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 ($ run ut:ctheader).
The conversion is as follows:
mg HA/ccm = (AIM/mu_scaling) * slope + intercept
mg HA/ccm = (AIM/4096) * 295.494 – 189.695
!----------------------------------------------------------------------
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
!----------------------------------------------------------------------
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:
$ write_info
- It asks you for a range of measurement numbers or sample names, and creates
sys$scratch:info.txt
HowTo: View the scout views
Use the program ximage
$ x asdf.SCV
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...
Writing Scripts
HowTo: Get information about a sample or measurement from database
The following will create a sys$scratch:info.txt file.
$ write_info
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:
$ @um:ipl_eval_only.com 'aim_file' 'gobj_file' 'p1' 0
you need to create your own IPL file would be translated to the following command:
$ submit /noprint /que=sys$slow ue:IPL_VOI_JOSH_M.COM
- /log=sys$scratch:test.log /para=('aim_file','gobj_file','seg_file')
The IPL file would look something like this…
$ 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
Some more handy IPL sequences are:
$ INPUT = F$SEARCH("UCT_MEASUREMENT_DATA:[*.*''P1']*.RSQ",1)
and then you just need to give meas. number as P1 (and maybe slice range as p2),
$ if p2 .eqs. "" then p2 := A
OR, some nice starts are:
$ 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
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:
$ 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
Note that uct_reconstruction_file is a logical that points to um:uct_reconstruction.com.
Logicals are preferred in scripts to make them more universal.
Errors and Fixes
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).