/*
* Copyright (C) 2010-2014 Andreas Maier
* CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
*/
package edu.stanford.rsl.conrad.phantom.xcat;
import java.util.HashMap;
import edu.stanford.rsl.conrad.physics.materials.Material;
import edu.stanford.rsl.conrad.physics.materials.database.MaterialsDB;
import edu.stanford.rsl.conrad.utils.Configuration;
import edu.stanford.rsl.conrad.utils.RegKeys;
public abstract class XCatMaterialGenerator {
/**
* Get the material from its name.
* @param name the name
* @return the material
*/
public static Material generateFromMaterialName(String name){
Double value = getMaterialDensityLUT().get(name);
if (value == null) System.out.println("Error value was null: " + name);
Material material = MaterialsDB.getMaterialWithName("Water");
material.setName(name + " (water w rho=" + value + " [g/cm^3])");
if (name.contains("Bone")) material = MaterialsDB.getMaterialWithName("Bone");
if (name.contains("Marrow")) material = MaterialsDB.getMaterialWithName("Bonemarrow");
if (name.contains("Catheter")) material = MaterialsDB.getMaterialWithName("copper");
material.setDensity(value);
// using custom contrast agent from tutorial code.
// in this material the density is already set correctly.
if (name.contains("Coronary Artery")) {
if (Configuration.getGlobalConfiguration().getRegistry().get(RegKeys.XCAT_ONLY_LEFT_ARTERY_TREE_CONTRASTED)!= null) {
if (Configuration.getGlobalConfiguration().getRegistry().get(RegKeys.XCAT_ONLY_LEFT_ARTERY_TREE_CONTRASTED).equals("true")) {
}
}else{
material = MaterialsDB.getMaterialWithName("Ultravist370");
}
}
return material;
}
/**
* The material-name lookup table.
* @return the material-name lut
*/
public static HashMap<String, Double> getMaterialDensityLUT(){
HashMap<String, Double> map = new HashMap<String, Double>();
map.put("Body (water)", 1.0);
map.put("Adipose (fat)", 0.920000);
map.put("Lung", 0.300000);
map.put("Air", 0.0);
map.put("Spine Bone", 1.420000);
map.put("Rib Bone", 1.620000);
map.put("Bone", 1.620000);
map.put("Skull Bone", 1.610000);
map.put("Blood", 1.060000);
map.put("Blood Kidney Vein", 1.060000);
map.put("Blood Liver Vein", 1.060000);
map.put("Blood Vein", 1.060000);
map.put("Blood Pul Vein", 1.060000);
map.put("Blood Vena Cava", 1.060000);
map.put("Blood Artery", 1.060000);
map.put("Blood Pul Artery", 1.060000);
map.put("Blood Kid Artery", 1.060000);
map.put("Blood (Aorta)", 1.060000);
map.put("Blood (LV)", 1.060000);
map.put("Coronary Artery", 4.000000);
map.put("Heart", 1.050000);
if (Configuration.getGlobalConfiguration().getRegistry().get(RegKeys.XCAT_CONTRAST_LEFT_VENTRICLE) != null) {
if (Configuration.getGlobalConfiguration().getRegistry().get(RegKeys.XCAT_CONTRAST_LEFT_VENTRICLE).equals("true")){
map.put("Blood (Aorta)", 2.00000);
map.put("Blood (LV)", 2.50000);
map.put("Heart", 1.50000);
}
}
map.put("Muscle", 1.16);
map.put("Kidney", 1.050000);
map.put("Liver", 1.060000);
map.put("Lymph", 1.030000);
// Changed from
// map.put("Bone Marrow", 1.120000);
// to
map.put("Bone Marrow", 0.98);
// densities for red marrow and yellow marrow are 1.03 and 0.98. We chose red marrow here
// based on Gary Beaupre's suggestion:
// H. Q. Woodard, and D. R. White. The composition of body tissues
// 1986, The British Journal of Radiology, 59, 1209-1219 DECEMBER 1986
// This is consistent with
// ICRU Report 46. Photon, Electron, Proton and Neutron Interaction Data for Body Tissues. Bethesda, MD: International Commission on Radiation Units and Measurements; 1992.
map.put("Pancreas", 1.040000);
map.put("Spleen", 1.060000);
//map.put("Spleen", 1.360000);
map.put("Intestine", 1.030000);
map.put("Cartilage", 1.100000);
map.put("Brain", 1.040000);
map.put("Heart Lesion", 2.0000);
map.put("Catheter Material", 5.0);
String value = Configuration.getGlobalConfiguration().getRegistry().get(RegKeys.XCAT_USE_MRI_CONTRAST_SETTINGS);
if (value != null){
if (Boolean.parseBoolean(value)){
map.put("Body (water)", 0.16); /// ?
map.put("Adipose (fat)", 0.10); ///
map.put("Lung", 0.04); ///
map.put("Air", 0.00); ///
map.put("Spine Bone", 0.00); ///
map.put("Rib Bone", 0.00); ///
map.put("Bone", 0.00); ///
map.put("Skull Bone", 0.00); ///
map.put("Blood", 0.25); /// ?
map.put("Blood Kidney Vein", 0.27); /// ?
map.put("Blood Liver Vein", 0.35); /// ?
map.put("Blood Vein", 0.25); /// ?
map.put("Blood Pul Vein", 0.24); ///
map.put("Blood Vena Cava", 0.29); ///
map.put("Blood Artery", 0.32); /// ?
map.put("Blood Pul Artery", 0.31); ///
map.put("Blood Kid Artery", 0.29); /// ?
map.put("Blood (Aorta)", 0.32); ///
map.put("Blood (LV)", 0.42); ///
map.put("Coronary Artery", 0.35); ///
map.put("Heart", 0.12); ///
if (Configuration.getGlobalConfiguration().getRegistry().get(RegKeys.XCAT_CONTRAST_LEFT_VENTRICLE) != null) {
if (Configuration.getGlobalConfiguration().getRegistry().get(RegKeys.XCAT_CONTRAST_LEFT_VENTRICLE).equals("true")){
map.put("Blood (Aorta)", 0.42); ///
map.put("Blood (LV)", 0.57); ///
map.put("Heart", 0.18); ///
}
}
map.put("Muscle", 0.22); /// ?
map.put("Kidney", 0.37); ///
map.put("Liver", 0.26); ///
map.put("Lymph", 0.50); /// ?
map.put("Bone Marrow", 0.31); ///
map.put("Pancreas", 0.32); /// ?
map.put("Spleen", 0.34); /// ?
map.put("Intestine", 0.00); /// not in ROI
map.put("Cartilage", 0.22); /// ?
map.put("Brain", 0.00); /// not in ROI
map.put("Heart Lesion", 0.00); /// not needed
map.put("Catheter Material", 0.00); /// not needed
}
}
return map;
}
}