Document Sample
octos Powered By Docstoc
					FIELD NAME and LOCATION in file and object stuctures                               DATA TYPE

/Annotations/*   /Author                                                           string
/Annotations/*   /AnalysisModuleName                                               string

/Annotations/*   /AnalysisModuleVersion/Major                                      uint16
/Annotations/*   /AnalysisModuleVersion/Minor                                      uint16
/Annoations/*    /AnalysisModuleBuildNumber                                        uint32
/Annotations/*   /AnalysisBscanConfidence                                          uint8 array

/Annotations/*   /AnalysisAggregateConfidence                                      uint8
/Annotations/*   /ParentOCTUID                                                     string

/Annotations/*   /ParentOCTDate                 /Year                              uint16

/Annotations/*   /ParentOCTDate                 /Month                             uint8
/Annotations/*   /ParentOCTDate                 /Day                               uint8
/Annotations/*   /ParentOCTTime                 /Hour                              uint8
/Annotations/*   /ParentOCTTime                 /Minute                            uint8
/Annotations/*   /ParentOCTTime                 /Second                            uint8
/Annotations/*   /MarkerDefVer                                                     string

/Annotations/*   /BScanNotations/*              /BscanNumber                       uint16

/Annotations/*   /BScanNotations/*              /MarkerLayers/*   /MarkerEnum      uint16

/Annotations/*   /BScanNotations/*              /MarkerLayers/*   /BoundaryPts_X   uint16 array

/Annotations/*   /BScanNotations/*              /MarkerLayers/*   /BoundaryPts_Y   uint16 array
ANNOTATIONS (0 or more) (optional) -- a useful Octos file has this or OCT
Human image grader's name or initials
If annotation was generated by software, the name of the software module performing the
version number of said software, major part
version number minor
version build number, if any (0 otherwise)
<NumBscans> bytes where each byte is the confidence (0-100) of the analysis for this
aggreagate confidence for entire analysis, usually average of bscan confidence values
CRUCIAL: the OCT UID string of the (parent) OCT file this annotation belongs to. This is
really important, even if Annotation is in same file as OCT data
The file last modified Date and Time of the (parent) OCT file this annotation belongs to.
For audit trail purposes, the date can be checked and the annotation has a small
guarantee that the parent OCT data has not been replaced or modified
(see above)
(see above)
(see above)
(see above)
(see above)
Filename of Marker and Spaces Definition (.xdef) or Boundaries and Spaces Template
used to create this Octos file (.xbst). For audit trail purposes.
the index of the B-scan that this B-scan Noation belongs to, in the series of B-scans,
starting with 0 and less than or equal to <NumBscans> - 1
the Marker Enumeration for this boundary (there should be one or more MarkerLayers). If
this BscanNumber has no boundaries, just omit this entire BScanNotation
<NumBoundaryPts> non-negative x values for successive points in the boundary for this
MarkerEnum. X values correspond to ascan numbers of this Bscan, e.g. value 0 to
Bscan.Ascans - 1 inclusive. For data where every ascan has only one Y ("Z" in OCT)
boundary value, this array will be all of the integers 0 to Bscan.Ascans - 1 inclusive
<NumBoundaryPts> non-negative y values of said points. There may be more or less
points than Ascans. Y values lie within 0 to Bscan.Rows - 1 inclusive. Y value implies the
TOP of that data sample or pixel. Note that columns may not have any X,Y pairs for this
boundary. Values should not be interpolated but instead the empty columns for this
Boundary should be left blank
/Annotations/*   /BScanNotations/*       /MarkerLayers/*   /IncludeThis   bool

/Annotations/*   /PackedNotationLayers                                    uint8 array

/Annotations/*   /Markers/*              /ColorR                          uint8
/Annotations/*   /Markers/*              /ColorG                          uint8
/Annotations/*   /Markers/*              /ColorB                          uint8
/Annotations/*   /Markers/*              /Overlap                         bool

/Annotations/*   /Markers/*              /Name                            string
/Annotations/*   /Markers/*              /MarkerEnum                      uint16

/Annotations/*   /Spaces/*               /MarkerEnum0                     uint16
/Annotations/*   /Spaces/*               /MarkerEnum1                     uint16

/Annotations/*   /Spaces/*               /Enumeration                     uint16

/Annotations/*   /Spaces/*               /ColorR                          uint8
/Annotations/*   /Spaces/*               /ColorG                          uint8
/Annotations/*   /Spaces/*               /ColorB                          uint8
/Annotations/*   /Spaces/*               /ColorOpacity                    uint8

/Annotations/*   /Spaces/*               /Show                            bool

/Annotations/*   /Spaces/*               /Name                            string
For purposes of generating reports, the user can disable (Include = false) or enable this B-
scan as it pertains to calculations. For B-scan density purposes. Can be safely ignored.

DO NOT USE THIS FIELD. Octos::Write causes all of the above data (in all
BScanNotations) for each AnnotationData object to be Packed into this array of bytes
(which are then compressed more automatically by HDF/zlib). Octos::Read causes
PackedNotationLayers to be Unpacked automatically. The goal is to reduce disk use by
around 90% or 95%. For the user of the Octos library, this is totally transparent.

marker color, Red component, in range 0 to 255 inclusive
same, Green
same, Blue
false ==> "normal 1-D" boundary with only odd numbers of points (or zero) allowed for
each boundary in each ascan, true ==> 2-D figures like artery that have an even number
of points (or zero) per ascan (for each boundary)
human readable, descriptive name of this boundary marker, like "ILM -- Inner"
CRUCIAL: unique enumeration for this space. These numbers make the entire system
work. These numbers are maintained by DIRC/DIESEL in Marker Enumeration Definition

unique enumeration for the top boundary of this space
same as above, but bottom boundary. For closed figure boundaries, this value will be the
same as MarkerEnum0
IMPORTANT: unique enumeration for this space. Maintained as marker enumerations
mentioned above, with a separate (possilby overlapping) set of numbers
space color, Red component, in range 0 to 255 inclusive
same, Green
same, Blue
opacity of space when rendered over OCT data, Red component, in range 0 to 255
inclusive, 0 ==> transparaent, 255 ==> opaque
whether to show space or not upon Annotation load. Can be safely ignored or set to true.
Rationale: some spaces are used for calculations but interfere visually with other layes

descriptive, human readable name of the space defined by the above marker enums, like
"Retina" or "RPE"
/Annotations/*   /FoveaX                                        float32

/Annotations/*   /FoveaY                                        float32

FIELD NAME / LOCATION in file and object stuctures              DATA TYPE

/OCT             /ThisOCTUID                                    string

/OCT             /Palettes/*                    /Name           string
/OCT             /Palettes/*                    /PaletteScale   float32

/OCT             /Palettes/*                    /PaletteIx      float32 array

/OCT             /Palettes/*                    /PaletteR       uint8 array

/OCT             /Palettes/*                    /PaletteG       uint8 array
/OCT             /Palettes/*                    /PaletteB       uint8 array

/OCT             /DefaultPaletteNumber                          uint8

/OCT             /Bscans/*                      /DataSamples    variantbuffer

/OCT             /Bscans/*                      /Rows           uint16
/OCT             /Bscans/*                      /Ascans         uint16
X value of custom, user specified fovea center, measured in "ascan pixel units" (see
Protocol and FundusImage sections below)
Y value of above point. Default x,y values would usually be zero or whatever the
geometric center of the OCT data on the fundus is

OCT section (optional: Octos file may be OCT data, Annotation(s), or both)
CRUCIAL: the unique ID of the OCT file, used to tie external annotation files to this one (if
any). Ideally it should be possible to regenerate this string given only the original OCT
data (not just pseudo-randomly generated every time the original OCT data is converted
to OCTOS) so OCTOS exports can be repeated and every OCTOS file generated would
have the same UID. In this way, annotations would still point to the new OCTOS; the OCT
data hasn't changed, just the OCTOS conversion code, for instance

PALETTES (1 or more). Count stored in /OCT/Palettes/Count
name of the palette, e.g. Grayscale, Pesudocolor, or Black on White
multiply the DataSample by this value before looking it up in the palette. Usually this is
just 1.0
a list of <PalSize> (increasing) indices into the palette. Palette is linearly interpolated in
each color component and PaletteIx provides the "x" values of these points. NOTE: a
lookup table is just a special case of this, where PaletteIx is an array containing 0, 1, 2, ...
<PalSize> - 2, <PalSize> - 1
a list of <PalSize> bytes representting the <PalSize> red components (8bits) of the 24 bit
color. Colorspace is basically sRGB I, assumes standard PC gamma (decoding) of 2.2,
same as above, but green components
same as above, but blue components

if more than one palette is stored, the default palette for this file. Usually this is 0. In the
range 0 to <NumPalettes> - 1 inclusive.
BSCANS (1 or more). Count stored in /OCT/Bscans/Count
8,16, or 32 bit integer data, or 32 bit floating point data, for this entire Bscan. Number of
samples = Ascans * Rows. Data is compressed and decompressed automatically on disk
by zlib and HDF
the number of samples in an Ascan, along the Z direction (into the back of the eye)
the number of Ascans in this Bscan
/OCT   /Bscans/*               /FundusXs                float32 array

/OCT   /Bscans/*               /FundusYs                float32 array
/OCT   /Bscans/*               /BscanQuality            uint8

/OCT   /AggregateScanQuality                            uint8
/OCT   /FileCreationDate       /Year                    uint16
/OCT   /FileCreationDate       /Month                   uint8
/OCT   /FileCreationDate       /Day                     uint8
/OCT   /FileCreationTime       /Hour                    uint8
/OCT   /FileCreationTime       /Minute                  uint8
/OCT   /FileCreationTime       /Second                  uint8

/OCT   /Patient                /UID                     string

/OCT   /Patient                /Surname                 string

/OCT   /Patient                /GivenNames              string

/OCT   /Patient                /DateOfBirth    /Year    uint16
/OCT   /Patient                /DateOfBirth    /Month   uint8
/OCT   /Patient                /DateOfBirth    /Day     uint8
/OCT   /Patient                /MRN                     string

/OCT   /Patient                /Gender                  uint8
/OCT   /Patient                /Ethnicity               string
/OCT   /Patient                /Comments                string
<Ascans> x values on the fundus, expressed in "ascan pixel units" (see Protocol and
FundusImage sections below), one for each Ascan
y values on the fundus, as above. See below.
a quality score for this Bscan's data on a scale from 0 to 100, 0 being all noise, 100 being
all signal

the scan quality for all Bscans in this OCT data file, probably the average
year, AD, four digits
month, 1 = January … 12 = December
day of the month, 1-31
hour of the day, 0-23
minute of the hour, 0-59
second of the minute, 0-59
PATIENT section
Patient's UID if all Patient data is stored externally. Probably all other fields would be
blank. Note that all of the data for a given patient never changes, so it could make sense
to store this externally, not leaving a copy of it in every OCT data acquistion

Patient's family or surname. Some cultures have multiple words in their surname (i.e. a
space between them as part of the name, but it is treadet as a single surname). All such
names would be included here. Notice that all strings in Octos are Windows 16-bit
Unicode and automatically (de)compressed from (to) disk
Patient's given names, including the first name and any middle names, omitting the family
name. For cultures where the Surname "comes first" this should be the second, third,
fourth names, etc.
Patient's year of birth, if known, zero otherwise.
Sames above, but month 1-12
day of the month, 1-31
Patient's medical record number ("Patient ID" in Zeiss parlance), if any. Not to be
confused with Patient UID above
Patient's gender. Male, Female or GenderUnknown (default)

PROPOSED: Patient's ethnicity, if known. (Provisional, not supported)
PROPOSED: Any comments regarding the patient. NOTE: this is not the correct place to
put any diagnosis info, since the same patient may have many diagnoses. This section is
for static information regarding the patient. Diagnosis information belongs in the patient
section below. (Not supported)
/OCT   /Visit            /StudyDate          /Year     uint16
/OCT   /Visit            /StudyDate          /Month    uint8
/OCT   /Visit            /StudyDate          /Day      uint8
/OCT   /Visit            /StudyTime          /Hour     uint8
/OCT   /Visit            /StudyTime          /Minute   uint8
/OCT   /Visit            /StudyTime          /Second   uint8
/OCT   /Visit            /StudyEye                     uint8 (Eye
/OCT   /Visit            /StudyUID                     string
/OCT   /Visit            /Diagnosis                    string

/OCT   /Visit            /Physician                    string

/OCT   /Protocol         /ScanProtocolName             string

/OCT   /Protocol         /PixelsPerMM_X                float32

/OCT   /Protocol         /PixelsPerMM_Y                float32
/OCT   /Protocol         /PixelsPerMM_Z                float32
/OCT   /Protocol         /XOffset                      float32
/OCT   /Protocol         /YOffset                      float32
/OCT   /Protocol         /FlipBscansBottomTop          bool

/OCT   /FundusImages/*   /FilenamePlusExtNoPath        string

/OCT   /FundusImages/*   */ImageFileData               [uint8]

/OCT   /FundusImages/*   /PixelOriginX                 float32

/OCT   /FundusImages/*   /PixelOriginY                 float32
VISIT Section
The date this OCT data was acquired. Format: same as date above
same as above
same as above
Time of day this OCT data was acquired. Format same as time above
same as above
same as above
The Laterality of the patient's eye this data was acquired from. OS = Left, OD = Right,
EyeUnknown (default) if this is not known
string containing study Unique ID, if any
clinician's diagnosis. NOTE: can machine's diagnosis be here? Probably this should not
be entered automatically, only manually for each visit
Clinician in attendance or who ordered this scan?
PROTOCOL section
name of protocol, Radial Lines, Macular Thickness, Raster, 3D Macula, Optic disk, etc.

scaling factor to convert ascan x position in "ascan pixel units" (FundusXs above) into
millimeters. mm = ascan_pixel_unit / PixelsPerMM_X
same for y position
convert z values/rows into physical space, in mm
physical_x_position_in_mm = (FundusXs[i] - XOffset) / PixelsPerMM_X
same, but for y position
FOR NAVIGATION ONLY: true --> B-scan 0 is on the bottom (-Z), false --> B-scan 0 is at
the top (+Z = top of head)
FUNDUSIMAGES (0 or more). Count stored in /OCTOS/FundusImages/Count
filename for this file, incuding extension, with no path. Optional but useful for extracting
files with a default name. Try to make these unique and useful for don't put anything in
this field
the bytes of the file, directly embedded into the OCTOS file. If the data is raw, some
compression with occur so big raw TIFs and BMPs are ok. PNGs, JPEGs, GIFs, and
JPEG 2000 files expected types as well.
position_on_this_2D_fundus_image_in_pixels = PixelOriginX + (FundusXs[i] - XOffset) *
PixelsPerAscanX . (Set this to 0 if unknown.)
same as above, but for Y (positive Y goes up or down on the image… To be
/OCT   /FundusImages/*   /PixelsPerAscanX            float32

/OCT   /FundusImages/*   /PixelsPerAscanY            float32

/OCT   /FundusImages/*   /Description                string

/OCT   /HardwareInfo     /DeviceName                 string
/OCT   /HardwareInfo     /Manufacturer               string
/OCT   /HardwareInfo     /ModelNumber                string
/OCT   /HardwareInfo     /SerialUID                  string
/OCT   /HardwareInfo     /CalibrationDate   /Year    uint16
/OCT   /HardwareInfo     /CalibrationDate   /Month   uint8
/OCT   /HardwareInfo     /CalibrationDate   /Day     uint8

/OCT   /SoftwareInfo     /Name                       string
/OCT   /SoftwareInfo     /VersionNumber     /Major   uint16
/OCT   /SoftwareInfo     /VersionNumber     /Minor   uint16
/OCT   /SoftwareInfo     /VersionDate       /Year    uint16
/OCT   /SoftwareInfo     /VersionDate       /Month   uint8
/OCT   /SoftwareInfo     /VersionDate       /Day     uint8
/OCT   /SoftwareInfo     /BuildNumber                uint32
/OCT   /SoftwareInfo     /BuildDate         /Year    uint16
/OCT   /SoftwareInfo     /BuildDate         /Month   uint8
/OCT   /SoftwareInfo     /BuildDate         /Day     uint8
scaling factor to convert "ascan pixel units" into fundus image pixel space.
fundus_pixel_space = PixelsPerAscanX * ascan_pixel_unit . (Set this to 1.0 or some non-
zero, if unknown.)
same as above, but for Y (positive Y goes up or down on the image… To be
Image modality or descrption: FA, Color, Red Free, etc. Ideally these names would be
standardized; strings are a bit too open ended

machine hardware information

last machine calibration date

machine software information, or software that generated this file

Shared By: