content: /*
   * Copyright (C) 2014 - Andreas Maier 
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */
  package edu.stanford.rsl.tutorial.physics;
  
  import edu.stanford.rsl.conrad.physics.materials.Mixture;
  import edu.stanford.rsl.conrad.physics.materials.database.MaterialsDB;
  import edu.stanford.rsl.conrad.physics.materials.utils.MaterialUtils;
  import edu.stanford.rsl.conrad.physics.materials.utils.WeightedAtomicComposition;
  
  
  /**
   * Class to create a custom material. Note that CONRAD is able to model also very advanced materials in very high detail.
   *  
   * In this example, we create four new materials in the material database.
   * We create <a href="http://bayerimaging.com/products/ultravist/">Ultravist(C)</a> in concentration 150, 240, 300, and 370.
   * The physical properties of these mixtures are taken from <a href="http://www.rxlist.com/ultravist-drug.htm">www.rxlist.com</a>.
   * The chemical formula for Iopromide is taken from <a href="http://en.wikipedia.org/wiki/Iopromide">Wikipedia</a>.
   * 
   * @author Andreas Maier
   *
   */
  public class CreateCustomMaterial {
  
  	
  	/**
  	 * Here we create ULTRAVIST 150, 240, 300, 370.
  	 * Chemical formula, density etc. are taken from<br>
  	 * http://www.rxlist.com/ultravist-drug.htm<br>
  	 * and<BR>
  	 * http://en.wikipedia.org/wiki/Iopromide
  	 *
  	 * @param args no arguments here.
  	 */
  	public static void main(String[] args) {
  		// from http://en.wikipedia.org/wiki/Iopromide
  		String formularIopromideString = "C18H24I3N3O8";
  		// @37 deg celsius
  		double additionalDensityInWater = 0.529816;
  		// from http://www.rxlist.com/ultravist-drug.htm
  		double [] additionalGramsOfIopromide = {.3117,	.49872,	.6234,	.76886};
  		double [] densityAt37DegCelsius = {1.157,	1.255,	1.322,	1.399};
  		String suffix[] = {"150", "240", "300", "370"};
  		
  		// This would be plain iopromide:
  		WeightedAtomicComposition wacIopromide = new WeightedAtomicComposition(formularIopromideString);
  		double molarMassIopromide = MaterialUtils.computeMolarMass(wacIopromide);
  		MaterialUtils.newMaterial("Iopromide",additionalDensityInWater,wacIopromide);
  		
  		WeightedAtomicComposition water = new WeightedAtomicComposition("H2O");
  		double molarMassWater = MaterialUtils.computeMolarMass(water);
  		double waterParticlesIn1Gram = 1 / molarMassWater;
  		
  		// Create compositions as used in clinical practice:
  		for(int i = 0; i < additionalGramsOfIopromide.length; i++) {
  			WeightedAtomicComposition wacUltravist = new WeightedAtomicComposition("H2O", waterParticlesIn1Gram);
  			double iopromideParticles = additionalGramsOfIopromide[i] / molarMassIopromide;
  			wacUltravist.add(formularIopromideString, iopromideParticles);
  			//Material ultravist = MaterialUtils.newMaterial(,densityAt37DegCelsius[i],wacUltravist);
  			Mixture iopromideSolution = new Mixture();
  			iopromideSolution.setDensity(densityAt37DegCelsius[i]);
  			iopromideSolution.setName("Ultravist"+suffix[i]);
  			iopromideSolution.setWeightedAtomicComposition(wacUltravist);
  			MaterialsDB.put(iopromideSolution);
  		}
  	}
  
  }
  