View Javadoc

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 }