package edu.stanford.rsl.conrad.physics.materials.database;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
import java.util.TreeMap;
import edu.stanford.rsl.conrad.physics.materials.utils.WeightedAtomicComposition;
import edu.stanford.rsl.conrad.utils.CONRAD;
import edu.stanford.rsl.conrad.utils.XmlUtils;
/**
* Retrieves or calculate all the absorption edges of a material based on its atomic composition.
* @author Rotimi X Ojo *
*/
public class CompositionToAbsorptionEdgeMap {
public static final File file = new File(MaterialsDB.getDatabaseLocation() + "configfiles/maps/compositionToAbsorptionEdge.xml");
@SuppressWarnings("unchecked")
private static TreeMap<String, String> map = (TreeMap<String, String>) XmlUtils.deserializeObject(file);
/**
* Retrieve a set of unique absorption edges given an atomic composition
* @param comp is atomic composition of material
* @return an empty arraylist if there are no edges
*/
public static ArrayList<Double> getAbsorptionEdges(WeightedAtomicComposition comp) {
Iterator<String> it = comp.keysIterator();
ArrayList<Double> edges = new ArrayList<Double>();
while(it.hasNext()){
String buf = map.get(it.next().trim());
Scanner sc = new Scanner(buf);
while(sc.hasNext()){
double val = Double.parseDouble(sc.next());
if(!edges.contains(val) && val > CONRAD.SMALL_VALUE){
edges.add(val);
}
}
}
return edges;
}
}
/*
* Copyright (C) 2010-2014 Rotimi X Ojo
* CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
*/