GeomConverter/src/org/lcsim/geometry/compact/converter/pandora
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
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