Commit in lcsim/src/org/lcsim/recon/tracking/gtrdetector on MAIN
GtrDetector.java+284added 1.1
package.html+7added 1.1
+291
2 added files
First release of package connecting compact description with global tracking detector. Work in progress.

lcsim/src/org/lcsim/recon/tracking/gtrdetector
GtrDetector.java added at 1.1
diff -N GtrDetector.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ GtrDetector.java	31 Jul 2005 07:43:58 -0000	1.1
@@ -0,0 +1,284 @@
+/*
+ * GtrDetector.java
+ *
+ * Created on July 30, 2005, 3:30 PM
+ *
+ */
+
+package org.lcsim.recon.tracking.gtrdetector;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+import java.util.List;
+import java.util.ArrayList;
+
+import org.lcsim.conditions.DetectorLocator;
+import org.lcsim.geometry.compact.Subdetector;
+import org.lcsim.geometry.subdetector.DiskTracker;
+import org.lcsim.geometry.subdetector.MultiLayerTracker;
+
+import org.lcsim.geometry.layer.Layer;
+import org.lcsim.geometry.layer.LayerSlice;
+import org.lcsim.geometry.layer.LayerStack;
+import org.lcsim.recon.tracking.trfbase.Interactor;
+import org.lcsim.recon.tracking.trfbase.MultiInteractor;
+import org.lcsim.recon.tracking.trfcyl.ClusterFindCyl;
+import org.lcsim.recon.tracking.trfcyl.LayerCylinder;
+import org.lcsim.recon.tracking.trfcyl.ThinCylMs;
+import org.lcsim.recon.tracking.trflayer.ClusterFindManager;
+
+
+import org.lcsim.recon.tracking.trflayer.Detector;
+import org.lcsim.recon.tracking.trflayer.InteractingLayer;
+import org.lcsim.recon.tracking.trfzp.ClusFindZPlane2;
+import org.lcsim.recon.tracking.trfzp.LayerZPlane;
+import org.lcsim.recon.tracking.trfzp.ThinZPlaneMs;
+/**
+ *
+ * @author Norman A. Graf
+ */
+public class GtrDetector extends Detector
+{
+    
+    /** Creates a new instance of GtrDetector */
+    public GtrDetector(String detectorName)
+    {
+        // fetch this detector
+        org.lcsim.geometry.compact.Detector det = DetectorLocator.findDetector(detectorName);
+        if(det==null)
+        {
+            System.out.println("Please see http://www.lcsim.org/detectors/index.html");
+            System.exit(1);
+        }
+        Map<String, Subdetector> subDetMap = det.getSubdetectors();
+        Set<String> keys = subDetMap.keySet();
+        Collection<Subdetector> subDets = subDetMap.values();
+        for(Subdetector subDet : subDets)
+        {
+            if (subDet instanceof DiskTracker)
+            {
+                add( (DiskTracker) subDet);
+            }
+            else if  (subDet instanceof MultiLayerTracker)
+            {
+                add((MultiLayerTracker) subDet);
+            }
+        }
+    }
+    
+    private void add(DiskTracker m)
+    {
+        String name     = m.getName();
+        int sysid       = m.getSystemID();
+        boolean reflect = m.getReflect();
+        String rname = null;
+        if ( m.getReadout() != null )
+        {
+            rname = m.getReadout().getName();
+        }
+        double[] innerR = m.getInnerR();
+        double[] outerR = m.getOuterR();
+        double[] innerZ = m.getInnerZ();
+        LayerStack ls   = m.getLayering().getLayerStack();
+        int nlayers     = ls.getNumberOfLayers();
+        for (int i = 0; i < nlayers; i++)
+        {
+            Layer layer       = ls.getLayer(i);
+            double thickness  = layer.getThickness();
+            boolean sensitive = layer.findIndexOfFirstSensitiveSlice() != -1;
+            if (rname == null) sensitive = false;
+            double layerX0   = calculateLayerX0(layer);
+            String detname = name;
+            if (nlayers > 1) detname += "." + i;
+            /*
+            System.out.println(detname+ " cylinder(name(\"" + name + "\"), ");
+            System.out.println("   @" + layerX0 + ",");
+            System.out.println("   length(" + thickness + " mm), ");
+            System.out.println("   innerRadius(" + innerR[i] + " mm),");
+            String comma = "";
+            if (sensitive) comma = ",";
+            System.out.println("   outerRadius(" + outerR[i] + " mm)" + comma);
+             */
+            if (sensitive)
+            {
+                int sensSliceIndex = layer.findIndexOfFirstSensitiveSlice();
+                LayerSlice sensSlice = layer.getSlice(sensSliceIndex);
+                double zSense = innerZ[i]+layer.getThicknessToSensitive();
+                zSense+=sensSlice.getThickness();
+                //
+                // create a trf layer...
+                double maxChisqDiff = 20.0;
+                ClusterFindManager find = new ClusFindZPlane2( zSense, maxChisqDiff);
+                org.lcsim.recon.tracking.trflayer.Layer lyr = new LayerZPlane( zSense, find );
+                // Add interactions to this layer
+                
+                // The list for multiple interactors...
+                List multi_int = new ArrayList();
+                
+                // Multiple Scattering...
+                
+                Interactor mcs = new ThinZPlaneMs(layerX0);
+                multi_int.add(mcs);
+                       /*
+                                // Energy Loss...
+                            double thickness = 0.001;
+                                double density = 0.01;
+                                DeDx dedx = new DeDxFixed(density);
+                                Interactor eloss = new CylEloss(thickness,dedx);
+                                multi_int.add(eloss);
+                        */
+                // The MultiInteractor contains both.
+                
+                Interactor multi = new MultiInteractor(multi_int);
+                
+                // Build an interacting layer
+                org.lcsim.recon.tracking.trflayer.Layer intlayer = new InteractingLayer(lyr, multi);
+                
+                // Add interacting layer to the detector
+                addLayer( detname, intlayer );
+                
+                /*
+                System.out.println("   type(\"tracker\"),");
+                System.out.println("   idCode(code(" + rname + "),");
+                System.out.println("          data(\"layer\", " + i + "),");
+                System.out.println("          data(\"system\", " + sysid + "),");
+                System.out.println("          data(\"barrel\", 1)");
+                System.out.println("   )");
+                 */
+                
+//            System.out.println(");");
+//            System.out.println("World += placement(@" + detname + ", translate(0, 0, " + (innerZ[i] + 0.5 * thickness) + " mm));");
+                if (reflect) // create similar layer at negative z
+                {
+                /*
+                System.out.println("World += placement(@" + detname
+                        + ", rotate(axis(\"x\"), angle(180 deg)), translate(0, 0, "
+                        + (- innerZ[i] - 0.5 * thickness) + " mm));");
+                 */
+                    ClusterFindManager find2 = new ClusFindZPlane2( -zSense, maxChisqDiff);
+                    org.lcsim.recon.tracking.trflayer.Layer lyr2 = new LayerZPlane( -zSense, find );
+                    // Build an interacting layer
+                    org.lcsim.recon.tracking.trflayer.Layer intlayer2 = new InteractingLayer(lyr2, multi);
+                    
+                    // Add interacting layer to the detector
+                    addLayer( name+"Neg."+i, intlayer2 );
+                }
+            }
+        }
+    }
+    
+    private void add(MultiLayerTracker m)
+    {
+        String name     = m.getName();
+        int sysid       = m.getSystemID();
+        String rname = null;
+        if ( m.getReadout() != null )
+        {
+            rname    = m.getReadout().getName();
+        }
+        double[] innerR = m.getInnerR();
+        double[] outerZ = m.getOuterZ();
+        LayerStack ls   = m.getLayering().getLayerStack();
+        int nlayers     = ls.getNumberOfLayers();
+        
+        for (int i = 0; i < nlayers; i++)
+        {
+            Layer layer       = ls.getLayer(i);
+            double thickness  = layer.getThickness();
+            boolean sensitive = layer.findIndexOfFirstSensitiveSlice() != -1;
+            if (rname == null) sensitive = false;
+            double layerX0   = calculateLayerX0(layer);
+            String detname = name;
+            if (nlayers > 1) detname += "." + i;
+/*
+            System.out.println( detname+ " cylinder(name(\"" + name + "\"), ");
+            System.out.println( "   X0 " + layerX0 + ",");
+            System.out.println( "   length(" + outerZ[i] * 2 + " mm), ");
+            System.out.println( "   innerRadius(" + innerR[i] + " mm),");
+            String comma = "";
+            if (sensitive) comma = ",";
+            System.out.println( "   outerRadius(" + (innerR[i] + thickness) + " mm)" + comma);
+ */
+            if (sensitive)
+            {
+                //
+                int sensSliceIndex = layer.findIndexOfFirstSensitiveSlice();
+                LayerSlice sensSlice = layer.getSlice(sensSliceIndex);
+                double rSense = innerR[i]+layer.getThicknessToSensitive();
+                rSense+=sensSlice.getThickness();
+                //
+                // create a trf layer...
+                double maxChisqDiff = 20.0;
+                ClusterFindManager find = new ClusterFindCyl( rSense, 0.0, maxChisqDiff);
+                org.lcsim.recon.tracking.trflayer.Layer lyr = new LayerCylinder( rSense, -outerZ[i], outerZ[i], find );
+                
+                
+                // Add interactions to this layer
+                
+                // The list for multiple interactors...
+                List multi_int = new ArrayList();
+                
+                // Multiple Scattering...
+                
+                Interactor mcs = new ThinCylMs(layerX0);
+                multi_int.add(mcs);
+                                /*
+                                // Energy Loss...
+                            double thickness = 0.001;
+                                double density = 0.01;
+                                DeDx dedx = new DeDxFixed(density);
+                                Interactor eloss = new CylEloss(thickness,dedx);
+                                multi_int.add(eloss);
+                                 */
+                // The MultiInteractor contains both.
+                
+                Interactor multi = new MultiInteractor(multi_int);
+                
+                // Build an interacting layer
+                org.lcsim.recon.tracking.trflayer.Layer intlayer = new InteractingLayer(lyr, multi);
+                
+                // Add interacting layer to the detector
+                addLayer( detname, intlayer );
+                
+//                addLayer( detname, lyr );
+                //
+                /*
+                System.out.println("    *** outer radius of sensitive layer="+rSense);
+                //
+                System.out.println( "   type(\"tracker\"),");
+                System.out.println( "   idCode(code(" + rname + "),");
+                System.out.println( "          data(\"layer\", " + i + "),");
+                System.out.println( "          data(\"system\", " + sysid + "),");
+                System.out.println( "          data(\"barrel\", 0)");
+                System.out.println( "   )");
+                 */
+            }
+            /*
+            System.out.println( ");");
+            System.out.println( "World += placement(@" + detname + ");");
+             */
+        }
+        
+    }
+// return effective x/x0 for this layer
+    double calculateLayerX0( Layer layer)
+    {
+        List<LayerSlice> lslist = layer.getSlices();
+        double xOverX0 = 0.;
+        for (LayerSlice lsl: lslist)
+        {
+            double x0 = lsl.getMaterial().getRadiationLengthWithDensity(); // in cm.
+            double thickness = lsl.getThickness();                         // in mm.
+            xOverX0 += thickness/(x0*10.);  // cm -> mm
+//            System.out.println(lsl.getMaterial().getName()+" x0= "+x0+ " thickness= "+thickness+ " => x/x0= "+thickness/(x0*10.));
+        }
+        return xOverX0;
+    }
+    
+    public static void main(String[] args)
+    {
+        GtrDetector gtrdet = new  GtrDetector("sidaug05");
+        System.out.println("\n\n\n\n\n"+gtrdet);
+    }
+    
+}

lcsim/src/org/lcsim/recon/tracking/gtrdetector
package.html added at 1.1
diff -N package.html
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ package.html	31 Jul 2005 07:43:58 -0000	1.1
@@ -0,0 +1,7 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html>
+  <body>
+This package provides the interface between the compact detector description and the global tracking packages.
+  </body>
+</html>
\ No newline at end of file
CVSspam 0.2.8