From: zulu Date: Thu, 19 Sep 2013 14:52:05 +0000 (+0200) Subject: 19 sept X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/these_gilles.git/commitdiff_plain/5997a2db46b2dcd03451c2229f90a509b8db3759 19 sept --- diff --git a/DOCS/1007.4531.pdf b/DOCS/1007.4531.pdf new file mode 100644 index 0000000..afe81ba Binary files /dev/null and b/DOCS/1007.4531.pdf differ diff --git a/DOCS/AA-HPG09.pdf b/DOCS/AA-HPG09.pdf new file mode 100644 index 0000000..906cef6 Binary files /dev/null and b/DOCS/AA-HPG09.pdf differ diff --git a/DOCS/CherkasskyGoldberg-1995-MaxFlow.pdf b/DOCS/CherkasskyGoldberg-1995-MaxFlow.pdf new file mode 100644 index 0000000..0053b10 Binary files /dev/null and b/DOCS/CherkasskyGoldberg-1995-MaxFlow.pdf differ diff --git a/DOCS/Ford-Fulkerson-hitchcock-problem-1957.pdf b/DOCS/Ford-Fulkerson-hitchcock-problem-1957.pdf new file mode 100644 index 0000000..32d9de7 Binary files /dev/null and b/DOCS/Ford-Fulkerson-hitchcock-problem-1957.pdf differ diff --git a/DOCS/Letocart_LAGOS2011.pdf b/DOCS/Letocart_LAGOS2011.pdf new file mode 100644 index 0000000..8754305 Binary files /dev/null and b/DOCS/Letocart_LAGOS2011.pdf differ diff --git a/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets.html b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets.html new file mode 100644 index 0000000..1c71c49 --- /dev/null +++ b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets.html @@ -0,0 +1,383 @@ + + + + + + + + + + + + + + + + + Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets + + + + + + + + + + +
+
+
+ +
+ +
+ +
+
+
+ +
+ +
+ + +
+ +
+ + + + + +
+
+ +
+
+ + + +
Logo of nihpaAbout Author manuscriptsSubmit a manuscriptNIH Public Access; Author Manuscript; Accepted for publication in peer reviewed journal;
+ +
  • + Performing your original search, + Scalable and interactive segmentation and visualization of neural processes in EM datasets., + in PMC will retrieve + 17 records. +
+ + +
+ + + +
IEEE Trans Vis Comput Graph. Author manuscript; available in PMC 2011 September 25.
Published in final edited form as:
PMCID: PMC3179915
NIHMSID: NIHMS216874

Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets

Won-Ki Jeong, Johanna Beyer, IEEE, Student Member, Markus Hadwiger, IEEE, Member, Amelio Vazquez, IEEE, Student Member, Hanspeter Pfister, IEEE, Senior Member, and Ross T. Whitaker, IEEE, Member

Abstract

Recent advances in scanning technology provide high resolution EM (Electron Microscopy) datasets that allow neuroscientists to reconstruct complex neural connections in a nervous system. However, due to the enormous size and complexity of the resulting data, segmentation and visualization of neural processes in EM data is usually a difficult and very time-consuming task. In this paper, we present NeuroTrace, a novel EM volume segmentation and visualization system that consists of two parts: a semi-automatic multiphase level set segmentation with 3D tracking for reconstruction of neural processes, and a specialized volume rendering approach for visualization of EM volumes. It employs view-dependent on-demand filtering and evaluation of a local histogram edge metric, as well as on-the-fly interpolation and ray-casting of implicit surfaces for segmented neural structures. Both methods are implemented on the GPU for interactive performance. NeuroTrace is designed to be scalable to large datasets and data-parallel hardware architectures. A comparison of NeuroTrace with a commonly used manual EM segmentation tool shows that our interactive workflow is faster and easier to use for the reconstruction of complex neural processes.

Index Terms: Segmentation, neuroscience, connectome, volume rendering, implicit surface rendering, graphics hardware

1 Introduction

The reconstruction of neural connections to understand the function of the brain is an emerging and active research area in bioscience that is often called Connectomics []. With the advent of high-resolution scanning technologies such as 3D light-microscopy and electron microscopy (EM), reconstruction of complex 3D neural circuits from large volumes of neural tissues has become feasible. Among them, however, only EM data can provide sufficient resolution to identify synapses and to resolve extremely narrow neural processes such as dendritic spines of roughly 50 nm in diameter. Current EM technologies are able to attain resolutions of 3–5 nanometers per pixel in the x–y plane. Due to its extremely high resolution, an EM scan of a single section from a small tissue sample can easily be as large as tens of gigabytes, and the total scan of a tissue sample as large as several terabytes of raw data.

These high-resolution, large-scale datasets are crucial for reconstruction of detailed neural connections, but pose very challenging problems for 3D segmentation and visualization. First, the current common practice for segmentation of objects of interest in EM datasets is a mostly manual process, which is very labor-intensive and time-consuming. Even though there have been research efforts to develop automated EM segmentation algorithms, they are not robust enough to deal with common artifacts of real datasets, such as noise and misalignment. Second, the complex structure of nerve cells makes direct volume rendering of EM datasets very difficult. Transfer functions based solely on image intensity and gradient result in cluttered renderings, which degrades visualization quality. Finally, it is important that the segmentation and visualization algorithms are scalable, to cope with the ever-increasing data sizes, while maintaining interactive performance, so that the user can perform manual modifications at any time if necessary.

In this paper we present NeuroTrace, a system for segmentation of neural processes in high-resolution EM data that integrates semi-automatic segmentation and centerline tracking with advanced volume visualization. The resulting workflow improves the current state-of-the-art approach of neurobiologists significantly. Our first contribution is a novel interactive 3D segmentation approach that is based on a sequence of 2D segmentations of cell membranes using active ribbons []. By integrating an image correspondence energy into the level set formulation we achieve robust transition between consecutive slices. Using these 2D segmentations and a tracking method with weighted path extrapolation we can robustly trace a 3D centerline of a neural pathway along non-axis aligned slices. The second contribution is a volume rendering method with on-demand filtering for de-noising and detection of structure boundaries. A local histogram-based edge metric provides better visual cues to easily find regions of interest in complex EM datasets compared to traditional transfer functions. A third contribution is the efficient implementation of these algorithms on the GPU. We use a dynamic out-of-core caching system to ensure scalability to arbitrary input data sizes. A fourth contribution is a combined high-quality visualization of the volume and the segmented neural processes, combining direct volume rendering and implicit surface ray-casting in a single rendering pass. Our final contribution is an integrated workflow that provides a unified user-interface to easily explore large EM volumes and extract neural processes at interactive rates (Figure 1). The results of our user study show that NeuroTrace is more efficient and accurate than the leading segmentation tool.

Fig. 1
NeuroTrace allows neuroscientists to interactively explore and segment neural processes in high-resolution EM data.

2 Previous Work

Automated EM Segmentation

Large scale EM reconstruction with automated methods has only very recently gained much attention. Jurrus et al. [] proposed an automated method to trace axons in serial block-face scanning EM datasets. Their method uses iterative Kalman filtering together with an active contour model and a vector field produced by an optical flow method to estimate the axon location on each slice. Macke et al. [] proposed a probabilistic framework to guide level set propagation on each slice, where the probabilistic framework models the similarity between slices. Mishchenko [] proposed a 3D neural reconstruction method consisting of a Hessian-based 2D ridge detector to extract axon boundaries and a weighted graph clustering method to generate a connectivity map across slices. All these methods assume that the neural processes follow a specific direction, usually orthogonal to the scanning plane. However, this assumption fails for many axons. The non-axis aligned arbitrary 3D tracking method proposed in this paper provides much more flexibility to handle axons at various orientations. Bartesaghi et al. [] use 3D minimal surface to segment cell boundaries in high resolution electron tomograms. However, their method cannot be directly applied to segment elongated structures as in our case because the method assumes the target structure is spherical topology.

Vessel Extraction and Virtual Endoscopy

Segmentation and tracking of thin structures is an ongoing area of medical research. Kirbas et al. [] give an extensive review of automated vessel extraction methods. In virtual endoscopy, the focus is on 3D path planning inside elongated structures (e.g., [, , ]). However, these approaches either require already segmented data or are not directly applicable to high-resolution EM volumes because of the more complicated structures involved.

Volume Rendering of EM Data

Volume rendering of microscopic structures is a very recent area of research. Mayerich et al. [] segment and visualize microvascular structures and their relationships, but the resolution is two orders of magnitude lower than EM data. We employ GPU-based ray-casting of volumes and implicit surfaces [] using a bricking scheme for large data [] implemented in CUDA. Enhancing edges or structure boundaries has always been important in volume rendering, and is typically achieved using higher-order transfer functions []. Caban et al. [] have recently introduced texture-based tranfer functions based on first-, second-, and high-order local (histogram) statistics. However, these methods are not effective in dealing with noise in EM images. Our rendering framework employs a general filtering and de-noising step with a neighborhood size that can be changed interactively. Martin et al. [] define a set of brightness, color, and texture cues for constructing a local boundary model. To enhance edges during ray-casting we extended their 2D boundary detection framework using local histogram comparisons.

Iso-Surface Rendering

Rendering elongated structures with elliptical cross-sections has been of interest in diffusion tensor imaging (DTI). Interpolation between successive ellipses has been used together with ray-casting [], as well as with a geometry setup stage []. Instead of targeting many relatively thin fibres, we use interpolating quaternion frames between successive ellipses. Our method requires few evaluations of trigonometric functions, which enables high rendering performance and simple implementation.

3 Workflow

We assume that registration of the EM data is performed in a pre-processing step. The individual image tiles acquired by the cameras in the EM are warped and stitched together to obtain slice images of very high resolution. These slices are then registered in 3D so that they are aligned and structures can be followed from slice to slice.

3.1 Current Practice

There are a number of manual tools for the segmentations of EM datasets []. The software package most commonly used by neuroscientists is Reconstruct []. The main window of this tool displays a 2D axis-aligned view of the current slice. To identify the structures of interest, users can move from one slice to the next and inspect each in turn using basic viewing functions such as zoom, pan, scale, and rotation. The segmentation is manual, using polygon, curve, and free-form drawing tools. The final segmented neural processes can be rendered as 3D polygon meshes. To generate higher-quality images, the scientists often use additional volume visualization packages, such as Amira (http://www.amiravis.com).

This workflow is straightforward but also very labor-intensive and time-consuming. It lacks integrated volume visualization of the input data and high-quality visualization of the resulting segmentation. Reconstruct only allows axis-aligned tracking, so neural processes parallel to the image are difficult to segment. In addition, the data has to fit into main memory, which limits the scalability of the system.

3.2 Proposed Workflow

Figure 2 illustrates our integrated, interactive workflow for visualizing and segmenting neural processes. The first step in our workflow is to inspect the input volume using volume rendering before any segmentation is performed in order to obtain an overview and to determine a region of interest (ROI) (Figure 1 middle). In order to better delineate the structures of interest we modified the volume rendering such that the boundaries of neural processes are depicted more clearly (Section 5).

Fig. 2
Pipeline diagram of our integrated, interactive workflow for visualizing and segmenting neural processes.

Using the 3D volume view, the user can specify the center of the current ROI on an arbitrarily oriented 2D clipping plane. The corresponding oblique slice is then shown in an additional 2D view (Figure 1 top right). The next step is to quickly paint a rough approximation of a boundary of interest, e.g., of an axon, in this 2D view. This input is used to initialize an active ribbon that automatically performs tracking of the cell boundary from slice to slice (Section 4). The individual cell boundaries are shown in the 2D view and can be inspected and modified interactively at any time.

While the segmentation and tracking is in progress, the segmentation obtained thus far is concurrently shown in the 3D volume view (Figure 1 middle). The long, elongated structures that are of highest importance in our application can be represented well by elliptical cross-sections. Therefore, in order to use as little memory as possible, an ellipse is fitted to the active ribbon in each slice. These ellipses are interpolated on-the-fly during volume ray-casting in order to obtain smooth, connected implicit surfaces in 3D (Section 5.2). This process is repeated for every neural process of interest, iteratively adding additional structures, which are all depicted concurrently in 3D.

The main advantage of our workflow is that it tightly integrates semi-automatic segmentation and visualization, which allows the user to inspect and modify the ongoing tracking and segmentation process at any time, while minimizing the amount of user interaction that is necessary.

4 Segmentation

We compute 3D segmentations using a combination of 2D neural membrane segmentations and 3D centerline tracking. For 2D segmentation we use a modified multiphase level set active ribbon model originally proposed by Vazquez et al. [] (Figure 3). Because level set segmentation is very sensitive to initialization, we propose a novel active ribbon formulation by adding an additional constraint based on image correspondence between current and previous slices. Once 2D segmentation is done, we extrapolate the next point along the centerline of the possibly non-axis aligned neural process.

Fig. 3
Neural process segmentation. Left top: Active ribbon model for 2D neural membrane segmentation. Left bottom: User initialization and solution with inside/outside level sets. Right: 3D centerline tracking.

4.1 2D Neural Membrane Segmentation

The active ribbon model is based on two deformable moving interfaces (ϕ1 and ϕ2 in Figure 3 left) interacting with each other to maintain ribbon topology. The level set equation for each ϕi of the active ribbon model is defined as follows: +

dϕidt+(αFD+βFR+γFK)|∇ϕi|=0,
(1)

+where +

FD=(c2−c1)(I−(c1+c2)2)

+is the data dependent speed to move toward the membrane boundary, c1 and c2 are the average pixel intensity of inner cell region and cell membrane, respectively, and I is the pixel intensity of the input image. +

FR=σi(ϕj)∇ϕj⋅∇ϕi‖ϕi‖

+is the ribbon consistency speed to keep constant distance between two level set interfaces ϕi and ϕj. σi (ϕj) returns a positive value if two level sets are too close and a negative value otherwise (more details can be found in []). FK is the mean curvature speed to maintain the smoothness of the interfaces. Because two interfaces push or pull each other until they converge to the target, the active ribbon model is very robust in noisy and feature-rich EM images. In addition, the model includes a force field that allows neighboring ribbons to interact with each other.

However, Vazques et al. [] assume that neural processes are orthogonal to the image plane and that there is no large displacement between consecutive slices, which is typically not the case. In addition, the cross sectional shape of the neural process may deform significantly between slices, making initialization of the active ribbon challenging. Therefore, we propose a new active ribbon formulation by adding a force field that maps one image to another using image correspondence. This allows us to robustly initialize the location of the neural membranes on subsequent slices.

Let Ii and Ii+1 be two consecutive slices, where each slice is defined on a 2D domain Ω. We can define the energy between two images for a given vector field v, which describes how different two images are, as follows: +

EI=12∫x∈Ω(I˜i−Ii+1)2+α‖∇v‖2,
(2)

+where Ĩi is the image Ii deformed by the vector field v, and α is a regularization parameter. Finding the vector field v that minimizes Equation 2 is a nonrigid image registration problem [, ]. In order to find v, we use a gradient flow method along the negative gradient direction of EI with respect to v. To avoid local minima and to handle large deformations more efficiently, we use a multilevel approach and compute the solution on different scales, from coarse to fine.

Once we have the vector field v, we can define the energy Eϕ that measures the difference between two distance fields ϕi and ϕi+1 for the images Ii and Ii+1 as follows: +

Eϕ=∫x∈Ω|ϕi+1−ϕ˜i|2,
(3)

+where [phi with tilde]i is ϕi deformed by v. Note that ϕi and ϕi+1 in this discussion are not the inner and outer level set for the active ribbon (Figure 3 left) but a single level set on two different images. Thus we can define the level set function for ϕi+1 that minimizes Eϕ as follows: +

dϕi+1dt+ξFC|∇ϕi+1|=0,
(4)

+where FC is the image correspondence speed and γ is a level set parameter. The image correspondence speed FC can be defined using the gradient of Eϕ with respect to ϕ as follows: +

FC=sign(ϕi+1−ϕ˜i)|ϕi+1−ϕ˜i||∇ϕi+1|.
(5)

The image correspondence speed FC can be integrated into the level set equation 1 like other speed functions. In our implementation, we gradually decrease ξ as the level set iteration proceeds so that the entire active ribbon can move towards the correct location of the target membrane at the beginning, and then becomes more stable at the end such that the ribbon boundaries can close in on the membrane boundaries. Figure 4 shows the robust transition of the active ribbon between slices with the image correspondence force.

Fig. 4
Active ribbon with image correspondence force. Left: Input image. Middle left: Segmentation using active ribbon on the current slice. Middle right: Incorrect initial position of active ribbon on the next slice (projection along z-axis). Right: Correct ...

4.2 3D Centerline Tracking

To deal with non-axis aligned neural processes, we implemented a tracking algorithm that follows the centerline of the process. Even though tracking a centerline through membrane centers may seem straightforward, it is not simple in our case because we do not know membrane locations in advance. In other words, even though the current slice position and segmentation are given, we do not know the position and segmentation of the next slice.

To tackle this problem, we propose a two-step method that consists of estimation and correction steps. In the estimation step, the tangent direction Vt at the last center point is computed using a one-sided finite difference method. We also keep the previous tracking direction Vp. The new tracking direction is then the weighted average between those two vectors: V = ωVp + (1 − ω)Vt (Figure 3 right). The weight ω controls the amount of history used to determine the current tracking direction. We typically use a value of ω = 0.9 for smooth transition between slices.

Once we compute a new tracking direction, a temporary new center position Ci+1 of the next slice can be estimated by simple extrapolation as Ci+1 = Ci + δV, where δ is the pixel width (i.e., grid spacing) in order to move no more than one pixel distance per estimation step. The local frame of the previous slice is then projected onto the new plane defined by the center Ci+1 and the normal V. A new 2D slice is resampled from the volume data using the new local frame and used for segmentation. Finally, in the correction step, Ci+1 is replaced by the correct center of the segmented neural membrane, Ci+1. Figure 5 shows an example of 3D centerline tracking and segmentation using NeuroTrace.

Fig. 5
3D segmentation in progress. Green: 2D level set segmentation of neural membranes. Red: 3D centerline tracking.

4.3 GPU Implementation

Our GPU level set solver updates the level set only in active regions using a block-based narrow band proposed by Lefohn et al. []. A slight difference is that we collect all the blocks within a user-defined narrow band size, where the minimum distance to the zero level set of each block is computed in the redistance step without explicitly checking the activation of neighboring blocks. The main level set update process consists of four steps: (1) Form the active list by collecting the active blocks. (2) Iteratively update the level set on each active block in the active list up to the pre-computed number of iterations (based on the narrowband width). (3) Recompute the distance from the zero level set. (4) Stop if the level set converges to a steady state or the maximum number of iterations is reached. Otherwise go to (1).

The active list is a one dimensional array of unsigned integers. The first element in this list is the total number of active blocks, and the rest of the array contains the active block indices. To manage the active list efficiently, we store it entirely on the GPU. The only interaction between the CPU and the GPU is copying the first element of the active list from the GPU to the CPU. Then the host code launches a CUDA kernel with the grid size equal to the total number of active blocks. The size of a CUDA block is the same as an active block for our level set. In the CUDA kernel, the global memory address is computed by off-setting from the base address using the active block index. Managing the active list, i.e., adding new active blocks and removing non-active blocks, can be achieved using the atomic hardware operators of recent NVIDIA GPUs without using additional stream compaction processes. We can compute the minimum distance to the zero level set for each block using parallel reduction. If the minimum distance is smaller than the user-defined narrow band width, the total number of active blocks is increased by one using AtomicAdd (). Then the current block index is stored at the end of the current list using the index returned by the atomic operator.

Once the active list is formed, then each block in the list can be up-dated multiple times depending on the width of the narrow band. For example, if the grid spacing is 1 and the width of the narrow band is 10, then we can safely update the active blocks in the current active list 10 times without refreshing the active list (i.e., explicitly checking the (de-)activation of the blocks). This is because the CourantFriedrichsLewy (CFL) condition [] guarantees that the maximum deformation incurred by a single update of the level set cannot be greater than the grid spacing. The level set update is done using a Jacobi update method, and communication between block boundaries can be handled implicitly by calling the new CUDA kernel for each level set update because the new solutions are written back to global memory after each update.

In extending the single level set method to multiphase level sets we need to evaluate the correct distance between two level sets to keep the topology of the active ribbon consistent. However, the active ribbon does not guarantee the correct distance after deformation due to the combination of various force fields. Therefore, we recompute the distance field for each level set when the list of active blocks is up-dated. Note that we need to redistance not only on the active lists but the complete level sets because the level sets may not share the same active list unless they are very close to each other. To quickly compute the distance fields we employ the GPU-based Eikonal solver by Jeong etal. [].

We implemented the nonrigid image registration method using semi-implicit discretization as a two-step iterative process, updating and smoothing the vector field v as follows: +

v←v+dt(Ii+1−I˜i)∇I˜i
(6)

+ +

v←G*v,
(7)

+where G is a Gaussian smoothing kernel. Equation 6 is a simple Euler integration that can be efficiently mapped to the GPU. To interpolate the pixel values Ĩi and [nabla]Ĩi on locations defined by v we use texture hardware interpolation on the GPU. Texture memory is cached, so it is efficient for locally coherent random memory accesses. To speed up the 2D Gaussian smoothing in image space, we implemented a sequence of 1D convolutions using shared memory and apply them along x and y, respectively.

5 Volume Visualization

Volume rendering of high-resolution EM data poses several challenges. EM data is extremely dense and heavily textured, exhibits a complex structure of interconnected nerve cells, and has a low signal-to-noise ratio. Therefore, standard volume rendering results in cluttered images that make it hard to identify regions of interest (ROIs) or to observe an ongoing segmentation.

Our visualization approach supports the inspection of data prior to segmentation, for identifying ROIs, as well as the visualization of the ongoing and final segmentation (see Figure 2). To improve the visualization of the raw data prior to segmentation, we have implemented on-the-fly nonlinear noise removal and edge enhancement to support the user in finding and selecting ROIs. Using a local histogram-based edge metric, which is only calculated on demand for currently visible parts of the volume and cached for later reuse, we can enhance important structures (e.g., myelinated axons) while fading out less important regions. During ray-casting we use the computed edge values to modulate the current sample’s opacity with different user-selectable opacity weighting modes (e.g., min, max, alpha blending).

5.1 On-demand Filtering

The main motivations for on-demand filtering (i.e., noise removal and edge detection) are the flexibility offered by being able to change filters and filter parameters on the fly while avoiding additional disk storage and bandwidth bottlenecks for terabyte-sized volume data. We perform filtering only on blocks of the volume that are visible from the current viewpoint, and store the computed data directly on the GPU for later reuse. We have implemented a caching scheme for these pre-computed blocks on the GPU to avoid costly transfers to and from GPU memory while at the same time avoiding repetitive recalculation of filtered blocks. During visualization we display either the original volume, the noise-reduced data, the computed edge values, or a combination of the above.

Our on-demand filtering algorithm consists of several steps: (1) Detect for each block in the volume if it is visible from the current viewpoint. (2) Build the list of blocks that need to be computed. (3) Perform noise removal filtering on selected blocks and store them in the cache. (4) Calculate the histogram-based edge metric on selected blocks and store those blocks in the cache. (5) High-resolution ray-casting combining edge values and original data values. The detection of visible blocks (Step 1) is done either in a separate low-resolution ray-casting pass or included in Step 5.

5.1.1 Noise Removal

Since EM data generally exhibits a low signal-to-noise ratio we have integrated an on-demand noise removal filter step into our pipeline prior to calculating the local histogram-based edge metric. We perform the filtering only on those blocks that were marked as visible and are not present in the cache yet. We have implemented 2D and 3D Gaussian, mean, non-linear median, bilateral [], and anisotropic diffusion filters [] with user adjustable neighborhood sizes. Especially non-linear filters have shown good noise removal properties without degrading edges in the EM data []. Our main objective, however, was to develop a general framework for noise removal, where additional filters could be added easily. The results for each processed block is stored in the cache and used as input for the edge detection algorithm.

5.1.2 Local Histogram-based Edge Detection

We use a local histogram-based edge metric to modulate the opacity of the EM data during raycasting. Boundaries in the volume get enhanced while more homogenous regions are supressed. This helps the user in navigating through the unsegmented dataset and in finding regions where a segmentation should be started. The edge metric is computed only for visible blocks that are not stored in the cache yet.

Our edge detection algorithm is based on the work of Martin et al. [] who introduced edge and boundary detection in 2D image based on local histograms. They did a thorough evaluation of different brightness, color, and texture cues for constructing a local boundary model, which was subsequently used to detect contours [] in natural images.

In our local histogram-based edge detection approach we take a block neighborhood around each voxel to calculate the brightness gradient for different directions. We separate the voxel’s neighborhood along the given direction into two halves and calculate the histogram in each half-space. Finally, the histogram difference is calculated using the χ2 distance metric. A high difference between histograms indicates an abrupt change in brightness in the volume, i.e., an edge. The maximum difference value over all directions is saved as the edge value in the cache block. As the neighborhood size for the histogram calculation can be adjusted to match the resolution level of the current input data, this approach scales to large data and to volume subdivision schemes like octrees. Again, we have kept the implementation of our edge detection framework as modular as possible to support adding different edge detection algorithms in the future. During volume rendering, we fetch at each sample location the corresponding edge value and use it to modulate the sample’s opacity and/or color. Optionally, the user can first use a windowing function on the calculated edge values to further enhance the visualization.

5.1.3 Dynamic Caching

To improve the performance of our edge-based visualization scheme we have implemented a dynamic caching scheme for storing on-the-fly computed blocks. Two caches are allocated directly on the GPU, one to store de-noised volume blocks and the second to store blocks containing the calculated edge values. First, the visibility of all blocks is updated for the current viewpoint in a first ray-casting pass and saved in a 3D array corresponding to the number of blocks in the volume. Next, all blocks are flagged as either: (1) visible, present in cache; (2) visible, not present in cache; (3) not visible, present in cache; or (4) not visible, not present in cache. Visible blocks that are already in the cache (flagged with (1)) do not need to be recomputed. Only blocks flagged with (2) need to the processed. Therefore, indices of blocks flagged with (2) are stored for later calculation (see Section 5.1.4). During filtering/edge detection the computed blocks are stored in the corresponding cache. A small lookup table is maintained for mapping between block storage space in the cache to actual volume blocks as described in []. Unused blocks are kept in the cache for later reuse (flagged with (3)). However, if cache memory gets low, unused blocks are flushed from the cache and replaced by currently visible blocks.

5.1.4 GPU Implementation

After detecting which blocks need processing, a CUDA kernel is launched with grid size corresponding to the number of blocks that need to be processed. For simplicity we explain the implementation of our filtering and edge detection algorithm in 2D. The extension to 3D is straightforward.

To calculate filter/edge values in each block, we start a CUDA kernel with a CUDA block size that corresponds to the user specified neighborhood size, but with one dimension less than the actual neighborhood (e.g., for a 3D neighborhood a 2D CUDA block is started, for a 2D neighborhood a ID CUDA block is started). Figure 6 depicts the case where the edge detection of a block uses a 5×5 neighborhood. In this case the kernel is started with 5 concurrent threads. Next, the threads iterate over the entire block that needs to be filtered and calculate the filter/edge values for each voxel. Each thread is responsible for only one part of the filter’s neighborhood, as depicted by the colored areas in Figure 6. To reduce redundant texture fetches each thread locally caches its last computed values. The size of this thread-local array corresponds to the neighborhood size of the filter. Therefore, at each step a thread only needs to perform one texture fetch, and store the value in its local cache (Figure 6, middle).

Fig. 6
Local histogram-based edge detection in volume blocks using CUDA. Left: Neigbhorhood required for local histograms. Center: Fetching only one new sample per thread at each step to update the neighborhood. Right: Shared histograms for calculation of the ...

To calculate the local-histogram based edge metric, all samples in a voxel’s neighborhood need to be assigned to one of the two local histograms (for both half-spaces), as depicted in Figure 6, right. The histograms are stored in shared CUDA memory and used for the final calculation of the χ2 histogram difference. The main steps for each thread are: (1) Update the histogram of the first half-space (histogramleft) by removing the sample that has left the filter neighborhood and adding the last sample from histogramright. (2) Remove the sample that has left the filter neighborhood from the thread-local cache. (3) Fetch the sample that has entered the filter neighborhood from the volume texture and store it in the thread-local cache. (4) Update the histogram of the second half-space (histogramright) by removing the sample that is now in histogramleft and adding the sample that has just been fetched from the volume texture. All threads are synchronized after they have performed the above steps using atomic CUDA operations for updating the shared histograms. Now the χ2 histogram difference for the current neighborhood can be computed and stored in the cache.

To implement the de-noising filters we use the same basic strategy. For Gaussian filters we transfer a 1D look-up table of the weights to the GPU to speed up the calculation. For bilateral filtering we use the same look-up table to calculate the geometric closeness function, whereas the photometric similarity function is calculated on-the-fly in the CUDA kernel. For median filtering we implemented bitonic sort on the GPU to find the median value of the filter neighborhood. Anisotropic diffusion filtering is the most complex filter in our framework. It requires a second filter cache to allow ping-pong swaps between source and destination. Also, costly neighborhood lookups in the source cache are needed to compute the boundary values of the destination blocks.

If the noise removal step is performed prior to the edge detection, the local histogram calculation uses the values from the filtered block cache as input values instead of the original volume texture. Therefore, special care has to be taken when fetching de-noised values for a neighborhood at an edge-block’s boundary. This case can be handled by either extending the dimensions of the de-noised blocks compared to the edge-detected blocks, or by detecting which additional blocks would have to be de-noised and performing a neighborhood lookup for areas outside an edge block’ boundary.

5.2 Visualization of Segmented Neural Structures

In order to visualize and inspect the segmented neural processes in 3D, we depict the original volume data together with semi-transparent iso-surfaces that delineate structures such as axons or dendrites. The output image is generated in a single ray-casting pass for both the iso-surfaces and the part of the volume that is shown using direct volume rendering. While stepping from sample to sample along a given viewing ray, the direct volume rendering integral is solved via front-to-back compositing. At the same time, each sample is tested for potential intersections with iso-surfaces. If a surface is intersected, its color and transparency are composited with the accumulated volume-rendered part, and direct volume rendering is continued behind the surface intersection.

Our active ribbon segmentation described in Section 4 outputs a set of implicit surfaces for each 2D slice. However, in order to make the system scalable for large EM data, we do not store these 2D distance fields. Instead, we convert the segmentation to a very compact format by fitting an ellipse to each active ribbon. An entire structure such as an axon is then represented as a simple list of elliptical cross-sections, which reduces the memory footprint significantly.

5.2.1 Implicit Surfaces from Elliptical Cross-Sections

To render smooth, connected surfaces from elliptical cross-sections we compute implicit surfaces from the set of ellipses on-the-fly. Although everything is computed in a single ray-casting pass, in order to simplify the problem we treat it as two conceptually separate parts. The first part is ray-casting of an implicit surface in a distance field ϕ(x), where the surface is defined by the points where ϕ(x) = 0. The second part is the computation of ϕ(x) for any point x in volume space. Here, a point x is either a sample p on a viewing ray, or the location of a central differences computation during shading.

The ray-caster renders and shades implicit surfaces by evaluating ϕ(p) along viewing rays. Intersection with an implicit surface is detected between two successive points on a ray when ϕ(pi) < 0 and ϕ(pi+1) > 0, i.e., the first sample is in front and the second one behind the surface. We carry out a predetermined number of bisection steps in order to find a sufficiently accurate intersection position []. At that location, we compute the shading using the normalized gradient obtained from central differences in the distance field, evaluating ϕ(x) at six additional locations. In order to simplify accommodating multiple axons that are represented as implicit surfaces each, we map every point x in volume space for surface intersection and shading purposes to only one distance ϕ(x), which is the distance to the closest axon. Conceptually, each axon is represented by a 3D distance field ϕi, and the ϕ(x) used in the ray-casting loop is ϕ(x) = mini (ϕi(x)).

In order to obtain implicit surfaces in 3D from a collection of 2D elliptical cross-sections, we have to be able to evaluate ϕ(x) throughout the volume. We want this interpolation to be fast and easy to implement, and still result in smooth shaded surfaces. Each cross-section is represented by a single ellipse elli = (ci,qi, lxi,lyi), where ci is the center in 3D, and the 3D coordinate frame is represented by the unit quaternion qi and the lengths of the ellipse’s semi-axes, lxi and lyi, respectively. This results in a very compact representation with just nine floating point values per ellipse. During rendering, we convert between quaternions and explicit coordinate frames when needed, denoting the normal vector of the ellipse’s plane as ni. Additionally, an integer axon ID is stored with each ellipse, which allows rendering axons with individual color and transparency.

The main idea for evaluating ϕ(p) at a given point p is to directly compute a single interpolated ellipse whose plane exactly or almost contains p, and then to perform a straight-forward 2D point-to-ellipse distance computation in this plane. That is, we first compute an interpolated ellipse ell(p) = (cp,qp, lxi,lyi), whose plane (cp,np) approximately contains p, then obtain a point p′ by projecting p into this plane, and finally compute the distance of p′ to ell(p) in 2D. The distance for p is thus approximated as ϕ(p) ≈ ϕ(ell(p),p′). The ellipse ell(p) is interpolated between the nearest pair of ellipses (elli,elli+1) that encloses p. This pair is the one where p is in the front halfspace of elli, i.e., p · ni > ci · ni, and the back halfspace of elli+1, i.e., p · ni+1 < ci+1 · ni+1. For interpolation, a parameter α [set membership] [0, 1] is required for a given p, which we compute as follows: +

α=k0k0+k1 with k0=p⋅nin¯¯⋅ni,k1=−p⋅ni+1n¯¯⋅ni+1,n¯¯=ni+ni+1‖ni+ni+1‖.
(8)

+This is illustrated in Figure 7 (left).

Fig. 7
Left: On-the-fly interpolation between two elliptical cross-sections (elli,elli+1), see Equation 8. Middle: Although this is an approximation for non-parallel (ni,ni+1), the result is consistent and smooth over successive cross-sections of an axon. Gradients ...

We compute α such that it is always 0 in the plane of elli, and 1 in the plane of elli+1, which guarantees that successive segments between ellipse pairs line up exactly. We require a vector [n with macron] that is guaranteed not to be parallel to either ellipse, and compute α as the ratio of k0, the distance from p along [n with macron] to elli, to k0 + k1, the total distance between elli and elli+1 along ñ through p. We have chosen ñ as the half-way vector between ni and ni+1. This choice fulfills our requirements and yields smooth results. Another obvious choice would be ci+1 − ci. However, in our case this vector can be close to parallel to the ni, which can result in numerical problems in the denominators of k0 and k1 (Equation 8).

After α has been computed, it is used to obtain ell(p) as linear interpolation between the ellipse centers and axis lengths, yielding cp, lxp and lyp, and spherical linear interpolation between qi and qi+1, yielding qp. Then, p is projected into the ellipse’s plane: p′ = p − np (p · np − cp · np). From this, the distance value ϕ (ell(p), p′) is computed entirely in 2D in the plane of the ellipse.

This approach gives completely accurate results for parallel ellipse planes, which is a common case in axon tracking where the planes are often orthogonal to the z axis. It is an approximate solution for non-parallel planes that works well in practice. The angle between two successive ellipse planes ni and ni+1 is always quite small, even though the whole axon is allowed to curve significantly from the first cross-section to the last. Figure 7 (middle) shows a close-up of an axon with non-parallel ellipse planes, which illustrates that our approach results in visually smooth results.

5.2.2 GPU Implementation

In order to speed up finding the two ellipses nearest to a given point p in the CUDA ray-casting kernel, ellipses are sorted into a 3D block structure (e.g., 163 blocks) before rendering that only needs to be up-dated when new ellipses are added. Each block contains links (integer indices) to all ellipses intersecting it. A single ellipse can be linked to by several blocks, but during rendering only a single block needs to be examined for each point p. In order to efficiently handle empty blocks, each block only stores the number of ellipses that intersect it and a start index into a global array of links to ellipses. The array is packed tightly such that all links of non-empty blocks are stored at consecutive memory locations. Actual ellipse information (axon-ID,ci,qi, lxi,lyi) is stored in a separate global ellipse array that is indexed using these links. In order to allow multiple axons to intersect the same block, multiple counts need to be stored in each block, one per axon. Furthermore, all links in a block are pre-sorted such that ci+1 · ni > ci · ni∀i, i.e., each subsequent ellipse’s center is in the front halfspace of the preceding ellipse. This simplifies the run-time search for ellipse pairs needed for interpolation, as described above. This block structure is also used for empty space skipping. Blocks with no ellipse links do not need to be searched for implicit surface intersections, and can be skipped entirely if they are transparent due to the transfer function.

6 Results

We implemented our segmentation and visualizations system on a Windows XP PC equipped with quad-core Intel Xeon 3.0 GHz CPU, 16 Gigabytes main memory, and NVIDIA Quadro 5800 and Tesla C1060 GPUs. We used a single CPU core and one GPU to compare the running time on each architecture. The CPU version is implemented using the ITK image processing library (http://www.itk.org). The main computational code is similar on the CPU and GPU for a fair comparison.

6.1 Segmentation

The running time of the CPU level set solver for 100 iterations on a 512 × 512 image is 7 seconds. It is only 0.3 second on the GPU, which shows about 23 times speed-up. Our GPU image registration runs less than a second on a 512 × 512 image (500 iterations). The total running time of our segmentation method per slice, without user interaction, is only about a second, which is sufficient for interactive applications.

To assess the performance of our segmentation method, we have segmented multiple axons in two EM datasets and measured the total and per-slice times, the amount of user intervention, and the ellipse approximation errors. The first dataset is an adult mouse cortex that consists of 101 slices of 1008 × 1065 2D image, where each pixel has five nanometers resolution and the section thickness is about 30 nanometers. The second dataset is an adult mouse hippocampus that consists of 50 slices of 1278 × 756 2D image, where each pixel is four nanometers wide and the section thickness is 29.4 nanometers. Figure 8 shows 3D renderings of the segmented axons and Table 1 lists the segmentation result for each dataset.

Fig. 8
Result images from NeuroTrace. Left: Volume rendering with edge enhancement in the upper part of the volume. Middle: Eight axons from the mouse cortex dataset. Right: Eight axons from the mouse hippocampus dataset.
Table 1
Axon segmentation results for the mouse cortex and hippocampus datasets.

In the mouse cortex dataset, axons A to D were traced using only axis-aligned tracking directions and axons E to H were traced using arbitrary tracking directions. All axons were traced along the z-axis in the mouse hippocampus dataset. Roughly between five to ten percent of the total number of slices were manually edited for correct segmentation for the mouse cortex dataset, and up to 20 percent of the total slices were edited on the mouse hippocampus dataset. Note that the image resolution of our input EM data is up to a factor of five higher than those used in previous work [, ]. The data contains more complex neural structures and is very challenging for automated methods. Total times and computing times are not significantly different between axons, and about half of the total time is used for computation.

Our ellipse-based 3D neuron representation can greatly reduce the memory footprint. For example, for an axon of 350 nm diameter we need about 70 × 70 pixels where the pixel width is 5 nm, which requires 9800 floats to store two distance fields. In contrast, to represent an equivalent 3D ellipse we only need to store nine floats, three for center and six for two axis. This yields a compression ratio of more than a factor of a thousand. Table 1 also shows the average distance between the ellipse and the membrane of neurons. The relative ellipse approximation errors, shown in parenthesis, range only between 0.6 to six percent of the longest axis of the ellipse, which is acceptable considering the high compression ratio we achieve.

6.2 Visualization

The prefiltering and edge-detection methods (Figure 9) were both implemented entirely in CUDA and achieve interactive framerates. Filtering blocks on-demand and caching them for later reuse allows the user to change filters and filter settings interactively. Especially de-noising prior to calculating the edge metric improved the results considerably. The best results were achieved using anisotropic diffusion filtering. For our local histogram-based edge metric we found a histogram with 64 bins to be sufficient for our data. Also, a simple average-based histogram difference operator showed good results compared to the computationally more complex χ2 distance metric. For our caching scheme we used 83 sized blocks, but this can be adjusted according to the resolution of the data. At the moment our implementation of the cache is based on CUDA arrays, but in the future we would like to use 3D textures to improve tri-linear filter performance during ray casting.

Fig. 9
Left: Volume Slab visualization; Top: Original data; Middle: Gradient magnitude displayed on the top slice; Bottom: Local-histogram edges; Right: Volume Rendering; Top: Original data; Middle: Gradient-magnitude shaded; Bottom: Pre-filtering and edge enhancement ...

The dimension of EM data is highly anisotropic, with z-slice distances that can be a factor of 10 or more larger than pixel resolution. This poses real problems for volume visualization, since the visible edges from axons are shifted by large amounts between slices. Even though our filtering and edge detection method works better than traditional transfer functions, the results are sometimes still ambiguous and confusing, requiring closer inspection of the 2D slice views to identify the ROI.

6.3 User Study

We have conducted informal user studies of our segmentation method to assess the usability and accuracy of NeuroTrace by comparing it with Reconstruct []. We selected six test subjects in total. Two (Expert 1 and 2) are expert neuroscientists, and the other four (Novice 1 to 4) are novices with no previous neural process segmentation experience. We conducted two user studies, where each study required four test subjects (two experts and two novices) to perform segmentation of the same axon (axon E in the mouse cortex dataset and axon A in the mouse hippocampus dataset). We measured the total time and segmentation accuracy for both systems. We also received qualitative feedback from the users.

To measure the segmentation error, we used the Dice metric [] that is commonly used to quantitatively measure the accuracy of segmentation algorithms []. The Dice metric measures similarity between two sets A and B using 2|A ∩ B|/(|A| + |B|), where | · | indicates set size. In our case, A is the ground truth set of pixels, and B is the set of pixels from the segmentation result. Dice values range between 0 and 1, where 1 implies a perfect match. We compute the Dice value for each 2D segmentation by comparing it to ground truth that was obtained by careful manual segmentation. Table 2 and ​and33 show the total segmentation times and average Dice values, and Figure 10 and ​and1111 show plots of Dice values for each slice.

Fig. 10
Dice value comparison of user study on the mouse cortex dataset. Left: Reconstruct. Right: NeuroTrace.
Fig. 11
Dice value comparison of user study on the mouse hippocampus dataset. Left: Reconstruct. Right: NeuroTrace.
Table 2
User study results from the mouse cortex dataset.
Table 3
User study results from the mouse hippocampus dataset.

For manual segmentation using Reconstruct there is no significant difference between the two groups in terms of the total time, but the results from the novice users are less accurate than those of the expert users. In contrast, the results using NeuroTrace do not show a significant difference between the two groups, and the novice users usually generated slightly less errors (higher Dice values) than the experts (Table 2). That indicates that the semi-automated NeuroTrace is less prone to lead to human errors. In addition, NeuroTrace provides better segmentation results up to three times faster than Reconstruct. Note that Expert 2 is an exception because he spent longer time than usual and performed very accurate segmentations using Reconstruct. It is also interesting to note that the results of Reconstruct become less accurate over time, especially for novice users (Figure 10 Novice 1 and 2). This can be explained by fatigue due to the laborious manual segmentation.

The users have given highly positive feedbacks about the usability and accuracy of NeuroTrace compared to Reconstruct: “A lot easier to use; more efficient; automatic function is nice; trustworthy” (Novice 1). “Less work-demanding and accurate” (Novice 2). “Automatic segmentation was far easier to use and quicker” (Novice 3). “It is a more practical program to use and all of it’s tools are very helpful and useful” (Novice 4). “It proceeds automatically, can tilt the tracing plane” (Expert 1). “Fast, user friendly, easy to correct; visualization of the segmented data” (Expert 2). The suggestions for improvements include the addition of advanced user interface functions such as browsing of neural tracks and editing previous history, and adaptation to different data modalities, e.g., optical fluorescent confocal microcopy. Our neuroscientist collaborators are currently using NeuroTrace in their Connectomics research.

7 Conclusions and Future Work

In this paper we introduced NeuroTrace, a novel interactive segmentation and visualization system for neural processes in EM volumes. The main contributions are a novel semi-automatic segmentation and 3D tracking method, efficient volume rendering with on-the-fly filters and edge detection, a scalable implementation of these methods on the GPU, and a novel workflow that has been shown to be more accurate and efficient than current practice.

In the future we would like to implement a greater variety of filters and edge-detection approaches (e.g., Canny edge detection). Also we plan to automatically adjust pre-defined filter settings and opacity windowing function depending on the resolution of the input data. The biggest challenge are the extremely large z-slice distances in EM datasets. The integration of shape based-interpolation or directional coherence methods into the volume rendering might be a promising direction to solve this problem. We also would like to extend the current segmentation and tracking method to handle merging and branching of neural processes. Simultaneous tracking of multiple neural processes in a GPU cluster system would be another interesting future direction.

Acknowledgments

This work was supported in part by the National Science Foundation under Grant No. PHY-0835713, the Austrian Research Promotion Agency FFG, Vienna Science and Technology Fund WWTF, the Harvard Initiative in Innovative Computing (IIC), the National Institutes of Health under Grant No. P41-RR12553-10 and U54-EB005149, and through generous support from Microsoft Research and NVIDIA. We thank our biology collaborators Prof. Jeff Lichtman and Prof. Clay Reid from the Harvard Center for Brain Science for their time and the use of their data. We also wish to thank Dr. Juan C. Tapia, Dr. Ju Lu, Thomas Zhihao Luo, May Zhang, Bo Wang, and Robert Cole Hurley for participating in the user study.

Contributor Information

Won-Ki Jeong, School of Engineering and Applied Sciences at Harvard University.

Johanna Beyer, VRV is Center for Virtual Reality and Visualization Research, Inc.

Markus Hadwiger, VRV is Center for Virtual Reality and Visualization Research, Inc.

Amelio Vazquez, School of Engineering and Applied Sciences at Harvard University.

Hanspeter Pfister, School of Engineering and Applied Sciences at Harvard University.

Ross T. Whitaker, Scientific Computing and Imaging Institute at the University of Utah.

References

1. Anandan P. A computational framework and an algorithm for the measurement of visual motion. Journal on Computer Vision. 1989;2:283–310.
2. Bartesaghi A, Sapiro G, Subramaniam S. An energy-based three-dimensional segmentation approach for the quantitative interpretation of electron tomograms. IEEE Trans. Image Proc. 2005 September;14(9):1314–1323. [PMC free article] [PubMed]
3. Bartz D, Straßer W. Interactive exploration of extra- and intracranial blood vessels. In Proc. of IEEE Visualization. 1999:389–392.
4. Beyer J, Hadwiger M, Möller T, Fritz L. Smooth mixed-resolution GPU volume rendering; IEEE International Symposium on Volume and Point-Based Graphics (VG ’08); 2008. pp. 163–170.
5. Caban J, Rheingans P. Texture-based transfer functions for direct volume rendering. IEEE Transactions on Visualization and Computer Graphics (Proc. of IEEE Visualization ’08) 2008;14(6):1364–1371. [PubMed]
6. Clarenz U, Droske M, Rumpf M. Inverse Problems, Image Analysis and Medical Imaging, AMS Special Session Interaction of Inverse Problems and Image Analysis. volume 313. AMS; 2002. Towards fast non–rigid registration; pp. 67–84.
7. Deschamps T, Cohen LD. Fast extraction of minimal paths in 3d images and applications to virtual endoscopy. Medical Image Analysis. 2001;5:281–299. [PubMed]
8. Dice LR. Measures of the amount of ecologic association between species. Ecology. 1945;26:297–302.
9. Fiala JC. Reconstruct: a free editor for serial section microscopy. Journal of Microscopy. 2005 April;218(1):52–61. [PubMed]
10. Hadwiger M, Sigg C, Scharsach H, Bühler K, Gross M. Real-time ray-casting and advanced shading of discrete isosurfaces. Computer Graphics Forum (Proc. Eurographics 2005) 2005;24(3):303–312.
11. Hong L, Muraki S, Kaufman A, Bartz D, He T. Virtual voyage: interactive navigation in the human colon. In; SIGGRAPH 97 Conference Proceedings; 1997. pp. 27–34.
12. Jeong W-K, Whitaker RT. A fast iterative method for Eikonal equations. SIAM Journal on Scientific Computing. 2008;30(5):2512–2534.
13. Jurrus E, Hardy M, Tasdizen T, Fletcher P, Koshevoy P, Chien C-B, Denk W, Whitaker R. Axon tracking in serial block-face scanning electron microscopy. Medical Image Analysis (MEDIA) 2009 February;13(1):180–188. [PMC free article] [PubMed]
14. Kindlmann G, Durkin J. Semi-automatic Generation of Transfer Functions for Direct Volume Rendering. Proceedings of IEEE Volume Visualization ’98. 1998:79–86.
15. Kirbas C, Quek F. A review of vessel extraction techniques and algorithms. ACM Comput. Surv. 2004;36(2):81–121.
16. Lefohn A, Kniss J, Hansen C, Whitaker R. Interactive deformation and visualization of level set surfaces using graphics hardware. Proceedings of IEEE Visualization. 2003:75–82.
17. Macke JH, Maack N, Gupta R, Denk W, Schölkopf B, Borst A. Contour-propagation algorithms for semi-automated reconstruction of neural processes. Journal of Neuroscience Methods. 2008;167(2):349–357. [PubMed]
18. Maire M, Arbelaez P, Fowlkes C, Malik J. Using contours to detect and localize junctions in natural images; IEEE Conference on Computer Vision and Pattern Recognition (CVPR’08); 2008. pp. 1–8.
19. Martin D, Fowlkes C, Malik J. Learning to detect natural image boundaries using local brightness, color, and texture cues. IEEE Trans. on Pattern Analysis and Machine Intelligence. 2004;26(1):530–549. [PubMed]
20. Mayerich D, Abbott L, Keyser J. Visualization of cellular and microvascular relationships. IEEE Transactions on Visualization and Computer Graphics. 2008;14(6):1611–1618. [PubMed]
21. Mishchenko Y. Automation of 3d reconstruction of neural tissue from large volume of conventional serial section transmission electron micrographs. Journal of Neuroscience Methods. 2009;176:276–289. [PMC free article] [PubMed]
22. Perona P, Malik J. Scale space and edge detection using anisotropic diffusion. IEEE Trans. in Pattern Analysis and Machine Intelligence. 1990;volume 12:629–639.
23. Petrovic V, Fallon J, Kuester F. Visualizing whole-brain dti tractography with gpu-based tuboids and lod management. IEEE Trans. Vis. Comput. Graph. 2007;13(6):1488–1495. [PubMed]
24. Reina G, Bidmon K, Enders F, Hastreiter P, Ertl T. GPU-Based Hyperstreamlines for Diffusion Tensor Imaging; Proceedings of EUROGRAPHICS - IEEE VGTC Symposium on Visualization 2006; 2006. pp. 35–42.
25. Scharsach H, Hadwiger M, Neubauer A, Bühler K. Perspective iso-surface and direct volume rendering for virtual endoscopy applications. Eurovis 2006. 2006:315–322.
26. Sethian J. Level set methods and fast marching methods. Cambridge University Press; 2002.
27. Smith SJ. Circuit reconstruction tools today. Current Opinion in Neurobiology. 2007 October;17(5):601–608. [PMC free article] [PubMed]
28. Sporns O, Tononi G, Kötter R. The human connectome: A structural description of the human brain. PLoS Computational Biology. 2005 September;1(4):e42+. [PMC free article] [PubMed]
29. Tasdizen T, Awate S, Whitaker R, Foster N. MRI tissue classification with neighborhood statistics: A nonparametric, entropy-minimizing approach. MICCAI 2005. 2005:517–525. [PubMed]
30. Tasdizen T, Whitaker R, Marc R, Jones B. Enhancement of cell boundaries in transmission micropscopy images; IEEE International Conf. on Image Processing (ICIP ’05); 2005. pp. 129–132.
31. Tomasi C, Manduchi R. Bilateral filtering for gray and color images. ICCV ’98. 1998:839–846.
32. Vazquez-Reina A, Miller E, Pfister H. Multiphase geometric couplings for the segmentation of neural processes; Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR); 2009. pp. 2020–2027.
+ + + + +
+ +
+ +
+ +
+ +
+ +

Formats:

Related citations in PubMed

See reviews...See all...

Cited by other articles in PMC

See all...

Links

Recent activity

Your browsing activity is empty.

Activity recording is turned off.

Turn recording back on

See more...
+ +
+ + +
+ +
+
+
+ + +
+ +
+
+ +
+ + + + + + + +
+
+ + + + +
+
+ +
+ +
+
External link. Please review our privacy policy.
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/28977 b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/28977 new file mode 100644 index 0000000..14a5ebd Binary files /dev/null and b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/28977 differ diff --git a/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/3838809 b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/3838809 new file mode 100644 index 0000000..8116c8a Binary files /dev/null and b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/3838809 differ diff --git a/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/3839767.js b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/3839767.js new file mode 100644 index 0000000..8f513bd --- /dev/null +++ b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/3839767.js @@ -0,0 +1,1899 @@ +jQuery(function($j) { + var formState = { + overrideBackends: false, + backends: {} + }; + + // Name of the cookie + var cookieName; + + // Mostly just for debugging, store the cookie string value here + // rather than in the sub-function scope + var cookieStr; + + // An object representation of the cookie. This is converted from the + // XML cookie value on init. The form controls will manipulate this, + // and when the user clicks "Go", this will be converted back into + // XML. + var cookieObj; + + /////////////////////////////////////////////////////////////////////////////// + function cbChanged(event) { + //console.info("Event caught: " + event); + var target = $j(event.target); + var id = target.attr("id"); + var value = target.attr("value"); + var checked = target.attr("checked"); + /*console.info("target id: '" + id + + "', value: '" + value + + "', checked: '" + checked + "'");*/ + + + if (id == "besetsel-cb") { + if (checked) { + $j("#besetsel-sel").removeAttr("disabled"); + besetSelFormToObj(); + } + else { + $j("#besetsel-sel").attr("disabled", 1); + delete cookieObj.besetName; + } + } + else if (id == "besetsel-sel") { + besetSelFormToObj(); + } + else { + var m; + if (m = id.match(/besetsel-be-(.*?)-cb/)) { + var backend = m[1]; + //console.info(">>>backend checkbox: " + backend); + if (checked) { + $j("#besetsel-be-" + backend + "-text").removeAttr("disabled"); + beUrlFormToObj(backend); + } + else { + $j("#besetsel-be-" + backend + "-text").attr("disabled", 1); + delete cookieObj.backendUrls[backend]; + } + } + else if (m = id.match(/besetsel-be-(.*?)-text/)) { + backend = m[1]; + //console.info(">>>backend text: " + backend); + beUrlFormToObj(backend); + } + } + + // PMC-11784 and PMC-11785. + // This fixes a nasty IE bug. It causes a slight flash when the user + // clicks a checkbox, but it works. + if (jQuery.browser.msie){ + target.hide(); + window.setTimeout( function(){ target.show();}, 0 ); + } + + } + + /////////////////////////////////////////////////////////////////////////////// + // besetSelFormToObj() + // This is called by a couple of event handlers and decodes the + // currently selected BESet (in the drop-down form) and sets the + // cookieObj.besetName accordingly. + + function besetSelFormToObj() + { + cookieObj.besetName = $j("#besetsel-sel").val(); + } + + /////////////////////////////////////////////////////////////////////////////// + // beUrlFormToObj(backend) + // This is similar, and takes care of reading the text value from the + // form and stuffing it into the object + + function beUrlFormToObj(backend) { + var value = $j("#besetsel-be-" + backend + "-text").attr("value"); + if (value) cookieObj.backendUrls[backend] = value; + } + + /////////////////////////////////////////////////////////////////////////////// + function init() { + if ($j("#besetsel-form").length < 1) + { + return; + } + + cookieName = $j("#besetsel-form").attr("cookieName"); + cookieObj = cookieXmlToJson(cookieName); + initFormState(); + + // Set event handers + $j("#besetsel-form .besetsel-control").change(function(event) { + cbChanged(event); + }); + $j("#besetsel-go-button").click(function(event) { + goButton(event); + }); + $j("#besetsel-reset-button").click(function(event) { + resetButton(event); + }); + + // This "pullout" might be empty, in the case of the BESet being + // selected by path segment instead of cookie. In that case, the + // tab acts as a watermark, just to identify the BESet, and we + // don't want to allow it to be "pulled out". So we'll set the + // width to 0 in that case. + var w = $j("#besetsel-go-button").length > 0 ? "400px" : "0px"; + + // Put it into the sidecontent pullout + $j("#besetsel-form").sidecontent({ + /*classmodifier: "besetsel",*/ + attachto: "rightside", + width: w, + opacity: "0.8", + pulloutpadding: "5", + textdirection: "vertical", + clickawayclose: 0, + titlenoupper: 1 + }); + + var pulloutColor = $j("#besetsel-form").attr("pulloutColor"); + //alert("color is " + pulloutColor); + $j("#besetsel-form").data("pullout").css("background-color", pulloutColor || '#663854'); + + if ($j("#besetsel-go-button").size() > 0) { + $j("#besetsel-form").data("pullout").css({ + "border-top": "ridge gray 5px", + "border-bottom": "ridge gray 5px", + "border-left": "ridge gray 5px" + }); + } + } + + /////////////////////////////////////////////////////////////////////////////// + // goButton(event) + // Handle the user-click of the "Go!" button. + + function goButton(event) { + // Convert the object into XML + var cookieXml = "") : ">" ); + for (var backend in cookieObj.backendUrls) { + //console.info("+++ backend " + backend); + cookieXml += + "" + xmlEscape(cookieObj.backendUrls[backend]) + ""; + } + cookieXml += ""; + //console.info(cookieXml); + + // Set the cookie + document.cookie = cookieName + "=" + encodeURIComponent(cookieXml) + + "; max-age=604800" + + "; path=/" + + "; domain=nih.gov"; + // Reload the page + window.location.reload(); + } + + /////////////////////////////////////////////////////////////////////////////// + // resetButton(event) + // Handle the user-click of the "Reset" button. + // Does the same thing as "Go!", but sets the cookie to the empty string. + + function resetButton(event) { + // Clear the cookie + document.cookie = cookieName + "=" + + "; max-age=604800" + + "; path=/" + + "; domain=nih.gov"; + // Reload the page + window.location.reload(); + } + + /////////////////////////////////////////////////////////////////////////////// + function xmlEscape(str) { + str = str.replace(/\&/g, '&') + .replace(/\/g, '>') + .replace(/\"/g, '"') + .replace(/\'/g, '''); + return str; + } + + /////////////////////////////////////////////////////////////////////////////// + // This function reads the cookie value and initializes the form state + // Don't assume anything about the form state -- redo everything. + function initFormState() { + + var besetName = cookieObj.besetName; + + if (!besetName) { + $j("#besetsel-cb").removeAttr("checked"); + $j("#besetsel-sel").attr("disabled", 1); + } + else { + var selBESet = $j("#besetsel-opt-" + besetName); + if (selBESet.length != 0) { + $j("#besetsel-cb").attr("checked", 1); + $j("#besetsel-sel").removeAttr("disabled"); + selBESet.attr("selected", 1); + } + else { + $j("#besetsel-cb").removeAttr("checked"); + $j("#besetsel-sel").attr("disabled", 1); + } + } + + // Foreach backend in the form + $j(".besetsel-be-cb").each(function(i) { + var id = $j(this).attr("id"); + var beName = id.match(/besetsel-be-(.*?)-cb/)[1]; + //console.info("### backend, id is '" + id + "', beName is '" + beName + "'"); + if (!beName) return; + + // See if there's a corresponding element in the cookie + if (!cookieObj.backendUrls || + !cookieObj.backendUrls[beName]) { + //console.info("Didn't find " + beName); + $j("#besetsel-be-" + beName + "-cb").removeAttr("checked"); + $j("#besetsel-be-" + beName + "-text").attr("disabled", 1); + } + else { + //console.info("Found " + beName); + $j("#besetsel-be-" + beName + "-cb").attr("checked", 1); + var textbox = $j("#besetsel-be-" + beName + "-text"); + textbox.removeAttr("disabled"); + textbox.attr("value", cookieObj.backendUrls[beName]); + } + }); + } + + /////////////////////////////////////////////////////////////////////////////// + // This gets the value of the _beset cookie, which is in XML, and turns it + // from this: + // + // + // ... + // + // Into this (note that everything is optional): + // { besetName: 'test', + // backendUrls: { + // tagserver: 'bingo', ... } + // } + // If there is no cookie set or parsing fails, this returns {}. + + function cookieXmlToJson(cookieName) { + var cookieObj = { + backendUrls: {} + }; + + cookieStr = getCookie(cookieName); + //console.info("cookie value is '" + cookieStr + "'"); + + // Parse XML + try { + var cookieXml = $j(cookieStr); + } + catch(err) { + return cookieObj; + } + + var besetElem = cookieXml.find('BESet'); + if (besetElem.length == 0) { + // No valid cookie value found. + return cookieObj; + } + + var besetName = besetElem.attr("name"); + if (besetName) { + cookieObj.besetName = besetName; + } + + var backends = besetElem.find("backend"); + if (backends.length != 0) { + backends.each(function (i) { + var e = $j(backends[i]); + cookieObj.backendUrls[e.attr("name")] = e.text(); + //console.info("Setting " + e.attr("backend") + ": " + e.attr("url")); + }) + } + + return cookieObj; + } + + /////////////////////////////////////////////////////////////////////////////// + function getCookie(name) { + var allCookies = document.cookie; + //console.info("allCookies = " + allCookies); + var pos = allCookies.indexOf(name + "="); + if (pos != -1) { + var start = pos + (name + "=").length; + var end = allCookies.indexOf(";", start); + if (end == -1) end = allCookies.length; + return decodeURIComponent(allCookies.substring(start, end)); + } + return ""; + } + + init(); + +}); + + + +; +(function($) +{ + // This script was written by Steve Fenton + // http://www.stevefenton.co.uk/Content/Jquery-Side-Content/ + // Feel free to use this jQuery Plugin + // Version: 3.0.2 + + var classModifier = ""; + var sliderCount = 0; + var sliderWidth = "400px"; + + var attachTo = "rightside"; + + var totalPullOutHeight = 0; + + function CloseSliders (thisId) { + // Reset previous sliders + for (var i = 0; i < sliderCount; i++) { + var sliderId = classModifier + "_" + i; + var pulloutId = sliderId + "_pullout"; + + // Only reset it if it is shown + if ($("#" + sliderId).width() > 0) { + + if (sliderId == thisId) { + // They have clicked on the open slider, so we'll just close it + showSlider = false; + } + + // Close the slider + $("#" + sliderId).animate({ + width: "0px" + }, 100); + + // Reset the pullout + if (attachTo == "leftside") { + $("#" + pulloutId).animate({ + left: "0px" + }, 100); + } else { + $("#" + pulloutId).animate({ + right: "0px" + }, 100); + } + } + } + } + + function ToggleSlider () { + var rel = $(this).attr("rel"); + + var thisId = classModifier + "_" + rel; + var thisPulloutId = thisId + "_pullout"; + var showSlider = true; + + if ($("#" + thisId).width() > 0) { + showSlider = false; + } + + CloseSliders(thisId); + + if (showSlider) { + // Open this slider + $("#" + thisId).animate({ + width: sliderWidth + }, 250); + + // Move the pullout + if (attachTo == "leftside") { + $("#" + thisPulloutId).animate({ + left: sliderWidth + }, 250); + } else { + $("#" + thisPulloutId).animate({ + right: sliderWidth + }, 250); + } + } + + return false; + }; + + $.fn.sidecontent = function (settings) { + + var config = { + classmodifier: "sidecontent", + attachto: "rightside", + width: "300px", + opacity: "0.8", + pulloutpadding: "5", + textdirection: "vertical", + clickawayclose: false + }; + + if (settings) { + $.extend(config, settings); + } + + return this.each(function () { + + $This = $(this); + + // Hide the content to avoid flickering + $This.css({ opacity: 0 }); + + classModifier = config.classmodifier; + sliderWidth = config.width; + attachTo = config.attachto; + + var sliderId = classModifier + "_" + sliderCount; + var sliderTitle = config.title; + + // Get the title for the pullout + sliderTitle = $This.attr("title"); + + // Start the totalPullOutHeight with the configured padding + if (totalPullOutHeight == 0) { + totalPullOutHeight += parseInt(config.pulloutpadding); + } + + if (config.textdirection == "vertical") { + var newTitle = ""; + var character = ""; + for (var i = 0; i < sliderTitle.length; i++) { + character = sliderTitle.charAt(i).toUpperCase(); + if (character == " ") { + character = " "; + } + newTitle = newTitle + "" + character + ""; + } + sliderTitle = newTitle; + } + + // Wrap the content in a slider and add a pullout + $This.wrap('
').wrap('
'); + var pullout = $('
' + sliderTitle + '
').insertBefore($("#" + sliderId)); + + // Store reference to the tab element in parent + $This.data('pullout', pullout); + + if (config.textdirection == "vertical") { + $("#" + sliderId + "_pullout span").css({ + display: "block", + textAlign: "center" + }); + } + + // Hide the slider + $("#" + sliderId).css({ + position: "absolute", + overflow: "hidden", + top: "0", + width: "0px", + zIndex: "1", + opacity: config.opacity + }); + + // For left-side attachment + if (attachTo == "leftside") { + $("#" + sliderId).css({ + left: "0px" + }); + } else { + $("#" + sliderId).css({ + right: "0px" + }); + } + + // Set up the pullout + $("#" + sliderId + "_pullout").css({ + position: "absolute", + top: totalPullOutHeight + "px", + zIndex: "1000", + cursor: "pointer", + opacity: config.opacity + }) + + $("#" + sliderId + "_pullout").live("click", ToggleSlider); + + var pulloutWidth = $("#" + sliderId + "_pullout").width(); + + // For left-side attachment + if (attachTo == "leftside") { + $("#" + sliderId + "_pullout").css({ + left: "0px", + width: pulloutWidth + "px" + }); + } else { + $("#" + sliderId + "_pullout").css({ + right: "0px", + width: pulloutWidth + "px" + }); + } + + totalPullOutHeight += parseInt($("#" + sliderId + "_pullout").height()); + totalPullOutHeight += parseInt(config.pulloutpadding); + + var suggestedSliderHeight = totalPullOutHeight + 30; + if (suggestedSliderHeight > $("#" + sliderId).height()) { + $("#" + sliderId).css({ + height: suggestedSliderHeight + "px" + }); + } + + if (config.clickawayclose) { + $("body").click( function () { + CloseSliders(""); + }); + } + + // Put the content back now it is in position + $This.css({ opacity: 1 }); + + sliderCount++; + }); + + return this; + }; +})(jQuery); +; +/* Override this file with one containing code that belongs on every page of your application */ + + +; +jQuery(function($) { + // Set event listener to scroll the nav poppers to the current page when opened + $("#source-link-top, #source-link-bottom").bind( + "ncbipopperopencomplete", + function() { + var dest = $(this).attr('href'); + var selected_link = $(dest).find('.current-toc-entry'); + + if (selected_link.length > 0) + { + $(dest).scrollTo(selected_link, { offset: -100, duration: 400 }); + } + } + ); +}); + + +; +// See PMC-7567 - Google suggestions +// This is an AJAX implementation of functionality that already exists in the backend. +// This Portal/AJAX implementation overrides the backend implementation. +// +// This JS looks for a span with id "esearch-result-number". If it exists, +// then it does an ajax call to esearch (at the url specified in the @ref +// attribute) and gets the count. It then replaces the contents of this +// span with that count. Finally, it shows the outer div. +// +// An example of an esearch query url is +// /entrez/eutils/esearch.fcgi?term=unemployed&db=pmc&rettype=count&itool=QuerySuggestion +// which would return something like this: +// +// 10573 +// +// +// PMC-11350 - itool=QuerySuggestion query parameter is required to filter +// out such queries while calculating statistics. + +jQuery(document).ready( + function() { + var $ = jQuery; + + $("#esearch-result-number").each( + function() { + var countSpan = $(this); + var esearchUrl = countSpan.attr("ref"); + if (esearchUrl.length > 0) { + + $.ajax({ + type: "GET", + url: esearchUrl, + dataType: "xml", + success: function(xml) { + $(xml).find('Count').each(function(){ + var count = $(this).text(); + + // Insert the count into the element content, + // and show the outer div. + countSpan.text(count); + $("div#esearchMessageArea").show(); + }); + } + }); + + } + } + ); + } +); + + +; + +// This code uses JavaScript to build search URL and send search request directly to the database +// that is asking for the request. This works only for resources at a top-level URL. +// If JavaScript is turned off, or a redirect loop would occur, the search form's HTTP GET is +// allowed to continue. + +if (typeof(jQuery) != 'undefined') { + (function($) { + // BK-5746. + // This is the default function that returns the search URL + // You can override this by defining NCBISearchBar_searchUrl. + var defaultSearchUrl = function() { + var db = $('#entrez-search-db'); + var term = $('#term'); + if (db && term && db[0] && term[0]) { + + // The searchUrl is the selected database's data-search-uri attribute, if set; otherwise it's /dbname/. + var searchUrl = $("option:selected", db[0]).attr('data-search-uri') || ("/" + db[0].value + "/"); + + var termParam = + (term[0].value.replace(/^\s+/,'').length != 0) ? + "?term=" + encodeURIComponent(term[0].value).replace(/%20/,'+') : + ""; + + return searchUrl + termParam; + } + } + + function searchUrl() { + // If the user has overridden the URL function: + var url = ""; + if (typeof(NCBISearchBar_customSearchUrl) != "undefined") { + url = NCBISearchBar_customSearchUrl(); + } + if (!url) { + url = defaultSearchUrl(); + } + return url; + } + + // Handle search submit request + function do_search() { + + var form = $('#entrez-search-form'); + + // Disable crap portal-injected parameters so they are not sent to search URI + $('input[type="hidden"][name^="p$"]', form).each(function() { + $(this).attr('disabled', 'disabled'); + }); + + // Get new search URL with term, etc. + var search_url = searchUrl(); + + // Log request + search_ping(); + + // Use POST for big things, GET for everything else + if (search_url.length > 2000) { + form.attr('method','POST'); + form.attr('action',search_url.replace(/\?.*/,'')); + } else { + window.location = search_url; + return false; + } + return true; + } + + // Copied from Entrez... + function search_ping() { + var cVals = ncbi.sg.getInstance()._cachedVals; + + var searchDetails = {} + searchDetails["jsEvent"] = "search"; + + var app = cVals["ncbi_app"]; + var db = cVals["ncbi_db"]; + var pd = cVals["ncbi_pdid"]; + var pc = cVals["ncbi_pcid"]; + + var sel = document.getElementById("entrez-search-db"); + var searchDB = sel.options[sel.selectedIndex].value; + var searchText = document.getElementById("term").value; + + if( app ){ searchDetails["ncbi_app"] = app.value; } + if( db ){ searchDetails["ncbi_db"] = db.value; } + if( pd ){ searchDetails["ncbi_pdid"] = pd.value; } + if( pc ){ searchDetails["ncbi_pcid"] = pc.value; } + if( searchDB ){ searchDetails["searchdb"] = searchDB;} + if( searchText ){ searchDetails["searchtext"] = searchText;} + + ncbi.sg.ping(searchDetails); + } + + // User function NCBISearchBar_handle_autocomp(), if defined, must handle search request, including submit, if any + function autocomp_select(event, sgData) { + var term = $('#term'); + if (typeof(NCBISearchBar_handle_autocomp) != 'undefined') { + NCBISearchBar_handle_autocomp(event, sgData); + } else { + if (!term.val().trim()) { + $('#term').val(sgData.optionSelected||sgData.userTyped); + } + + // Only explicitly trigger submit if user didn't. + if (sgData.optionIndex >= 0) { + $('#entrez-search-form').submit(); + } + } + } + + $(document).ready(function() { + + var db = $('#entrez-search-db'); + var term = $('#term'); + var form = $('#entrez-search-form'); + + db.removeAttr('disabled'); // Reenable if this is backbutton + + // Handle autocomplete events + term.bind("ncbiautocompleteenter", autocomp_select ).bind("ncbiautocompleteoptionclick", autocomp_select ); + + // If form is submitted, handle POST (if necessary) and logging. + form.submit(do_search); + + // Turn autocomplete on or off depending on whether the new database + // has an autocomplete dict defined on the selected option. + $('#entrez-search-db').change(function() { + var acdict = $('#entrez-search-db option:selected').attr('data-ac-dict'); + if (acdict) { + $("#term").ncbiautocomplete("option","isEnabled",true).ncbiautocomplete("option","dictionary",acdict); + console.info("Setting autocomplete dictionary to " + acdict); + } else { + console.info("Disabling autocomplete dictionary"); + $("#term").ncbiautocomplete("turnOff"); + } + }); + }); // End document.ready + })(jQuery); // Close scope +}; + + + + +; +(function( $ ){ // pass in $ to self exec anon fn + var post_url = '/myncbi/session-state/'; + + // on page ready + $( function() { + + $('div.portlet, div.section').each( function() { + + // get the elements we will need + var self = $(this); + var anchor = self.find('a.portlet_shutter'); + var content = self.find('div.portlet_content, div.sensor_content'); + + // we need an id on the body, make one if it doesn't exist already + // then set toggles attr on anchor to point to body + var id = content.attr('id') || $.ui.jig._generateId('portlet_content'); + + anchor.attr('toggles', id); + content.attr('id', id); + + // initialize jig toggler with proper configs, then remove some classes that interfere with + // presentation + var togglerOpen = anchor.hasClass('shutter_closed') ? false : true; + + anchor.ncbitoggler({ + isIcon: false, + initOpen: togglerOpen + }). + removeClass('ui-ncbitoggler-no-icon'). + removeClass('ui-widget'); + + // get rid of ncbitoggler css props that interfere with portlet styling, this is hack + // we should change how this works for next jig release + anchor.css('position', 'absolute'). + css('padding', 0 ); + +/* self.find( 'div.ui-helper-reset' ). + removeClass('ui-helper-reset'); + + content.removeClass('ui-widget'). + css('margin', 0);*/ + + // trigger an event with the id of the node when closed + anchor.bind( 'ncbitogglerclose', function() { + anchor.addClass('shutter_closed'); + + $.post(post_url, { section_name: anchor.attr('pgsec_name'), new_section_state: 'true' }); + }); + + anchor.bind('ncbitoggleropen', function() { + anchor.removeClass('shutter_closed'); + $.post(post_url, { section_name: anchor.attr('pgsec_name'), new_section_state: 'false' }); + }); + + }); // end each loop + + /* Popper for brieflink */ + $('li.brieflinkpopper').each( function(){ + var $this = $( this ); + var popper = $this.find('a.brieflinkpopperctrl') ; + var popnode = $this.find('div.brieflinkpop'); + var popid = popnode.attr('id') || $.ui.jig._generateId('brieflinkpop'); + popnode.attr('id', popid); + popper.ncbipopper({ + destSelector: "#" + popid, + destPosition: 'top right', + triggerPosition: 'middle left', + hasArrow: true, + arrowDirection: 'right', + isTriggerElementCloseClick: false, + adjustFit: 'none', + openAnimation: 'none', + closeAnimation: 'none', + delayTimeout : 130 + }); + }); // end each loop + });// end on page ready +})( jQuery ); +; +(function( $ ){ // pass in $ to self exec anon fn + // on page ready + $( function() { + + // Initialize popper + $('li.ralinkpopper').each( function(){ + var $this = $( this ); + var popper = $this; + var popnode = $this.find('div.ralinkpop'); + var popid = popnode.attr('id') || $.ui.jig._generateId('ralinkpop'); + popnode.attr('id', popid); + popper.ncbipopper({ + destSelector: "#" + popid, + destPosition: 'top right', + triggerPosition: 'middle left', + hasArrow: true, + arrowDirection: 'right', + isTriggerElementCloseClick: false, + adjustFit: 'none', + openAnimation: 'none', + closeAnimation: 'none', + delayTimeout : 130 + }); + }); // end each loop + + });// end on page ready + +})( jQuery ); + + +function historyDisplayState(cmd) +{ + var post_url = '/myncbi/section-state/'; + + if (cmd == 'ClearHT') + { + if (!confirm('Are you sure you want to delete all your saved Recent Activity?')) + { + return; + } + } + + var ajax_request = jQuery.post(post_url, { history_display_state: cmd }) + .complete(function(jqXHR, textStatus) { + + var htdisplay = jQuery('#HTDisplay'); + var ul = jQuery('#activity'); + + if (cmd == 'HTOn') + { + // so that the following msg will show up + htdisplay.removeClass(); + + if (jqXHR.status == 408) + { + htdisplay.html("

Your browsing activity is temporarily unavailable.

"); + return; + } + + if (htdisplay.find('#activity li').length > 0) + { + ul.removeClass('hide'); + } + else + { + htdisplay.addClass('HTOn'); + } + + } + else if (cmd == 'HTOff') + { + ul.addClass('hide'); + htdisplay.removeClass().addClass('HTOff'); // make "Activity recording is turned off." and the turnOn link show up + } + else if (cmd == 'ClearHT') + { + if (htdisplay.attr('class') == '') + { + htdisplay.addClass('HTOn'); // show "Your browsing activity is empty." message + + ul.removeClass().addClass('hide'); + ul.html(''); + } + } + }); + +} + + +; +/* + PMCVCitedRefBlocksJS + + This code is adapted from the JS that Aaron Cohen wrote, in PPMCArticlePageJS. + I (cfm) use the term CRB (cited reference block) to refer to the portlets on + an article page that are aligned with the paragraphs. + + This module performs two main functions: + - Initializes and manages the CRBs, and the links within them. + These come as div.pmc_para_cit elements from the backend. + - Initializes and manages the poppers on the links within the + body of the article (called body links). There are two types: + - Body links that have a corresponding CRB link. These will, + for the most part, correspond to citations to articles that + are in PubMed. In these cases, the popper text gets cloned + from the CRB links. + - Body links that do not have a corresponding CRB link. These + are mostly citations that don't have a corresponding PubMed + entry. In these cases, the popper text gets cloned from the + references section. + + CRB initial state: + + The CRBs should all be rendered on the page in their fully-expanded + states, in the discovery column. They should appear below any "fixed" + portlets -- which are portlets of the normal kind, that appear + one-after-another at the top of the disco column. They should have no + special positioning. + + They should all have the class pmc_para_cit. In the CSS, we initially + set the visibility of these to "hidden", to prevent the flash of unstyled + content. + + For reference, here are the jQuery data items that we save with the + DOM elements: + + - CRB (div.pmc_para_cit) + - myParagraph - reference to the jQuery wrapper object for the + paragraph corresponding to this CRB. + - myTop - integer - top of this CRB. This is constant and is + set during initialization. If there's no para corresponding + to this CRB (edge case), then this will be 0. + - expandedHeight - int + - collapsedHeight - int + - collapsedNumLinks - int + - isCollapsed - boolean + - autoCollapseTimerId - int + + - Links in a CRB (div.pmc_para_cit li): + - myCrb - ref. to the jQuery object for this link's containing CRB. + - expandedHeight - int + - myBodyLinks - reference to the jQuery object that holds the + (one-to-many) body links that correspond to the *same citation* + as this CRB link. Note that this is *not* the complement of the + body link's myCrbLink data member. Here's the difference. For + a body link to have a myCrbLink pointing to this CRB link, it + must be in the paragraph corresponding to this CRB. But, the + CRB link's myBodyLinks lists *all* of the links in the body, + regardless of paragraph, that correspond to the same citation. + + - isExtra - boolean. + - isCollapsed - boolean + + - Body links: + - myCrbLink - reference to the jQuery object for the + CRB
  • corresponding to this citation link in the body. + - ncbipopper - reference to the jQuery object for this link's + popper. +*/ + + +// We use an IIFE in order to not pollute the global namespace. +( function($j) { + + // This constant can be set to control the maximum number of + // links ever to show in a CRB. But note that this is already + // coded in the xslt that generates the portlet on the server. + // So we probably don't need this. Anyway, it might be nice to + // have. So I'll keep it and set it to a high value. + var MAX_LINKS_PER_CRB = 50; + + // Specify a time delay before the CRB will "auto-collapse". + var AUTOCOLLAPSE_TIMEOUT = 4000; + + // Attach the initialize() function to the window load event. + // I used to think this was only necessary for Safari, but see + // PMC-14368, and this SE post: + // http://stackoverflow.com/questions/544993/official-way-to-ask-jquery-wait-for-all-images-to-load-before-executing-somethin + $j(window).load(initialize); + + //------------------------------------------------------------- + // This initialize function runs when the DOM is ready. + // All the other function definitions are nested inside this one, + // so that they close over the local variables that are initialized + // here. + + function initialize() { + + // Get the list of all CRBs in the document + var crbs = $j('div.pmc_para_cit'); + var numCrbs = crbs.length; + + + // We need to hide all CRBs that interfere with one of the main + // discovery portlets. We'll assume that these main portlets all + // appear at the top. So we have to find out the bottom-most + // boundary of all of these. This calculation is in a function, + // because it gets re-computed every time one of those fixed + // portlets expands or collapses. + + var fixedPortlets = $j('div.portlet').not('div.pmc_para_cit'); + var mainPortletsBottom = getMainPortletsBottom(); + + // Attach a handler to all of these fixed portlets, that gets activate + // whenever a shutter button clicks. Since the shutter button click + // causes the size to change, we have to re-hide/show CRBs as necessary. + fixedPortlets.find("a.portlet_shutter") + .click(fixedPortletShutterClick); + + // These will store the values of the inner and outer height + // of a 'collapsed' (two_line) link. But note that since the links + // are initially in the expanded state, we have to defer grabbing these + // values until the first time we collapse one of them. + // (linkHeight == -1) marks that we haven't gotten the values yet. + var linkHeight = -1; + var linkOuterHeight; + + // This points to the current expanded CRB, or to null if there isn't one. + var currentExpandedCrb = null; + + // Set the hoverintent mouseover event handlers for all
  • s. + // I tweaked sensitivity and interval so that it's not quite so + // sensitive -- I think otherwise users are likely to get annoyed. + crbs.find('li').hoverIntent({ + over: hoverOverCrbLink, + out: hoverOutCrbLink, + sensitivity: 1, + interval: 150 + }); + + // Set a mouse-over event on all CRBs to control an automatic timer. + // The timer causes the CRB to re-collapse if the user hasn't had her + // mouse over it for a while. + crbs.mouseover(clearAutoCollapseTimerHandler); + crbs.mouseleave(setAutoCollapseTimerHandler); + + // Set up the CRB loop driver. The CRBs are initialized a few at a time in + // a loop that's called once a millisecond. This progressive rendering + // improves responsiveness when the page first loads. + + // This is a pointer into the array of CRBs, that's used by the driver loop. + var crbNum = 0; + // How many CRBs to process with each iteration of the driver loop. + var CRB_BATCH_SIZE = 3; + + // Next add poppers for every link in the body of the text. This also + // uses a driver loop. Set it up here. + + // We're interested in all links that have 'bibr' class, and that + // have a @rid attribute. + var allBodyLinks = $j('a.bibr[rid]'); + var numBodyLinks = allBodyLinks.length; + // This acts as a pointer into the array of links, that's used by the + // driver loop. + var bodyLinkNum = 0; + // How many links to process with each iteration of the driver loop. + var BODY_LINK_BATCH_SIZE = 10; + // This is the container div for the poppers that we'll create. This + // should be present in the document from the server. + var blPopperDiv = $j('#body-link-poppers'); + + // We'll keep track of all the poppers we create, indexed by the @rid + // value of the link. That way, we're reuse duplicate poppers. + var blPoppers = {}; + + // The driver loops are chained together. The order should not matter. + // At the end of both driver loops, then we set hoverIntent event handlers + // on the body links. This step must be performed last. That's because + // both the ncbipopper (set up by the body link driver loop) and the CRB + // functionality (which sets hover events to highlight the text and the + // corresponding links in the CRB) use hoverIntent; so the events + // conflict. To fix it, I put calls to the ncbipopper open() and + // close() methods at the end of the CRB hover event handlers, thus + // chaining the handlers together. + crbDriverLoop(); + + + //----------------------------------------------------------------- + // Here is the CRB driver loop, which handles a few CRBs, and then + // queues itself up to execute again after one ms. + function crbDriverLoop() { + for (var i = 0; i < CRB_BATCH_SIZE; ++i) { + if (crbNum >= numCrbs) break; + positionOneCrb($j(crbs[crbNum])); + crbNum++; + } + // Set up to call ourselves after one millisecond + if (crbNum < numCrbs) { + setTimeout(crbDriverLoop, 1); + } + // When this driver loop is done, it daisy-chains to the + // body-link loop + else { + setTimeout(bodyLinkDriverLoop, 1); + } + }; + + //----------------------------------------------------------------- + // This is a similar driver loop for setting the poppers on all + // of the body links. + function bodyLinkDriverLoop() { + for (var i = 0; i < BODY_LINK_BATCH_SIZE; ++i) { + if (bodyLinkNum >= numBodyLinks) break; + addBodyLinkPopper($j(allBodyLinks[bodyLinkNum])); + bodyLinkNum++; + } + // Set up to call ourselves after one millisecond + if (bodyLinkNum < numBodyLinks) { + setTimeout(bodyLinkDriverLoop, 1); + } + + // When this driver loop is done, it invokes a function that + // sets all of the custom hoverIntent handlers on the body links. + + // PMC-15007 - Took this out. It was causing the popper to go away whenever + // you mouseout of the trigger link. This was causing the flashing problem + // described in that ticket. But worse, it was preventing you from being able + // to mouse over the popper without the popper going away. + else { + //setTimeout(setBodyLinkHoverHandlers, 1); + } + } + + //----------------------------------------------------------------- + // This sets the hoverIntent handlers on all body links. As mentioned + // above, this must be done last. + // PMC-15007 - this is not called. See above. + function setBodyLinkHoverHandlers() { + $j('a.bibr[rid]') + .hoverIntent({ + over: hoverOverBodyLink, + out: hoverOutBodyLink, + sensitivity: 1, + interval: 150 + }); + } + + //----------------------------------------------------------------- + // This function absolutely positions one of the CRBs. For progressive- + // rendering, this gets called from the driver loop above. + function positionOneCrb(jcrb) + { + // Get the paragraph to which this CRB corresponds + var rid = jcrb.attr('rid'); + var p = $j('#' + rid); + // If there is no paragraph, just hide the CRB and return + if (p.length != 1) { + jcrb.hide(); + jcrb.data('myTop', 0); + return; + } + // Record this paragraph + jcrb.data('myParagraph', p); + + + // We'll compute the "visual top", which takes into account the + // reported top, the top margin, and a fudge factor. + var myTop = parseInt(p.position().top) + parseInt(p.css('marginTop')) - 7; + jcrb.data('myTop', myTop); + + // Do some work for each link within this CRB + var crbLinks = jcrb.find('li'); + crbLinks.each(function() { + var li = $j(this); + + // Get the expanded heights of each of the
  • s. + var h = li.height(); + + + // Find the matching links in the body (might be several) + var referenceId = li.attr('reference_id'); + var bodyLinks = p.find('a.bibr[rid="' + referenceId + '"]'); + + // Set a data pointer from the body links back to this CRB link + bodyLinks.data('myCrbLink', li); + + // Now find myBodyLinks. Note that this is *not* the same as the + // bodyLinks above. Here's the difference. For + // a body link to have a myCrbLink pointing to this CRB link, it + // must be in the paragraph corresponding to this CRB. But, the + // CRB link's myBodyLinks lists *all* of the links in the body, + // regardless of paragraph, that correspond to the same citation. + var myBodyLinks = $j('a.bibr[rid="' + referenceId + '"]'); + + // Store these data in the CRB link + li.data({ + 'myCrb': jcrb, // reference from link back to containing CRB + 'expandedHeight': h, + 'myBodyLinks': myBodyLinks + }); + }); + + // Now collapse the CRB into its default resting state + + // First collapse each of the
  • s by adding the 'two_line' class. + crbLinks.each(function() { + var li = $j(this); + li.removeClass('expanded') + .removeClass('highlight') + .addClass('two_line'); + li.data('isCollapsed', true); + + // If this is the first-ever 'two_line' link that we've seen, + // then record its heights + if (linkHeight == -1) { + linkHeight = li.height(); + linkOuterHeight = li.outerHeight(true); + } + }); + + // Get the height of the paragraph. This gives the maximum height + // of the 'collapsed' CRB. In other words, in the collapsed state, + // the CRB should not extend below the bottom of the para. + var pHeight = p.height(); + + // The number of links in this CRB, as delivered from the server. + var numLinks = crbLinks.length; + + // Calculate how many links will fit on this CRB, according to the + // height of the paragraph. + // Note that this is a little bit tricky. When we figure out whether + // or not we need to hide links, and, as a consequence, add the "see more" + // link, then we *do not* take the height of the "see more" link into + // account. But, once we know that we need to hide links, and thus add + // the "see more" link, then we need to take the height of that link into + // account to figure out *how many links to hide*. + var linksFit = Math.floor( pHeight / linkOuterHeight ); + + // Maximum number of links to show here is based either on policy + // (MAX_LINKS_PER_CRB) or on the number that will fit. + var maxLinks = Math.min(MAX_LINKS_PER_CRB, linksFit); + + // See if we need to hide some. + if (numLinks > maxLinks) { + // We need to take off some links. But first, let's add the "more" + // link, and measure the total expanded height. + + // Add the "more" link. This gets appended as the next sibling of + // the
      . Measure the height before and after, so we know how + // much height this link contributes. + var heightBefore = jcrb.height(); + + var moreLink = $j("See more ..."); + jcrb.find('div.portlet_content').append(moreLink); + + // Add the event handler. + moreLink.click(moreLinkClick); + + // Measure the expanded height + var expandedHeight = jcrb.height(); + + // Figure out how much the "see more" link added + var moreLinkHeight = jcrb.height() - heightBefore; + + // Based on this new information, figure out how many links we will + // show (never go below 0). + var linksToShow = + Math.max(0, Math.floor( (pHeight - moreLinkHeight) / linkOuterHeight )); + + // Now hide the excess links. For each, record that it is an extra. + for (var i = linksToShow; i < numLinks; i++) { + $j(crbLinks[i]) + .hide() + .data('isExtra', true); + } + + // If we're showing no links, change "See more ..." to "See links ..." + if (linksToShow <= 0) moreLink.text("See links ..."); + + // Measure the height again and save as collapsedHeight + var collapsedHeight = jcrb.height(); + + // Now store a bunch of this data with the CRB DOM object + jcrb.data({ + 'expandedHeight': expandedHeight, + 'collapsedHeight': collapsedHeight, + 'collapsedNumLinks': linksToShow + }); + } + + // Whether or not we need to hide any links, initialize + // the isCollapsed flag, and the autoCollapseTimerId. + jcrb.data({ + 'isCollapsed': true, + 'autoCollapseTimerId': -1 + }); + + // Capture the width prior to repositioning. Since we're changing + // from position-static to position-absolute, we'll need to set + // this to a fixed value. + var width = jcrb.css('width'); + + // The final thing we do is to position it next to the para, + // and make it visible. + jcrb.css( { + 'position': 'absolute', + 'visibility': 'visible', + 'width': width, + 'top': myTop + }); + + // If it would interfere with one of the fixed portlets, hide it. + if (myTop <= mainPortletsBottom) jcrb.hide(); + } + + //----------------------------------------------------------------- + // This function handles the mouseover event when the user hovers + // over one of the CRB links items. + function hoverOverCrbLink(event) { + //console.info("hoverOverCrbLink"); + var link = $j(this); + // Call expandLink with checkHidden false - we know its not + // hidden, because the user has his mouse over it. + expandLink(link, false); + } + + //----------------------------------------------------------------- + // This gets called to highlight a particular link in a CRB. + // It checkHidden is true, then this first checks to see if this + // link's CRB is collapsed, and this link is hidden. If so, then + // this first expands the CRB. + // [Note that the 'checkHidden' feature is not used. We originally + // implemented this so that if the user hovers over a body link + // corresponding to an "extra" CRB link, then that would cause the + // CRB to expand to show it. But David didn't like so much animation + // going on in the disco column while the user is moving his mouse + // around over the body. Even though it's not used, I left the code in.] + + function expandLink(link, checkHidden) { + //console.info("expandLink"); + var jcrb = link.data('myCrb'); + jcrb.addClass("stretched"); + // Set the z-index. This ensures that when the CRBs are expanded, they + // are layered on top of ones that are collapsed. + jcrb.css('z-index', 1); + + // Enforce the policy that only one CRB is stretched at a time. + collapseOtherCrbs(jcrb); + + // See if we need to expand the whole CRB (equivalent to "see more"). + if ( checkHidden && + link.data('isExtra') && + jcrb.data('isCollapsed') ) + { + expandCrb(jcrb); + } + + var h = link.data('expandedHeight'); + link.data('isCollapsed', false); + + // Animate the height change. Whenever we do this, we have + // to specify the exact numeric value of the final height. + // When done, we set the CSS property back to 'auto'. + link.animate( + {'height': h}, + { 'complete': function() { + jcrb.css({height: "auto"}); + }, + 'duration': 'fast' + } + ); + + // Do this *after* kicking off the animation, because this is + // what causes the actual height of the link to change. + link.removeClass('two_line') + .addClass('expanded'); + + // This causes the link in the CRB, and all its corresponding + // links in the body, to be highlighted with a special color. + highlightLink(link); + } + + + //----------------------------------------------------------------- + // This function handles the event when the user moves the mouse + // out of the
    • items. + function hoverOutCrbLink(event) { + //console.info("hoverOutCrbLink"); + var link = $j(this); + unexpandLink(link); + } + + //----------------------------------------------------------------- + function unexpandLink(link) { + //console.info("unexpandLink"); + var jcrb = link.data('myCrb'); + + link.removeClass('expanded') + .addClass('two_line'); + // Remove the highlight color from the link in the CRB and + // all the corresponding links in the body. + unhighlightLink(link); + + link.animate( + {'height': linkHeight}, + { 'complete': function() { + link.data('isCollapsed', true); + // Check if we still need the 'stretched' class on the + // CRB parent. + checkStretched(jcrb); + // Reset the height property to auto. + jcrb.css({height: "auto"}); + + }, + 'duration': 'fast' + } + ); + } + + //----------------------------------------------------------------- + // This function handles the hovering over a body link. Note that + // some of these will have corresponding CRB links, and some will + // not. + function hoverOverBodyLink(event) { + //console.info("hoverOverBodyLink"); + var bodyLink = $j(this); + + /* PMC-15150 - reduce "christmas tree effect", don't highlight + CRB when user hovers over body link. + + var crbLink = bodyLink.data('myCrbLink'); + if (crbLink) { + highlightLink(crbLink); + var jcrb = crbLink.data('myCrb'); + clearAutoCollapseTimer(jcrb); + } + */ + + // If there's a popper associated with this, open it. + // Both this and JIG's ncbipopper use hoverIntent, so we have + // to chain these events together. + var popper = bodyLink.data('ncbipopper'); + if (popper) popper.open(); + } + + //----------------------------------------------------------------- + function hoverOutBodyLink(event) { + //console.info("hoverOutBodyLink"); + var bodyLink = $j(this); + var crbLink = bodyLink.data('myCrbLink'); + if (crbLink) { + unhighlightLink(crbLink); + var jcrb = crbLink.data('myCrb'); + setAutoCollapseTimer(jcrb); + } + + // If there's a popper associated with this, close it + var popper = bodyLink.data('ncbipopper'); + if (popper) popper.close(); + } + + //----------------------------------------------------------------- + // This function highlights a CRB link, and all of the body + // links that correspond to it. + function highlightLink(link) { + //console.info("highlightLink"); + link.addClass('highlight'); + link.data('myBodyLinks').addClass('highlight'); + } + + //----------------------------------------------------------------- + // This function unhighlights a CRB link, and all of the body links + // that correspond to it. + function unhighlightLink(link) { + //console.info("unhighlightLink"); + link.removeClass('highlight'); + link.data('myBodyLinks').removeClass('highlight'); + } + + //----------------------------------------------------------------- + // This function removes, when necessary, the 'stretched' class on + // the CRB object. If the jcrb isCollapsed is true, and all of + // the links' isCollapsed are true, then clear this class. Note + // that we don't check whether or not to *set* the class - that is + // done instantly whenever any of those things starts to expand. + function checkStretched(jcrb) { + //console.info("checkStretched"); + if (!jcrb.data('isCollapsed')) return; + + var hasExpandedLink = false; + jcrb.find('li').each(function() { + if (!$j(this).data('isCollapsed')) hasExpandedLink = true; + }); + if (hasExpandedLink) return; + + jcrb.removeClass('stretched'); + jcrb.css('z-index', 0); + } + + //----------------------------------------------------------------- + // Click handler for the "see more" link at the bottom of the portlet. + // Note that this might be either a "see more" or a "see less" click. + function moreLinkClick(event) { + //console.info("moreLinkClick"); + var moreLink = $j(this); + var jcrb = moreLink.parents('div.pmc_para_cit'); + + // If we're collapsed, then we need to expand + if (jcrb.data('isCollapsed')) { + expandCrb(jcrb); + } + else { + collapseCrb(jcrb); + } + + // Override the default action + return false; + } + + //----------------------------------------------------------------- + // This function animates the expansion of a CRB to show all of the + // links. We will never call this unless this is a collapsible CRB. + // (In other words, if all the links fit within the height of the + // paragraph, then we'll guarantee that we'll never call this + // function.) + + function expandCrb(jcrb) { + //console.info("expandCrb"); + + // Make sure this CRB is now on top + collapseOtherCrbs(jcrb); + + // Update the state variable + jcrb.data('isCollapsed', false); + currentExpandedCrb = jcrb; + + // Add the 'stretched' class to the outer div + jcrb.addClass("stretched"); + jcrb.css('z-index', 1); + + // Change the label on the "more" link + jcrb.find('.seemore').text("See less ..."); + + // Animate the height change. + var d = jcrb.data(); + jcrb.animate( + {'height': d.expandedHeight}, + { 'complete': function() { + jcrb.css({height: "auto"}); + }, + 'duration': 'fast' + } + ); + + // Show all the links. This is done *after* we kick off + // the animation because this is the step that causes + // the actual height to change. + var crbLinks = jcrb.find('ul li.two_line'); + var totalNumLinks = crbLinks.length; + for (var i = d.collapsedNumLinks; i < totalNumLinks; ++i) { + $j(crbLinks[i]).show(); + } + } + + //----------------------------------------------------------------- + // This function animates the collapse of the CRB into it's default + // resting state, including ensuring that all child links are in + // their two_line, collapsed state. This gets called from two + // places: when the user clicks on "see less", and when the + // auto-collapse timer triggers. + + function collapseCrb(jcrb) { + //console.info("collapseCrb"); + + var d = jcrb.data(); + + // Change the label on the link + var linkText = d.collapsedNumLinks > 0 ? "See more ..." : "See links ..."; + jcrb.find('.seemore').text(linkText); + + // Get the link children + var crbLinks = jcrb.find('ul li'); + var totalNumLinks = crbLinks.length; + + // Animate the height change. We use the 'complete' option of + // the animation function to hide all of the excess links after + // the animation is done. If we hid them all right away, the + // height would change abruptly (no animation). + jcrb.animate( + { 'height': d.collapsedHeight }, + { 'complete': function() { + // For all links + crbLinks.each(function() { + var li = $j(this); + + // Put the link into its collapsed state + li.removeClass('expanded') + .removeClass('highlight') + .addClass('two_line'); + li.data('isCollapsed', true); + + // Hide 'overflow' links + if (li.data('isExtra')) li.hide(); + }); + + // Now put the CRB object itself into the collapsed state + jcrb.data('isCollapsed', true); + jcrb.removeClass('stretched'); + jcrb.css('z-index', 0); + + // Reset the height property to auto. + jcrb.css({height: "auto"}); + }, + 'duration': 'fast' + } + ); + + currentExpandedCrb = null; + } + + //----------------------------------------------------------------- + // This function sets a timer on a CRB object so that it will + // reclose after a fixed period of time after the last time that + // the user has moved his/her mouse out of the div. This is set + // up as a handler for mouseleave events. Note that it the CRB + // is already collapsed, this does nothing. + + // Handler for the mouse-out event for the whole CRB div. + function setAutoCollapseTimerHandler(event) { + //console.info("setAutoCollapseTimerHandler"); + setAutoCollapseTimer($j(this)); + } + + // This does the work. It is also called from the handler for + // the mouse-out event on a corresponding body link. + function setAutoCollapseTimer(jcrb) { + //console.info("setAutoCollapseTimer"); + if (jcrb.data('isCollapsed')) return; + + // Set the timer + var timerId = window.setTimeout(function() { + collapseCrb(jcrb); + }, AUTOCOLLAPSE_TIMEOUT); + + // Record it as a data attribute on this object + jcrb.data('autoCollapseTimerId', timerId); + } + + //----------------------------------------------------------------- + // This function clears the auto-collapse timer. It is set up as + // a handler for the mouseover event. + + // Handler for the mouse-over event for the whole CRB div. + function clearAutoCollapseTimerHandler(event) { + //console.info("clearAutoCollapseTimerHandler"); + clearAutoCollapseTimer($j(this)); + } + + // This does the work. It is also called from the handler for + // the mouse-over event on a corresponding body tag. + function clearAutoCollapseTimer(jcrb) { + //console.info("clearAutoCollapseTimer"); + var timerId = jcrb.data('autoCollapseTimerId'); + if (timerId == -1) return; + + window.clearTimeout(timerId); + jcrb.data('autoCollapseTimerId', -1); + } + + //----------------------------------------------------------------- + // This function is used to collapse all of the *other* CRBs. + // It is invoked whenever we highlight a link or expand a CRB. + // This makes sure that the focus is always on only one at a time. + function collapseOtherCrbs(jcrb) { + //var cstr = (currentExpandedCrb) ? + // (", currentExpandedCrb = " + currentExpandedCrb.attr('id')) : + // ""; + //console.info("collapseOtherCrbs; jcrb = " + jcrb.attr('id') + cstr); + + /* This used to loop through all of the CRBs, collapsing all of + them except myId. But now I just keep track of the (at most + one) CRB that's currently expanded, and collapse that. + var myId = jcrb.attr('id'); + + crbs.each(function() { + var thisCrb = $j(this); + if (thisCrb.attr('id') != myId) { + collapseCrb(thisCrb); + } + }); + */ + //console.info("Checking, currentExpandedCrb = " + currentExpandedCrb); + if (currentExpandedCrb && currentExpandedCrb.attr('id') != jcrb.attr('id')) { + collapseCrb(currentExpandedCrb); + } + } + + //----------------------------------------------------------------- + // This function is set as an event handler when the user clicks + // on any of the shutter buttons on any of the fixed portlets at the + // top. When these fixed portlets change size, we have to go + // through all the CRBs again and hide/show depending on whether + // or not they are interfering. + // But, because the portlet size change is animated, the new size + // won't be known for a while, so this in turn sets a timer that + // invokes hideInterfering(). + + function fixedPortletShutterClick(event) { + setTimeout(hideInterfering, 200); + } + + //----------------------------------------------------------------- + // hideInterfering iterates through all of the CRBs and hides any + // that would interfere with any of the fixed portlets at the top. + // It is called every time the user clicks a shutter button on one + // of the fixed portlets. + + function hideInterfering() { + var mainPortletsBottom = getMainPortletsBottom(); + crbs.each(function() { + var jcrb = $j(this); + if (jcrb.data('myTop') <= mainPortletsBottom) { + jcrb.hide(); + } + else { + jcrb.show(); + } + }); + } + + //----------------------------------------------------------------- + // This function gets the y-coordinate of the bottom of the lowest + // of the fixed portlets. + + function getMainPortletsBottom() { + var bottom = 0; + fixedPortlets.each(function() { + var p = $j(this); + var top = parseInt(p.position().top) + parseInt(p.css('marginTop')); + var thisBottom = top + p.height(); + bottom = Math.max(bottom, thisBottom); + }); + return bottom; + } + + //----------------------------------------------------------------- + // This function adds a popper to one of the links in the body. + // It is called by the driver loop above. The link is guaranteed + // to have the 'bibr' class, and a @rid attribute. + var popperCount = 0; + function addBodyLinkPopper(link) { + // If we never found a container for our poppers in the source + // document, then we can't do anything. + if (blPopperDiv.length < 1) return; + + var rid = link.attr('rid'); + // Some id's from the backend have special characters, so we + // need to escape them whenever they're used as jQuery selectors. + // See PMC-6384 and http://tinyurl.com/2qfqgc. + var ridEscaped = rid.replace(/:/g, "\\:") + .replace(/\./g, "\\.") + .replace(/·/g, "\\·"); + + var popperId = "body-link-popper-" + rid; // + "-" + popperCount; + var popperIdEscaped = "body-link-popper-" + ridEscaped; // + "-" + popperCount; + popperCount++ + + // If we've already made a popper for this particular reference, + // let's use that. + var popper = blPoppers[rid]; + + // Otherwise, we need to make one. + if (!popper) { + //console.info("Adding pooper for body link, rid = " + rid); + + popper = $j("
      ", { + 'id': popperId, + 'class': 'body-link-popper', + 'style': 'display: none' + }); + + // If this link has a corresponding CRB link, then we'll + // use that for the popper text + var myCrbLink = link.data('myCrbLink'); + if (myCrbLink) { + // Get the popper text from the CRB link + //console.info("Got a CRB link, rid = " + rid); + popper.append(myCrbLink.children("a").contents().clone()); + popper.append(myCrbLink.children(".alt-note").children().clone()); + + // Find the pubmed link, if exists + var $pmidLink = myCrbLink.find("a[href *= 'pubmed']"); + //console.info("myCrbLink = %o", myCrbLink); + //console.info("pmidLink = %o", $pmidLink); + var pubmedLink = $pmidLink.length > 0 + ? "[PubMed] " + : ""; + popper.append("

      " + pubmedLink + "[" + + "Ref list]

      "); + } + + // Otherwise we'll copy the text from the references section. + else { + // Find the text for this popup from the element pointed to by + // @rid. This will be in the reference section of the article. + //console.info("Not a CRB link, rid = " + rid); + var refElem = $j('#' + ridEscaped); + + // Check to make sure that we found something + if (refElem.length > 0) { + + var citeText = refElem.text(); + var popText = $j.trim(citeText); + + // If the @href element of the current tag (currElem) + // has a '#' portion, meaning that it is a link to the + // reference list in this same article, then indicate + // that in the popup text. + if (link.attr("href").charAt(0) == '#') { + popText += ' [Ref list]'; + } + } + popper.append(popText); + } + + // Put this new popper into the container div. + blPopperDiv.append(popper); + + // And record it for posterity. + blPoppers[rid] = popper; + } + + // FIXME: + // It would be nice if I could pass the configuration parameters + // to JIG as a JS object; but it doesn't work. + //var popperConfig = { + // 'destSelector': ('#' + popperId) + //}; + // Note that I have to set a fixed width here. "auto" doesn't work. + // Nor does setting it in the CSS file. + + // FIXME: This is a little debug feature that lets you enable the + // popper's autoAdjust feature. Because of JSL-1519, I have it + // turned off by default. + var loc = window.location.href; + var qs = loc.substring(loc.indexOf("?") + 1); + var qsParams = qs.split(/&/); + var numQsParams = qsParams.length; + var gotAutoAdjust = false; + for (var i = 0; i < numQsParams; ++i) { + if (qsParams[i] == "__autoadjust") gotAutoAdjust = true; + } + //console.info("qsParams = " + qsParams[0] + ", " + qsParams[1]); + gotAutoAdjust = true; + var adjustFitStr = gotAutoAdjust ? 'autoAdjust' : 'none'; + + link.addClass('jig-ncbipopper') + .data('jigconfig', { + destSelector: "#" + popperIdEscaped, + isTriggerElementCloseClick: false, + hasArrow: true, + width: "30em", + adjustFit: adjustFitStr, + triggerPosition: "top right" + }); + $j.ui.jig.scan(link); + } + } /* end of initialize() */ +})(jQuery); + diff --git a/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/3855312.css b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/3855312.css new file mode 100644 index 0000000..d4944be --- /dev/null +++ b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/3855312.css @@ -0,0 +1,986 @@ + +.container { + margin: 0 1.3em; +} +.four_col.last { + width: 33.3%; + margin-right: -6px; +} +.four_col .portlet { + margin-top: 0; +} +div#besetsel-form h3 { + color: white; +} +div.besetsel-body { + margin-left: 1em; +} +div#besetsel-form div { + margin-bottom: .5em; +} +div#besetsel-form a { + color:white; +} +div#besetsel-form a:hover { + background-color: #666; +} +.sidecontentpullout { + background-color: #c00; + color: white; + padding: 4px 3px; + -moz-border-radius-bottomleft: 1em; + -moz-border-radius-topleft: 1em; + -webkit-border-bottom-left-radius: 1em; + -webkit-border-top-left-radius: 1em; + border-bottom-left-radius: 1em; + border-top-left-radius: 1em; + font-size: 1.2em; + opacity: 1 !important; +} +.sidecontentpullout:hover { + background-color: #444444; + color: white; + opacity: 1 !important; +} +.sidecontent { + font-size: 1.2em; + background-color: black; + color: white; + -moz-border-radius-bottomleft: 1em; + -webkit-border-bottom-left-radius: 1em; + border-bottom-left-radius: 1em; + zoom: 1; + z-index: 10000 !important; +} +.sidecontent > div > div { + padding-left: 10px; + padding-right: 40px; +} +.sidecontent h2 { color: white; } +.sidecontent a { color: white; display: block; margin: 0; padding: 2px 5px;} +.sidecontent a:hover { background-color: #666;} +.sidecontent, .sidecontentpullout { position: fixed !important; } +.sctable td { border: none; padding-right: 5px;} +body{font:62.5%/1.3846 arial,helvetica,clean,sans-serif;background-color:#ccc;margin:0} +.grid{font-size: 1.3em} +img{border:0} +abbr,acronym{cursor:help;border-bottom:1px dotted #000;} +blockquote{margin:1.3846em 1em;} +p,table,pre,fieldset,dl{margin: 0.6923em 0;} +ol,ul{margin: 0.6923em 1em 0.6923em inherit} +dl dd{margin-left:1em;} +table{border-collapse:collapse;margin:1.3846em 0;} +thead{border-bottom:1px solid #eee;} +tfoot{border-top:1px solid #eee;} +th{text-align:center;background-color:#f0f0f0;} +th,td{padding:0.2em;border:1px solid #ddd;} +caption{margin-bottom:.5em;text-align:center;} +button{cursor:pointer;} +input,button,textarea{margin:2px;} +input[type="checkbox"] {margin: 3px 3px 3px 4px;} +textarea {font-family: monospace; font-size: 1.2296em; *font-size:1em; vertical-align:baseline;} +h1,.h1{font-size: 1.3846em; line-height:1.5; margin:1em 0 .5em; } +h2,.h2{font-size: 1.2307em; line-height:1.125; margin:1.125em 0 .5625em;} +h3,.h3{font-size: 1.0769em; line-height:1.2857; margin:1.2856em 0 .6428em; } +h4,h5,h6,h3.inline{font-size: 1em; margin:1.3846em 0 .6923em; } +h5,.h5{font-style:italic;font-weight:normal;} +h6, .h6 {font-weight: normal;} +h4,.h4{color:#59331f;} +h3,.h3{color:#724128;} +h2,.h2{color:#985735;} +h1,.h1{color:#000;} +h3.inline,h4.inline,h5.inline,h6.inline{display:inline;float:left;margin:0 0 -0.125em;padding-right:.3em} +.whole_rhythm {margin: 1.3846em 0} +.half_rhythm {margin: .6923em 0} +.no_top_margin{margin-top:0} +.no_bottom_margin{margin-bottom:0} +.no_margin{margin:0} +.content a{color:#2f4a8b} +.content a:hover,.content a:active{color:#985735} +.content a:visited{color:#642a8f} +.inline_list,.inline_list_right{list-style-type:none;margin:0;padding:0} +.inline_list li{display:inline;margin-right:.3em} +.inline_list_right li{display:inline;margin-left:.4em;} +.column_list{list-style-type:none;margin:0;padding:0} +.column_list li{float:left;width:8em} +.offscreen{text-indent:-9999px} +.offscreen_noflow{float:left;text-indent:-9999em;_display:block;margin:0;padding:0;height:0;} +.left{float:left} +.right{float:right} +.align_right{text-align:right} +.hidden{display:none} +.nowrap{white-space:nowrap} +.noborder{border:0} +.no_max_width{max-width:none} +.inline_block{display:-moz-inline-box;display:inline-block;*display:inline;zoom:1;} +.clearfix:before,.clearfix:after{content:"";display:table}.clearfix:after{clear:both}.clearfix{zoom:1} +.small,sup,sub{font-size:.8461em; line-height: 1.6363em;} +.small sup,.small sub{font-size:1em} +sup,sub{position:relative;vertical-align:baseline;} +sup{top:-.5em} +sub{top:.25em} +.shadow {-webkit-box-shadow: 0.4em 0.4em 0.5em rgba(0,0,0,.3);-moz-box-shadow: 0.4em 0.4em 0.5em rgba(0,0,0,.3);box-shadow: 0.4em 0.4em 0.5em rgba(0,0,0,.3)} +.iconblock{overflow:hidden} +.icnblk_img{text-decoration:none;float:left;margin-right:1em;cursor:pointer} +.icnblk_img_right { float: right; margin-right: 0; margin-left: 1em;} +.icnblk_cntnt{display:table-cell;vertical-align:top;*zoom:1} +.icnblk_cntnt h1,.icnblk_cntnt h2,.icnblk_cntnt h3,.icnblk_cntnt h4{margin:0 0 .6923em} +.grid{ min-width:800px; max-width:1200px; width:100%; clear:both; margin:0 auto; text-align:left;overflow:hidden } +.col { margin-right: 1%; float: left; background-color: #fff; overflow:hidden; } +.last { *zoom:1; *margin-right:0; _margin-right:-6px; } +.one_col { width: 7.3333%; } +.two_col { width: 15.6664%; } +.three_col { width: 23.9999%; } +.four_col { width: 32.3333%; } +.five_col { width: 40.6666%; } +.six_col { width: 48.9999% } +.seven_col { width: 57.3333%; } +.eight_col { width: 65.6666%; } +.nine_col { width: 73.9999%; } +.ten_col { width: 82.3333%; } +.eleven_col { width: 90.6666%; } +.twelve_col { width: 98.9999%; } +@media screen and (max-width: 1200px) { + body > .grid > .twelve_col { width: 100%; } +} +h1.res_name a.imglogo { + background: transparent url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/251741) no-repeat scroll 0% 0%; + display: block; + height: 45px; + text-indent: -9999px; + width: 165px; +} +.dbheader .headerimage { background-image: url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/3818869); } +.container { margin: 0 1.6em;} +body.object-only { + background-color: white; +} + +.pmc-grid { + width: 1200px; +} +body.article.scanned-article-browse .pmc-grid { + width: 1200px; +} +body.article.scanned-article-browse .eight_col { + width: 70.8333%; +} +body.article.scanned-article-browse .four_col { + width: 27.1667%; +} +.pmc-page-banner { + width: 100%; + text-align: center; +} +div.messagearea { + margin: 1em 1em 1em 3em; + padding: 0; + border: solid 1px #DDDDDD; + background: #F6F6F6; + clear: both; +} +#messagearea.empty { + border: none; + clear: both; +} +ul.messages { + font-family: Arial; + margin: 0; + padding: 0; + list-style-type: none; + list-style-image: none; +} +ul.messages li { + margin: 0.22em 0 0.22em; + padding: 0.231em 0.462em; + background-repeat: no-repeat; +} +div.nomargin { + margin-right: 0; +} +body.table .grid { + overflow: inherit; +} +body.table .grid .col { + overflow: auto; +} +body.table div.hide-overflow.article.lit-style.page-box-wide { + overflow: auto; +} +.pmc_logo { + background: transparent url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/3005255) no-repeat scroll left top; + display: block; + height: 33px; + width: 110px; + text-indent: -9999px; + margin-left: 1em; +} +.NLMLogo { + line-height: 1.2em; + font-size: 0.692em; +} +.NLMLogo a { + color: #555; +} +.grid .article .goto,.ui-ncbilinksmenu{font-family:arial,helvetica,clean,sans-serif;} +.grid .article .goto,body .ui-ncbilinksmenu{font-size:.86666em !important} +.ui-ncbipopper-basic{font-size:1.3em} +.verse-group{font-style:italic;margin-left:1.3846em} +.space{margin-top:4.1538em} +body .page-box,body .page-box-wide{background-color:#fff;border:0;margin:0;border-radius:0} +body .page-box-wide{padding:2em 1.6em} +body .page-box{max-width:none;padding:0 1em 1em 3em} +body div.stdnoportlets{padding:0} +.pmc-page-breadcrumbs{margin:1em 1em 1em 3em} +body .navlink-box{margin:0} +.journals .page-box-wide{padding:0} +.retraction{font-size:1.0769em} +.pmc-warning-box{border:1px solid #e88;padding:.6923em} +.boxed-text-box,.links-box{border:1px solid #ddd;background-color:#f6f6f6;padding:0 0.6923em} +.boxed-text-box h2,.boxed-text-box h3,.boxed-text-box h4,.boxed-text-box h5,.boxed-text-box h6{margin:0.6923em 0} +.boxed-text-box h3.inline, +.boxed-text-box h4.inline, +.boxed-text-box h5.inline, +.boxed-text-box h6.inline{ + margin-top: 0; + margin-bottom: 0; +} +noscript p.nojs { + background: #ffb url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/67327) no-repeat 5px center; + padding: 4px; + padding-left: 28px; + margin:0; +} +.grid .lit-style{font: 1.1538em/1.4666 Georgia, 'Times New Roman', serif} +.grid .lit-style h1,.grid .lit-style h2,.grid .lit-style h3,.grid .lit-style h4,.grid .lit-style h5,.grid .lit-style h6{font-family:arial,helvetica,clean,sans-serif} +.grid .lit-style h1{font-size:1.2em} +.grid .lit-style h2{font-size:1.0666em} +.grid .lit-style h3{font-size:.9333em} +.grid .lit-style h4,.grid .lit-style h5,.grid .lit-style h6{font-size:.86666em !important} +.grid .lit-style h3.inline{line-height:1.5714} +.grid .lit-style h4.inline,.grid .lit-style h5.inline,.grid .lit-style h6.inline{line-height:1.6923} +.grid .lit-style .fm-sec{font:.8666em/1.3846 arial,helvetica,clean,sans-serif;} +.grid .lit-style .fm-sec h1{font-size:1.3846em} +.grid .lit-style .fm-sec h2{font-size:1.2307em} +.grid .lit-style .fm-sec h3{font-size:1.0769em} +.grid .lit-style .fm-sec h4{font-size:1em} +.uppercase{text-transform: uppercase;letter-spacing:.06em;} +.caps{text-transform:capitalize;} +.small-caps{text-transform: lowercase; font-variant:small-caps;letter-spacing:.02em;} +.overline{text-decoration:overline;} +.roman{font-style:normal} +.greek{font-family:Georgia, Times,"Times New Roman", serif} +.lower-alpha{list-style-type:lower-alpha} +.upper-alpha{list-style-type:upper-alpha} +.lower-roman{list-style-type:lower-roman} +.upper-roman{list-style-type:upper-roman} +.circle{list-style-type:circle} +.square{list-style-type:square} +.simple-list{list-style-type:none} +.first-line-outdent{list-style-type:none} +.first-line-outdent li:first-letter{margin-left:-1.5em} +.large-number-list{margin-left:2.75em;*margin-left:3em} +.labeled-list{} +.labeled-list dt,.labeled-list dd{display:inline;margin:0} +.labeled-list dd{margin-left:1.5em} +.labeled-list dd:after{content:'\A';white-space:pre} +.temp-labeled-list{} +.temp-labeled-list dt{float:left;margin-right:.8em} +.temp-labeled-list dd{vertical-align:top;display:table-cell;*display:inline-block} +.label{margin-right:1em;} +.figure{margin: 1.3846em 0} +.eight_col img.fullwidth { width: 100% !important; } +.subtitle{font-weight:bold;margin-top:-.5em} +.def{cursor:help} +.box.warn {border:1px solid #000;margin:42px 0 45px 0;padding:0 0 35px 0;} +.box.warn h3 {background-color:#f7d118;border-bottom:1px solid #000;height:21px;margin: 0 0 35px;padding-top:2px;text-align:center;} +.box.warn p {padding: 0 35px 0 35px;} +.box.warn * {color: #000;} +.default_table tfoot{border:none} +.default_table thead{border:none} +.default_table th{background-color:inherit} +.default_table th,.default_table td{border:none} +table[frame='void']{border:0} +table[frame='above']{border-top:1px solid #000} +table[frame='below']{border-bottom:1px solid #000} +table[frame='hsides']{border-top:1px solid #000;border-bottom:1px solid #000} +table[frame='vsides']{border-left:1px solid #000;border-right:1px solid #000} +table[frame='lhs']{border-left:1px solid #000} +table[frame='rhs']{border-right:1px solid #000} +table[frame='box'],table[frame='border']{border:1px solid #000} +table[rules='none'] td{border:0} +table[rules='rows'] tr{border-top:1px solid #888;border-bottom:1px solid #888} +table[rules='cols'] td,table[rules='cols'] th{border-left:1px solid #888;border-right:1px solid #888} +table[rules='groups'] thead+tbody,table[rules='groups'] tfoot+tbody,table[rules='groups'] tbody+tbody{border-bottom:1px solid #888} +table[rules='groups'] tbody+tfoot,table[rules='groups'] thead+tfoot,table[rules='groups'] thead+tbody{border-top:1px solid #888} +table[rules='groups'] col,table[rules='groups'] colgroup{border:0} +table[rules='groups'] col+col,table[rules='groups'] colgroup+colgroup{border-left:1px solid #888} +table[rules='all'] td,table[rules='all'] th{border:1px solid #888} +table[rules='cols'] td:first-child,table[rules='cols'] th:first-child,table[rules='all'] td:first-child,table[rules='all'] th:first-child{border-left:0} +table[rules='cols'] td:last-child,table[rules='cols'] th:last-child,table[rules='all'] td:last-child,table[rules='all'] th:last-child{border-right:0} +table[rules='rows'] tr:first-of-type,table[rules='all'] tr:first-of-type{border-top:0} +table[rules='rows'] tr:last-of-type,table[rules='all'] tr:last-of-type{border-bottom:0} +table[rules='rows'] thead+tfoot,table[rules='rows'] thead+tbody,table[rules='rows'] tbody+tbody,table[rules='rows'] tbody+tfoot{border-top:1px solid #888} +table[rules='all'] tr:first-of-type td,table[rules='all'] tr:first-of-type th{border-top:0} +table[rules='all'] tr:last-of-type td,table[rules='all'] tr:last-of-type th{border-bottom:0} +table[rules='all'] thead+tfoot,table[rules='all'] thead+tbody,table[rules='all'] tbody+tbody,table[rules='all'] tbody+tfoot{border-top:1px solid #888} +th[align='left'] {text-align:left;} +th[align='right'] {text-align:right;} +th[align='justify'] {text-align:justify;} +.tgt_light{background:transparent url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/2846531) no-repeat 100% -1%;padding-right:17px;margin-right: 3px} +.tgt_light:active{background:transparent url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/2846531) no-repeat 100% 12%} +.tgt_dark{background:transparent url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/2846531) no-repeat 100% 43.5%;padding-right:17px;margin-right:3px} +.tgt_dark:active{background:transparent url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/2846531) no-repeat 100% 25%} +.tgt_light_up{background:transparent url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/2846531) no-repeat 100% 56%;padding-right:17px;margin-right:3px} +.tgt_light_up:active{background:transparent url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/2846531) no-repeat 100% 69%} +.tgt_dark_up{background:transparent url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/2846531) no-repeat 100% 100%;padding-right:17px;margin-right:3px} +.tgt_dark_up:active{background:transparent url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/2846531) no-repeat 100% 83%} +.tabPopper{top:0;left:0;display:none;background-color:#fff;padding:.2em;margin-top:3px;*padding-bottom:1em;box-shadow:.4em .4em .5em #999;-webkit-box-shadow:.4em .4em .5em #999;-moz-box-shadow:.4em .4em .5em #999;border:1px solid #ccc;border-bottom:1px solid #666\0;border-right:1px solid #666\0;} +.tabPopperCover{position:absolute;top:0px;left:0px;height:1px;background-color:#FFA600;overflow:hidden} +.tabPopper fieldset{border:0;padding:0;margin:4px 10px} +.tabPopper fieldset ul,.tabPopper fieldset dl{border-top:1px solid #ddd;padding-top:3px} +.tabPopper fieldset dl{margin:0 0 6px 0} +.tabPopper fieldset input{position:relative;top:1px} +div.messagearea { + margin:0; + padding: 0; + border-bottom: solid 1px #888; + clear:both; +} +div.browsername { + background-color: #FFF; + padding-left: 0.5em; + } +#messagearea.empty { + border: none; + clear: both; +} +div#messagearea ul.messages li.hi_warn { margin: 2.5em 0; } +ul.messages { + font-family: arial, helvetica, sans-serif; + margin: 0; + padding: 0; + list-style-type: none; + list-style-image: none; +} +ul.messages li { + margin: 0.22em 0 0.22em; + padding: 0.25em; + background: transparent no-repeat 0.5em 0.3em; + position: relative; +} +ul.messages li .icon, ul.messages li.icon{ + background: url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/3797312) no-repeat; + display: block; + margin-right: 4px; + padding-left: 16px; +} +ul.messages li span.icon { + background: #fff; + padding-left: .5em; + padding-top: .35em; + margin-top: -.5em; +} +ul.messages li.success .icon, ul.messages li.success.icon { + background-position: 0 0; +} +ul.messages li.warn .icon, ul.messages li.hi_warn .icon, ul.messages li.warn.icon, ul.messages li.hi_warn.icon { + background-position: -17px 0; +} +ul.messages li.suggest .icon, ul.messages li.suggest.icon { + background-position: -34px 0; +} +ul.messages li.info .icon, ul.messages li.info.icon { + background-position: -51px 0; +} +ul.messages li.error .icon, ul.messages li.error.icon { + background-position: -68px 0; +} +ul.messages li.hi_warn em.detail{ + font-weight: normal; + font-style: normal; + padding-left: 1.7em; +} +ul.messages li.hi_warn { + font-weight: bold; +} +.success, .error, .warn, .info, .suggest, .hi_warn { + background-image: url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/3797312); + padding-left: 17px; + background-repeat: no-repeat; + background-color: transparent; + margin-bottom:.5em +} +.success { + background-position: 0 0; +} +.warn { + background-position: -17px 0; +} +.hi_warn { + background-position: -17px 0; + font-weight: bold; +} +.suggest { + background-position: -34px 0; +} +.info { + background-position: -51px 0; +} +.error { + background-position: -68px 0; +} +.navwrap-bottom { + margin-top: 2em; + margin-bottom: 10px; + +} +.navwrap-top { + + margin-bottom: .5em; +} +.navigation-toc { + max-width: 600px; + max-height: 500px; + overflow: auto; +} +.source-contents-label { + font-size: 1em; + background:transparent url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/27532) no-repeat 100% 100%; + padding-right: 17px; +} +.source-contents-label:active { + background:transparent url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/27532) no-repeat 100% 58%; + padding-right: 17px; +} +div.navigation-wrap +{ + overflow: hidden; +} +div.content div.navigation-wrap a.navtrig { + color: #336699; + text-decoration: none; + border-bottom: none; + margin: 2px 1.7em 2px 2px; +} +.print-link { + float: right; + margin-right: 1.7em; +} +.navigation-toc { + background-color: white; + -moz-box-shadow: 0.4em 0.4em 0.5em #999999; + padding: 0 2em 0 0; +} +.navigation-toc ul.toc-toggle { + padding-left: 3em; +} +.navigation-toc ul.toc-no-toggle { + padding-left: 2em; +} +.navigation-toc ul.toc ul.toc { + padding-left: 3em; + margin-top: 3px; +} +.navigation-toc li { + padding: 2px 0; +} +.navigation-toc a.toc-link { + color: #336699; + text-decoration: none; + padding: 1px; + border: 1px solid white; +} +.navigation-toc a.toc-link:hover { + background-color: #369; + color: #fff; + +} +.navigation-toc a.current-toc-entry { + color: #336699; + font-weight: bold; + padding: 2px; + + + border: 1px solid white; +} +.toc-page-link { + float: right; + margin-top: 9px; + font-size: 110%; + + +} +.twelve_col .pagination +{ + margin-top: 3px; + margin-bottom: 2px; +} +.pagination{font-size:0.846em;white-space:nowrap;float:right} +.pagination h3{font-weight:normal;font-size:inherit;display:inline;color:#000} +.pagination .page_link{padding:1px 6px;zoom:1} +.pagination h3{display:inline} +.pagination .inactive{color:#ccc} +.pagination .active{border:1px solid #ddd;color:#369;padding:2px 6px;*padding:0px 4px;white-space:nowrap;text-decoration:none} +.pagination a:hover{background-color:#369;color:#fff;border:1px solid #888} +.pagination .prev{margin-right:.6em;margin-left:.2em} +.pagination .next{margin-left:.6em;margin-right:.2em} +.pagination .num{width:1.637em;display:inline;font-size:inherit} +.bottom .pagination{float:none;text-align:right} +body.objectonly, +body.literature-content-only +{ + background-color: white; +} +body .no_max_width { + max-width: none; +} +body.literature-content-only>.grid>.shadow { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + margin-left: 1.5em; +} +#source-thumb { + text-align: center; + margin-bottom: 1em; +} +#source-thumb a { + border:0 +} +#source-thumb img { + -moz-box-shadow: 4px 4px 8px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 4px 4px 8px rgba(0, 0, 0, 0.5); + box-shadow: 4px 4px 8px rgba(0, 0, 0, 0.5); +} +#footer { + margin-bottom:3em; +} +.navigation-toc-link +{ + float: left; +} +.box { + background-color: #fbfbfb; + padding: 1em; +} +.contrib .affiliation { + line-height: 1.2727em +} +.NLMLogo, .NLMLogo a { + color: #6F6F6F; +} +.NLMLogo { + line-height:1.4em; +} +.res_logo .NLMLogo a:hover { + text-decoration: underline; +} +pre { + overflow-x: auto; +} +div.box.warn {padding-bottom: 0;} +div.collapse {max-height:120px; overflow:hidden;} +div.box.warn.collapsible {margin-bottom:0; padding-bottom:10px;} +div.box.warn h3 {margin-bottom:0; float:none;} +#collapse-button {float:right; padding:5px; background-color:#FBFBFB; border:1px solid #000; border-top:none;} +div.clear {clear:both; border:none;} +div.messagearea { + margin: 1em 1em 1em 3em; + padding: 0; + border: solid 1px #DDDDDD; + background: #F6F6F6; + clear: both; +} +#messagearea.empty { + border: none; + clear: both; +} +ul.messages { + font-family: Arial; + margin: 0; + padding: 0; + list-style-type: none; + list-style-image: none; +} +ul.messages li { + margin: 0.22em 0 0.22em; + padding: 0.231em 0.462em; + background-repeat: no-repeat; +} +.universal_header{font-family:arial, helvetica, sans-serif;font-size:13px;height:2em;background-color:#369} +ul.resources_list{margin-left:1.3em;float:left} +ul.resources_list>li.ui-ncbimenu-item-first { margin-right: 0.5em; } +.myncbi a{color:#fff} +#ncbihome{padding:.25em 0 0;padding-right:.8em;margin:0;color:#fff} +#ncbihome:focus{background:transparent; outline: 1px dotted #fff;} +.myncbi{float:right;position:relative;top:.4em;color:#fff;right:1em;*top: .3em} +.myncbi a{margin-left:1em} +#mnu{margin-left:0} +ul.jig-ncbimenu a.topanchor{color:#fff} +ul.jig-ncbimenu a:hover{text-decoration:none} +.ui-ncbimenu-item{background-color:#fcfcfc;border-bottom:1px dotted #e5e5e5} +.ui-ncbimenu li.ui-ncbimenu-item-first a.ui-ncbimenu-first-link-has-submenu{padding:.45em 20px .2em 0;*padding-top: .5em} +body ul.ui-ncbimenu-submenu{ border: 1px solid #ddd; border-bottom: 1px solid #aaa; border-right: 1px solid #aaa; +-webkit-box-shadow: 0.4em 0.4em 0.5em rgba(0,0,0,.3);-moz-box-shadow: 0.4em 0.4em 0.5em rgba(0,0,0,.3);box-shadow: 0.4em 0.4em 0.5em rgba(0,0,0,.3)} +body .ui-ncbimenu-item-first-active,body ul li a.ui-ncbimenu-item-active{background-color:#4C96DF;color:#fff} +.footer{clear:both;margin-top:1em} +#footer, #NCBIFooter_dynamic{font-family:arial, helvetica, sans-serif;font-size:11px;line-height:1.8em} +#NCBIFooter_dynamic{position:relative;top:1.4em;*top:.4em;z-index:10;font-size:11px;color:#505050;clear:both} +.breadcrumbs{position:absolute;left:1.6em;top:1.1em} +.help_desk{position:absolute;top:1.1em;right:1em} +#NCBIFooter_dynamic a,#footer a{text-decoration:none;color:#14376c} +#NCBIFooter_dynamic a:hover,#footer a:hover,.contact_info a:hover{text-decoration:underline} +#footer-contents-right{float:right;text-align:right} +#footer-contents-right a{float:left;height:41px;overflow:hidden;padding-top:14px;text-indent:10em} +#footer-contents-right div{display:inline} +#nlm_thumb_logo a{background:transparent url(/coreweb/images/ncbi/footer/footer_imgs.png) no-repeat scroll 0 100%;width:34px;margin-right:14px} +#nih_thumb_logo a{background:transparent url(/coreweb/images/ncbi/footer/footer_imgs.png) no-repeat scroll -35px 100%;width:40px;margin-right:14px} +#hhs_thumb_logo a{background:transparent url(/coreweb/images/ncbi/footer/footer_imgs.png) no-repeat scroll -75px 100%;width:39px;margin-right:14px} +#usagov_thumb_logo a{background:transparent url(/coreweb/images/ncbi/footer/footer_imgs.png) no-repeat scroll -114px 100%;width:89px} +#footer-contents-left p.address{margin:0px;line-height:18px} +#footer-contents-left a{font-weight:bold} +#footer-contents-left span.url a{font-weight:normal} +#footer-contents-left p.address .adr{display:block} +#footer{background:#e5e5e5 url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/3418709) repeat-x scroll left top;clear:both;zoom:1;z-index:1} +#footer,.contact_info{color:#14376c;background-color:#fff;overflow:visible;text-align:center;} +.foot_list{margin:0;padding:0;width:20%;float:left;text-align:left;margin-top:4.5em;width:19\0%;*width:19%} +.foot_list li{list-style-type:none;} +.foot_list li h3{text-transform:uppercase;margin:0;margin-bottom:.05em;} +.offscreen_noflow{float:left;text-indent:-9999em;_display:block;margin:0;padding:0;height:0;} +.contact_info{clear:both;text-align:left;margin:1em 1.6em} +.subfooter{margin-left:1.6em;overflow:hidden} +#footer #external-disclaimer { padding: 0.682em; line-height: 1em; } +#footer #external-disclaimer a { text-decoration: underline } +.header{background:#d5d5d5 url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/2375536) repeat-x scroll left bottom; position: relative;margin-bottom: 1.231em;z-index:20 } +.header a{text-decoration:none} +.header a:hover{text-decoration:underline} +.search{margin:0 0 0 13.539em; padding:1.2em 0 .7em} +.search_form{*zoom:1} +.search_form select,.search_form .jig-ncbiclearbutton-wrap,.search_form button{margin-right:.2em;font-family:arial,helvetica,sans-serif;} +.search_form select{font-size: 1.077em; width:8.5em;margin-right:.3em;*vertical-align: middle; position: relative; bottom: 1px;} +.search_form select optgroup {font-style: normal; color: #555; padding-left: 0.2em;} +.search_form select optgroup option {color: #000} +.search_form input{font-size: 1.1543em; width:48%;display:inline-block;_width:100%} +.search_form div.nowrap {*height: 100%; } +.search_form button.nowrap {*vertical-align: middle; } +.search_form div.nowrap div.nowrap {*height: 100%; *vertical-align: middle; } +.search_form .nowrap{display:inline;*zoom:1} +.searchlinks{margin:.2em 0 0 9.6em;_zoom:1} +.searchlinks li{margin-right:1.2em;zoom:1} +.searchlinks .help{position:absolute;right:1em;margin-right:0;_margin-top:-.1em} +.searchlinks .hidden{display:none} +.searchlinks .visible{display:inline} +.search_form .wrap{position:relative;display:inline;_width:70%} +#cl{position:absolute;right:8px;top:-3px;top:-12px\9;*top:5px} +.search_form button{border:0 none;cursor:pointer;overflow:visible;width:auto;background-color:#ddd;padding:.2em .4em;*padding:.2em .6em;_padding:.2em .4em;margin:0 .2em;*margin:0 .3em;*height:2em; -moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;text-shadow:.1em .1em .1em rgba(0,0,0,.5);-moz-box-shadow:.1em .1em .1em rgba(0,0,0,.5);-webkit-box-shadow:.1em .1em .1em rgba(0,0,0,.5);box-shadow:.1em .1em .1em rgba(0,0,0,.5)} +.search_form button.button_search{background-color:#47a;font-weight:bold;color:#fff;*margin-left:.5em;font-size:inherit;} +.search_form button.button_search:active{background-color:#4c96df} +.search_form button.button_preview{background-color:#A64D48;font-weight:bold;color:#fff} +.search_form button.button_preview:active{background-color:#F27069} +.search_form input:focus{-moz-box-shadow:0 0 .3em rgba(211,186,44,.8)} +.search_form .jig-ncbiclearbutton-wrap { width: 65%; *display: inline; border:1px solid #999; } +.search_form .jig-ncbiclearbutton-wrap input { width: 100%; *width: 50%; } +.search_form .jig-ncbiclearbutton-wrap a.reset { margin-left: 0; top: 50%; margin-top: -7px; } +.rss_icon{position:relative;top:3px;margin-right:.3em} +.rss_menu{z-index:1001;display:none;} +.rss_menu legend{font-weight:bold;margin:2px 0 0 3px} +.rss_menu ul{margin:0;padding:0;list-style-type:none;padding-top:5px} +.rss_menu ul li{margin-bottom:.4em} +.rss_menu span,.rss_menu label{margin-right:.5em} +.rss_menu ul input{top:0} +.rss_menu dd{margin-left:0;margin-bottom:1em} +.rss_menu #rss_name{width:15em} +.rss_menu button{margin-top:.5em} +.rss_menu label{display:block} +.db_logo{background:transparent url() no-repeat scroll left top;display:block;height:36px;width:100px;text-indent:-9999px} +.res_logo{width:11.539em;left:1.231em;padding-top:.4em;position:absolute} +.res_logo h1{font-weight:normal;margin:0} +.long{padding:.5em 0} +.long h1{line-height:1.15} +.res_logo h1 a{color:#333;display:block;padding:.3em 0;text-shadow:1px 1px 1px rgba(240,240,240,.9)} +.res_tagline{display:none} +.res_logo h1 a,.res_logo h1 a:hover,.res_logo h1 a:visited{text-decoration:none} +h1.img_logo{margin:0} +h1.img_logo a{padding:0} +.searchlinks { min-height: 1.3em; } +.browsercheck .warn {color: #000;} +.browsercheck .error {color: #000;} +span.caps {text-transform: capitalize;} +div.success_msg, div.warn_msg, div.error_msg { padding: .4em; margin: .5em; color: black; font-family: helvetica, arial, verdana, sans-serif; } +div.success_msg img, div.warn_msg img, div.error_msg img { position: relative; top: .15em; margin-left: .2em; } +div.success_msg { border: 1px solid #6c6; background-color: #cfc; } +div.warn_msg { border: 1px solid #e3d21c; background-color: #ffffef; } +div.error_msg { border: 1px solid #f88; background-color: #fdd; } +.navlink-box>.page-breadcrumbs li a { + background: url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/3848514) no-repeat right; + padding-right: 8px; +} +.format-menu { + margin-bottom: 1em; +} +.format-menu ul { + display: inline; + padding: 0; + margin: 0; +} +.format-menu h2 { + color: #000; +} +.format-menu ul li { + display: inline; + margin: 0 .3em 0 .3em; +} +.format-menu ul li a { + color: #000000; +} +.format-menu ul li.selected { + color: #5E5E5E; +} +div.try-button { + text-align: center; + margin-top: .3em; +} +.portlet { border-top: .4em solid #97b0c8; padding-top: .461em; margin: .769em 0 2.154em 0; overflow: visible; line-height: 1.231em; zoom:1; } +.portlet h1, .portlet h2, .portlet h3, .portlet h4, .portlet h5, .portlet h6 {color: #985735; font-weight: bold; display: inline; } +.portlet .whatsthis {color: #14376c; white-space: nowrap; margin-left: .3em;} +.portlet ul { margin: 0; padding: 0; } +.portlet ul li { list-style-type: none; margin-top: .461em; border-bottom: 1px dotted #CCC; padding-bottom: 1px; position: relative; overflow: visible; zoom:1; } +.portlet .portlet_list li { border-bottom: 0; } +.portlet ul li a { font-weight: normal; color: #14376c; text-decoration: none; } +.portlet ul li a:hover,.portlet ul li a:active{border-bottom:0} +.portlet ul a { _display: block; _float: left; _clear: left; } +.portlet .seemore { display: block; text-align: right; color: #14376c; font-size: .923em; text-decoration: none; margin-top: .8em; } +.portlet .portlet_section_header { text-decoration: none; font-weight: bold; color: #000; border-bottom:0 } +.portlet li.two_line { height: 2.461em; height\0: 2.361em; overflow: hidden; } +.portlet .two_line a { max-height: 2.453em; overflow: hidden; display: block; } +.portlet .long_info, .portlet p, .portlet .two_line .source, .portlet .one_line_source, .portlet_content .image .desc, .portlet ul li .desc a { color: #777;} +.portlet .two_line .source, .portlet .one_line_source { white-space: nowrap; position: absolute; right: 0; background-color: white; padding-left: .3em; } +.portlet .two_line .source { top: 1.231em; } +.portlet .two_line .tertiary { font-size: .769em; color: #777; position: absolute; right:0; background-color: white; padding: .1em 0 0 .3em; top: 1.6em; top\0: 1.5em; } +.portlet .portlet_content p { margin: .8em 0; } +.portlet .buttonwrap { float: left; position: relative; top: -.1em; overflow: visible; } +.portlet .invert { color: #fff; background-color: #14376c; padding: 0 .2em; } +.portlet .tertiary { color: #777; text-align: right; line-height: 1.4em; position: relative; top: .1em; } +.portlet_content { position: relative; margin: 0; } +.portlet_content textarea { margin: 0 0 .9em; } +.portlet_content img { margin: .3em 1.4em .7em 0;} +.portlet_content .image { display: block; overflow: auto; overflow:hidden\0; } +.portlet_content .image .img_link { float: left; } +.portlet_shutter { background: url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/32197) no-repeat scroll left top; display: block; float: right; width: 15px; height: 15px; position: absolute; top: -.2em; margin-left: .6em; right: 0; } +.shutter_closed { background-position: left bottom; } +.portlet .related li { border-bottom: 0; } +.portlet .right { text-align: right; } +.ra_qry, .ra_rcd { padding-left: 2em; } +.ra_qry { background: transparent url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/32182) no-repeat scroll 0 1px; } +.ra_rcd { background: transparent url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/32183) no-repeat scroll 0 1px; } +.sensor{border:1px solid #C8DDEB;background-color:#F7F9FB;padding:0 1em 1em;margin:1em 0} +.sensor .sensor_head { margin-bottom: 0; position: relative} +.sensor .sensor_head h3 { font-weight: normal; } +.sensor h3,.sensor h4,.sensor h5,.sensor h6{margin:.6923em 0 0} +.sensor .sensor_content{margin-bottom:1.1em} +.sensor p{margin:0} +.sensor .portlet_shutter { display: none; } +.no_p_margins{margin:0} +.portlet_head{margin-bottom:.461em;position: relative} +.portlet_title,.sensor_title{margin-right: 2em} +.portlet_title h3 { line-height: inherit; } +div.port li.item em.linklist.error{ + color:#CC0000; + font-size: 1.2em; + background-color:#EAEBC8; +} +div.port.norender { + font-family: Arial,Lucida Sans,Trebuchet,Sans-Serif; +} +.portlet .ui-ncbitoggler-slave, +.portlet .ui-ncbitoggler-slave-open { + margin: 0; +} +.portlet.blueStyle { + border: 2px solid #f2eee5; + box-shadow: 1px 1px 2px #ede7da; + background: #fffbee; + margin-top: 1.85em; + margin-right: 2px; + border-radius: 9px; +} +.portlet.blueStyle>div { + margin: 1em; +} +.portlet.blueStyle .portlet_head { + background: #5f8ece; + padding: 0.6em 1em; + margin: -1.65em 0.4em 0em 0.4em; + border-radius: 7px; +} +.portlet.blueStyle .portlet_title h3 { + color: #fff; +} +.portlet.blueStyle .portlet_shutter { + top: 0.65em; + right: 0.8em; +} +.portlet.whiteStyle { + border: 1px solid #f2eee5; + box-shadow: 1px 1px 2px #ede7da; + background: #fff; + margin-right: 2px; + border-radius: 9px; +} +.portlet.whiteStyle>div { + margin: 1em; +} +.portlet.whiteStyle .portlet_head { + background: #fff; + padding: 0 1em 0em 0; + + margin-top: 0.5em; + margin-bottom: 0em; + + + +} +.portlet.whiteStyle .portlet_title h3 { + color: #003366; +} +.portlet.whiteStyle .portlet_shutter { + top: 0.1em; +} +.inline_sensor { + width: 30%; + float: left; + border: 1px solid #f2eee5; + box-shadow: 1px 1px 1px #ede7da; + + margin-right: 2.8%; + margin-bottom: 2em; + border-radius: 9px; +} +.inline_sensor .image { + border-top-left-radius: 9px; + border-top-right-radius: 9px; +} +.inline_sensor.right { + float: right; + margin-left: 2.8%; + margin-right: 2px; +} +.inline_sensor h3 { + background: url(//static.pubmed.gov/portal/portal3rc.fcgi/3911112/img/3593075) repeat-x; + margin: 0; + padding: 0.5em; + color: #fff; + display: block; + font-size: 1.2em; +} +.inline_sensor .sensor_content +{ + margin: 0.5em 0.9em; +} +div#HTDisplay ul li a.hidden { + display:none; +} +div#HTDisplay div.action { + overflow:hidden; + width: 100%; +} +div#HTDisplay div.action a { + margin: 0em .5em .25em .5em; + float: right; + color:#14376C; + font-size:0.846em; +} +div#HTDisplay p { + clear: both; + color:#14376C; + margin: 1.2em 0em 0.6em 0.5em; +} +div#HTDisplay p a { + color:#14376C; +} +div#HTDisplay p, div#HTDisplay .action a.HTOff, div#HTDisplay.HTOff .action a.HTOn { + display:none; +} +div#HTDisplay.HTOff p.HTOff, div#HTDisplay.HTOn p.HTOn { + display:block; +} +div#HTDisplay.HTOff .action a.HTOff, div#HTDisplay.HTOn .action a.HTOn { + display:block; +} +div#HTDisplay ul.hide { + display:none; +} +div#HTDisplay p.Err { + display:block; +} +div#HTDisplay.HTOff a.seemore, div#HTDisplay.HTOn a.seemore { + display:none; +} +body .popper {font-size: 1.2em;} +div.popper p { +margin: 0 0 0.25em 0; +} +p#htbpcit, +p.pmid { +font-size: 85%; +display: block; +} +p#htbpcit { +font-style: italic; +} +#htbpopper.hidden { +display: none; +} +div#HTDisplay .ralinkpop { width: 350px; } +div.pmc_para_cit { + + visibility: hidden; + + border: 2px solid white; + + border-top: 1px solid black; + + background: white; + padding: 4px; +} +div.pmc_para_cit.stretched { + + border: 2px solid #CCC; + border-top: 1px solid #CCC; + + + -webkit-box-shadow: 0.4em 0.4em 0.5em rgba(0,0,0,.4); + -moz-box-shadow: 0.4em 0.4em 0.5em rgba(0,0,0,.4); + box-shadow: 0.4em 0.4em 0.5em rgba(0,0,0,.4) +} +div.pmc_para_cit li.expanded span.one_line_source { + display: none; +} +div.pmc_para_cit li.expanded div.alt-note { + margin-top: .4em; + margin-bottom: .4em; + +} +div.pmc_para_cit div.citation { + margin-top: .3em; + font-size: 0.85em; +} +div.pmc_para_cit li.two_line span.one_line_source { + bottom: 1px; +} +div.pmc_para_cit li.two_line div.alt-note { + display: none; +} +#body-link-poppers .ui-ncbipopper-wrapper { + z-index: 2000; +} +#body-link-poppers div.authors, +#body-link-poppers div.citation { + margin-top: 0.5em; + margin-bottom: -0.3em; + font-style: italic; +} +.ui-ncbipopper-arrow-left { + padding-top: 1.4em; +} diff --git a/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/3882909.css b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/3882909.css new file mode 100644 index 0000000..bcd8584 --- /dev/null +++ b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/3882909.css @@ -0,0 +1,23 @@ +.shadow{box-shadow:none} +#portaldata, +#portal-debug-console, +div.page > div.top, +#footer, +#help-desk-link, +div.paf-debug-wrap, +.sidecontentpullout, .besetpullout { display: none; } +body {background-color: white; } +.shadow { +-webkit-box-shadow: none; +-moz-box-shadow: none; +box-shadow:none; +} +html body div.page { + font-family: Georgia, serif; + line-height: 1.2; +} +.container > #rightcolumn { display: none; } +.container > #maincontent { width: 97%; } + +.container .pmc-wm { padding: 0; } +.container ul.page-breadcrumbs { display: none; } \ No newline at end of file diff --git a/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/InstrumentPageStarterJS.js b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/InstrumentPageStarterJS.js new file mode 100644 index 0000000..859067b --- /dev/null +++ b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/InstrumentPageStarterJS.js @@ -0,0 +1,66 @@ +(function(){if(typeof ncbi==="undefined")ncbi={};if(ncbi.sg)typeof console!=="undefined"&&console.error&&console.error("The logging JavaScript was added twice in the document. Please include it one time.");else{ncbi.sg=function(){};ncbi.sg.getInstance=function(){if(!ncbi.sg._instance)ncbi.sg._instance=new ncbi.sg;return ncbi.sg._instance};ncbi.sg._instance=null;ncbi.sg._version="22";(function(){var b=navigator.cookieEnabled?true:false;if(typeof navigator.cookieEnabled==="undefined"&&!b){document.cookie= +"testcookie";b=document.cookie.indexOf("testcookie")!==-1?true:false}ncbi.sg.isCookieEnabled=b})();ncbi.sg.appLogIgnore=["ncbi_sessionid","ncbi_clickdisabled"];ncbi.sg.prototype={init:function(){this.isProcessRunning=true;this._setUpMetaTagValues();if(this._cachedVals.ncbi_app&&this._cachedVals.ncbi_app.value.toLowerCase()=="entrez"&&this._cachedVals.ncbi_db&&this._cachedVals.ncbi_db.value.toLowerCase()=="gene"&&this._cachedVals.ncbi_report&&this._cachedVals.ncbi_report.value.toLowerCase()=="full_report")ncbi.sg.isScrollingEnabled= +true;this._setUpPathParts();this._setUpCustomProps();this._addOnScrollListeners();this.send("init");this._sendPrev();this._addPrintPing()},_vals:{},_cachedVals:{},_hasInitRun:false,_pathParts:{part1:"",part2:"",part3:"",part4:""},_setUpMetaTagValues:function(){for(var b=document.getElementsByTagName("meta"),a=0;a100&&this.ignoreLengthRestrictions.indexOf(b)===-1)a=a.substr(0,100);this._cachedVals[b]={sProp:b,value:a}}},removeAllEntries:function(){for(var b={},a=this.cachedNames.length,d=0;d0?":"+this._pathParts.part2:"",d=this._pathParts.part3.length>0?":"+this._pathParts.part3:"",e=this._pathParts.part4.length>0?":"+this._pathParts.part4:"";b={pagename:b+a+d,server:window.location.hostname,sitesect2:b+a,subsect3:b+a+d,subsect4:b+a+d+e,heir1:(b+a+d+e).replace(/:/g,"|")};for(var h in b)this.addEntry(h,b[h]);this._sessionIdCheck();this._staticPageCheck(); +this._prevHitCheck();this._browserConfigurationSettings();this._hashCheck()},_staticPageCheck:function(){this._cachedVals.ncbi_app&&this._cachedVals.ncbi_app.value.length>0||this.addEntry("ncbi_app","static");this._cachedVals.ncbi_pdid&&this._cachedVals.ncbi_pdid.value.length>0||this.addEntry("ncbi_pdid",(document.title||"unknown").replace(/\s+/g,""))},_sessionIdCheck:function(){if(!(this._cachedVals.ncbi_sessionid&&this._cachedVals.ncbi_sessionid.value.length>0)){var b="";if(b.length===0){var a= +this.getCookie("WebCubbyUser")||this.getCookie("WebEnv");if(a.length>0){a=unescape(a).split("@");if(a.length>1)b=a[a.length-1]}}if(b.length===0)b="NOSESSIONID";this.addEntry("ncbi_sessionid",b)}},getBrowserWidthHeight:function(){var b=this.getViewportWidth(),a=this.getViewportHeight();return{width:b,height:a}},_browserConfigurationSettings:function(){var b=this.getBrowserWidthHeight();this.addEntry("browserwidth",b.width);this.addEntry("browserheight",b.height);this.addEntry("screenwidth",screen.width); +this.addEntry("screenheight",screen.height);this.addEntry("screenavailwidth",screen.availWidth);this.addEntry("screenavailheight",screen.availHeight);if(document&&document.body){var a=document.body.scrollWidth,d=document.body.scrollHeight,e=d>b.height?"true":"false";this.addEntry("canscroll_x",a>b.width?"true":"false");this.addEntry("canscroll_y",e);this.addEntry("scrollheight",a);this.addEntry("scrollwidth",d)}if(screen.colorDepth)this.addEntry("colorDepth",screen.colorDepth);else screen.pixelDepth&& +this.addEntry("colorDepth",screen.pixelDepth)},_hashCheck:function(){var b=window.location.hash;if(b){b=b.replace("#","");this.addEntry("urlhash",b)}(b=window.location.search.match(/[?&]campaign=([^&]*)/))&&this.addEntry("campaign",b[1])},_createPHID:function(){var b=this._cachedVals.ncbi_sessionid.value,a=b.substr(0,15)+"9"+(new Date).getTime().toString(),d=b.length;a+=b.substr(d-(32-a.length),d);b={value:a};this.addEntry("ncbi_phid",a);return b},currentPageHitId:null,_prevHitCheck:function(){var b= +this.getCookie("ncbi_prevPHID"),a=this._cachedVals.ncbi_phid;b.length>0&&this.addEntry("prev_phid",b);if(!a||!a.value||a.value.length===0)a=this._createPHID();this.currentPageHitId=a.value;var d=this;ncbi.sg._hasFocus&&d.setCookie("ncbi_prevPHID",a.value);var e=window.onfocus;window.onfocus=function(h){d.getCookie("ncbi_prevPHID")!==a.value&&d.setCookie("ncbi_prevPHID",a.value);typeof e==="function"&&e(h)}},_setUpPathParts:function(){var b=this._cachedVals.ncbi_app,a=this._cachedVals.ncbi_db,d=this._cachedVals.ncbi_pdid, +e=this._cachedVals.ncbi_pcid;this._pathParts.part1=b!==undefined?b.value:"";this._pathParts.part2=a!==undefined?a.value:"";this._pathParts.part3=d!==undefined?d.value:"";this._pathParts.part4=e!==undefined?e.value:""},getPerfStats:function(){var b=window.performance;if(!b)return{};var a=b.timing;if(a)a={dns:a.domainLookupEnd-a.domainLookupStart,connect:a.connectEnd-a.connectStart,ttfb:a.responseStart-a.connectEnd,basePage:a.responseEnd-a.responseStart,frontEnd:a.loadEventStart-a.responseEnd};else return{}; +if(b=b.navigation){a.navType=b.type;a.redirectCount=b.redirectCount}return a},setPerfStats:function(b,a){var d=this.getPerfStats();for(var e in d){var h=d[e];if(h>=0){var m="jsperf_"+e;if(a)b[m]=h;else b.push(m+"="+h)}}},send:function(b,a){var d=[];if(b==="init"){d.push("jsevent=render");ncbi.sg.renderTime=new Date;if(typeof ncbi_startTime!=="undefined"){d.push("jsrendertime="+(ncbi.sg.renderTime-ncbi_startTime));ncbi.sg.loadTime&&d.push("jsloadtime="+(ncbi.sg.loadTime-ncbi_startTime))}this.setPerfStats(d); +d.push("cookieenabled="+(ncbi.sg.isCookieEnabled?"true":"false"))}for(var e in this._cachedVals)ncbi.sg.appLogIgnore.indexOf(e)===-1&&d.push(e+"="+encodeURIComponent(this._cachedVals[e].value));this.sendAl(d.join("&"),a,true);this._hasInitRun=true;var h=this;setTimeout(function(){h.isProcessRunning=false;h.runSGProcess()},300)},_sendPrev:function(){var b=ncbi.sg.getInstance(),a=b.getCookie("clicknext");if(a){ncbi.sg.ping(a);b.setCookie("clicknext","")}if(a=b.getCookie("prevsearch")){ncbi.sg.ping(a); +b.setCookie("prevsearch","")}if(a=b.getCookie("unloadnext")){ncbi.sg.ping(a);b.setCookie("unloadnext","")}},sendAl:function(b,a,d){if(b.indexOf("jseventms")===-1)b+="&jseventms="+ncbi.sg.getInstance().getMillisecondsSinceSunday();b.match(/jsevent=search/i)&&this.setCookie("prevsearch",b.replace(/jsevent=search(next)?/i,"jsevent=searchnext"),null);b+="&sgVersion="+ncbi.sg._version;var e=window.location.port?":"+window.location.port:"";reqURL=typeof __ncbi_stat_url!=="undefined"?__ncbi_stat_url+"?"+ +b:window.location.protocol+"//"+window.location.hostname+e+"/stat?"+b;this.makeAjaxCall(reqURL,function(){typeof a==="function"&&a()},d)},_processingQueue:[],isProcessRunning:false,addSGProcess:function(b){this._processingQueue.push(b)},getSGProcess:function(b){return this._processingQueue.shift(b)},runSGProcess:function(){if(this.isProcessRunning||this._processingQueue.length===0||!this._hasInitRun)return false;this.isProcessRunning=true;this.removeAllEntries();var b=this.getSGProcess();this._setUpCachedMetaTagValues(b.metadata); +this.addEntry("jsevent",b.eventName);for(var a in b.props)this.addEntry(a,b.props[a]);this.send(b.eventName,b.callbackFnc);var d=this;setTimeout(function(){d.isProcessRunning=false;d.runSGProcess()},300)},noteEventData:function(b,a,d,e){this.addSGProcess({eventName:b,props:a,metadata:d,callback:e});this.runSGProcess()},setCookie:function(b,a,d){if(window.sessionStorage)try{sessionStorage.setItem(b,a)}catch(e){}var h=new Date;d!==null&&h.setDate(h.getDate()+d);document.cookie=b+"="+escape(a)+(d=== +null?"":"; expires="+h.toGMTString())+"; domain="+escape(".nih.gov")+"; path=/"},getCookie:function(b){var a;if(window.sessionStorage){try{a=sessionStorage.getItem(b)||""}catch(d){a=""}if(a.length>0)return a}if(document.cookie.length>0){a=document.cookie.indexOf(b+"=");if(a!==-1){a=a+b.length+1;b=document.cookie.indexOf(";",a);if(b===-1)b=document.cookie.length;return unescape(document.cookie.substring(a,b))}}return""},getTransport:function(){var b=null;if(window.XMLHttpRequest)try{b=new XMLHttpRequest; +this.getTransport=function(){return new XMLHttpRequest}}catch(a){b=null}if(window.ActiveXObject&&b===null)try{b=new ActiveXObject("Msxml2.XMLHTTP");this.getTransport=function(){return new ActiveXObject("Msxml2.XMLHTTP")}}catch(d){try{b=new ActiveXObject("Microsoft.XMLHTTP");this.getTransport=function(){return new ActiveXObject("Microsoft.XMLHTTP")}}catch(e){b=false}}if(b===null)this.getTransport=function(){return null};return this.getTransport()},makeAjaxCall:function(b,a,d){var e=this.getTransport(); +e.open("GET",b,d);if(d)e.onreadystatechange=function(){e.readyState===4&&a(e)};ncbi.sg.lastPing=e;e.send(null)},scrollDetails:{maxScroll_x:0,maxScroll_y:0,currScroll_x:0,currScroll_y:0,hasScrolled:false},scrollEventDetails:{xTenths:0,yTenths:0,xMax:0,yMax:0},_scrollEvents:[],_getScrollXY:function(){var b=this.getViewportHeight(),a=this.getViewportWidth(),d=document.body.scrollHeight,e=document.body.scrollHeight,h=Math.round((window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop|| +0)/b*10)/10;return{xRel:Math.round((window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0)/a*10)/10,yRel:h,viewportHeight:b,viewportWidth:a,pageHeight:d,pageWidth:e}},_addOnScrollListeners:function(){var b=window.onscroll,a=this;window.onscroll=function(){if(ncbi.sg.isScrollingEnabled)a._addScrollEvent();else{a._setScrollDetails();a.scrollDetails.hasScrolled=true}if(typeof b==="function")return b()}},getViewportHeight:function(){return window.innerHeight?window.innerHeight: +document.documentElement&&document.documentElement.clientHeight?document.documentElement.clientHeight:document.body!==null?document.body.clientHeight:"NA"},getViewportWidth:function(){return window.innerWidth?window.innerWidth:document.documentElement&&document.documentElement.clientWidth?document.documentElement.clientWidth:document.body!==null?document.body.clientWidth:"NA"},_setScrollDetails:function(){this.scrollDetails.currScroll_y=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop|| +0;this.scrollDetails.currScroll_x=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;this.getViewportWidth();this.getViewportHeight();if(this.scrollDetails.maxScroll_y1E3){this._scrollOrder=this._scrollOrder!=undefined?this._scrollOrder+1:0;b="yTenths."+this._scrollOrder+".scrollInfo";a="xTenths."+this._scrollOrder+".scrollInfo";var i="maxXTenths."+this._scrollOrder+".scrollInfo",s="maxYTenths."+this._scrollOrder+".scrollInfo",l={jsevent:"scroll"}; +l["duration."+this._scrollOrder+".scrollInfo"]=this._lastScroll?d.tstamp-this._lastScroll:new Date-ncbi.sg.loadTime;l[a]=this.scrollEventDetails.xTenths;l[b]=this.scrollEventDetails.yTenths;l[i]=this.scrollEventDetails.xMax;l[s]=this.scrollEventDetails.yMax;if(b=this.scrollEventDetails.headings)for(a=0;a=D&&m<=D+G?true:false;b.push(u)}}this.scrollEventDetails.headings=b;return l},addScrollDetails:function(b){var a=this.getScrollDetails();for(var d in a)b[d]=a[d]},_addScrollEvent:function(){try{var b=this.getScrollDetails();b&&ncbi.sg.ping(b)}catch(a){ncbi.sg.getInstance().noteEventData("jserror",{jserror:a.toString(),currenturl:window.location.href}, +["ncbi_sessionid","ncbi_phid"])}},_sliceScrollEvents:function(){for(var b=Math.ceil(this._scrollEvents.length/20),a=[],d=0;d0)for(;y.length>0;)e(y.pop());var c={jsevent:"unload",ncbi_pingaction:"unload"};if(typeof ncbi_startTime!=="undefined"){c.ncbi_timeonpage=new Date-ncbi_startTime;if(typeof ncbi_onloadTime!=="undefined"&&ncbi_onloadTime)c.ncbi_onloadTime=ncbi_onloadTime-ncbi_startTime}var f=ncbi.sg.getInstance();f.setPerfStats(c,true);f.addScrollDetails(c); +if(!I){ncbi.sg.ping(c);var g="";for(var k in c)g+=k+"="+(k==="jsevent"?"unloadnext":c[k])+"&";g+="ncbi_phid="+f.currentPageHitId;f.setCookie("unloadnext",g,null)}I=true}function a(c){if(c){if(c.onclick)c.onclick_=c.onclick;if(c.oncontextmenu)c.oncontextmenu_=c.oncontextmenu}}function d(c){for(var f=y.length-1;f>=-1;f--)if(y[f]===c){y.slice(f,1);break}e(c)}function e(c,f){if(J.indexOf(c.tstamp)===-1){J.push(c.tstamp);L.push(c);h("click",c,f)}}function h(c,f,g){var k=c==="click"?"link":"elem",j=f.link, +r=f.evt,o=j.id||"",p=j.name||"",C=j.sid||"",z=j.href||"",v=j.innerText||j.textContent||"";if(v.length>50)v=v.substr(0,50);var w=j.getAttribute?j.getAttribute("ref")||j.ref||"":"",x=j.className?j.className.replace(/^\s?/,"").replace(/\s?$/,"").split(/\s/g).join(",")||"":"";f=[];var A=[],t=j.parentNode;if(t)for(var q=0;q<6&&t!==null;q++){(parId=t.id)&&f.push(parId);if(parClassName=t.className)A=A.concat(parClassName.split(/\s/));t=t.parentNode}t=ncbi.sg.getInstance();q=t.currentPageHitId||"";var n= +[];o.length>0&&n.push(k+"_id="+encodeURIComponent(o));p.length>0&&n.push(k+"_name="+encodeURIComponent(p));C.length>0&&n.push(k+"_sid="+encodeURIComponent(C));z.length>0&&n.push(k+"_href="+encodeURIComponent(z));v.length>0&&n.push(k+"_text="+encodeURIComponent(v));x.length>0&&n.push(k+"_class="+encodeURIComponent(x));q=t.getBrowserWidthHeight();q.width!==null&&n.push("browserwidth="+encodeURIComponent(q.width));q.height!==null&&n.push("browserheight="+encodeURIComponent(q.height));for(var E in r){q= +r[E];q!==undefined&&n.push(E.toLowerCase()+"="+q.toString())}n.push("jsevent="+c);w.length>0&&n.push(w);if(typeof jQuery!=="undefined")if(j=jQuery(j).attr("sg")){j=j.split(/\}\s*,\s*\{/);for(q=0;q0)for(;g.length>0;)n.push(g.shift());f.length>0&&n.push("ancestorId="+f.join(","));A.length>0&&n.push("ancestorClassName="+A.join(",").replace(/\s+/g, +" ").replace(/(^\s|\s$)/g,""));if(c==="click"){c=n.join("&").replace("jsevent=click","jsevent=clicknext");q=ncbi.sg.getInstance().currentPageHitId||"";c+="&ncbi_phid="+q;t.setCookie("clicknext",c,null)}ncbi.sg.ping(n,true)}function m(c){var f={};if(c){if(c.clientX||c.clientY){f.evt_coor_x=c.clientX+f.currScroll_x;f.evt_coor_y=c.clientY+f.currScroll_y}else if(c.pageX||c.pageY){f.evt_coor_x=c.pageX;f.evt_coor_y=c.pageY}f.jseventms=ncbi.sg.getInstance().getMillisecondsSinceSunday()}return f}function i(c, +f,g){function k(o,p,C,z){function v(A){for(var t=[function(n){if(typeof n.preventDefault==="undefined")n.preventDefault=function(){this.returnValue=false};if(typeof n.stopPropagation==="undefined")n.stopPropagation=function(){this.cancelBubble=true};return n}(o)],q=0;q=0;){var k=f[g],j=k.type;if(j==="button"||j==="submit"||j==="reset")c.push(k);g--}}c.length>0&&i(c,0,c.length)}}function D(c,f,g,k){var j={},r=null,o=null;if(typeof f==="string"){r=f;o=g}else{j=m(f);r=g;o=k}if(o){f=typeof o;if(f==="string")o=[o];else if(f==="object"&&!(o instanceof Array)){f=[];for(var p in o)f.push(p+"="+o[p]);o=f}}ncbi.sg.sendElementEvent(r,{link:c,evt:j},o)}function G(c,f){var g=[];if(typeof f==="undefined")f= +true;if(typeof c==="object"&&!(c instanceof Array))for(var k in c)g.push(k+"="+encodeURIComponent(c[k]));else if(typeof c==="string")g.push(c);else g=c;c=ncbi.sg.getInstance().currentPageHitId||"";k=null;if(typeof ncbi.sg.loadTime!=="undefined")k=new Date-ncbi.sg.loadTime;var j=g.join("&");if(j.indexOf("jsevent=clicknext")!==-1||j.indexOf("jsevent=searchnext")!==-1||j.indexOf("jsevent=unloadnext")!==-1){c.length>0&&g.push("next_phid="+encodeURIComponent(c));k!==null&&g.push("next_ncbi_timesinceload="+ +k)}else{c.length>0&&g.push("ncbi_phid="+encodeURIComponent(c));k!==null&&g.push("ncbi_timesinceload="+k)}ncbi.sg.getInstance().sendAl(g.join("&"),null,f)}var u=window.onerror;window.onerror=function(c,f,g){if(!ncbi.sg.hasNotedErrorEvent){ncbi.sg.getInstance().noteEventData("jserror",{jserror:c,jserrorlocation:f,jserrorline:g,currenturl:window.location.href},["ncbi_sessionid","ncbi_phid"]);ncbi.sg.hasNotedErrorEvent=true;if(typeof u==="function")return u(c,f,g)}};var B=window.onbeforeunload;window.onbeforeunload= +function(c){b();if(typeof B==="function")return B(c)};var y=[],J=[],L=[],I=false;ncbi.sg.sendElementEvent=h;ncbi.sg.clickTimers=[];if(typeof ncbi.sg.isClickEnabled==="undefined"){for(var H=document.getElementsByTagName("meta"),F=H.length-1,K=true;F>=0;){if(H[F].name.toLowerCase()==="ncbi_clickdisabled"){K=H[F].content.toLowerCase()==="false";break}F--}ncbi.sg.isClickEnabled=K}l();ncbi.sg.scanLinks=function(c){if(c){if(typeof c==="object"&&!(c instanceof Array))c=[c];i(c,0,c.length)}else l()};ncbi.sg.ping= +function(c,f,g,k){typeof c==="undefined"||c===null||(typeof c==="object"&&c.nodeName!==undefined?D(c,f,g,k):G(c,f))};ncbi.sg.loadTime=new Date})();if(!Array.prototype.indexOf)Array.prototype.indexOf=function(b,a){var d=this.length>>>0;a=Number(a)||0;a=a<0?Math.ceil(a):Math.floor(a);if(a<0)a+=d;for(;a1){if(arguments.length===2&&!(typeof arguments[0]==="function")&&arguments[0] instanceof Object&&typeof arguments[1]==="number"){args=[].slice.call(args,i)}else{args=[].slice.call(arguments,0)}}if(args instanceof Array&&args.length===1){args=args[0]}if(typeof args==="function"){if(args.execute===CALLBACK.prototype.execute){return args}return CALLBACK({hook:args})}else{if(args instanceof Array){if(typeof(args[0])==="string"&&args[1] instanceof Object&&typeof args[1][args[0]]==="function"){return CALLBACK({hook:args[1][args[0]],object:args[1],data:args.slice(2)})}else{if(typeof args[0]==="function"){return CALLBACK({hook:args[0],data:args.slice(1)})}else{if(typeof args[1]==="function"){return CALLBACK({hook:args[1],object:args[0],data:args.slice(2)})}}}}else{if(typeof(args)==="string"){return CALLBACK({hook:EVAL,data:[args]})}else{if(args instanceof Object){return CALLBACK(args)}else{if(typeof(args)==="undefined"){return CALLBACK({})}}}}}throw Error("Can't make callback from given data")};var DELAY=function(time,callback){callback=USING(callback);callback.timeout=setTimeout(callback,time);return callback};var WAITFOR=function(callback,signal){callback=USING(callback);if(!callback.called){WAITSIGNAL(callback,signal);signal.pending++}};var WAITEXECUTE=function(){var signals=this.signal;delete this.signal;this.execute=this.oldExecute;delete this.oldExecute;var result=this.execute.apply(this,arguments);if(ISCALLBACK(result)&&!result.called){WAITSIGNAL(result,signals)}else{for(var i=0,m=signals.length;i0&&priorityf){f=document.styleSheets.length}if(!h){h=(document.getElementsByTagName("head"))[0];if(!h){h=document.body}}return h};var e=[];var b=function(){for(var j=0,h=e.length;j=this.timeout){h(this.STATUS.ERROR);return 1}return 0},file:function(i,h){if(h<0){a.Ajax.loadTimeout(i)}else{a.Ajax.loadComplete(i)}},execute:function(){this.hook.call(this.object,this,this.data[0],this.data[1])},checkSafari2:function(h,i,j){if(h.time(j)){return}if(document.styleSheets.length>i&&document.styleSheets[i].cssRules&&document.styleSheets[i].cssRules.length){j(h.STATUS.OK)}else{setTimeout(h,h.delay)}},checkLength:function(h,k,m){if(h.time(m)){return}var l=0;var i=(k.sheet||k.styleSheet);try{if((i.cssRules||i.rules||[]).length>0){l=1}}catch(j){if(j.message.match(/protected variable|restricted URI/)){l=1}else{if(j.message.match(/Security error/)){l=1}}}if(l){setTimeout(a.Callback([m,h.STATUS.OK]),0)}else{setTimeout(h,h.delay)}}},loadComplete:function(h){h=this.fileURL(h);var i=this.loading[h];if(i&&!i.preloaded){a.Message.Clear(i.message);clearTimeout(i.timeout);if(i.script){if(e.length===0){setTimeout(b,0)}e.push(i.script)}this.loaded[h]=i.status;delete this.loading[h];this.addHook(h,i.callback)}else{if(i){delete this.loading[h]}this.loaded[h]=this.STATUS.OK;i={status:this.STATUS.OK}}if(!this.loadHooks[h]){return null}return this.loadHooks[h].Execute(i.status)},loadTimeout:function(h){if(this.loading[h].timeout){clearTimeout(this.loading[h].timeout)}this.loading[h].status=this.STATUS.ERROR;this.loadError(h);this.loadComplete(h)},loadError:function(h){a.Message.Set(["LoadFailed","File failed to load: %1",h],null,2000);a.Hub.signal.Post(["file load error",h])},Styles:function(j,k){var h=this.StyleString(j);if(h===""){k=a.Callback(k);k()}else{var i=document.createElement("style");i.type="text/css";this.head=g(this.head);this.head.appendChild(i);if(i.styleSheet&&typeof(i.styleSheet.cssText)!=="undefined"){i.styleSheet.cssText=h}else{i.appendChild(document.createTextNode(h))}k=this.timer.create.call(this,k,i)}return k},StyleString:function(m){if(typeof(m)==="string"){return m}var j="",n,l;for(n in m){if(m.hasOwnProperty(n)){if(typeof m[n]==="string"){j+=n+" {"+m[n]+"}\n"}else{if(m[n] instanceof Array){for(var k=0;k="0"&&p<="9"){f[j]=o[f[j]-1];if(typeof f[j]==="number"){f[j]=this.number(f[j])}}else{if(p==="{"){p=f[j].substr(1);if(p>="0"&&p<="9"){f[j]=o[f[j].substr(1,f[j].length-2)-1];if(typeof f[j]==="number"){f[j]=this.number(f[j])}}else{var k=f[j].match(/^\{([a-z]+):%(\d+)\|(.*)\}$/);if(k){if(k[1]==="plural"){var d=o[k[2]-1];if(typeof d==="undefined"){f[j]="???"}else{d=this.plural(d)-1;var h=k[3].replace(/(^|[^%])(%%)*%\|/g,"$1$2%\uEFEF").split(/\|/);if(d>=0&&d=3){c.push([f[0],f[1],this.processSnippet(g,f[2])])}else{c.push(e[d])}}}}else{c.push(e[d])}}return c},markdownPattern:/(%.)|(\*{1,3})((?:%.|.)+?)\2|(`+)((?:%.|.)+?)\4|\[((?:%.|.)+?)\]\(([^\s\)]+)\)/,processMarkdown:function(b,h,d){var j=[],e;var c=b.split(this.markdownPattern);var g=c[0];for(var f=1,a=c.length;f1?d[1]:""));f=null}if(e&&(!b.preJax||d)){c.nodeValue=c.nodeValue.replace(b.postJax,(e.length>1?e[1]:""))}if(f&&!f.nodeValue.match(/\S/)){f=f.previousSibling}}if(b.preRemoveClass&&f&&f.className===b.preRemoveClass){a.MathJax.preview=f}a.MathJax.checked=1},processInput:function(a){var b,i=MathJax.ElementJax.STATE;var h,e,d=a.scripts.length;try{while(a.ithis.processUpdateTime&&a.i1){d.jax[a.outputJax].push(b)}b.MathJax.state=c.OUTPUT},prepareOutput:function(c,f){while(c.jthis.processUpdateTime&&h.i=0;o--){if((b[o].src||"").match(d)){q.script=b[o].innerHTML;if(RegExp.$2){var r=RegExp.$2.substr(1).split(/\&/);for(var n=0,h=r.length;n=parseInt(x[y])}}return true},Select:function(j){var i=j[c.Browser];if(i){return i(c.Browser)}return null}};var g=navigator.userAgent.replace(/^Mozilla\/(\d+\.)+\d+ /,"").replace(/[a-z][-a-z0-9._: ]+\/\d+[^ ]*-[^ ]*\.([a-z][a-z])?\d+ /i,"").replace(/Gentoo |Ubuntu\/(\d+\.)*\d+ (\([^)]*\) )?/,"");c.Browser=c.Insert(c.Insert(new String("Unknown"),{version:"0.0"}),a);for(var t in a){if(a.hasOwnProperty(t)){if(a[t]&&t.substr(0,2)==="is"){t=t.slice(2);if(t==="Mac"||t==="PC"){continue}c.Browser=c.Insert(new String(t),a);var p=new RegExp(".*(Version)/((?:\\d+\\.)+\\d+)|.*("+t+")"+(t=="MSIE"?" ":"/")+"((?:\\d+\\.)*\\d+)|(?:^|\\(| )([a-z][-a-z0-9._: ]+|(?:Apple)?WebKit)/((?:\\d+\\.)+\\d+)");var s=p.exec(g)||["","","","unknown","0.0"];c.Browser.name=(s[1]=="Version"?t:(s[3]||s[5]));c.Browser.version=s[2]||s[4]||s[6];break}}}c.Browser.Select({Safari:function(j){var i=parseInt((String(j.version).split("."))[0]);if(i>85){j.webkit=j.version}if(i>=534){j.version="5.1"}else{if(i>=533){j.version="5.0"}else{if(i>=526){j.version="4.0"}else{if(i>=525){j.version="3.1"}else{if(i>500){j.version="3.0"}else{if(i>400){j.version="2.0"}else{if(i>85){j.version="1.0"}}}}}}}j.isMobile=(navigator.appVersion.match(/Mobile/i)!=null);j.noContextMenu=j.isMobile},Firefox:function(j){if((j.version==="0.0"||navigator.userAgent.match(/Firefox/)==null)&&navigator.product==="Gecko"){var m=navigator.userAgent.match(/[\/ ]rv:(\d+\.\d.*?)[\) ]/);if(m){j.version=m[1]}else{var i=(navigator.buildID||navigator.productSub||"0").substr(0,8);if(i>="20111220"){j.version="9.0"}else{if(i>="20111120"){j.version="8.0"}else{if(i>="20110927"){j.version="7.0"}else{if(i>="20110816"){j.version="6.0"}else{if(i>="20110621"){j.version="5.0"}else{if(i>="20110320"){j.version="4.0"}else{if(i>="20100121"){j.version="3.6"}else{if(i>="20090630"){j.version="3.5"}else{if(i>="20080617"){j.version="3.0"}else{if(i>="20061024"){j.version="2.0"}}}}}}}}}}}}j.isMobile=(navigator.appVersion.match(/Android/i)!=null||navigator.userAgent.match(/ Fennec\//)!=null||navigator.userAgent.match(/Mobile/)!=null)},Opera:function(i){i.version=opera.version()},MSIE:function(j){j.isIE9=!!(document.documentMode&&(window.performance||window.msPerformance));MathJax.HTML.setScriptBug=!j.isIE9||document.documentMode<9;var v=false;try{new ActiveXObject("MathPlayer.Factory.1");j.hasMathPlayer=v=true}catch(m){}try{if(v&&!q.params.NoMathPlayer){var i=document.createElement("object");i.id="mathplayer";i.classid="clsid:32F66A20-7614-11D4-BD11-00104BD3F987";document.getElementsByTagName("head")[0].appendChild(i);document.namespaces.add("m","http://www.w3.org/1998/Math/MathML");j.mpNamespace=true;if(document.readyState&&(document.readyState==="loading"||document.readyState==="interactive")){document.write('');j.mpImported=true}}else{document.namespaces.add("mjx_IE_fix","http://www.w3.org/1999/xlink")}}catch(m){}}});c.Browser.Select(MathJax.Message.browsers);c.queue=f.Callback.Queue();c.queue.Push(["Post",q.signal,"Begin"],["Config",q],["Cookie",q],["Styles",q],["Message",q],function(){var i=f.Callback.Queue(q.Jax(),q.Extensions());return i.Push({})},["Menu",q],q.onLoad(),function(){MathJax.isReady=true},["Typeset",q],["Hash",q],["MenuZoom",q],["Post",q.signal,"End"])})("MathJax")}}; + diff --git a/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/NcbiTagServer.min.js b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/NcbiTagServer.min.js new file mode 100644 index 0000000..9279c9b --- /dev/null +++ b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/NcbiTagServer.min.js @@ -0,0 +1 @@ +if(typeof jQuery!=="undefined"){NcbiTagServer=function(g){_hotlinkRenderMethods=function(){function h(j,i){j.attr("href",i)}return{"entrez-nucleotide":function(j,k,i){h(j,i.entrezBaseUrl+"nucleotide/"+k.attrs.term_id+"/")},"entrez-protein":function(j,k,i){h(j,i.entrezBaseUrl+"protein/"+k.attrs.term_id+"/")},"entrez-geo":function(j,k,i){h(j,i.entrezBaseUrl+"geo/query/acc.cgi?acc="+k.attrs.text)},"entrez-nucleotide-range":function(j,k,i){h(j,i.entrezBaseUrl+"nuccore?term="+k.attrs.start_term+":"+k.attrs.end_term+"[pacc]")},"entrez-protein-range":function(j,k,i){h(j,i.entrezBaseUrl+"protein?term="+k.attrs.start_term+":"+k.attrs.end_term+"[pacc]")},"entrez-snp":function(j,k,i){h(j,i.entrezBaseUrl+"protein?term="+k.attrs.term_id+"[rs]")},"entrez-structure":function(j,k,i){h(j,i.entrezBaseUrl+"Structure/mmdb/mmdbsrv.cgi?form=6&db=t&Dopt=suid="+k.attrs.term_id)},"entrez-taxonomy":function(j,k,i){h(j,i.entrezBaseUrl+"Taxonomy/Browser/wwwtax.cgi?id="+k.attrs.term_id)},"entrez-unists":function(j,k,i){h(j,i.entrezBaseUrl+"unists?term="+k.attrs.text)}}}();function e(h){var i=g(h.find('span[class="tag-json"]').get(0)).text();if(typeof i!=="undefined"){return g.parseJSON(i)}}var f={entrezBaseUrl:"/",renderMethods:{hotlink:_hotlinkRenderMethods},tagDataFromNode:e};var b={};function a(){for(var i in b.renderMethods){var h=g(".tag_"+i);h.map(function(){c(i,g(this))})}}function c(i,j){var l=false;try{if(typeof b.tagDataFromNode==="function"){var k=b.tagDataFromNode(j);if(k!==null&&typeof k.type!=="undefined"&&typeof b.renderMethods[i][k.type]==="function"){b.renderMethods[i][k.type](j,k,b);l=true}}}catch(h){}return l?j:undefined}function d(h){g.extend(true,b,f,h);g(document).ready(a)}return{initRenderByTagNode:d}}(jQuery)}; \ No newline at end of file diff --git a/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/clear.png b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/clear.png new file mode 100644 index 0000000..c7af78d Binary files /dev/null and b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/clear.png differ diff --git a/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/common.min.js b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/common.min.js new file mode 100644 index 0000000..12f9e7c --- /dev/null +++ b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/common.min.js @@ -0,0 +1 @@ +var pubmedUnsupportedCharMap={x000b2:"2",x000b3:"3",x000b9:"1",x000c0:"A",x000c1:"A",x000c2:"A",x000c3:"A",x000c4:"A",x000c5:"A",x000c6:"AE",x000c7:"C",x000c8:"E",x000c9:"E",x000ca:"E",x000cb:"E",x000cc:"I",x000cd:"I",x000ce:"I",x000cf:"I",x000d1:"N",x000d2:"O",x000d3:"O",x000d4:"O",x000d5:"O",x000d6:"O",x000d7:"x",x000d8:"O",x000d9:"U",x000da:"U",x000db:"U",x000dc:"U",x000dd:"Y",x000df:"ss",x000e0:"a",x000e1:"a",x000e2:"a",x000e3:"a",x000e4:"a",x000e5:"a",x000e6:"ae",x000e7:"c",x000e8:"e",x000e9:"e",x000ea:"e",x000eb:"e",x000ec:"i",x000ed:"i",x000ee:"i",x000ef:"i",x000f1:"n",x000f2:"o",x000f3:"o",x000f4:"o",x000f5:"o",x000f6:"o",x000f8:"o",x000f9:"u",x000fa:"u",x000fb:"u",x000fc:"u",x000fd:"y",x000ff:"y",x00100:"A",x00101:"a",x00102:"A",x00103:"a",x00104:"A",x00105:"a",x00106:"C",x00107:"c",x00108:"C",x00109:"c",x0010a:"C",x0010b:"c",x0010c:"C",x0010d:"c",x0010e:"D",x0010f:"d",x00110:"D",x00111:"d",x00112:"E",x00113:"e",x00116:"E",x00117:"e",x00118:"E",x00119:"e",x0011a:"E",x0011b:"e",x0011c:"G",x0011d:"g",x0011e:"G",x0011f:"g",x00120:"G",x00121:"g",x00122:"G",x00124:"H",x00125:"h",x00126:"H",x00127:"h",x00128:"I",x00129:"ij",x0012a:"I",x0012b:"ij",x0012e:"I",x0012f:"ij",x00130:"I",x00131:"ij",x00132:"IJ",x00133:"ij",x00134:"J",x00135:"j",x00136:"K",x00137:"k",x00138:"k",x00139:"L",x0013a:"l",x0013b:"L",x0013c:"l",x0013d:"L",x0013e:"l",x0013f:"L",x00140:"l",x00141:"L",x00142:"l",x00143:"N",x00144:"n",x00145:"N",x00146:"n",x00147:"N",x00148:"n",x00149:"n",x0014c:"O",x0014d:"o",x00150:"O",x00151:"o",x00152:"OE",x00153:"oe",x00154:"R",x00155:"r",x00156:"R",x00157:"r",x00158:"R",x00159:"r",x0015a:"S",x0015b:"s",x0015c:"S",x0015d:"s",x0015e:"S",x0015f:"s",x00160:"S",x00161:"s",x00162:"T",x00163:"t",x00164:"T",x00165:"t",x00166:"T",x00167:"t",x00168:"U",x00169:"u",x0016a:"U",x0016b:"u",x0016c:"U",x0016d:"u",x0016e:"U",x0016f:"u",x00170:"U",x00171:"u",x00172:"U",x00173:"u",x00174:"W",x00175:"w",x00176:"Y",x00177:"y",x00178:"Y",x00179:"Z",x0017a:"z",x0017b:"Z",x0017c:"z",x0017d:"Z",x0017e:"z",x001f5:"g",x00405:"S",x00406:"I",x00408:"J",x00455:"s",x00456:"i",x00458:"j",x02102:"C",x0210b:"H",x0210c:"H",x02110:"I",x02111:"I",x02112:"L",x02115:"N",x02119:"P",x0211a:"Q",x0211c:"R",x0211d:"R",x0211e:"Rx",x02124:"Z",x0212b:"A",x0212c:"B",x0212f:"e",x02130:"E",x02131:"F",x02133:"M",x02134:"o",x0e05d:"h",x0e05f:"k",x0e3b2:"fj",x0e500:"A",x0e501:"B",x0e503:"D",x0e504:"E",x0e505:"F",x0e506:"G",x0e507:"H",x0e508:"I",x0e509:"J",x0e50a:"K",x0e50b:"L",x0e50c:"M",x0e50e:"O",x0e512:"S",x0e513:"T",x0e514:"U",x0e515:"V",x0e516:"W",x0e517:"X",x0e518:"Y",x0e520:"A",x0e522:"C",x0e523:"D",x0e526:"G",x0e529:"J",x0e52a:"K",x0e52d:"N",x0e52e:"O",x0e52f:"P",x0e530:"Q",x0e531:"R",x0e532:"S",x0e533:"T",x0e534:"U",x0e535:"V",x0e536:"W",x0e537:"X",x0e538:"Y",x0e539:"Z",x0e540:"a",x0e541:"b",x0e542:"c",x0e543:"d",x0e545:"f",x0e546:"g",x0e547:"h",x0e548:"i",x0e549:"j",x0e54a:"k",x0e54b:"l",x0e54c:"m",x0e54d:"n",x0e54f:"p",x0e550:"q",x0e551:"r",x0e552:"s",x0e553:"t",x0e554:"u",x0e555:"v",x0e556:"w",x0e557:"x",x0e558:"y",x0e559:"z",x0e560:"A",x0e561:"B",x0e562:"C",x0e563:"D",x0e564:"E",x0e565:"F",x0e566:"G",x0e569:"J",x0e56a:"K",x0e56b:"L",x0e56c:"M",x0e56d:"N",x0e56e:"O",x0e56f:"P",x0e570:"Q",x0e572:"S",x0e573:"T",x0e574:"U",x0e575:"V",x0e576:"W",x0e577:"X",x0e578:"Y",x0e579:"Z",x0e580:"a",x0e581:"b",x0e582:"c",x0e583:"d",x0e584:"e",x0e585:"f",x0e586:"g",x0e587:"h",x0e588:"i",x0e589:"j",x0e58a:"k",x0e58b:"l",x0e58c:"m",x0e58d:"n",x0e58e:"o",x0e58f:"p",x0e590:"q",x0e591:"r",x0e592:"s",x0e593:"t",x0e594:"u",x0e595:"v",x0e596:"w",x0e597:"x",x0e598:"y",x0e599:"z",x0ea00:"1",x0ea01:"1",x0ea02:"2",x0ea03:"2",x0ea04:"3",x0ea05:"3",x0ea06:"4",x0ea07:"a",x0ea08:"a",x0ea09:"A",x0ea0a:"a",x0ea0b:"A",x0ea0c:"AB",x0ea10:"b",x0ea11:"B",x0ea12:"b",x0ea13:"B",x0ea14:"B",x0ea15:"B",x0ea16:"BC",x0ea19:"c",x0ea1a:"c",x0ea1b:"c",x0ea1c:"C",x0ea1d:"c",x0ea1e:"c",x0ea1f:"c",x0ea20:"c",x0ea21:"c",x0ea25:"d",x0ea26:"D",x0ea27:"d",x0ea28:"D",x0ea29:"d",x0ea2a:"D",x0ea2b:"D",x0ea2f:"dl",x0ea30:"e",x0ea31:"e",x0ea32:"l",x0ea33:"l",x0ea34:"f",x0ea35:"f",x0ea36:"F",x0ea37:"f",x0ea38:"F",x0ea39:"f",x0ea3a:"F",x0ea3d:"g",x0ea3e:"g",x0ea3f:"G",x0ea40:"g",x0ea41:"G",x0ea46:"H",x0ea47:"h",x0ea48:"h",x0ea49:"i",x0ea4a:"I",x0ea4b:"j",x0ea4c:"J",x0ea4d:"J",x0ea4e:"J",x0ea4f:"k",x0ea50:"k",x0ea51:"k",x0ea52:"K",x0ea53:"K",x0ea54:"k",x0ea55:"l",x0ea56:"L",x0ea57:"l",x0ea5b:"lnV",x0ea5c:"m",x0ea5d:"M",x0ea5e:"m",x0ea5f:"m",x0ea63:"n",x0ea64:"n",x0ea65:"N",x0ea66:"n",x0ea67:"N",x0ea68:"n",x0ea69:"n",x0ea6a:"N",x0ea6d:"nv",x0ea6e:"O",x0ea6f:"O",x0ea70:"O",x0ea72:"F",x0ea73:"p",x0ea74:"P",x0ea75:"p",x0ea76:"P",x0ea77:"p",x0ea78:"P",x0ea79:"p",x0ea7a:"P",x0ea8d:"q",x0ea8e:"Q",x0ea8f:"q",x0ea90:"q",x0ea91:"Q",x0ea92:"q",x0ea93:"Q",x0ea94:"q",x0ea95:"q",x0ea96:"q",x0ea97:"Q",x0ea98:"r",x0ea99:"R",x0ea9a:"R",x0ea9b:"r",x0ea9c:"R",x0ea9d:"R",x0ea9e:"r",x0ea9f:"R",x0eaa0:"r",x0eaa1:"ri",x0eaa2:"R",x0eaa3:"r",x0eaa4:"r1",x0eaa5:"RE",x0eaa9:"ri",x0eaaa:"rj",x0eaab:"rN",x0eaac:"s",x0eaad:"S",x0eaae:"S",x0eaaf:"s",x0eab0:"S",x0eab1:"s",x0eab2:"S",x0eab3:"S",x0eab4:"B",x0eab5:"E",x0eab6:"G",x0eab7:"P",x0eab8:"Q",x0eab9:"t",x0eaba:"T",x0eabb:"T",x0eabc:"t",x0eabd:"T",x0eabe:"t",x0eabf:"T",x0eac5:"TT",x0eac6:"u",x0eac7:"u",x0eac8:"U",x0eac9:"u",x0eaca:"u",x0eacc:"V",x0eacd:"v",x0eace:"v",x0eacf:"V",x0ead0:"v",x0ead1:"V",x0ead2:"v",x0ead3:"v",x0ead4:"V",x0ead5:"v",x0eadc:"w",x0eadd:"w",x0eade:"w",x0eadf:"x",x0eae0:"X",x0eae1:"x",x0eae2:"X",x0eae3:"x",x0eae4:"x",x0eae5:"X",x0eae6:"x",x0eae8:"y",x0eae9:"Y",x0eaea:"y",x0eaeb:"Y",x0eaec:"y",x0eaed:"y",x0eaee:"z",x0eaef:"Z",x0eaf0:"z",x0eaf1:"z",x0eaf2:"Z",x0eaf3:"z",x0eaf4:"z",x0eafc:"B",x0eaff:"A",x0eb04:"w",x0eb05:"m",x0eb06:"M",x0eb07:"E",x0eb08:"W",x0eb0a:"h",x0eb0b:"n",x0eb0d:"H",x0eb0f:"M",x0eb10:"m",x0eb11:"Z",x0eb12:"g",x0eb14:"C",x0eb15:"E",x0eb19:"W",x0eb1a:"a",x0eb1b:"b",x0eb1c:"S",x0eb1e:"J",x0eb1f:"b",x0eb20:"Z",x0eb21:"L",x0eb22:"g",x0fb00:"ffi",x0fb01:"fi",x0fb02:"fl",x0fb03:"ffi",x0fb04:"ffl"};function startTargetBook(e,d,c,b,a){return startTarget(e,d,c,b,a)}function startTarget(h,q,p,n,a){if(!window.focus){return false}var l=",width="+p+",height="+n;var b="menubar=no,toolbar=no,status=no,scrollbars=yes,resizable=yes,dependent=yes,location=no";var d=b+l;if(a){d=d+","+a}q=String(q).replace(/-/g,"_");var o=75;var c=50;var g=o;var f=c;var r=50;var j=25;var k=["menubar","toolbar","statusbar"];for(var m in k){if(String(d).lastIndexOf(k[m]+"=yes")>String(d).lastIndexOf(k[m]+"=no")){r+=j}}try{if(window.screen.width&&p>0){g=Math.ceil((window.screen.width-p))-15}g=(g>0?g:o);if(window.screen.height&&n>0){f=Math.ceil((window.screen.height-n))-r}f=(f>0?f:c)}catch(s){}var t=",left="+g+",top="+f+",screenX="+g+",screenY="+f;d=d+t;w=window.open(h,q,d);if(w!=undefined){w.focus()}h.target=q;return false}function focuswin(a){a=String(a).replace(/-/g,"_");w=window.open("",a,"menubar=yes,scrollbars=yes,toolbar=yes,location=yes,status=yes,directories=yes,resizable=yes");if(w!=undefined){w.focus()}return true}function reverseString(b){var a="";for(i=0;i<=b.length;i++){a=b.charAt(i)+a}return a}function reverseAndReplaceString(c,a,b){return reverseString(c).replace(a,b)}function initUnObscureEmail(a,c){try{if(window.addEventListener){window.addEventListener("load",function(){unObscureEmail(a,c)},false)}else{if(window.attachEvent){window.attachEvent("onload",function(){unObscureEmail(a,c)})}}}catch(b){}}function unObscureEmail(c,g){try{if(typeof(unObscuredEmails)=="undefined"){unObscuredEmails=new Array()}if(!unObscuredEmails[c]){var f=document.getElementsByTagName("span");for(var b=0,a=f.length;b=10?ncbi.sg.ping(this,T,A,[Q]):ncbi.sg.ping(S)}}if(typeof U.data(h)!=="undefined"){U.data(h,null)}}function C(P){return P.data("popupSensor.cfg")}function N(R){var Q=R.data("popupSensor.popupCanvas");var P=C(R);if(typeof Q==="undefined"){Q=new J({el:R,delayOut:Math.max(P.delayOut,P.delayIn),delayIn:P.delayIn});if(typeof Q!=="undefined"){R.attr("canvas-rid",Q.getCanvasElm().attr("id"));f(R,Q)}}return Q}function f(Q,P){Q.data("popupSensor.popupCanvas",P)}function l(P){}function G(P){}function e(){console.info.apply(this,arguments)}var J=function(P){this.__name="popupCanvas";this.__cfgDefaults={delayIn:H,delayOut:F};this.__cfg={};this.__canvas=undefined;this.__imToLoad=0;this.__imagesBox=undefined;this.__legendBox=undefined;return(this.__init(P)===true?this:undefined)};c.fn.extend(J.prototype,{__init:function(R){c.fn.extend(this.__cfg,this.__cfgDefaults);c.fn.extend(this.__cfg,R);var Q=this.__newCanvas();if(Q){var P=this;this.bind(b,function(S){P.__in(S)});this.bind(E,function(S){P.__out(S)});this.bind(d,function(S){P.show(S)});this.bind(t,function(S){P.hide(S)})}return Q},__in:function(Q){var P=this.__cfg;var R=P.el;R.trigger(K)},__out:function(Q){var P=this.__cfg;var R=P.el;setTimeout(function(){R.trigger(z)},P.delayOut)},__newCanvas:function(){var P=this.__cfg;var Q=P.el;var S=undefined;this.__canvas=c('
      ');if(typeof Q!=="undefined"){if(typeof Q.attr("rid-figpopup")!=="undefined"){S=this.__collectHiresImgs(c(c("#"+Q.attr("rid-figpopup"))[0]))}else{if(typeof Q.attr("co-rid")!=="undefined"){c("#"+Q.attr("co-rid")).clone().removeAttr("id").show().appendTo(this.__getCanvasInner());S=Q.attr("co-rid")}else{if(typeof Q.attr("co-content")!=="undefined"){S=""+Math.floor(Math.random()*1000000);this.addContent(Q.attr("co-content"))}else{S=this.__collectHiresImgs(Q)}}}}if(typeof S!=="undefined"){var R=this.getCanvasElm();if(typeof Q.attr("co-legend")=="string"){this.addLegend(Q.attr("co-legend"))}if(typeof Q.attr("co-legend-rid")=="string"){this.addLegendRid(Q.attr("co-legend-rid"))}if(typeof Q.attr("co-class")=="string"){this.addClass(Q.attr("co-class"))}if(typeof Q.attr("co-style")=="string"){this.addStyle(Q.attr("co-style"))}R.appendTo(c(document.body));R.attr("id",String("_cid_"+S).replace(/\W+/g,"_"));Q.attr("canvas-rid",R.attr("id"));if(typeof ncbi!=="undefined"&&typeof ncbi.sg!=="undefined"&&typeof ncbi.sg.ping!=="undefined"){ncbi.sg.scanLinks(R.find("a").get())}}return typeof S!=="undefined"?true:false},__collectHiresImgs:function(Q){var R=undefined;var P=this;if(typeof Q!=="undefined"){Q.find("img[src-large], img[hires]").each(function(){var S=c(this);if(typeof S.attr("src-large")==="undefined"){S.attr("src-large",S.attr("hires"))}if(typeof R==="undefined"){R=""}R+="_"+S.attr("src-large")+"_";P.addImage(S)})}return R},bind:function(Q,P){this.__canvas.bind(Q,P)},show:function(Q){var P=this.__cfg;var R=P.el;this.__canvas.show();this.__canvasArrangeLocation();R.trigger(a)},hide:function(Q){var P=this.__cfg;var R=this.__cfg.el;this.__canvas.hide();R.trigger(D)},addImage:function(S){var R=this.__cfg;var W=R.el;if(typeof S.attr("src-large")!=="undefined"){this.__imToLoad+=1;if(this.__imToLoad===1){this.__imagesBox=c('
      ');this.__imagesBox.appendTo(this.__getCanvasInner())}var Q;var V=W.closest("a");var U=S.attr("alt");if(U===undefined){U=""}var P=c(''+U+'');if(typeof V!=="undefined"){Q=c("")}if(typeof Q!=="undefined"){c.each(["href","ref","target"],function(X,Y){if(V.attr(Y)!==""){Q.attr(Y,V.attr(Y))}});Q.bind("click",{},function(X){X.stopPropagation();V.trigger(X);return X.result===false?false:true});P.appendTo(Q.appendTo(c('
      ').appendTo(this.__imagesBox)))}else{P.appendTo(c('
      ').appendTo(this.__imagesBox))}var T=this;if(P.data("loaded")!==true){P.parent().addClass("in-progress");P.load(function(){var X=c(this);X.data("loaded",true);X.show();X.parent().removeClass("in-progress");T.__imToLoad-=1;T.__canvasArrangeLocation()})}}},addLegend:function(P){this.__legendBox=c('
      '+decodeURIComponent(P)+"
      ").css({"text-align":"left"});this.__legendBox.appendTo(this.__getCanvasInner().css({"text-align":"center"}))},addLegendRid:function(P){var Q=c("#"+P).clone().removeAttr("id").show();if(typeof Q!=="undefined"){this.__legendBox=c('
      ').css({"text-align":"left"});Q.appendTo(this.__legendBox);this.__legendBox.appendTo(this.__getCanvasInner().css({"text-align":"center"}))}},addContent:function(P){c('
      '+decodeURIComponent(P)+"
      ").appendTo(this.__getCanvasInner())},addClass:function(P){this.__getCanvasInner().addClass(P)},removeClass:function(P){this.__getCanvasInner().removeClass(P)},addStyle:function(P){this.__getCanvasInner().attr("style",this.__getCanvasInner().attr("style")+";"+P)},__getCanvasInner:function(){return this.__canvas.children(".co-inner").size()>0?this.__canvas.children(".co-inner"):this.__canvas},getCanvasElm:function(){var P=this.__cfg;return this.__canvas},__canvasReCalcLocation:function(V){var U=this.__canvas;var T=this.__imagesBox;var P=this.__legendBox;var R={win:undefined,elm:undefined,cnvs:undefined,ibox:undefined,lbox:undefined};R.win={size:{w:c(window).width(),h:c(window).height()},ltc:{left:c(window).scrollLeft(),top:c(window).scrollTop()}};R.elm={size:{w:V.outerWidth(true),h:V.outerHeight(true)},ltc:V.offset()};R.cnvs={size:{w:U.outerWidth(true),h:U.outerHeight(true)}};if(typeof T!=="undefined"){R.ibox={size:{w:T.outerWidth(true),h:T.outerHeight(true)}}}if(typeof P!=="undefined"){R.lbox={size:{w:P.outerWidth(true),h:P.outerHeight(true)}}}var S=[{n:x,v:(R.elm.ltc.top-R.win.ltc.top)},{n:v,v:((R.win.ltc.top+R.win.size.h)-(R.elm.ltc.top+R.elm.size.h))}];var Q=[{n:o,v:(R.elm.ltc.left-R.win.ltc.left)},{n:M,v:((R.win.ltc.left+R.win.size.w)-(R.elm.ltc.left+R.elm.size.w))},];R.spH=Q.sort(function(X,W){return W.v-X.v})[0];R.spV=S.sort(function(X,W){return W.v-X.v})[0];if(R.cnvs.size.w/R.cnvs.size.h<1||R.win.size.w/R.win.size.h>R.cnvs.size.w/R.cnvs.size.h||(R.spH.v>R.cnvs.size.w)){R.spName=R.spH.n}else{R.spName=R.spV.n}switch(R.spName){case o:R.cnvs.ltc={top:R.elm.ltc.top+R.elm.size.h/2-R.cnvs.size.h/2,left:R.elm.ltc.left-R.cnvs.size.w};break;case M:R.cnvs.ltc={top:R.elm.ltc.top+R.elm.size.h/2-R.cnvs.size.h/2,left:R.elm.ltc.left+R.elm.size.w};break;case x:R.cnvs.ltc={top:R.elm.ltc.top-R.cnvs.size.h,left:R.elm.ltc.left+R.elm.size.w/2-R.cnvs.size.w/2};break;case v:R.cnvs.ltc={top:R.elm.ltc.top+R.elm.size.h,left:R.elm.ltc.left+R.elm.size.w/2-R.cnvs.size.w/2};break;default:R.cnvs.ltc=R.elm.ltc}if((R.cnvs.ltc.top+R.cnvs.size.h)>(R.win.ltc.top+R.win.size.h)){R.cnvs.ltc.top-=(R.cnvs.ltc.top+R.cnvs.size.h)-(R.win.ltc.top+R.win.size.h)}if((R.cnvs.ltc.left+R.cnvs.size.w)>(R.win.ltc.left+R.win.size.w)){R.cnvs.ltc.left-=(R.cnvs.ltc.left+R.cnvs.size.w)-(R.win.ltc.left+R.win.size.w)}if(R.cnvs.ltc.top=ab.ibox.size.w){W.css({width:Math.max(ab.ibox.size.w,I)});ab=this.__canvasReCalcLocation(U)}V.css({top:ab.cnvs.ltc.top+"px",left:ab.cnvs.ltc.left+"px"});if(this.__imToLoad===0&&ag1){var ad=0;Y.each(function(){var ah=c(this);if(ah.data("loaded")===true){var ai=0;if(ah.width()/aa>q){ai=ah.width()/aa}else{if(ah.width()>q){ai=q}}if(ai>0){ad+=ah.width()-ai;ah.width(ai)}}});if(ad>1){Z.__canvasArrangeLocation(ag+1);return}}var af={w:(ab.win.size.w*0.95)/ab.cnvs.size.w,h:(ab.win.size.h*0.975)/ab.cnvs.size.h};if(Math.min(af.w,af.h)>1){var ae=0;Y.each(function(aj){var ak=c(this);var al=ak.width();var ai=ak.height();ak.width("auto");if(ak.data("loaded")===true&&alak.width()?"auto":al*ah);ae+=ak.width()-al}else{ak.width(al)}});if(ae>1){Z.__canvasArrangeLocation(ag+1)}}}else{if(ag(ab.win.size.w-ac)/X&&ah.width()>q){ah.width((ab.win.size.w-ac)/X);S=true}if(ah.height()>(ab.win.size.h-R)/X&&ah.width()>q){ah.width(ah.width()/(ah.height()/((ab.win.size.h-R)/X)));S=true}if(S&&ah.width()▼")}else{b.find("span").replaceWith("")}}return false}function cpToggle(b){if(typeof jQuery!=="undefined"){jQuery(b).parent().next().fadeToggle(200);var a=jQuery(b).parent().parent();if(a.hasClass("inline-block")){a.removeClass("inline-block")}else{a.addClass("inline-block")}}return false}var xpmc_fp={onLoadHandler:function(){var c=document.forms.journalsearch;if(c.elements["title-switch"]!==undefined){if(c.elements["title-switch"].length!==undefined){var a=(pmc_fp.init_state.title_switch==="hide")?0:1;c.elements["title-switch"][a].checked=true}else{c.elements["title-switch"].value=pmc_fp.init_state.title_switch}}if(c.elements["search-option"]!==undefined){if(c.elements["search-option"].length!==undefined){var b=(pmc_fp.init_state.search_option==="journals")?0:1;c.elements["search-option"][b].checked=true}else{c.elements["search-option"].value=pmc_fp.init_state.search_option}if(pmc_fp.has_autocomplete==="yes"){var d=jQuery("#jterm");c.elements["search-option"][0].onclick=function(){d.ncbiautocomplete("option","isEnabled",true)};c.elements["search-option"][1].onclick=function(){d.ncbiautocomplete("option","isEnabled",false)};d.keyup(function(e){if(e.keyCode===13){return doSearch()}})}}c.elements.tabindex.value=pmc_fp.init_state.tabindex}};if(typeof jQuery!=="undefined"){jQuery(document).ready(function(){if(typeof pmc_fp!=="undefined"&&typeof xpmc_fp!=="undefined"){xpmc_fp.onLoadHandler()}})}jQuery(document).ready(function(){if(jQuery(".epub-link").length==0){return}var b='';var c=jQuery(b).ncbidialog({autoOpen:false,modal:true,width:"500px"});var a=jQuery(".epub-link a");a.on("click",function(d){d.preventDefault();c.ncbidialog("open");c.height(c.height()+5)});jQuery("#cancelEpub").click(function(){c.ncbidialog("close")});jQuery("#downloadEpub").click(function(){c.ncbidialog("close");window.location.href=a.prop("href")})});jQuery(document).ready(function(){jQuery("#internal_links_switch").bind("click",function(c){var b=jQuery(this);var a;if(a=b.text().match(/ (on|off) /)){jQuery.cookie("PMC_SeeExternalArticlesInternally",a[1])}return true})});jQuery(document).on("click","a[target],area[target]",function(){var a=jQuery,b=a(this);return startTarget(b.attr("href"),b.attr("target"),1024,800)});jQuery(document).on("click","a.pmctoggle",function(){return togglePanel(this)}); \ No newline at end of file diff --git a/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/hfjs.js b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/hfjs.js new file mode 100644 index 0000000..dbee2ca --- /dev/null +++ b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/hfjs.js @@ -0,0 +1,93 @@ +var signin = document.getElementById("sign_in"); +if(typeof signin != 'undefined' && signin){ + signin.href = signin.href + "?back_url=" + encodeURIComponent(window.location); +} + +var signout = document.getElementById('sign_out'); +if(typeof signout != 'undefined' && signout){ + signout.href = signout.href + "?back_url=" + encodeURIComponent(window.location); +} + +function getCookie(cookie_name) { + var start_pos = document.cookie.indexOf(cookie_name + "="); //start cookie name + if (start_pos != -1) { + start_pos = start_pos + cookie_name.length+1; //start cookie value + var end_pos = document.cookie.indexOf(";", start_pos); + if (end_pos == -1) { + end_pos = document.cookie.length; + } + return decodeURIComponent(document.cookie.substring(start_pos, end_pos)); + } + else { + return ""; + } +} + +var c = getCookie('WebCubbyUser'); +c = decodeURIComponent(decodeURIComponent(c)); +lre = /.*logged-in\=(\w*);.*/; +ure = /.*my-name\=([\w|\-|\.|\ |\@|\+]*);.*/; +plus = /\+/gi; + +if(c){ + l = lre.exec( c ); + if(l && l[1] && l[1] === 'true' ) { + u = ure.exec( c ); + if(u && u[1]){ + var myncbi_username = document.getElementById("myncbiusername"); + var uname = document.getElementById('mnu'); + if (uname) { + if (typeof uname != 'undefined') { + uname.appendChild(document.createTextNode(u[1].replace(plus, ' '))); + myncbi_username.style.display = "inline"; + + var signin = document.getElementById("sign_in"); + signin.style.display = "none"; + + var signout = document.getElementById("sign_out"); + signout.style.display = "inline"; + + var myncbi = document.getElementById('myncbi'); + myncbi.style.display='inline'; + } + } + } + } +} + +(function( $ ){ + $( function() { + if (typeof $.fn.ncbipopper == "function") { + $('#info .external').each( function(){ + var $this = $( this ); + var popper = $this; + popper.ncbipopper({ + destSelector: '#external-disclaimer', + isDestElementCloseClick: false, + openAnimation: 'none', + closeAnimation: 'none', + isTriggerElementCloseClick: false, + triggerPosition: 'bottom center', + destPosition: 'top center', + hasArrow: true, + arrowDirection: 'top' + }); + }); + } + }); +})( jQuery ); + +if(typeof jQuery !== 'undefined' && jQuery.ui){ + var version = jQuery.ui.jig.version; + var pieces = version.split("."); + if(pieces[0] >= 1 && pieces[1] >= 11){ + if(pieces[1] == 11 && pieces[2] && pieces[3] >= 2){ + jQuery("#sign_in").click(function(e){ + if(typeof jQuery.ui.jig.requiresLogin !== 'undefined'){ + e.preventDefault(); + jQuery.ui.jig.requiresLogin(); + } + }); + } + } +} \ No newline at end of file diff --git a/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/jig.core.theme.min.css b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/jig.core.theme.min.css new file mode 100644 index 0000000..f89fedf --- /dev/null +++ b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/jig.core.theme.min.css @@ -0,0 +1 @@ +.ui-helper-hidden{display:none;}.ui-helper-hidden-accessible{position:absolute;left:-99999999px;}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none;}.ui-helper-clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden;}.ui-helper-clearfix{display:inline-block;}/* required comment for clearfix to work in Opera \*/ * html .ui-helper-clearfix{height:1%;}.ui-helper-clearfix{display:block;}/* end clearfix */ .ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0);}.ui-state-disabled{cursor:default!important;}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%;}.ui-widget{font-size:1.1em;}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222;}.ui-widget-content a{color:#222;}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:bold;}.ui-widget-header a{color:#222;}.ui-state-default,.ui-widget-content .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555;}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none;}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121;}.ui-state-hover a,.ui-state-hover a:hover{color:#212121;text-decoration:none;}.ui-state-active,.ui-widget-content .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121;}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none;}.ui-state-highlight,.ui-widget-content .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636;}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a{color:#363636;}.ui-state-error,.ui-widget-content .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a;}.ui-state-error a,.ui-widget-content .ui-state-error a{color:#cd0a0a;}.ui-state-error-text,.ui-widget-content .ui-state-error-text{color:#cd0a0a;}.ui-priority-primary,.ui-widget-content .ui-priority-primary{font-weight:bold;}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal;}.ui-state-disabled,.ui-widget-content .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none;}.ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_222222_256x240.png);}.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png);}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png);}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png);}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png);}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png);}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png);}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png);}.ui-icon-carat-1-n{background-position:0 0;}.ui-icon-carat-1-ne{background-position:-16px 0;}.ui-icon-carat-1-e{background-position:-32px 0;}.ui-icon-carat-1-se{background-position:-48px 0;}.ui-icon-carat-1-s{background-position:-64px 0;}.ui-icon-carat-1-sw{background-position:-80px 0;}.ui-icon-carat-1-w{background-position:-96px 0;}.ui-icon-carat-1-nw{background-position:-112px 0;}.ui-icon-carat-2-n-s{background-position:-128px 0;}.ui-icon-carat-2-e-w{background-position:-144px 0;}.ui-icon-triangle-1-n{background-position:0 -16px;}.ui-icon-triangle-1-ne{background-position:-16px -16px;}.ui-icon-triangle-1-e{background-position:-32px -16px;}.ui-icon-triangle-1-se{background-position:-48px -16px;}.ui-icon-triangle-1-s{background-position:-64px -16px;}.ui-icon-triangle-1-sw{background-position:-80px -16px;}.ui-icon-triangle-1-w{background-position:-96px -16px;}.ui-icon-triangle-1-nw{background-position:-112px -16px;}.ui-icon-triangle-2-n-s{background-position:-128px -16px;}.ui-icon-triangle-2-e-w{background-position:-144px -16px;}.ui-icon-arrow-1-n{background-position:0 -32px;}.ui-icon-arrow-1-ne{background-position:-16px -32px;}.ui-icon-arrow-1-e{background-position:-32px -32px;}.ui-icon-arrow-1-se{background-position:-48px -32px;}.ui-icon-arrow-1-s{background-position:-64px -32px;}.ui-icon-arrow-1-sw{background-position:-80px -32px;}.ui-icon-arrow-1-w{background-position:-96px -32px;}.ui-icon-arrow-1-nw{background-position:-112px -32px;}.ui-icon-arrow-2-n-s{background-position:-128px -32px;}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px;}.ui-icon-arrow-2-e-w{background-position:-160px -32px;}.ui-icon-arrow-2-se-nw{background-position:-176px -32px;}.ui-icon-arrowstop-1-n{background-position:-192px -32px;}.ui-icon-arrowstop-1-e{background-position:-208px -32px;}.ui-icon-arrowstop-1-s{background-position:-224px -32px;}.ui-icon-arrowstop-1-w{background-position:-240px -32px;}.ui-icon-arrowthick-1-n{background-position:0 -48px;}.ui-icon-arrowthick-1-ne{background-position:-16px -48px;}.ui-icon-arrowthick-1-e{background-position:-32px -48px;}.ui-icon-arrowthick-1-se{background-position:-48px -48px;}.ui-icon-arrowthick-1-s{background-position:-64px -48px;}.ui-icon-arrowthick-1-sw{background-position:-80px -48px;}.ui-icon-arrowthick-1-w{background-position:-96px -48px;}.ui-icon-arrowthick-1-nw{background-position:-112px -48px;}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px;}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px;}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px;}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px;}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px;}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px;}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px;}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px;}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px;}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px;}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px;}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px;}.ui-icon-arrowreturn-1-w{background-position:-64px -64px;}.ui-icon-arrowreturn-1-n{background-position:-80px -64px;}.ui-icon-arrowreturn-1-e{background-position:-96px -64px;}.ui-icon-arrowreturn-1-s{background-position:-112px -64px;}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px;}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px;}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px;}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px;}.ui-icon-arrow-4{background-position:0 -80px;}.ui-icon-arrow-4-diag{background-position:-16px -80px;}.ui-icon-extlink{background-position:-32px -80px;}.ui-icon-newwin{background-position:-48px -80px;}.ui-icon-refresh{background-position:-64px -80px;}.ui-icon-shuffle{background-position:-80px -80px;}.ui-icon-transfer-e-w{background-position:-96px -80px;}.ui-icon-transferthick-e-w{background-position:-112px -80px;}.ui-icon-folder-collapsed{background-position:0 -96px;}.ui-icon-folder-open{background-position:-16px -96px;}.ui-icon-document{background-position:-32px -96px;}.ui-icon-document-b{background-position:-48px -96px;}.ui-icon-note{background-position:-64px -96px;}.ui-icon-mail-closed{background-position:-80px -96px;}.ui-icon-mail-open{background-position:-96px -96px;}.ui-icon-suitcase{background-position:-112px -96px;}.ui-icon-comment{background-position:-128px -96px;}.ui-icon-person{background-position:-144px -96px;}.ui-icon-print{background-position:-160px -96px;}.ui-icon-trash{background-position:-176px -96px;}.ui-icon-locked{background-position:-192px -96px;}.ui-icon-unlocked{background-position:-208px -96px;}.ui-icon-bookmark{background-position:-224px -96px;}.ui-icon-tag{background-position:-240px -96px;}.ui-icon-home{background-position:0 -112px;}.ui-icon-flag{background-position:-16px -112px;}.ui-icon-calendar{background-position:-32px -112px;}.ui-icon-cart{background-position:-48px -112px;}.ui-icon-pencil{background-position:-64px -112px;}.ui-icon-clock{background-position:-80px -112px;}.ui-icon-disk{background-position:-96px -112px;}.ui-icon-calculator{background-position:-112px -112px;}.ui-icon-zoomin{background-position:-128px -112px;}.ui-icon-zoomout{background-position:-144px -112px;}.ui-icon-search{background-position:-160px -112px;}.ui-icon-wrench{background-position:-176px -112px;}.ui-icon-gear{background-position:-192px -112px;}.ui-icon-heart{background-position:-208px -112px;}.ui-icon-star{background-position:-224px -112px;}.ui-icon-link{background-position:-240px -112px;}.ui-icon-cancel{background-position:0 -128px;}.ui-icon-plus{background-position:-16px -128px;}.ui-icon-plusthick{background-position:-32px -128px;}.ui-icon-minus{background-position:-48px -128px;}.ui-icon-minusthick{background-position:-64px -128px;}.ui-icon-close{background-position:-80px -128px;}.ui-icon-closethick{background-position:-96px -128px;}.ui-icon-key{background-position:-112px -128px;}.ui-icon-lightbulb{background-position:-128px -128px;}.ui-icon-scissors{background-position:-144px -128px;}.ui-icon-clipboard{background-position:-160px -128px;}.ui-icon-copy{background-position:-176px -128px;}.ui-icon-contact{background-position:-192px -128px;}.ui-icon-image{background-position:-208px -128px;}.ui-icon-video{background-position:-224px -128px;}.ui-icon-script{background-position:-240px -128px;}.ui-icon-alert{background-position:0 -144px;}.ui-icon-info{background-position:-16px -144px;}.ui-icon-notice{background-position:-32px -144px;}.ui-icon-help{background-position:-48px -144px;}.ui-icon-check{background-position:-64px -144px;}.ui-icon-bullet{background-position:-80px -144px;}.ui-icon-radio-off{background-position:-96px -144px;}.ui-icon-radio-on{background-position:-112px -144px;}.ui-icon-pin-w{background-position:-128px -144px;}.ui-icon-pin-s{background-position:-144px -144px;}.ui-icon-play{background-position:0 -160px;}.ui-icon-pause{background-position:-16px -160px;}.ui-icon-seek-next{background-position:-32px -160px;}.ui-icon-seek-prev{background-position:-48px -160px;}.ui-icon-seek-end{background-position:-64px -160px;}.ui-icon-seek-start{background-position:-80px -160px;}.ui-icon-seek-first{background-position:-80px -160px;}.ui-icon-stop{background-position:-96px -160px;}.ui-icon-eject{background-position:-112px -160px;}.ui-icon-volume-off{background-position:-128px -160px;}.ui-icon-volume-on{background-position:-144px -160px;}.ui-icon-power{background-position:0 -176px;}.ui-icon-signal-diag{background-position:-16px -176px;}.ui-icon-signal{background-position:-32px -176px;}.ui-icon-battery-0{background-position:-48px -176px;}.ui-icon-battery-1{background-position:-64px -176px;}.ui-icon-battery-2{background-position:-80px -176px;}.ui-icon-battery-3{background-position:-96px -176px;}.ui-icon-circle-plus{background-position:0 -192px;}.ui-icon-circle-minus{background-position:-16px -192px;}.ui-icon-circle-close{background-position:-32px -192px;}.ui-icon-circle-triangle-e{background-position:-48px -192px;}.ui-icon-circle-triangle-s{background-position:-64px -192px;}.ui-icon-circle-triangle-w{background-position:-80px -192px;}.ui-icon-circle-triangle-n{background-position:-96px -192px;}.ui-icon-circle-arrow-e{background-position:-112px -192px;}.ui-icon-circle-arrow-s{background-position:-128px -192px;}.ui-icon-circle-arrow-w{background-position:-144px -192px;}.ui-icon-circle-arrow-n{background-position:-160px -192px;}.ui-icon-circle-zoomin{background-position:-176px -192px;}.ui-icon-circle-zoomout{background-position:-192px -192px;}.ui-icon-circle-check{background-position:-208px -192px;}.ui-icon-circlesmall-plus{background-position:0 -208px;}.ui-icon-circlesmall-minus{background-position:-16px -208px;}.ui-icon-circlesmall-close{background-position:-32px -208px;}.ui-icon-squaresmall-plus{background-position:-48px -208px;}.ui-icon-squaresmall-minus{background-position:-64px -208px;}.ui-icon-squaresmall-close{background-position:-80px -208px;}.ui-icon-grip-dotted-vertical{background-position:0 -224px;}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px;}.ui-icon-grip-solid-vertical{background-position:-32px -224px;}.ui-icon-grip-solid-horizontal{background-position:-48px -224px;}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px;}.ui-icon-grip-diagonal-se{background-position:-80px -224px;}.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;}.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;}.ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;}.ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;}.ui-corner-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;}.ui-corner-bottom{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;}.ui-corner-right{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;}.ui-corner-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;}.ui-corner-all{-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30);}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30);-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px;}.ui-widget{font-family:arial,"sans-serif"!important;font-size:100%;}.ui-helper-reset{font-size:100%!important;}iframe.ui-ncbi-iframe-fix{position:absolute;top:0;left:0;height:200px;z-index:3000;display:block;filter:alpha(opacity=1);}#ui-datepicker-div{display:none;}.ui-widget-content a{color:#2F4A8B;}.ui-helper-hidden-accessible{left:-10000000px!important;} \ No newline at end of file diff --git a/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/jig.min.js b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/jig.min.js new file mode 100644 index 0000000..65fc373 --- /dev/null +++ b/DOCS/Scalable and Interactive Segmentation and Visualization of Neural Processes in EM Datasets_files/jig.min.js @@ -0,0 +1,264 @@ +(function(){function Ka(){var i=null,j=jQuery.cookie("WebCubbyUser");if(j)if(j.indexOf("logged-in=true")>-1)if(j=j.match(/my-name=([^;]+)/i))i=j[1];return i}function W(i){this.name=this.selector="";this.onPage=false;this.dependsOn=[];this.interactions=[];this.overrideDefaults={};this.addCss=function(){document.write('')};this.addJs=function(){document.write('