LISTSERV mailing list manager LISTSERV 16.5

Help for LCDET-SVN Archives


LCDET-SVN Archives

LCDET-SVN Archives


LCDET-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

LCDET-SVN Home

LCDET-SVN Home

LCDET-SVN  May 2015

LCDET-SVN May 2015

Subject:

r3601 - in /projects/lcsim/branches/LCSIM-245/detector-framework: pom.xml src/main/java/org/lcsim/detector/converter/compact/DetectorConverter.java

From:

[log in to unmask]

Reply-To:

Notification of commits to the lcdet svn repository <[log in to unmask]>

Date:

Tue, 5 May 2015 22:28:54 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (392 lines)

Author: [log in to unmask]
Date: Tue May  5 15:28:45 2015
New Revision: 3601

Log:
Use Reflections to lookup subdetector converters so that ones in external packages will be found at runtime.

Modified:
    projects/lcsim/branches/LCSIM-245/detector-framework/pom.xml
    projects/lcsim/branches/LCSIM-245/detector-framework/src/main/java/org/lcsim/detector/converter/compact/DetectorConverter.java

Modified: projects/lcsim/branches/LCSIM-245/detector-framework/pom.xml
 =============================================================================
--- projects/lcsim/branches/LCSIM-245/detector-framework/pom.xml	(original)
+++ projects/lcsim/branches/LCSIM-245/detector-framework/pom.xml	Tue May  5 15:28:45 2015
@@ -105,6 +105,10 @@
             <artifactId>commons-lang3</artifactId>
             <version>3.3.2</version>
         </dependency>
+        <dependency>
+            <groupId>org.reflections</groupId>
+            <artifactId>reflections</artifactId>
+            <version>0.9.9</version>
+        </dependency>
     </dependencies>
-    
 </project>

Modified: projects/lcsim/branches/LCSIM-245/detector-framework/src/main/java/org/lcsim/detector/converter/compact/DetectorConverter.java
 =============================================================================
--- projects/lcsim/branches/LCSIM-245/detector-framework/src/main/java/org/lcsim/detector/converter/compact/DetectorConverter.java	(original)
+++ projects/lcsim/branches/LCSIM-245/detector-framework/src/main/java/org/lcsim/detector/converter/compact/DetectorConverter.java	Tue May  5 15:28:45 2015
@@ -1,13 +1,16 @@
 package org.lcsim.detector.converter.compact;
 
 import java.io.IOException;
+import java.lang.reflect.Modifier;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 
 import org.jdom.Document;
 import org.jdom.Element;
 import org.jdom.JDOMException;
 import org.lcsim.detector.DetectorElement;
+import org.lcsim.detector.DetectorIdentifierHelper.SystemMap;
 import org.lcsim.detector.DetectorStore;
 import org.lcsim.detector.IDetectorElement;
 import org.lcsim.detector.ILogicalVolume;
@@ -16,7 +19,6 @@
 import org.lcsim.detector.ParametersStore;
 import org.lcsim.detector.PhysicalVolume;
 import org.lcsim.detector.PhysicalVolumeNavigatorStore;
-import org.lcsim.detector.DetectorIdentifierHelper.SystemMap;
 import org.lcsim.detector.converter.lcdd.MaterialElementConverter;
 import org.lcsim.detector.converter.lcdd.MaterialMixtureConverter;
 import org.lcsim.detector.converter.lcdd.MaterialsConverter;
@@ -29,9 +31,9 @@
 import org.lcsim.geometry.compact.Constant;
 import org.lcsim.geometry.compact.Subdetector;
 import org.lcsim.geometry.subdetector.PolyconeSupport;
-
-public class DetectorConverter implements IDetectorConverter
-{
+import org.reflections.Reflections;
+
+public class DetectorConverter implements IDetectorConverter {
     // Map of class to converter.
     Map<Class, ISubdetectorConverter> subdetectorConverters = new HashMap<Class, ISubdetectorConverter>();
 
@@ -46,9 +48,7 @@
     // The SystemMap for setting up the IdentifierHelpers.
     SystemMap sysMap;
 
-    public IPhysicalVolume convert(Detector detector, Document doc) throws JDOMException,
-            IOException
-    {
+    public IPhysicalVolume convert(Detector detector, Document doc) throws JDOMException, IOException {
         // Clear out old DetectorStore store before building new detector.
         DetectorStore.getInstance().clear();
 
@@ -84,106 +84,76 @@
         return pvWorld;
     }
 
-    public DetectorConverter()
-    {
-        // Simple cylindrical detectors.
-        addSubdetectorConverter(new CylindricalBarrelCalorimeterConverter());
-        addSubdetectorConverter(new CylindricalEndcapCalorimeterConverter());
-        addSubdetectorConverter(new MultiLayerTrackerConverter());
-        addSubdetectorConverter(new DiskTrackerConverter());
-
-        // Detailed tracker models.
-        addSubdetectorConverter(new SiTrackerBarrelConverter());
-        addSubdetectorConverter(new SiTrackerEndcapConverter());
-        addSubdetectorConverter(new SiTrackerEndcap2Converter());
-        addSubdetectorConverter(new SiTrackerFixedTargetConverter());
-        addSubdetectorConverter(new SiTrackerFixedTarget2Converter());
-        addSubdetectorConverter(new SiTrackerSpectrometerConverter());
-
-        // Detailed calorimeter models.
-        addSubdetectorConverter(new PolyhedraBarrelCalorimeterConverter());
-        addSubdetectorConverter(new PolyhedraBarrelCalorimeter2Converter());
-        addSubdetectorConverter(new PolyhedraEndcapCalorimeter2Converter());
-        addSubdetectorConverter(new PolyhedraEndcapCalorimeterConverter());
-        addSubdetectorConverter(new EcalBarrelConverter());
-
-        // HPS
-        addSubdetectorConverter(new HPSTrackerConverter());
-        addSubdetectorConverter(new HPSTracker2Converter());
-        addSubdetectorConverter(new HPSEcalConverter());
-        addSubdetectorConverter(new HPSEcal2Converter());
-        addSubdetectorConverter(new HPSEcal3Converter());
-        addSubdetectorConverter(new HPSMuonCalorimeterConverter());
-        //addSubdetectorConverter(new HPSTestRunTracker2014Converter());
-        //addSubdetectorConverter(new HPSTracker2014Converter());
-        //addSubdetectorConverter(new HPSTracker2014v1Converter());
-
-        // Support structures.
-        addSubdetectorConverter(new PolyconeSupportConverter());
-        addSubdetectorConverter(new TubeSegmentConverter());        
-    }
-
-    private void addSubdetectorConverter(ISubdetectorConverter s)
-    {
-        if (subdetectorConverters.get(s.getSubdetectorType()) != null)
-        {
-            throw new IllegalArgumentException("Already have converter for <"
-                    + s.getSubdetectorType().getCanonicalName() + "> !");
-        }
-
+    public DetectorConverter() {
+
+        System.out.println("DetectorConverter initializing ...");
+
+        Reflections reflect = new Reflections("org.lcsim.detector.converter.compact");
+        Set<Class<? extends AbstractSubdetectorConverter>> converters = reflect
+                .getSubTypesOf(AbstractSubdetectorConverter.class);
+
+        if (converters.size() == 0) {
+            throw new RuntimeException("No subdetector converter classes were found.");
+        }
+
+        for (Class<? extends AbstractSubdetectorConverter> converter : converters) {
+            try {
+                if (!Modifier.isAbstract(converter.getModifiers())) {
+                    System.out.println("adding subdet converter: " + converter);
+                    this.addSubdetectorConverter(converter.newInstance());
+                }
+            } catch (InstantiationException | IllegalAccessException e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    private void addSubdetectorConverter(ISubdetectorConverter s) {
+        // if (subdetectorConverters.get(s.getSubdetectorType()) != null) {
+        // throw new IllegalArgumentException("Already have converter for <"
+        // + s.getSubdetectorType().getCanonicalName() + "> !");
+        // }
         subdetectorConverters.put(s.getSubdetectorType(), s);
     }
 
-    private ISubdetectorConverter getSubdetectorConverter(Class klass)
-    {
+    private ISubdetectorConverter getSubdetectorConverter(Class klass) {
         return subdetectorConverters.get(klass);
     }
 
-    public IPhysicalVolume convert(Detector detector, String resource) throws JDOMException,
-            IOException
-    {
+    public IPhysicalVolume convert(Detector detector, String resource) throws JDOMException, IOException {
         return convert(detector, CompactDocumentBuilder.build(resource));
     }
 
-    private void convertMaterials(Document doc) throws JDOMException
-    {
+    private void convertMaterials(Document doc) throws JDOMException {
         materialCnv.convert(doc);
     }
 
-    private void convertMaterials(String resource) throws JDOMException, IOException
-    {
+    private void convertMaterials(String resource) throws JDOMException, IOException {
         Document doc = CompactDocumentBuilder.build(resource);
 
-        for (Object obj : doc.getRootElement().getChildren())
-        {
+        for (Object obj : doc.getRootElement().getChildren()) {
             Element e = (Element) obj;
-            if (e.getName().equals("element"))
-            {
+            if (e.getName().equals("element")) {
                 elemCnv.convert(e);
-            }
-            else if (e.getName().equals("material"))
-            {
+            } else if (e.getName().equals("material")) {
                 matCnv.convert(e);
             }
         }
     }
 
-    private void convertSubdetectors(Detector detector)
-    {
+    private void convertSubdetectors(Detector detector) {
         // Process all Subdetectors in the Detector.
-        for (Subdetector subdetector : detector.getSubdetectors().values())
-        {
+        for (Subdetector subdetector : detector.getSubdetectors().values()) {
             // System.out.println("subdetector: " + subdetector.getName());
 
             // Find a converter for this type.
             ISubdetectorConverter cnv = getSubdetectorConverter(subdetector.getClass());
 
-            if (cnv != null)
-            {
+            if (cnv != null) {
                 // System.out.println("found cnv handling: " +
                 // cnv.getSubdetectorType().getCanonicalName());
-                DetectorElement subdetectorDE = (DetectorElement) cnv
-                        .makeSubdetectorDetectorElement(detector, subdetector);
+                DetectorElement subdetectorDE = (DetectorElement) cnv.makeSubdetectorDetectorElement(detector,
+                        subdetector);
 
                 // System.out.println("made subdet DE: " +
                 // subdetectorDE.getName());
@@ -192,12 +162,9 @@
                 IIdentifierHelper helper = cnv.makeIdentifierHelper(subdetector, sysMap);
 
                 // Convert the parameters.
-                try
-                {
+                try {
                     paramCnv.convert(subdetector.getNode());
-                }
-                catch (JDOMException x)
-                {
+                } catch (JDOMException x) {
                     throw new RuntimeException(x);
                 }
 
@@ -216,8 +183,7 @@
                 // are not really detectors but dead material so this check is
                 // necessary
                 // to avoid errors.
-                if (subdetDE != null)
-                {
+                if (subdetDE != null) {
                     // Make the Parameters from the compact detector element
                     // and assign to the Subdetector's DetectorElement.
                     subdetDE.setParameters(ParametersStore.getInstance().get(subdetector.getName()));
@@ -240,13 +206,10 @@
         }
     }
 
-    private void buildTrackingVolume(ILogicalVolume world, Detector detector)
-    {
+    private void buildTrackingVolume(ILogicalVolume world, Detector detector) {
         Map<String, Constant> constants = detector.getConstants();
 
-        if (constants.get("tracking_region_zmax") == null
-                || constants.get("tracking_region_radius") == null)
-        {
+        if (constants.get("tracking_region_zmax") == null || constants.get("tracking_region_radius") == null) {
             throw new RuntimeException("Missing parameters for defining tracking region!");
         }
 
@@ -255,19 +218,16 @@
 
         Tube trackingTube = new Tube("tracking_region_tube", 0, radius, zmax);
 
-        LogicalVolume trackingLV = new LogicalVolume("tracking_region", trackingTube, MaterialStore
-                .getInstance().get("Air"));
+        LogicalVolume trackingLV = new LogicalVolume("tracking_region", trackingTube, MaterialStore.getInstance().get(
+                "Air"));
 
         new PhysicalVolume(null, "tracking_region", trackingLV, world, 0);
     }
 
-    private IPhysicalVolume buildWorldVolume(Detector detector)
-    {
+    private IPhysicalVolume buildWorldVolume(Detector detector) {
         Map<String, Constant> constants = detector.getConstants();
 
-        if (constants.get("world_x") == null || constants.get("world_y") == null
-                || constants.get("world_z") == null)
-        {
+        if (constants.get("world_x") == null || constants.get("world_y") == null || constants.get("world_z") == null) {
             throw new RuntimeException("Missing world_x, world_y, or world_z!");
         }
 
@@ -290,73 +250,43 @@
     // id.
     // TODO: Must be a better way to setup these associations in the
     // DetectorIdentifierHelper.
-    public static final SystemMap makeSystemMap(Detector d)
-    {
+    public static final SystemMap makeSystemMap(Detector d) {
         SystemMap m = new SystemMap();
 
-        for (Subdetector subdet : d.getSubdetectors().values())
-        {
+        for (Subdetector subdet : d.getSubdetectors().values()) {
             String name = subdet.getName();
 
             int sys = subdet.getSystemID();
 
             // Based on naming conventions from sid01 and sid02.
-            if (!name.contains("Support") && !(subdet instanceof PolyconeSupport))
-            {
-                if (name.contains("VertexBarrel"))
-                {
+            if (!name.contains("Support") && !(subdet instanceof PolyconeSupport)) {
+                if (name.contains("VertexBarrel")) {
                     m.put("vtxBarrel", sys);
-                }
-                else if (name.contains("VertexEndcap"))
-                {
+                } else if (name.contains("VertexEndcap")) {
                     m.put("vtxEndcap", sys);
-                }
-                else if (name.contains("TrackerBarrel"))
-                {
+                } else if (name.contains("TrackerBarrel")) {
                     m.put("sitBarrel", sys);
-                }
-                else if (name.contains("TrackerEndcap"))
-                {
+                } else if (name.contains("TrackerEndcap")) {
                     m.put("sitEndcap", sys);
-                }
-                else if (name.contains("TrackerForward"))
-                {
+                } else if (name.contains("TrackerForward")) {
                     m.put("sitForward", sys);
-                }
-                else if (name.contains("TPC"))
-                {
+                } else if (name.contains("TPC")) {
                     m.put("tpc", sys);
-                }
-                else if (name.contains("EMBarrel"))
-                {
+                } else if (name.contains("EMBarrel")) {
                     m.put("ecalBarrel", sys);
-                }
-                else if (name.contains("EMEndcap") && !name.contains("Forward"))
-                {
+                } else if (name.contains("EMEndcap") && !name.contains("Forward")) {
                     m.put("ecalEndcap", sys);
-                }
-                else if (name.contains("HADBarrel"))
-                {
+                } else if (name.contains("HADBarrel")) {
                     m.put("hcalBarrel", sys);
-                }
-                else if (name.contains("HADEndcap"))
-                {
+                } else if (name.contains("HADEndcap")) {
                     m.put("hcalEndcap", sys);
-                }
-                else if (name.contains("MuonBarrel"))
-                {
+                } else if (name.contains("MuonBarrel")) {
                     m.put("muonBarrel", sys);
-                }
-                else if (name.contains("MuonEndcap"))
-                {
+                } else if (name.contains("MuonEndcap")) {
                     m.put("muonEndcap", sys);
-                }
-                else if (name.contains("LuminosityMonitor") || name.contains("LumiCal"))
-                {
+                } else if (name.contains("LuminosityMonitor") || name.contains("LumiCal")) {
                     m.put("lumi", sys);
-                }
-                else if (name.contains("ForwardEMEndcap"))
-                {
+                } else if (name.contains("ForwardEMEndcap")) {
                     m.put("ecalForward", sys);
                 }
             }

########################################################################
Use REPLY-ALL to reply to list

To unsubscribe from the LCDET-SVN list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCDET-SVN&A=1

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use