Commit in GeomConverter/src/org/lcsim/geometry/compact on MAIN
converter/pandora/Main.java+130-31.14 -> 1.15
Detector.java+151.28 -> 1.29
+145-3
2 modified files
work in progress on pandora binding

GeomConverter/src/org/lcsim/geometry/compact/converter/pandora
Main.java 1.14 -> 1.15
diff -u -r1.14 -r1.15
--- Main.java	7 Jun 2010 23:02:12 -0000	1.14
+++ Main.java	10 Jun 2010 21:59:00 -0000	1.15
@@ -15,7 +15,9 @@
 import java.io.OutputStream;
 import java.text.DecimalFormat;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.StringTokenizer;
 
 import javax.swing.filechooser.FileFilter;
@@ -53,7 +55,7 @@
  * geometry input format.
  * 
  * @author Jeremy McCormick <[log in to unmask]>
- * @version $Id: Main.java,v 1.14 2010/06/07 23:02:12 jeremy Exp $
+ * @version $Id: Main.java,v 1.15 2010/06/10 21:59:00 jeremy Exp $
  */
 public class Main implements Converter
 {
@@ -119,7 +121,129 @@
      * 
      */
     static class SamplingLayers extends ArrayList<SamplingLayerRange>
-    {}
+    {
+        public SamplingLayers()
+        {}
+
+        public SamplingLayers(SamplingLayerRange range)
+        {
+            this.add(range);
+        }
+
+        public SamplingLayers(List<SamplingLayerRange> ranges)
+        {
+            this.addAll(ranges);
+        }
+
+        public SamplingLayerRange getSamplingLayerRange(int layern)
+        {
+            for (SamplingLayerRange range : this)
+            {
+                if (range.inRange(layern))
+                    return range;
+            }
+            return null;
+        }        
+    }
+    
+    private static class QCalCalibration
+    {
+        private static final String resourceName = "Qcal-v2r3p10";
+       
+        Map<String,SamplingLayers> calLayers = new HashMap<String,SamplingLayers>();
+        
+        protected QCalCalibration (Detector detector)
+        {
+            ConditionsManager mgr = ConditionsManager.defaultInstance();
+            
+            ConditionsSet hadronCalibration = mgr.getConditions("hadronCalibration/nh" + resourceName);
+            ConditionsSet photonCalibration = mgr.getConditions("photonCalibration/photon" + resourceName);
+            
+            int nFrontLayersEcal = hadronCalibration.getInt("nFrontLayersEcal");
+            
+            // Get sampling fraction conditions.
+            double photonSf[] = photonCalibration.getDoubleArray("SFs");
+            double hadronSf[] = hadronCalibration.getDoubleArray("SFs");
+
+            // EM Barrel.
+            Calorimeter emBarr = detector.getCalorimeterByType(Calorimeter.CalorimeterType.EM_BARREL);
+            if (emBarr != null)
+            {
+                int emBarrMaxLayer = emBarr.getLayering().getLayerCount() - 1;                         
+                SamplingLayerRange ecalBarrFrontRange = new SamplingLayerRange(0, nFrontLayersEcal - 1, photonSf[0], hadronSf[0]);
+                SamplingLayerRange ecalBarrBackRange = new SamplingLayerRange(nFrontLayersEcal, emBarrMaxLayer, photonSf[1], hadronSf[1]);
+                calLayers.put("EM_BARREL", new SamplingLayers());
+                calLayers.get("EM_BARREL").add(ecalBarrFrontRange);
+                calLayers.get("EM_BARREL").add(ecalBarrBackRange);
+            }
+            
+            // EM Endcap.
+            Calorimeter emEc = detector.getCalorimeterByType(Calorimeter.CalorimeterType.EM_ENDCAP);
+            if (emEc != null)
+            {
+                int emEcMaxLayer = emEc.getLayering().getLayerCount() - 1;            
+                SamplingLayerRange ecalEcFrontRange = new SamplingLayerRange(0, nFrontLayersEcal - 1, photonSf[2], hadronSf[2]);
+                SamplingLayerRange ecalEcBackRange = new SamplingLayerRange(nFrontLayersEcal, emEcMaxLayer, photonSf[3], hadronSf[3]);
+                calLayers.put("EM_ENDCAP", new SamplingLayers());
+                calLayers.get("EM_ENDCAP").add(ecalEcFrontRange);
+                calLayers.get("EM_ENDCAP").add(ecalEcBackRange);
+            }
+            
+            // HAD Barrel.           
+            Calorimeter hadBarr = detector.getCalorimeterByType(Calorimeter.CalorimeterType.HAD_BARREL);
+            if (hadBarr != null)
+            {
+                int hadBarrMaxLayer = hadBarr.getLayering().getLayerCount() - 1;
+                ConditionsSet hcalBarrSampling = mgr.getConditions("SamplingFractions/" + hadBarr.getName());
+                double hcalBarrSF = hcalBarrSampling.getDouble("samplingFraction");            
+                SamplingLayerRange hcalBarrRange = new SamplingLayerRange(0, hadBarrMaxLayer, hcalBarrSF, hadronSf[4]);            
+                calLayers.put("HAD_BARREL", new SamplingLayers(hcalBarrRange));
+            }
+            
+            // HAD Endcap.
+            Calorimeter hadEc = detector.getCalorimeterByType(Calorimeter.CalorimeterType.HAD_ENDCAP);
+            if (hadEc != null)
+            {
+                int hadEcMaxLayer = hadEc.getLayering().getLayerCount() - 1;
+                ConditionsSet hcalEcSampling = mgr.getConditions("SamplingFractions/" + hadEc.getName());
+                double hcalEcSF = hcalEcSampling.getDouble("samplingFraction");            
+                SamplingLayerRange hcalEcRange = new SamplingLayerRange(0, hadEcMaxLayer, hcalEcSF, hadronSf[5]);            
+                calLayers.put("HAD_ENDCAP", new SamplingLayers(hcalEcRange));
+            }
+            
+            // MUON Barrel.
+            Calorimeter muonBarr = detector.getCalorimeterByType(Calorimeter.CalorimeterType.MUON_BARREL);
+            if (muonBarr != null)
+            {
+                int muonBarrMaxLayer = muonBarr.getLayering().getLayerCount() - 1;
+                ConditionsSet muonBarrSampling = mgr.getConditions("SamplingFractions/" + muonBarr.getName());
+                double muonBarrSF = muonBarrSampling.getDouble("samplingFraction");
+                SamplingLayerRange muonBarrRange = new SamplingLayerRange(0, muonBarrMaxLayer, muonBarrSF, muonBarrSF);
+                calLayers.put("MUON_BARREL", new SamplingLayers(muonBarrRange));
+            }
+            
+            // MUON Endcap.
+            Calorimeter muonEc = detector.getCalorimeterByType(Calorimeter.CalorimeterType.MUON_ENDCAP);
+            if (muonEc != null)
+            {
+                int muonEcMaxLayer = muonEc.getLayering().getLayerCount() - 1;
+                ConditionsSet muonEcSampling = mgr.getConditions("SamplingFractions/" + muonEc.getName());
+                double muonEcSF = muonEcSampling.getDouble("samplingFraction");
+                SamplingLayerRange muonEcRange = new SamplingLayerRange(0, muonEcMaxLayer, muonEcSF, muonEcSF);
+                calLayers.put("MUON_ENDCAP", new SamplingLayers(muonEcRange));
+            }
+        }
+        
+        public double getHadronSamplingFraction(Calorimeter calorimeter, int layern)
+        {
+            return calLayers.get(calorimeter.getCalorimeterType().toString()).getSamplingLayerRange(layern).getHADSampling();            
+        }
+        
+        double getPhotonSamplingFraction(Calorimeter calorimeter, int layern)
+        {
+            return calLayers.get(calorimeter.getCalorimeterType().toString()).getSamplingLayerRange(layern).getEMSampling();
+        }        
+    }
 
     /**
      * Represents CalorimeterConditions for a single subdetector.
@@ -357,7 +481,10 @@
         catch (Exception x)
         {}        
         boolean haveCalCalib = (calorimeterCalibration == null ) ? false : true;
-              
+        
+        // Setup QCalCalibration.
+        QCalCalibration qcalib = new QCalCalibration(detector);
+                             
         // Process the subdetectors.
         for (Subdetector subdetector : detector.getSubdetectors().values())
         {

GeomConverter/src/org/lcsim/geometry/compact
Detector.java 1.28 -> 1.29
diff -u -r1.28 -r1.29
--- Detector.java	7 Dec 2009 23:00:10 -0000	1.28
+++ Detector.java	10 Jun 2010 21:59:00 -0000	1.29
@@ -12,6 +12,7 @@
 import org.lcsim.detector.IPhysicalVolume;
 import org.lcsim.detector.IPhysicalVolumeNavigator;
 import org.lcsim.detector.PhysicalVolumeNavigator;
+import org.lcsim.geometry.Calorimeter;
 import org.lcsim.material.XMLMaterialManager;
 
 /**
@@ -286,4 +287,18 @@
     {
         return gdmlReferences;
     }
+    
+    public Calorimeter getCalorimeterByType(Calorimeter.CalorimeterType calType)
+    {
+        for (Subdetector subdet : this.subdetectors.values())
+        {
+            if (subdet.isCalorimeter())
+            {
+                Calorimeter cal = (Calorimeter)subdet;
+                if (cal.getCalorimeterType() == calType)
+                    return (Calorimeter)subdet;
+            }
+        }
+        return null;
+    }
 }
\ No newline at end of file
CVSspam 0.2.8