Prepare zebrafish for microCT scanning. In this protocol, we assume that there are a relatively large number of fish which need to be scanned over multiple days. As a result, all fish that will be scanned should be prepared and frozen as described below. Multiple 2x2 bundles of fish can be stored in 50mL conical tubes in the -20C freezer until they are ready for scanning (see Note 1).
a. Begin by following the standard procedure to euthanize the zebrafish you will be scanning.
b. Dry the countertop where you will be prepping the fish.
c. Wrap the fish individually in a paper towel before scanning (Fig 4) (see Note 2). This will help keep them separated from each other and centrally positioned within the sample holder. You will need a short strip of paper towel with one end slightly folded over to help wrap the fish. To create this, take a paper towel folded in its natural trifold state and, from the short end, cut a strip that is 2.5 cm wide. Unfold the strip and cut off the end ~0.5 cm past the natural crease of the tri fold. You should now have a short strip of paper towel with ~0.5 cm of one end folded over.
i. Flip the strip of paper towel over and, using a permanent lab marker, label the opposite end from where your crease is with the ID of your fish. This should be done prior to wrapping the fish.
ii. Cut a 10cm length of Transpore tape. Split the length of tape in half longwise. Cut those pieces into short segments around 1 cm long.
d. Use a plastic spoon to gently scoop a euthanized fish and lay it on a stack of paper towels. It can be helpful to drill a few small holes into the spoon to enable excess water to drain. Flip the fish over to dry each side. The fish will not be completely dry but this will remove excess water.
e. Scoop up your fish with the plastic spoon and lay it in the crease of your paper towel strip.
f. Wrap the fish snugly, without damaging the fish, in the paper towel strip and tape closed with a segment of the Transpore tape. You will want the jaw to be visible, sticking out of the top of the wrap, to help you line the fish up later. Your label should now appear on the outside of the wrapped fish.
g. Optional: Create fish bundles for multiplexed scanning (Fig 5).
i. Repeat the above steps for three other fish, such that you have four prepped fish total (Fig 5A). Ideally, choose two controls and two experimental fish for each bundle. Having “experimental” fish along with “control fish” in each scan will mitigate any differences between the experimental and control groups arising from batch effects.
ii. To create a 2x1 bundle, select one control and one experimental fish. Hold the two wrapped fish together so that the jaws of the fish are aligned, with the control fish on the left and the experimental fish on the right (or make a note of which side the fish are on and be consistent). Tape over the top of the two fish with a small piece of the Transpore tape and then gently adjust the fish alignment as needed before taping over the bottom of both with another piece of tape. Repeat with the other two fish (Fig 5B).
iii. Stack the first 2x1 bundle on top of the second 2x1 bundle and secure with a small piece of Transpore tape to make a 2x2 bundle (Fig 5C and 5D).
h. Individually wrapped fish or 2x2 fish bundles can be stored in 50mL conical tubes in a -20C freezer until ready to scan.
2. Load the sample into the microCT scanner (Fig 6). In this protocol, we are using a Scanco vivaCT40. The sample holder is cylindrical in shape and approximately 14 mm in diameter (See Note 3).
a. Remove the individually wrapped fish or frozen 2x2 fish bundle from the 50mL tube. Let thaw for 10-15 min.
b. Insert the individually wrapped fish or fish bundle into the sample holder, with the head(s) facing toward you. Place fish into the cylinder prior to mounting onto the base holder. You want the fish to be snug inside so that they will not move when jostled, so you may need to wrap them with another strip of paper towel to make the wrap larger. If needed, push them in further with forceps so that no part is outside of the sample holder (Fig 6B and 6C).
c. Rotate the sample holder such that the fish dorsoventral axis is perpendicular to the ground, ventral side down (Fig 6D). The sample is now ready to scan.
d. Optional: Once the wrapped fish is positioned in the sample holder, moisten paper with either a drop of tap water or saline. This will help to keep the sample hydrated while scanning. This is not recommended when performing multiplexed imaging as it is important that fish are maintained in their original positions and wetting can result in excessive movement.
3. Perform the scan.
a. Before using the scanner ensure that the microCT and the radiation indicator light are off.
b. Load the sample holder. Open the scanner door and slide the sample holder onto the gold “track”. Slide the sample holder all the way in and lock it into place by pulling the lever clockwise and the sample holder is firmly in a locked position. Close the scanner door.
c. In the scanner software, click on “New” to assign a new sample number. Enter the sample information.
1. Select the Control file with the desired scan parameters (Note 4).
i. For medium resolution scans of unstained adult zebrafish, we have used the following parameters:
1. Holder Type: Generic, Any D x L 145 mm
2. Mode: Continuous ROT
3. Evaluation: Default Evaluation
4. Energy/Intensity: 55 kVp, 145 mA, 8 W
5. FOV/Diameter (mm): 21.5
6. Voxel size (mm): 21
7. Integration Time: 200 ms
8. Average Data: 1
ii. For high resolution scans of unstained adult zebrafish, we have used the following parameters:
1. Holder Type: Generic, Any D x L 145 mm
2. Mode: Continuous ROT
3. Evaluation: Default Evaluation
4. Energy/Intensity: 55 kVp, 145 mA, 8 W
5. FOV/Diameter (mm): 21.5
6. Voxel size (mm): 10.5
7. Integration Time: 200 ms
8. Average Data: 1
d. Perform the scout-view by selecting “Scout-View”.
e. Define the scan volume. Select “Reference-line” and you will see a horizontal line appear. Move this line so that it is slightly beyond the tip of the fish’s head and press the ‘shift’ key to freeze it. Continue to press ‘shift’ and move your cursor down to the bottom of the fish. For whole body scans, place the line for the lower limit slightly beyond the end of the tail fin of the fish. As you move the cursor down, you should see the time for the scan in minutes increase. Stop once you have the entire tail in your scan, and then continue to increase the lower limit as much as possible without the scan time increasing any more. Once you have reached this lower limit, click the mouse to set these as limits.
f. If you are satisfied with the reference lines, you can start the scan. Select Okay/Scan/Start Measurement. Your scan is now in progress.
g. When your scan is complete, remove the sample from the sample holder. Wrapped fish (individuals or bundles) can be placed back into 50mL conical tubes and stored in a -20C freezer.
4. Segment fish from the bulk scan and export images as .DCM files (see Note 5). We use a custom IPL script to automatically segment fish in the bulk scan and create .DCM files for each fish. The script (MAKE_CT_DICOM.COM) can be downloaded at the FishCuT Open Science Framework link. To run the script:
a. Select ‘Applications’ and then open a DECterm by clicking ‘DECterm’.
b. Change the directory to where the MAKE_CT_DICOM.COM file is located.
c. Run the script by using the @ command along with the number of fish per scan and the scanner-assigned measurement number. For example, if there are 4 fish per scan, and the measurement number is 16354, “@MAKE_CT_DICOM 4 16354”. The script allows for batch operation for processing of multiple scans. For example, if you would like to process measurement numbers 16354, 16355, 16356, and 16357, you could enter “@MAKE_CT_DICOM 4 16354 16355 16356 16357” or “@MAKE_CT_DICOM 4 16354:16357”.
d. This operation will generate a .ZIP file for each fish. Each will have a name like “C0015050_254_395_CT_DCM.zip” that can be used to identify the individual animal within the bulk scan. The first three-digit number (254) in the file name corresponds to the x-axis location of the fish in the bulk scan. The second three-digit number corresponds to the location of the fish in the y-axis. The left, top fish is therefore the fish with the smaller x and y coordinates (Fig 7).
5. Analyze scans using FishCuT (Fig 8).
a. Prior to using FishCuT for the first time, it is recommended you watch the demonstration video which can be viewed at the Open Science Framework link.
b. Transfer DICOM images to your computer where FishCuT is installed. Open the zip file for the fish you intend to analyze. It is recommended to temporarily save it onto the desktop.
c. If necessary, rename the folder that appears. This must be the folder with the .DCM images DIRECTLY inside. For example: C0016050_255_395_CT_DCM msbl f0 control 1.
d. Open MATLAB and verify that the FishCuT.m script contains the correct paths to the mij files. Also, add the path to the MIJ java package by running the command “addpath(‘/Applications/Fiji.app/scripts’)”.
e. In MATLAB, open FishCuT by running the command “FishCuT.” You should see the start window.
f. Select “Start” and select the .DCM sequence to analyze. Navigate to the folder containing the .DCM images for analysis, click on the first image in the sequence, and hit “Open” (Fig 8A). Note that in the .DCM images, FishCuT assumes that the dorsal aspect of the fish is at the top, and ventral is at the bottom. Moreover, it assumes that the images will be sequentially numbered with the first image being the most rostral, and the last image being most caudal. It is important that this convention be followed for FishCuT to operate correctly.
g. The program will then ask for image parameters:
i. Resolution (mm) is the voxel size.
ii. Slope and intercept relate the pixel values to mg HA/ccm density values: mg HA/ccm = x*slope + intercept, where x is the pixel value. These values are reported by the Scanco calibration program (see Note 6). For example:
1. Slope: 281.706
2. Intercept: -195.402
iii. The threshold multiplier is an empirically-derived value that is multiplied to the threshold value automatically calculated by FishCuT to adjust it in cases when the automatically calculated value is too conservative or stringent. We usually use a value of 0.73. It is important to use the same threshold multiplier across your experiment. See Note 7.
iv. After entering the image parameters, enter “OK”.
h. FishCuT will read in the .DCM files and perform some initial computations.
i. FishCuT will show a maximum intensity projection and an ROI outlining the fish that it automatically generated. Visually inspect the images and verify that the program has accurately outlined the entirety of the fish body. The outline does not need to be perfect, but it should encapsulate the entire fish. If you are satisfied, enter “e”. If not, you can manually specify the outline. To do this, enter “m” and use the left mouse button to click around the fish body, generating sequential line segments until reaching the initial tracing point. Once a closed ROI is specified, FishCuT will automatically proceed to the next step (Fig 8B).
j. FishCuT will then calculate connectivity and generate labelled projections. FishCuT will generate two images. The image with different colors shows the initial connectivity computed by FishCuT. Specifically, it shows the individual connected components, assigns them different colors, and makes a 2D projection for visualization. We will use this image to guide further segmentation steps, with the goal of making “cuts” so that no vertebra is connected to other vertebrae or tissues. The grey-scale image is a maximum intensity projection which you will use to specify ROI for vertebral segmentation. Once you see the message “Enter “s” to segment, or “e” to exit” in the Command Window, you can proceed.
k. Perform the initial vertebral segmentation. Enter “s” to segment, then enter “v” for vertebral segmentation. On the grey-scale image, use the mouse to draw line segments that define the intervertebral regions. Each line consists of two points: a dorsal point and a ventral point. The dorsal point must always be specified first. See the tutorial located at the Open Science Framework link for guidance on point placement. FishCuT will keep track of how many lines you draw; for example, if you draw 17 lines, it will segment the 16 vertebrae that are flanked by the 17 lines. Segment 16-24 vertebrae by drawing 17-25 lines, starting with the anterior end of the first pre-caudal (rib-bearing vertebra). If you would like to redo a line segment, press “b” to erase the line segment you just made. Once you are finished, press “space”. The program will compute the new connectivity (Fig 8C).
l. Perform fine segmentation. If the initial segmentation is not sufficient to isolate each vertebra, use fine segmentation to create further “cuts”. Enter “s” to segment, then “f” for fine segmentation. Draw line segments where you would like to cut (see the tutorial located at the Open Science Framework link for an example). Once you are finished, press “space”. The program will compute the new connectivity. Repeat this step until you are satisfied with the connectivity. When you are done, press “e” to exit.
m. Perform vertebral assignments (Fig 8D). Here, you will assign which connected components belong to which vertebra. Starting with the anterior-most precaudal vertebra (“vertebra 1”), click on the connected component corresponding to the vertebra. Once you click on it, it will disappear from the image. Each vertebra should be composed of three parts: the vertebral body, the neural arch, and the haemal arch or ribs (depending on vertebrae location). If there are additional connected components that comprise vertebra 1, click on these as well. Once all connected components are selected, hit space to proceed to the next vertebra. Repeat for all vertebrae.
n. After you have numbered all the vertebrae and hit space, FishCuT will generate a heatmap of the data, images of the fish, and a folder containing the data (Fig 8E). If performed correctly, you should see a fish with alternating colors for each vertebra and corresponding ribs/hemal arch and neural arch.
o. Repeat for all the fish in your experiment.
6. Analyze FishCuT data using R.
a. Download the “FishCuT analysis.R” file from the Open Science Framework link.
b. Create a folder containing:
i. the .txt files from FishCuT for analysis.
ii. The “FishCuT analysis.R” script.
c. Open the R application by double clicking on the .R file. By opening R in this way, the correct working directory will be specified. Alternatively, specify the working directory by clicking “Misc" and ”Change Working Directory.”
d. Edit the files names in the dataFiles vector of the R script so that they match the .txt file names being analyzed. The data file names should be entered as arguments separated by commas within the c() function in R, which combines the arguments into a vector.
e. Change the groupIDs vector so that order and number of the “mutant” and “control” labels correspond to the order and number of the data files in the dataFiles vector. For example, if the first data file is a control, then the first argument within the groupIDs vector should be labeled “control”.
f. Change the legend labels in the legendLabels vector to match the groups being analyzed.
g. You can also change the measurements included in the analysis, the vertebrae being analyzed, the p-value which will be considered significant, and whether the y-axis is set to zero by editing the paramsToAnalyze, vertsToAnalyze, and pValueThresh variables within the .R script. For example, to specify which of the 26 available parameters should be analyzed, add the appropriate parameter numbers as arguments within the “paramsToAnalyze” vector.
h. Save the .R file.
i. Run the script. You can do this by typing “source(“FishCuT analysis.R”)” in the console and hitting “enter”. Alternatively, you copy and paste your script into the R console and hit “enter”.
j. The script will generate graphs for the measurements and characteristics of the vertebrae you selected. For each measurement, the script will perform the global test to compute a p-value. Those that are less than the specified p-value will be rendered in the lighter coloring scheme.
7. Create a maximum intensity projection (MIP) using FIJI (Fig 9).
a. Open FIJI.
b. Drag the desired .DCM folder onto the FIJI window. Click “Yes”. A window will appear with a slide bar, which is used to look at all the slices of the scanned fish.
c. Select “Image” from the toolbar, followed by “Stacks” and “Reslice”. On the window that appears, make sure “Left” and “Avoid Interpolation” are selected. Check “Rotate 90 degrees” to position the fish horizontally.
d. Once the resliced image appears, select “Image” in the toolbar, followed by “Stacks” and “Z Project”. In the new “Z Projection” window, select “Max Intensity” in the “Projection Type” options. A maximum intensity projection (MIP) image will appear.
e. Save the image as a .tif file by selecting “File” from the toolbar followed by “Save As” and ”Tiff”.
Montage of MIPs can also be created in FIJI. First, open all the desired MIP .tif files in the desired order for the montage. Select “Image” from the toolbar, then “Images to Stack”. A window of all the MIPs stacked together will appear. Again select “Image”, then “Make Montage”. On the window that appears, you can choose the number of rows and columns to determine how the montage will appear. Use “1” for “Scale factor” to restore the quality of the image in the montage.