2014-01-11
Sonographic measurements - wikiRadiography
Abdomen Normal Measurements - wikiRadiography - A free website for Radiographers, Sonographers and students
http://www.wikiradiography.com/page/Abdomen+Normal+Measurements
Normal sonographic measurements for the abdomen
Adrenal
4-6mm
Thickness 2-4mm
Width 2-3mm
Aorta
The maximum AP outer wall diameter is the preferred measurement for assessment of
aortic size
Avoid transverse measurements if there is side to side tortuosity
Total length of aneurysm measurements are of no use clinically and should not be quoted as this can lead to confusion with the AP diameter
Aneurysm > 3.0cm
Appendix
Abnormal: Outer diameter ≥ 6mm, non compressible
Gall Bladder
Width abnormal if > 4 cm
Wall Thickness: abnormal > 3 mm
Bile Duct
Normal ≤ 6mm
Useful rule of thumb: bile duct caliber increases 1mm with each decade, i.e. 6mm at 60yrs, 7mm at 70 yrs etc.
Post cholecystectomy: 6-10mm indeterminate
Kidney Length
Normal Range: lower 9-10cm, upper 12-13 cm, variable depending on body size
Left usually longer than right, difference <1.5cm
Liver
Mid hepatic line> 15.5cm enlarged in 75%
Portal Vein < 1.3 cm, > 20% change in caliber with respiration
Splenic Vein /SMV > 20% change in caliber with respiration
Pancreas AP Diameter
Head 1.9 - 2.5 cm
Body1.5 – 2.1 cm
Tail 1.0- 2.0
Spleen
Normal Length < 13 cm
Rule of thumb for children: spleen length = 6 cm + 1/3 cm per year of age
Prostate
Upper limit of normal: 30 cc
Supericial Parts Normal Measurements
http://www.wikiradiography.com/page/Supericial+Parts+Normal+Measurements
Testes
Length normal < 5 cm
Width normal < 4 cm
Depth normal < 3 cm
Epididymis
Head diameter normal < 12mm
Bodydiameternormal < 4mm
Varicocele increase in diameter with vasalva to ≥ 3 mm
Thyroid
Lobe length normal < 6 cm
AP diameter of lobe normal < 2 cm
.END
2014-01-10
Cine Review and Saving Images learning notes
Ultrasound Cine Review and Saving Images NOVEMBER 11, 2013 BY BRIAN GILL
Here is what you’ll learn:
Cine Clip Review
Saving single images
Saving clips
...
Transcript to Cine Review & Saving
The Cine Review function allows us to go back through images. When I hit the Freeze key, I can use the trackball to scroll back through an image.
I can also use this to save the image, which we’ll get into later. When we pick an image that we like, we can always go back, scroll back and save it. If I scroll quickly, it will automatically play that.
When saving a Cine clip, you may only want to store a certain portion of it instead of a large file. To do so, you’ll hit the Freeze key.
If you have the clipboard to automatically show up when you hit the Freeze key, hit the space bar to make it disappear. Then you will use the trackball and use the Set key to select a certain portion of that image to save.
When I’ve got in that area, I can hit the Save button, hold it down, and it’s only going to save that portion of the Cine loop. So if you want to select a certain range of heartbeats, that’s what you would do.
When you want to review the clips down along the bottom, use the Angle button to select a clip. You’ll twist it and it will highlight the different areas.
If I want to review that clip, I’ll hit the Set button twice and it will pull it up, and that is that clip. Choose this one.
See, I have this whole Cine Review here, and I can use the scroll to go through that image. Unfreeze again, and I’m back to my live image.
.END
2014-01-09
Optimizing Ultrasound Image Quality - Brian Gill
Optimizing Ultrasound Image Quality, a Guide for Physicians, Part 1 MAY 5, 2013 BY BRIAN GILL
http://www.providianmedical.com/blog/improving-ultrasound-image-quality-a-guide-for-physicians-part-1/
...
Before you start, adjust the brightness and/or contrast on your monitor
Most manufacturers suggest you start with 90-100% contrast, then adjust the brightness. The greyscale bar (shown in image on right) shows the ultrasounds current greyscale from white to black. Start by setting the lighting in the room as it will be when you’re scanning. Next, turn the brightness to its highest point, then concentrate on the very bottom of the greyscale bar. It will be the darkest point. Slowly turn the brightness down until the darkest level is black and no longer visible. The top should be white, but not oversaturated. If you have a contrast adjustment (many portables do not), you can set this to your liking… however note that adjusting the contrast will have an impact on your brightness setting.
Setting the brightness is the only adjustment you’ll make that does not change with each new exam. All of the settings below are not saved on the ultrasound machine unless you go through specific steps to save a custom preset. In other words, feel free to play around, you can always start over by reselecting the preset.
...
Don’t fear the gain control
The gain knob will likely be your most-used imaging control. This adjusts the overall brightness of the ultrasound image. You’ll find yourself going to this control on nearly every scan.
TGC: Those ultrasound slider things
TGC Slidepots
With the exception of SonoSite, each machine has 5-10 slide controls grouped together. These are TGC or Time Gain Compensation controls. They adjust gain in specific areas of the image (near-, mid-, and far-field). The best way to see what they do: slide one of them all the way to the right, then all the way to the left while looking at a live image. You’ll see that a certain section of the image turns very bright, then very dark.
When you receive the ultrasound, these TGC controls appear as they do in the image on the left… in a straight line down the middle. Most techs adjust these to left-of-center for the nearfield (top), and slowly move to right-of-center as image quality decreases deeper in the image. The idea is to have lower gain in the nearfield, and higher gain deeper in the image where image quality is weaker.
...
Ultrasound Focus position, focal zones
These are two oft-overlooked image optimization features. The focal position tells the ultrasound the depth at which you’d like the highest resolution. As you move the focal position up and down, you’ll see a triangle or dot move up or down the left or right side of the image. You’ll see the image resolution improve in the area of the selected focal position.
Focal zones allow you to have multiple focus points. As you increase the number of focal zones, your frame rate will decrease and the image will refresh slowly.
...
Dynamic Range (Compression)
Dynamic Range (aka Compression) allows you to tell the ultrasound machine how you want the echo intensity displayed as shades of gray. A broad/wide range will display more shades of gray and an overall smoother image. A smaller/narrow range will display fewer shades of gray and appear as a higher contrast with a more black-and-white image.
To make things confusing, some manufacturers (Ahem… GE) call it Dynamic Range on a live image, then change it to Compression when the image is frozen. Yeah, that’s not confusing at all!
Frame Average/Persistence
Frame averaging, or persistence, are similar functions in which multiple image frames are combined, or “averaged” into a single image. Its apparent affect is similar to that of Speckle Reduction, in which the image appears smoother and noise is reduced in the image.
Reject
Reject or rejection filter tells the machine the minimum level of echo displayed. For example, if you have a lot of noise in the image, you can increase the Reject level to eliminate the weaker signals, thereby cleaning up the image and suppressing the weakest signals.
Enhance/Edge Enhance
With Edge Enhancement, the ultrasound attempts to make a sharper image by combining adjacent signals. This will have an effect of showing higher contrast and brighter edges of structures.
.END
Go (programming language) From Wikipedia
Go (programming language) From Wikipedia, the free encyclopedia
Not to be confused with Go! (programming language), an agent-based language released in 2003.
Go
Paradigm(s) compiled, concurrent, imperative, structured
Appeared in 2009
Designed by Robert Griesemer
Rob Pike
Ken Thompson
Developer Google Inc.
Stable release version 1.2[1] (1 December 2013; 33 days ago)
Typing discipline strong, static, inferred
Major implementations gc (8g, 6g, 5g), gccgo
Influenced by C, Limbo, Modula, Newsqueak, Oberon, Pascal,[2] Python
Implementation language C, Go
OS Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, MS Windows, Plan 9[3]
License BSD-style[4] + Patent grant[5]
Usual filename extensions .go
Website golang.org
Go, also called golang, is a programming language initially developed at Google[6] in 2007 by Robert Griesemer, Rob Pike, and Ken Thompson.[2] It is a statically-typed language with syntax loosely derived from that of C, adding automatic memory management, type safety, some dynamic-typing capabilities, additional built-in types such as variable-length arrays and key-value maps, and a large standard library. Beyond that broad category, Go is defined by:
A syntax and environment adopting patterns more common in dynamic languages:[7]
Concise variable declaration and initialization through type inference (x := 0 not int x = 0;)
Fast compilation times[8]
Remote package management (go get)[9] and online package documentation[10]
Distinctive approaches to particular problems
Built-in concurrency primitives: light-weight processes (goroutines), channels, and the select statement
An interface system in place of virtual inheritance
Compilers that, by default, produce statically linked native binaries without external dependencies
A desire to keep the language specification simple enough to hold in a programmer's head,[11][12] in part by omitting features common to similar languages:
No type inheritance
No method or operator overloading
No circular dependencies among packages
No pointer arithmetic
No assertions
No generic programming
The language was announced in November 2009 and is now used in some of Google's production systems.[13] Go's "gc" compiler targets the Linux, Mac OS X, FreeBSD, OpenBSD, Plan 9, and Microsoft Windows operating systems and the i386, amd64, and ARM processor architectures.[14] A second compiler, gccgo, is a GCC frontend.[15][16]
Language design[edit]
Go is recognizably in the tradition of C, but makes many changes aimed at conciseness, simplicity, and safety. There are enough differences that it's only possible to cover a small subset in an overview; for further reading, try Go's language specification, the official language tour, and the Effective Go document, as well as the community-written gobyexample.com.
Syntax[edit]
Go's syntax includes changes from C aimed at keeping code concise and readable. The programmer needn't specify the types of expressions, allowing just i := 3 or w := "some words" to replace C's int i = 3; or char* s = "some words";. Semicolons at the end of lines aren't required. Functions may return multiple, named values, and returning a result, err pair is the standard way to handle errors in Go. Go adds literal syntaxes for initializing struct parameters by name, and for initializing maps and slices. As an alternative to C's three-statement for loop, Go's range expressions allow concise iteration over arrays, slices, strings, and maps.
Types[edit]
Go adds some basic types not present in C for safety and convenience:
Slices (written []type) point into an array of objects in memory, storing a pointer to the start of the slice, a length, and a capacity specifying when new memory needs to be allocated to expand the array. Slice contents are passed by reference, and their contents are always mutable.
Go's immutable string type typically holds UTF-8 text (though it can hold arbitrary bytes as well).
map[keytype]valtype provides a hashtable.
Go also adds channel types, which support concurrency and are discussed in the Concurrency section, and interfaces, which replace virtual inheritance and are discussed in Interface system section.
Structurally, Go's type system has a few differences from C and most C derivatives. Unlike C typedefs, Go's named types are not aliases for each other, and rules limit when different types can be assigned to each other without explicit conversion.[17] Unlike in C, conversions between number types are explicit; to ensure that doesn't create verbose conversion-heavy code, numeric constants in Go represent abstract, untyped numbers.[18] Finally, in place of non-virtual inheritance, Go has a feature called type embedding in which one object can contain others and pick up their methods.
Package system[edit]
In Go's package system, each package has a path (e.g., "compress/bzip2" or "code.google.com/p/go.net/html") and a name (e.g., bzip2 or html). References to other packages' definitions must always be prefixed with the other package's name, and only the capitalized names from other modules are accessible: io.Reader is public but bzip2.reader is not.[19] The go get command can retrieve packages stored in a remote repository such as Github or Google Code, and package paths often look like partial URLs for compatibility.[20]
Omissions[edit]
Go deliberately omits certain features common in other languages, including generic programming, assertions, pointer arithmetic, and inheritance. After initially omitting exceptions, the language added the panic/recover mechanism, but it is only meant for rare circumstances.[21][22][23]
The Go authors express an openness to generic programming, explicitly argue against assertions and pointer arithmetic, while defending the choice to omit type inheritance as giving a more useful language, encouraging heavy use of interfaces instead.[2]
Conventions and language tools[edit]
Go has a standard style covering indentation, spacing, and many other details, usually applied to user code by the go fmt tool in the Go distribution. Go requires that programs not contain unused variables or imports, omit returns, or discard the results of evaluating certain built-in functions.[24] Banning unnecessary imports is particularly important because Go does not support circular dependencies.
Go also comes with godoc, a tool that generates text or HTML documentation from comments in source code, go vet, which analyzes code searching for common stylistic problems and mistakes. A profiler, gdb debugging support, and a race condition tester are also in the distribution.
As with many languages, there is an ecosystem of tools that add to the standard distribution, such as gocode, which enables code autocompletion in many text editors, goimports (by a Go team member), which automatically adds/removes package imports as needed, errcheck, which detects code that might unintentionally ignore errors, and more. Plugins exist to add language support in widely used text editors, and at least one IDE, LiteIDE, targets Go in particular.
Concurrency[edit]
Go provides facilities for writing concurrent programs that share state by communicating.[25][26][27] Concurrency refers not only to multithreading and CPU parallelism, which Go supports, but also to asynchrony: letting slow operations like a database or network read run while the program does other work, as is common in event-based servers.[28]
Goroutines, channels, and select[edit]
Go's concurrency-related syntax and types include:
The go statement, go func(), starts a function in a new light-weight process, or goroutine
Channel types, chan type, provide a type-safe, synchronized, optionally buffered channels between goroutines, and are useful mostly with two other facilities:
The send statement, ch <- x sends x over ch
The receive operator, <- ch receives a value from ch
Both operations block until the other goroutine is ready to communicate
The select statement uses a switch-like syntax to wait for communication on any of a set of channels[29]
From these tools one can build concurrent constructs like worker pools, pipelines (in which, say, a file is decompressed and parsed as it downloads), background calls with timeout, "fan-out" parallel calls to a set of services, and others.[30] Channels have also found uses further from the usual notion of interprocess communication, like serving as a concurrency-safe list of recycled buffers,[31] implementing coroutines (which helped inspire the name goroutine),[32] and implementing iterators.[33]
While communicating-processes model is the favored one in Go, it isn't the only one: memory can be shared across goroutines (see below), and the standard sync module provides locks and other primitives.[34]
Safety[edit]
There are no restrictions on how goroutines access shared data, making race conditions possible. Specifically, unless a program explicitly synchronizes via channels or mutexes, writes from one goroutine might be partly, entirely, or not at all visible to another, often with no guarantees about ordering of writes.[35] Furthermore, Go's internal data structures like interface values, slice headers, and string headers are not immune to race conditions, so type and memory safety can be violated in multithreaded programs that modify shared instances of those types without synchronization.[36][37]
Idiomatic Go minimizes sharing of data (and thus potential race conditions) by communicating over channels, and a race-condition tester is included in the standard distribution to help catch unsafe behavior. Still, it is important to realize that while Go provides building blocks that can be used to write correct, comprehensible concurrent code, arbitrary code isn't guaranteed to be safe.
Some concurrency-related structural conventions of Go (channels and alternative channel inputs) are derived from Tony Hoare's communicating sequential processes model. Unlike previous concurrent programming languages such as occam or Limbo (a language on which Go co-designer Rob Pike worked[38]), Go does not provide any built-in notion of safe or verifiable concurrency.[35]
Interface system[edit]
In place of virtual inheritance, Go uses interfaces. An interface declaration is nothing but a list of required methods: for example, implementing io.Reader requires a Read method that takes a []byte and returns a count of bytes read and any error.[39] Code calling Read needn't know whether it's reading from an HTTP connection, a file, an in-memory buffer, or any other source.
Go's standard library defines interfaces for a number of concepts: input sources and output sinks, sortable collections, objects printable as strings, cryptographic hashes, and so on.
Besides calling methods via interfaces, Go allows converting interface values to other types with a run-time type check. The language constructs to do so are the type assertion,[40] which checks against a single potential type, and the type switch,[41] which checks against multiple types.
Go types don't declare which interfaces they implement: having the required methods is implementing the interface. In formal language, Go's interface system provides structural rather than nominal typing.
interface{}, the empty interface, is an important corner case because it can refer to an item of any concrete type, including primitive types like string. Code using the empty interface can't simply call methods (or built-in operators) on the referred-to object, but it can store the interface{} value, try to convert it to a more useful type via a type assertion or type switch, or inspect it with Go's reflect package.[42] Because interface{} can refer to any value, it's a limited way to escape the restrictions of static typing, like void* in C but with additional run-time type checks.
The example below uses the io.Reader and io.Writer interfaces to test Go's implementation of SHA-256 on a standard test input, 1,000,000 repeats of the character "a". RepeatByte implements an io.Reader yielding an infinite stream of repeats of a byte, similar to Unix /dev/zero. The main() function uses RepeatByte to stream a million repeats of "a" into the hash function, then prints the result, which matches the expected value published online.[43] Even though both reader and writer interfaces are needed to make this work, the code needn't mention either; the compiler infers what types implement what interfaces:
package main
import (
"fmt"
"io"
"crypto/sha256"
)
type RepeatByte byte
func (r RepeatByte) Read(p []byte) (n int, err error) {
for i := range p {
p[i] = byte(r)
}
return len(p), nil
}
func main() {
testStream := RepeatByte('a')
hasher := sha256.New()
io.CopyN(hasher, testStream, 1000000)
fmt.Printf("%x", hasher.Sum(nil))
}
(Run or edit this example online in here.[44] )
Also type RepeatByte is defined as a byte, not a struct. Named types in Go needn't be structs, and any named type can have methods defined, satisfy interfaces, and act, for practical purposes, as objects; the standard library, for example, stores IP addresses in byte slices.[45]
Interface values are stored in memory as a pointer to data and a second pointer to run-time type information.[46] Like other pointers in Go, interface values are nil if uninitialized.[47] Unlike in environments like Java's virtual machine, there is no object header; the run-time type information is only attached to interface values. So, the system imposes no per-object memory overhead for objects not accessed via interface, similar to C structs or C# ValueTypes.
Go does not have interface inheritance, but one interface type can embed another; then the embedding interface requires all of the methods required by the embedded interface.[48]
Examples[edit]
Hello world[edit]
Here is a Hello world program in Go:
package main
import "fmt"
func main() {
fmt.Println("Hello, World")
}
(Run or edit this example online.)
Echo[edit]
This imitates the Unix echo command in Go:[49]
package main
import (
"flag"
"fmt"
"strings"
)
func main() {
var omitNewline bool
flag.BoolVar(&omitNewline, "n", false, "don't print final newline")
flag.Parse() // Scans the arg list and sets up flags.
str := strings.Join(flag.Args(), " ")
if omitNewline {
fmt.Print(str)
} else {
fmt.Println(str)
}
}
Projects and organizations using Go[edit]
Some notable applications in Go include:
Open-source applications
vitess, a sharding MySQL proxy used by YouTube
Docker, a set of tools for deploying Linux containers
Packer, a tool for packaging virtual machine images for multiple platforms
goread.io, an RSS reader
Flynn, a PaaS powered by Docker
Juju, a service orchestration tool by Canonical, packagers of Ubuntu Linux
nsq, a message queue by bit.ly
Doozer, a lock service by managed hosting provider Heroku
Sky, a database designed for behavioral data such as clickstreams
heka, a stream-processing tool by Mozilla
Open-source libraries
Web toolkits, including the Gorilla Web Toolkit, Revel, and goweb
Database, stream, and caching tools, including groupcache and kv and ql
Parsers for common formats, such as HTML, JSON, and Google Protocol Buffers
Protocol implementations, such as ssh, SPDY, and websocket
Database drivers, such as sqlite3, mysql, and redis
Bindings to C libraries, such as cgzip, qml, and GTK
Specialized tools like biogo for bioinformatics, meeus for astronomy, and gogeos for GIS
Like many modern environments', Go's standard library is extensive: for example, it touches on I/O, network clients and servers, decompression and compression, cryptography, sorting, math, text and string manipulation, parsing and writing common formats, runtime and OS access, and other things.
For an index of many more open-source libraries (and some applications) in Go, see godoc.org or the Go Wiki's project page.
Proprietary applications
dl.google.com, Google's server for large binary downloads like Chrome and Google Earth[50]
CloudFlare infrastructure, including their delta-coding proxy Railgun, their distributed DNS service, cryptography tools, logging, stream processing, and accessing SPDY sites.[51][52]
Other notable users and uses of Go include:[53][54]
The BBC, in some games and internal projects
Novartis, for an internal inventory system
SoundCloud, for "dozens of systems"[55]
Google, for other projects not listed above [56][57]
Cloud Foundry, a PaaS with various components implemented in Go
ngrok, a tool for remote access to Web development environments
Poptip, a social analytics company
Splice, a music collaboration service
Vimeo, several components of the video processing infrastructure
Some organizations use Go for individual projects where concurrency or dependency-free deployment are particular concerns, while writing other projects in different languages.
Reception[edit]
Go's initial release led to much discussion.
Michele Simionato wrote in an article for artima.com:[58]
Here I just wanted to point out the design choices about interfaces and inheritance. Such ideas are not new and it is a shame that no popular language has followed such particular route in the design space. I hope Go will become popular; if not, I hope such ideas will finally enter in a popular language, we are already 10 or 20 years too late :-(
Dave Astels at Engine Yard wrote:[59]
Go is extremely easy to dive into. There are a minimal number of fundamental language concepts and the syntax is clean and designed to be clear and unambiguous. Go is still experimental and still a little rough around the edges.
Ars Technica interviewed Rob Pike, one of the authors of Go, and asked why a new language was needed. He replied that:[60]
It wasn't enough to just add features to existing programming languages, because sometimes you can get more in the long run by taking things away. They wanted to start from scratch and rethink everything. ... [But they did not want] to deviate too much from what developers already knew because they wanted to avoid alienating Go's target audience.
Go was named Programming Language of the Year by the TIOBE Programming Community Index in its first year, 2009, for having a larger 12-month increase in popularity (in only 2 months, after its introduction in November) than any other language that year, and reached 13th place by January 2010,[61] surpassing established languages like Pascal. As of December 2013, it ranked 35th in the index.[62] Go is already in commercial use by several large organizations.[63]
Bruce Eckel stated:[64]
The complexity of C++ (even more complexity has been added in the new C++), and the resulting impact on productivity, is no longer justified. All the hoops that the C++ programmer had to jump through in order to use a C-compatible language make no sense anymore -- they're just a waste of time and effort. Now, Go makes much more sense for the class of problems that C++ was originally intended to solve.
Mascot[edit]
Go's mascot is a gopher designed by Renée French, who also designed Glenda, the Plan 9 Bunny. The logo and mascot are licensed under Creative Commons Attribution 3.0 license.[65]
Naming dispute[edit]
On the day of the general release of the language, Francis McCabe, developer of the Go! programming language (note the exclamation point), requested a name change of Google's language to prevent confusion with his language.[66] The issue was closed by a Google developer on 12 October 2010 with the custom status "Unfortunate" and with the following comment: "there are many computing products and services named Go. In the 11 months since our release, there has been minimal confusion of the two languages."[67]
See also[edit]
Comparison of programming languages
References
...
.END




