1 package org.lcsim.detector.material; 2 3 import java.io.InputStream; 4 import java.util.Map; 5 6 import junit.framework.TestCase; 7 import junit.framework.TestSuite; 8 9 import org.jdom.Document; 10 import org.jdom.Element; 11 import org.jdom.input.SAXBuilder; 12 import org.lcsim.detector.converter.lcdd.MaterialElementConverter; 13 import org.lcsim.detector.converter.lcdd.MaterialMixtureConverter; 14 import org.lcsim.geometry.compact.CompactReader; 15 import org.lcsim.material.MaterialManager; 16 import org.lcsim.material.XMLMaterialManager; 17 import org.lcsim.util.xml.JDOMExpressionFactory; 18 19 // TODO Add OneTimeDetectorSetup. 20 public class MaterialConverterTest 21 extends TestCase 22 { 23 public MaterialConverterTest(String name) 24 { 25 super(name); 26 } 27 28 public static junit.framework.Test suite() 29 { 30 return new TestSuite(MaterialConverterTest.class); 31 } 32 33 public void testDummy() 34 { 35 // dummy for now 36 } 37 38 // TODO These should be separate tests. 39 /* 40 public void testReadElementXML() throws Exception 41 { 42 InputStream in = 43 MaterialElementConverter.class. 44 getResourceAsStream("/org/lcsim/material/elements.xml"); 45 JDOMExpressionFactory eval = new JDOMExpressionFactory(); 46 CompactReader.registerCLHEPConstants(eval); 47 SAXBuilder builder = new SAXBuilder(); 48 builder.setFactory(eval); 49 Document doc = builder.build(in); 50 51 Element root = doc.getRootElement(); 52 53 // Test conversion of <element>. 54 MaterialElementConverter cnv = new MaterialElementConverter(); 55 for ( Object child : root.getChildren("element") ) 56 { 57 Element element = (Element)child; 58 cnv.convert(element); 59 } 60 61 // Test conversion of <material>. 62 MaterialMixtureConverter cnv2 = new MaterialMixtureConverter(); 63 for ( Object child : root.getChildren("material") ) 64 { 65 Element element = (Element)child; 66 cnv2.convert(element); 67 } 68 69 InputStream in2 = 70 MaterialElementConverter.class. 71 getResourceAsStream("/org/lcsim/material/materials.xml"); 72 JDOMExpressionFactory eval2 = new JDOMExpressionFactory(); 73 CompactReader.registerCLHEPConstants(eval); 74 SAXBuilder builder2 = new SAXBuilder(); 75 builder2.setFactory(eval2); 76 Document doc2 = builder.build(in2); 77 78 //MaterialMixtureConverter cnv2 = new MaterialMixtureConverter(); 79 for ( Object child : doc2.getRootElement().getChildren("material") ) 80 { 81 Element element = (Element)child; 82 cnv2.convert(element); 83 } 84 85 XMLMaterialManager xmlMat 86 = XMLMaterialManager.create(XMLMaterialManager.materials() ); 87 xmlMat.load("/org/lcsim/material/materials.xml"); 88 xmlMat.makeMaterials(null); 89 90 // Compare to old materials database. 91 for ( IMaterial material : MaterialStore.getInstance()) 92 { 93 if ( material instanceof MaterialMixture ) 94 { 95 org.lcsim.material.Material oldmaterial = 96 MaterialManager.instance().getMaterial(material.getName()); 97 98 assertEquals(oldmaterial.getAeff(), material.getA(), 1e-8 ); 99 100 assertEquals(oldmaterial.getZeff(), material.getZ(), 1e-8 ); 101 102 assertEquals( 103 oldmaterial.getNuclearInteractionLength(), 104 material.getNuclearInteractionLength(), 105 1e-8 ); 106 107 assertEquals( 108 oldmaterial.getNuclearInteractionLengthWithDensity(), 109 material.getNuclearInteractionLengthWithDensity(), 110 1e-8 ); 111 112 assertTrue( 113 oldmaterial.getRadiationLength() - 114 material.getRadiationLength() <= 115 1E-5 ); 116 117 assertTrue( 118 oldmaterial.getRadiationLengthWithDensity() - 119 material.getRadiationLengthWithDensity() <= 120 1E-5 ); 121 122 //assertTrue( 123 // oldmaterial.getMoliereRadius() - 124 // material.getMoliereRadius() <= 125 // 1e-4 ); 126 127 // Old material does not have this. 128 //assertTrue( 129 // material.getEffectiveNumberOfNucleons() != 0 130 // ); 131 132 if (material.getName().equals("Silicon")) 133 { 134 System.out.println("old material ..."); 135 System.out.println(oldmaterial.toString()); 136 System.out.println("----"); 137 System.out.println("new material ..."); 138 System.out.println(material.toString()); 139 } 140 } 141 } 142 } 143 */ 144 }