Print

Print


Commit in lcsim/src/org/lcsim/recon/pfa/identifier on MAIN
SmallPhotonMaker.java+20-121.3 -> 1.4
CheatTrackClusterMatcher.java+47-391.1 -> 1.2
HelixExtrapolator.java+8-281.8 -> 1.9
SimpleTrackMIPClusterMatcher.java+5-111.3 -> 1.4
SimpleTrackClusterMatcher.java+41-321.5 -> 1.6
LocalHelixExtrapolationTrackMIPClusterMatcher.java+1-11.3 -> 1.4
LocalHelixExtrapolationTrackClusterMatcher.java+6-61.5 -> 1.6
+128-129
7 modified files
Use Vlayer where appropriate, get cal info from CalorimeterInformation class

lcsim/src/org/lcsim/recon/pfa/identifier
SmallPhotonMaker.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- SmallPhotonMaker.java	16 May 2007 21:25:43 -0000	1.3
+++ SmallPhotonMaker.java	8 Mar 2010 19:38:30 -0000	1.4
@@ -2,19 +2,19 @@
 
 import java.util.*;
 import hep.physics.vec.Hep3Vector;
-import hep.physics.vec.BasicHep3Vector;
 import hep.physics.vec.BasicHepLorentzVector;
 import hep.physics.vec.HepLorentzVector;
 import org.lcsim.recon.cluster.structural.FragmentIdentifier;
 import org.lcsim.event.EventHeader;
-import org.lcsim.util.Driver;
 import org.lcsim.event.Cluster;
 import org.lcsim.event.CalorimeterHit;
-import org.lcsim.geometry.Detector;
 import org.lcsim.event.ReconstructedParticle;
 import org.lcsim.event.MCParticle;
 import org.lcsim.event.SimCalorimeterHit;
 import org.lcsim.event.base.BaseReconstructedParticle;
+import org.lcsim.geometry.Calorimeter.CalorimeterType;
+import org.lcsim.recon.util.CalorimeterInformation;
+import org.lcsim.geometry.Subdetector;
 
 /**
  * Given a list of clusters, make ones that are consistent with
@@ -30,6 +30,9 @@
 public class SmallPhotonMaker extends SimpleNeutralParticleMaker
 {
     protected FragmentIdentifier m_fragID = null;
+    protected CalorimeterInformation ci;
+    protected Subdetector emb;
+    protected Subdetector eme;
     public SmallPhotonMaker(FragmentIdentifier fragID) {
 	super(22); // make photons
 	m_fragID = fragID;
@@ -49,7 +52,7 @@
 	    if (m_fragID.isFragment(clus, event)) {
 		// Small cluster/fragment -- is it photon-like?
 		CalorimeterHit firstHitInECAL = findInnermostHitInECAL(clus);
-		boolean isPhoton = (firstHitInECAL!=null && getLayer(firstHitInECAL)<4);
+		boolean isPhoton = (firstHitInECAL!=null && getVLayer(firstHitInECAL)<4);
 		if (isPhoton) {
 		    BaseReconstructedParticle part = new BaseReconstructedParticle();
 		    part.addCluster(clus);
@@ -73,7 +76,7 @@
 		    if (firstHitInECAL==null) {
 			printme += "[null]";
 		    } else {
-			printme += getLayer(firstHitInECAL);
+			printme += getVLayer(firstHitInECAL);
 		    }
 		    printme += " => isPhoton="+isPhoton;
 		    printme += ". True contributions: ";
@@ -111,15 +114,20 @@
 
 
     protected CalorimeterHit findInnermostHitInECAL(Cluster clus) {
+        if(ci == null)
+        {
+            ci = CalorimeterInformation.instance();
+            emb = ci.getSubdetector(CalorimeterType.EM_BARREL);
+            eme = ci.getSubdetector(CalorimeterType.EM_ENDCAP);
+        }
         CalorimeterHit innermostHit = null;
         for (CalorimeterHit hit : clus.getCalorimeterHits()) {
-            int layer = getLayer(hit);
-            org.lcsim.geometry.Subdetector subdet = hit.getSubdetector();           
+            int layer = getVLayer(hit);
+            Subdetector subdet = hit.getSubdetector();           
             if ( ! subdet.isCalorimeter() ) { throw new AssertionError("Cluster hit outside calorimeter"); }
-            String name = subdet.getName();
-            if (name.compareTo("EMBarrel") == 0 || name.compareTo("EMEndcap") == 0) {
+            if (subdet == eme || subdet == emb) {
                 // EM -- OK
-                if (innermostHit==null || getLayer(innermostHit)>layer) {
+                if (innermostHit==null || getVLayer(innermostHit)>layer) {
                     innermostHit = hit;
                 }
             }
@@ -127,10 +135,10 @@
         return innermostHit;
     }
     
-    protected int getLayer(CalorimeterHit hit) {
+    protected int getVLayer(CalorimeterHit hit) {
         org.lcsim.geometry.IDDecoder id = hit.getIDDecoder();
         id.setID(hit.getCellID());
-        int layer = id.getLayer();
+        int layer = id.getVLayer();
         return layer;
     }
 }

lcsim/src/org/lcsim/recon/pfa/identifier
CheatTrackClusterMatcher.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- CheatTrackClusterMatcher.java	16 Jan 2008 21:12:15 -0000	1.1
+++ CheatTrackClusterMatcher.java	8 Mar 2010 19:38:30 -0000	1.2
@@ -16,11 +16,16 @@
 import org.lcsim.util.swim.HelixSwimmer;
 import org.lcsim.geometry.subdetector.CylindricalCalorimeter;
 import org.lcsim.geometry.Detector;
-import org.lcsim.recon.pfa.identifier.TrackClusterMatcher;
+import org.lcsim.geometry.Calorimeter.CalorimeterType;
+import org.lcsim.recon.util.CalorimeterInformation;
+import org.lcsim.geometry.Subdetector;
 
 public class CheatTrackClusterMatcher extends Driver implements TrackClusterMatcher
 {
     String m_mcListName;
+    protected CalorimeterInformation ci;
+    protected Subdetector emb;
+    protected Subdetector eme;
 
     public CheatTrackClusterMatcher(String mcList) {
 	m_mcListName = mcList;
@@ -105,13 +110,13 @@
 		CalorimeterHit innermostHitInECAL = findInnermostHitInECAL(hits);
 		if (innermostHitInECAL != null) {
 		    // There is an ECAL innermost hit...
-		    int layer = getLayer(innermostHitInECAL);
+		    int layer = getVLayer(innermostHitInECAL);
 		    // Check if in first two layers
 		    if (layer < 2) {
 			clustersWithHitsInFirstTwoLayers.add(clus);
 		    }
 		    // Check if is current innermost cluster
-		    if (clusterWithInnermostHitLayer == null || layer < getLayer(globalInnermostHitInECAL)) {
+		    if (clusterWithInnermostHitLayer == null || layer < getVLayer(globalInnermostHitInECAL)) {
 			globalInnermostHitInECAL = innermostHitInECAL;
 			clusterWithInnermostHitLayer = clus;
 		    }
@@ -120,12 +125,12 @@
 		    String printme = new String("DEBUG: Scanned a cluster with "+hits.size()+" hits: ");
 		    if (innermostHitInECAL != null) {
 			printme += " Has ECAL hit(s). Innermost hit in layer ";
-			printme += getLayer(innermostHitInECAL);
-			if (getLayer(innermostHitInECAL) < 2) {
+			printme += getVLayer(innermostHitInECAL);
+			if (getVLayer(innermostHitInECAL) < 2) {
 			    printme += " which is in first two layers";
 			}
 			if (clusterWithInnermostHitLayer == clus) {
-			    printme += " so this is the innermost cluster (global innermost hit layer="+getLayer(globalInnermostHitInECAL)+")";
+			    printme += " so this is the innermost cluster (global innermost hit layer="+getVLayer(globalInnermostHitInECAL)+")";
 			}
 		    } else {
 			printme += " No ECAL hits.";
@@ -198,14 +203,12 @@
 		for (Cluster clus : clustersWithHitsInFirstTwoLayers) {
 		    List<CalorimeterHit> hits = clustersWithContributions.get(clus);
 		    CalorimeterHit innermostHitInECAL = findInnermostHitInECAL(hits);
-		    if (m_debug) { System.out.println("DEBUG: Cluster with "+hits.size()+" / "+clus.getCalorimeterHits().size()+" hits matched, and first ECAL hit in layer "+getLayer(innermostHitInECAL)+" of "+innermostHitInECAL.getSubdetector().getName()); }
-		    CalorimeterHit nearestHitInClusterToInterceptPoint = null;
+		    if (m_debug) { System.out.println("DEBUG: Cluster with "+hits.size()+" / "+clus.getCalorimeterHits().size()+" hits matched, and first ECAL hit in layer "+getVLayer(innermostHitInECAL)+" of "+innermostHitInECAL.getSubdetector().getName()); }
 		    for (CalorimeterHit hit : hits) {
-			int layer = getLayer(hit);
+			int layer = getVLayer(hit);
 			if (layer==0 || layer==1) {
-			    org.lcsim.geometry.Subdetector subdet = hit.getSubdetector();
-			    String name = subdet.getName();
-			    if (name.compareTo("EMBarrel") == 0 || name.compareTo("EMEndcap") == 0) {
+			    Subdetector subdet = hit.getSubdetector();
+			    if (subdet == emb || subdet == eme) {
 				// EM -- OK
 				double distance = proximity(trackPoint, hit);
 				if (m_debug) { System.out.println("DEBUG:    Hit in ECAL layer "+layer+" distance from intercept point: "+distance); }
@@ -237,13 +240,12 @@
     protected CalorimeterHit findInnermostHitInECAL(List<CalorimeterHit> hits) {
 	CalorimeterHit innermostHit = null;
 	for (CalorimeterHit hit : hits) {
-	    int layer = getLayer(hit);
-	    org.lcsim.geometry.Subdetector subdet = hit.getSubdetector();	    
+	    int layer = getVLayer(hit);
+	    Subdetector subdet = hit.getSubdetector();	    
             if ( ! subdet.isCalorimeter() ) { throw new AssertionError("Cluster hit outside calorimeter"); }
-            String name = subdet.getName();
-            if (name.compareTo("EMBarrel") == 0 || name.compareTo("EMEndcap") == 0) {
+            if (subdet == emb || subdet == eme) {
                 // EM -- OK
-		if (innermostHit==null || getLayer(innermostHit)>layer) {
+		if (innermostHit==null || getVLayer(innermostHit)>layer) {
 		    innermostHit = hit;
 		}
 	    }
@@ -251,11 +253,11 @@
 	return innermostHit;
     }
 
-    protected int getLayer(CalorimeterHit hit) {
+    protected int getVLayer(CalorimeterHit hit) {
 	if (hit==null) { throw new AssertionError("hit is null"); }
 	org.lcsim.geometry.IDDecoder id = hit.getIDDecoder();
 	id.setID(hit.getCellID());
-	int layer = id.getLayer();
+	int layer = id.getVLayer();
 	return layer;
     }
 
@@ -352,26 +354,32 @@
 
     public void initGeometry(EventHeader event) 
     {
-	Detector det = event.getDetector();
-	CylindricalCalorimeter emb = ((CylindricalCalorimeter) det.getSubdetectors().get("EMBarrel"));
-	CylindricalCalorimeter eme = ((CylindricalCalorimeter) det.getSubdetectors().get("EMEndcap"));
-	m_ECAL_barrel_zmin = emb.getZMin();
-	m_ECAL_barrel_zmax = emb.getZMax();
-	m_ECAL_barrel_r = emb.getLayering().getDistanceToLayerSensorMid(0);
-	m_ECAL_endcap_z = eme.getLayering().getDistanceToLayerSensorMid(0);
-	m_ECAL_endcap_rmin = eme.getInnerRadius();
-	m_ECAL_endcap_rmax = eme.getOuterRadius();
-	double[] zero = {0, 0, 0};
-	m_fieldStrength = det.getFieldMap().getField(zero);
-	m_init = true;
-	if (m_debug) {
-	    System.out.println(this.getClass().getName()+": Init: ECAL barrel zmin="+m_ECAL_barrel_zmin);
-	    System.out.println(this.getClass().getName()+": Init: ECAL barrel zmax="+m_ECAL_barrel_zmax);
-	    System.out.println(this.getClass().getName()+": Init: ECAL barrel r="+m_ECAL_barrel_r);
-	    System.out.println(this.getClass().getName()+": Init: ECAL endcap z="+m_ECAL_endcap_z);
-	    System.out.println(this.getClass().getName()+": Init: ECAL endcap rmin="+m_ECAL_endcap_rmin);
-	    System.out.println(this.getClass().getName()+": Init: ECAL endcap rmax="+m_ECAL_endcap_rmax);
-	}
+        if(!m_init)
+        {
+            if(ci == null)
+            {
+                ci = CalorimeterInformation.instance();
+                emb = ci.getSubdetector(CalorimeterType.EM_BARREL);
+                eme = ci.getSubdetector(CalorimeterType.EM_ENDCAP);
+            }
+            m_ECAL_barrel_zmin = ci.getZMin(CalorimeterType.EM_BARREL);
+            m_ECAL_barrel_zmax = ci.getZMax(CalorimeterType.EM_BARREL);
+            m_ECAL_barrel_r = emb.getLayering().getDistanceToLayerSensorMid(0);
+            m_ECAL_endcap_z = eme.getLayering().getDistanceToLayerSensorMid(0);
+            m_ECAL_endcap_rmin = ci.getRMin(CalorimeterType.EM_ENDCAP);
+            m_ECAL_endcap_rmax = ci.getRMax(CalorimeterType.EM_ENDCAP);
+            double[] zero = {0, 0, 0};
+            m_fieldStrength = event.getDetector().getFieldMap().getField(zero);
+            m_init = true;
+            if (m_debug) {
+                System.out.println(this.getClass().getName()+": Init: ECAL barrel zmin="+m_ECAL_barrel_zmin);
+                System.out.println(this.getClass().getName()+": Init: ECAL barrel zmax="+m_ECAL_barrel_zmax);
+                System.out.println(this.getClass().getName()+": Init: ECAL barrel r="+m_ECAL_barrel_r);
+                System.out.println(this.getClass().getName()+": Init: ECAL endcap z="+m_ECAL_endcap_z);
+                System.out.println(this.getClass().getName()+": Init: ECAL endcap rmin="+m_ECAL_endcap_rmin);
+                System.out.println(this.getClass().getName()+": Init: ECAL endcap rmax="+m_ECAL_endcap_rmax);
+            }
+        }
     }
 
     public void setDebug(boolean debug) { m_debug = debug; }

lcsim/src/org/lcsim/recon/pfa/identifier
HelixExtrapolator.java 1.8 -> 1.9
diff -u -r1.8 -r1.9
--- HelixExtrapolator.java	4 Feb 2010 17:45:32 -0000	1.8
+++ HelixExtrapolator.java	8 Mar 2010 19:38:30 -0000	1.9
@@ -128,33 +128,13 @@
         m_MCAL_barrel_r = mbr0 + s.getLayering().getDistanceToLayerSensorMid(0);
 
         s = ci.getSubdetector(CalorimeterType.EM_ENDCAP);
-        double eer0 = ci.getZMin(CalorimeterType.EM_ENDCAP);
-        if(s instanceof CylindricalEndcapCalorimeter)
-        {
-            eer0 = 0.;
-        }
-        m_ECAL_endcap_z = eer0 + s.getLayering().getDistanceToLayerSensorMid(0);
+        m_ECAL_endcap_z = s.getLayering().getDistanceToLayerSensorMid(0);
         s = ci.getSubdetector(CalorimeterType.HAD_ENDCAP);
-        double her0 = ci.getZMin(CalorimeterType.HAD_ENDCAP);
-        if(s instanceof CylindricalEndcapCalorimeter)
-        {
-            her0 = 0.;
-        }
-        m_HCAL_endcap_z = her0 + s.getLayering().getDistanceToLayerSensorMid(0);
+        m_HCAL_endcap_z = s.getLayering().getDistanceToLayerSensorMid(0);
         s = ci.getSubdetector(CalorimeterType.MUON_ENDCAP);
-        double mer0 = ci.getZMin(CalorimeterType.MUON_ENDCAP);
-        if(s instanceof CylindricalEndcapCalorimeter)
-        {
-            mer0 = 0.;
-        }
-        m_MCAL_endcap_z = mer0 + s.getLayering().getDistanceToLayerSensorMid(0);
+        m_MCAL_endcap_z = s.getLayering().getDistanceToLayerSensorMid(0);
         s = ci.getSubdetector(CalorimeterType.LUMI);
-        double ler0 = ci.getZMin(CalorimeterType.LUMI);
-        if(s instanceof CylindricalEndcapCalorimeter)
-        {
-            ler0 = 0.;
-        }
-        m_FCAL_endcap_z = ler0 + s.getLayering().getDistanceToLayerSensorMid(0);
+        m_FCAL_endcap_z = s.getLayering().getDistanceToLayerSensorMid(0);
 	m_ECAL_endcap_rmin = ci.getRMin(CalorimeterType.EM_ENDCAP);
 	m_HCAL_endcap_rmin = ci.getRMin(CalorimeterType.HAD_ENDCAP);
 	m_MCAL_endcap_rmin = ci.getRMin(CalorimeterType.MUON_ENDCAP);
@@ -173,7 +153,7 @@
 	}
 	m_ECAL_endcap_layering_z = new Vector<Double>();
 	for (int iLayer=0; iLayer<ci.getNLayers(CalorimeterType.EM_ENDCAP); iLayer++) {
-	    double z = eer0 + ci.getSubdetector(CalorimeterType.EM_ENDCAP).getLayering().getDistanceToLayerSensorMid(iLayer);
+	    double z = ci.getSubdetector(CalorimeterType.EM_ENDCAP).getLayering().getDistanceToLayerSensorMid(iLayer);
 	    m_ECAL_endcap_layering_z.add(new Double(z));
 	}
 	m_HCAL_barrel_layering_r = new Vector<Double>();
@@ -183,7 +163,7 @@
 	}
 	m_HCAL_endcap_layering_z = new Vector<Double>();
 	for (int iLayer=0; iLayer<ci.getNLayers(CalorimeterType.HAD_ENDCAP); iLayer++) {
-	    double z = her0 + ci.getSubdetector(CalorimeterType.HAD_ENDCAP).getLayering().getDistanceToLayerSensorMid(iLayer);
+	    double z = ci.getSubdetector(CalorimeterType.HAD_ENDCAP).getLayering().getDistanceToLayerSensorMid(iLayer);
 	    m_HCAL_endcap_layering_z.add(new Double(z));
 	}
 	m_MCAL_barrel_layering_r = new Vector<Double>();
@@ -193,12 +173,12 @@
 	}
 	m_MCAL_endcap_layering_z = new Vector<Double>();
 	for (int iLayer=0; iLayer<ci.getNLayers(CalorimeterType.MUON_ENDCAP); iLayer++) {
-	    double z = mer0 + ci.getSubdetector(CalorimeterType.MUON_ENDCAP).getLayering().getDistanceToLayerSensorMid(iLayer);
+	    double z = ci.getSubdetector(CalorimeterType.MUON_ENDCAP).getLayering().getDistanceToLayerSensorMid(iLayer);
 	    m_MCAL_endcap_layering_z.add(new Double(z));
 	}
 	m_FCAL_endcap_layering_z = new Vector<Double>();
 	for (int iLayer=0; iLayer<ci.getNLayers(CalorimeterType.LUMI); iLayer++) {
-	    double z = ler0 + ci.getSubdetector(CalorimeterType.LUMI).getLayering().getDistanceToLayerSensorMid(iLayer);
+	    double z = ci.getSubdetector(CalorimeterType.LUMI).getLayering().getDistanceToLayerSensorMid(iLayer);
 	    m_FCAL_endcap_layering_z.add(new Double(z));
 	}
 	m_init = true;

lcsim/src/org/lcsim/recon/pfa/identifier
SimpleTrackMIPClusterMatcher.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- SimpleTrackMIPClusterMatcher.java	16 May 2007 17:44:37 -0000	1.3
+++ SimpleTrackMIPClusterMatcher.java	8 Mar 2010 19:38:30 -0000	1.4
@@ -6,11 +6,6 @@
 import org.lcsim.util.swim.HelixSwimmer;
 import org.lcsim.event.Cluster;
 import org.lcsim.event.CalorimeterHit;
-import org.lcsim.geometry.subdetector.CylindricalCalorimeter;
-import org.lcsim.geometry.Detector;
-import org.lcsim.recon.cluster.util.BasicCluster;
-import org.lcsim.recon.cluster.util.TensorClusterPropertyCalculator;
-import org.lcsim.event.EventHeader;
 import org.lcsim.event.Track;
 
 /**
@@ -18,7 +13,7 @@
  * on the ECAL inner surface and on the direction of the track at the
  * intercept point.
  *
- * @version $Id: SimpleTrackMIPClusterMatcher.java,v 1.3 2007/05/16 17:44:37 mcharles Exp $ 
+ * @version $Id: SimpleTrackMIPClusterMatcher.java,v 1.4 2010/03/08 19:38:30 cassell Exp $ 
  */
 
 public class SimpleTrackMIPClusterMatcher extends SimpleTrackClusterMatcher
@@ -41,20 +36,19 @@
 	    // Obtain geometrical info:
 	    CalorimeterHit nearestHit = findNearestHit(trackPoint, nearbyMIP);
 	    double separation = proximity(trackPoint, nearestHit);
-	    int layerOfNearestHit = getLayer(nearestHit);
 	    CalorimeterHit firstHitInECAL = findInnermostHitInECAL(nearbyMIP);
 	    double unitDotProduct = findUnitDotProduct(tangent, nearbyMIP);
 	    org.lcsim.geometry.Subdetector subdet = nearestHit.getSubdetector();
 	    // Make cuts:
-	    boolean goodSubDet = (subdet.getName().compareTo("EMBarrel")==0) || (subdet.getName().compareTo("EMEndcap")==0);
-	    boolean goodFirstLayer = (firstHitInECAL!=null && getLayer(firstHitInECAL) < 5);
+	    boolean goodSubDet = (subdet == emb) || (subdet == eme);
+	    boolean goodFirstLayer = (firstHitInECAL!=null && getVLayer(firstHitInECAL) < 5);
 	    boolean goodDotProduct = (Math.abs(unitDotProduct) > 0.85);
 	    double separationCut = m_separationCut;
 	    boolean goodSeparation = (separation < separationCut);
 	    boolean foundMatch = goodSubDet && goodFirstLayer && goodDotProduct && goodSeparation;
 	    if (foundMatch) {
 		// OK, made a good match
-		if (m_debug) { System.out.println("DEBUG: Matched cluster to MIP since subdet="+subdet.getName()+" and firstlayer="+getLayer(firstHitInECAL)+" and dotProduct="+Math.abs(unitDotProduct)+" and separation="+separation); }
+		if (m_debug) { System.out.println("DEBUG: Matched cluster to MIP since subdet="+subdet.getName()+" and firstlayer="+getVLayer(firstHitInECAL)+" and dotProduct="+Math.abs(unitDotProduct)+" and separation="+separation); }
 		return nearbyMIP;
 	    } else {
 		if (m_debug) {
@@ -62,7 +56,7 @@
 		    printme += "Debug: Didn't match track to MIP cluster since";
 		    printme += " subdet="+subdet.getName()+" ["+goodSubDet+"] and";
 		    if (firstHitInECAL!=null) {
-			printme += " firstlayer="+getLayer(firstHitInECAL)+" ["+goodFirstLayer+"] and";
+			printme += " firstlayer="+getVLayer(firstHitInECAL)+" ["+goodFirstLayer+"] and";
 		    } else {
 			printme += " firstlayer=null ["+goodFirstLayer+"] and";
 		    }

lcsim/src/org/lcsim/recon/pfa/identifier
SimpleTrackClusterMatcher.java 1.5 -> 1.6
diff -u -r1.5 -r1.6
--- SimpleTrackClusterMatcher.java	12 Oct 2007 21:32:48 -0000	1.5
+++ SimpleTrackClusterMatcher.java	8 Mar 2010 19:38:30 -0000	1.6
@@ -19,6 +19,9 @@
 import org.lcsim.mc.fast.tracking.ReconTrack;
 import org.lcsim.event.SimCalorimeterHit;
 import org.lcsim.recon.cluster.util.ClusterEnergyCalculator;
+import org.lcsim.geometry.Calorimeter.CalorimeterType;
+import org.lcsim.recon.util.CalorimeterInformation;
+import org.lcsim.geometry.Subdetector;
 
 /**
  * Attempt to match a Track to a Cluster, based on the intercept point
@@ -27,11 +30,14 @@
  * Currently, the match criteria are hard-code. It would be better to
  * supply them as DecisionMaker objects.
  *
- * @version $Id: SimpleTrackClusterMatcher.java,v 1.5 2007/10/12 21:32:48 mcharles Exp $ 
+ * @version $Id: SimpleTrackClusterMatcher.java,v 1.6 2010/03/08 19:38:30 cassell Exp $ 
  */
 
 public class SimpleTrackClusterMatcher extends Driver implements TrackClusterMatcher
 {
+    protected CalorimeterInformation ci;
+    protected Subdetector emb;
+    protected Subdetector eme;
     public SimpleTrackClusterMatcher(double cut) {
 	m_separationCut = cut;
     }
@@ -198,7 +204,6 @@
     protected Cluster findMatchedCluster(Track tr, HelixSwimmer swimmer, double alpha, List<Cluster> clusters) 
     {
 	if (m_debug) { System.out.println("DEBUG: SimpleTrackClusterMatched.findMatchedCluster() invoked for a list of "+clusters.size()+" clusters."); }
-
 	// Find the track intercept and direction
 	swimmer.setTrack(tr);
 	Hep3Vector trackPoint = swimmer.getPointAtDistance(alpha);
@@ -208,12 +213,11 @@
 	    // Obtain geometrical info:
 	    CalorimeterHit nearestHit = findNearestHit(trackPoint, nearbyCluster);
 	    double separation = proximity(trackPoint, nearestHit);
-	    int layerOfNearestHit = getLayer(nearestHit);
 	    CalorimeterHit firstHitInECAL = findInnermostHitInECAL(nearbyCluster);
 	    org.lcsim.geometry.Subdetector subdet = nearestHit.getSubdetector();
 	    // Make cuts:
-	    boolean goodSubDet = (subdet.getName().compareTo("EMBarrel")==0) || (subdet.getName().compareTo("EMEndcap")==0);
-	    boolean goodFirstLayer = (firstHitInECAL!=null && getLayer(firstHitInECAL) < 5);
+	    boolean goodSubDet = (subdet == emb) || (subdet == eme);
+	    boolean goodFirstLayer = (firstHitInECAL!=null && getVLayer(firstHitInECAL) < 5);
 	    double separationCut = m_separationCut;
 	    boolean goodSeparation = (separation < separationCut);
 	    boolean foundMatch = goodSubDet && goodFirstLayer && goodSeparation;
@@ -222,7 +226,7 @@
 		printme += "Debug: Match track to cluster = ["+foundMatch+"] since";
 		printme += " subdet="+subdet.getName()+" ["+goodSubDet+"] and";
 		if (firstHitInECAL!=null) {
-		    printme += " firstlayer="+getLayer(firstHitInECAL)+" ["+goodFirstLayer+"] and";
+		    printme += " firstlayer="+getVLayer(firstHitInECAL)+" ["+goodFirstLayer+"] and";
 		} else {
 		    printme += " firstlayer=null ["+goodFirstLayer+"] and";
 		}
@@ -348,13 +352,12 @@
     protected CalorimeterHit findInnermostHitInECAL(Cluster clus) {
 	CalorimeterHit innermostHit = null;
 	for (CalorimeterHit hit : clus.getCalorimeterHits()) {
-	    int layer = getLayer(hit);
+	    int layer = getVLayer(hit);
 	    org.lcsim.geometry.Subdetector subdet = hit.getSubdetector();	    
             if ( ! subdet.isCalorimeter() ) { throw new AssertionError("Cluster hit outside calorimeter"); }
-            String name = subdet.getName();
-            if (name.compareTo("EMBarrel") == 0 || name.compareTo("EMEndcap") == 0) {
+            if (subdet == emb || subdet == eme) {
                 // EM -- OK
-		if (innermostHit==null || getLayer(innermostHit)>layer) {
+		if (innermostHit==null || getVLayer(innermostHit)>layer) {
 		    innermostHit = hit;
 		}
 	    }
@@ -386,10 +389,10 @@
 	double unitDotProduct = VecOp.dot(tangent, clusterDir) / (tangent.magnitude() * clusterDir.magnitude());
 	return unitDotProduct;
     }
-    protected int getLayer(CalorimeterHit hit) {
+    protected int getVLayer(CalorimeterHit hit) {
 	org.lcsim.geometry.IDDecoder id = hit.getIDDecoder();
 	id.setID(hit.getCellID());
-	int layer = id.getLayer();
+	int layer = id.getVLayer();
 	return layer;
     }
 
@@ -405,26 +408,32 @@
 
     public void initGeometry(EventHeader event) 
     {
-	Detector det = event.getDetector();
-	CylindricalCalorimeter emb = ((CylindricalCalorimeter) det.getSubdetectors().get("EMBarrel"));
-	CylindricalCalorimeter eme = ((CylindricalCalorimeter) det.getSubdetectors().get("EMEndcap"));
-	m_ECAL_barrel_zmin = emb.getZMin();
-	m_ECAL_barrel_zmax = emb.getZMax();
-	m_ECAL_barrel_r = emb.getLayering().getDistanceToLayerSensorMid(0);
-	m_ECAL_endcap_z = eme.getLayering().getDistanceToLayerSensorMid(0);
-	m_ECAL_endcap_rmin = eme.getInnerRadius();
-	m_ECAL_endcap_rmax = eme.getOuterRadius();
-	double[] zero = {0, 0, 0};
-	m_fieldStrength = det.getFieldMap().getField(zero);
-	m_init = true;
-	if (m_debug) {
-	    System.out.println(this.getClass().getName()+": Init: ECAL barrel zmin="+m_ECAL_barrel_zmin);
-	    System.out.println(this.getClass().getName()+": Init: ECAL barrel zmax="+m_ECAL_barrel_zmax);
-	    System.out.println(this.getClass().getName()+": Init: ECAL barrel r="+m_ECAL_barrel_r);
-	    System.out.println(this.getClass().getName()+": Init: ECAL endcap z="+m_ECAL_endcap_z);
-	    System.out.println(this.getClass().getName()+": Init: ECAL endcap rmin="+m_ECAL_endcap_rmin);
-	    System.out.println(this.getClass().getName()+": Init: ECAL endcap rmax="+m_ECAL_endcap_rmax);
-	}
+        if(!m_init)
+        {
+            if(ci == null)
+            {
+                ci = CalorimeterInformation.instance();
+                emb = ci.getSubdetector(CalorimeterType.EM_BARREL);
+                eme = ci.getSubdetector(CalorimeterType.EM_ENDCAP);
+            }
+            m_ECAL_barrel_zmin = ci.getZMin(CalorimeterType.EM_BARREL);
+            m_ECAL_barrel_zmax = ci.getZMax(CalorimeterType.EM_BARREL);
+            m_ECAL_barrel_r = emb.getLayering().getDistanceToLayerSensorMid(0);
+            m_ECAL_endcap_z = eme.getLayering().getDistanceToLayerSensorMid(0);
+            m_ECAL_endcap_rmin = ci.getRMin(CalorimeterType.EM_ENDCAP);
+            m_ECAL_endcap_rmax = ci.getRMax(CalorimeterType.EM_ENDCAP);
+            double[] zero = {0, 0, 0};
+            m_fieldStrength = event.getDetector().getFieldMap().getField(zero);
+            m_init = true;
+            if (m_debug) {
+                System.out.println(this.getClass().getName()+": Init: ECAL barrel zmin="+m_ECAL_barrel_zmin);
+                System.out.println(this.getClass().getName()+": Init: ECAL barrel zmax="+m_ECAL_barrel_zmax);
+                System.out.println(this.getClass().getName()+": Init: ECAL barrel r="+m_ECAL_barrel_r);
+                System.out.println(this.getClass().getName()+": Init: ECAL endcap z="+m_ECAL_endcap_z);
+                System.out.println(this.getClass().getName()+": Init: ECAL endcap rmin="+m_ECAL_endcap_rmin);
+                System.out.println(this.getClass().getName()+": Init: ECAL endcap rmax="+m_ECAL_endcap_rmax);
+            }
+        }
     }
 
     protected boolean m_init = false;

lcsim/src/org/lcsim/recon/pfa/identifier
LocalHelixExtrapolationTrackMIPClusterMatcher.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- LocalHelixExtrapolationTrackMIPClusterMatcher.java	6 Sep 2008 23:47:00 -0000	1.3
+++ LocalHelixExtrapolationTrackMIPClusterMatcher.java	8 Mar 2010 19:38:30 -0000	1.4
@@ -43,7 +43,7 @@
 		} else {
 		    // Separation OK. Next, check that the cluster has a hit in the first n layers of the ECAL:
 		    CalorimeterHit firstHitInECAL = findInnermostHitInECAL(nearbyCluster);
-		    if (firstHitInECAL != null && getLayer(firstHitInECAL) < m_cutFirstLayer) {
+		    if (firstHitInECAL != null && getVLayer(firstHitInECAL) < m_cutFirstLayer) {
 			// First hit layer OK. Next, check the dot-product of directions:
 			double unitDotProduct = findUnitDotProduct(tangent, nearbyCluster);
 			if (Math.abs(unitDotProduct) > m_cutDotProduct) {

lcsim/src/org/lcsim/recon/pfa/identifier
LocalHelixExtrapolationTrackClusterMatcher.java 1.5 -> 1.6
diff -u -r1.5 -r1.6
--- LocalHelixExtrapolationTrackClusterMatcher.java	4 Feb 2010 17:45:32 -0000	1.5
+++ LocalHelixExtrapolationTrackClusterMatcher.java	8 Mar 2010 19:38:30 -0000	1.6
@@ -89,8 +89,8 @@
 		} else {
 		    // Separation OK. Next, check that the cluster has a hit in the first n layers of the ECAL:
 		    CalorimeterHit firstHitInECAL = findInnermostHitInECAL(nearbyCluster);
-		    if (firstHitInECAL != null && getLayer(firstHitInECAL) < m_cutFirstLayer) {
-			if (m_debug) { System.out.println("DEBUG: "+this.getClass().getName()+": comparing track with p="+(new BasicHep3Vector(tr.getMomentum())).magnitude()+" to a cluster of "+nearbyCluster.getCalorimeterHits().size()+" hits at a separation of "+separation+": First hit in ECAL is in layer "+getLayer(firstHitInECAL)+" -- OK!"); }
+		    if (firstHitInECAL != null && getVLayer(firstHitInECAL) < m_cutFirstLayer) {
+			if (m_debug) { System.out.println("DEBUG: "+this.getClass().getName()+": comparing track with p="+(new BasicHep3Vector(tr.getMomentum())).magnitude()+" to a cluster of "+nearbyCluster.getCalorimeterHits().size()+" hits at a separation of "+separation+": First hit in ECAL is in layer "+getVLayer(firstHitInECAL)+" -- OK!"); }
 			// First hit layer OK.
 			if (m_extraCut == null || m_extraCut.valid(tr,nearbyCluster) ) {
 			    // Extra cut not specified or passed
@@ -142,13 +142,13 @@
     protected CalorimeterHit findInnermostHitInECAL(Cluster clus) {
 	CalorimeterHit innermostHit = null;
 	for (CalorimeterHit hit : clus.getCalorimeterHits()) {
-	    int layer = getLayer(hit);
+	    int layer = getVLayer(hit);
 	    org.lcsim.geometry.Subdetector subdet = hit.getSubdetector();	    
             if ( ! subdet.isCalorimeter() ) { throw new AssertionError("Cluster hit outside calorimeter"); }
             String name = subdet.getName();
             if (name.compareTo(ci.getName(CalorimeterType.EM_BARREL)) == 0 || name.compareTo(ci.getName(CalorimeterType.EM_ENDCAP)) == 0) {
                 // EM -- OK
-		if (innermostHit==null || getLayer(innermostHit)>layer) {
+		if (innermostHit==null || getVLayer(innermostHit)>layer) {
 		    innermostHit = hit;
 		}
 	    }
@@ -177,10 +177,10 @@
 	double distance = VecOp.sub(hitPosition, point).magnitude();
 	return distance;
     }
-    protected int getLayer(CalorimeterHit hit) {
+    protected int getVLayer(CalorimeterHit hit) {
 	org.lcsim.geometry.IDDecoder id = hit.getIDDecoder();
 	id.setID(hit.getCellID());
-	int layer = id.getLayer();
+	int layer = id.getVLayer();
 	return layer;
     }
 
CVSspam 0.2.8