Commit in lcsim/src/org/lcsim/contrib/HansWenzel/Tracking on MAIN
MainLoop.java+31added 1.1
ParticlewithHits.java+19added 1.1
ParticlewithHitsAccessDriver.java+85added 1.1
ReverseTimeComparator.java+13added 1.1
SiMeasurement.java+49added 1.1
TimeComparator.java+14added 1.1
TrackerHitAccessDriver.java+168added 1.1
+379
7 added files
example navigating the new geometry and to create a hits lit to be used in tracking

lcsim/src/org/lcsim/contrib/HansWenzel/Tracking
MainLoop.java added at 1.1
diff -N MainLoop.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ MainLoop.java	6 Sep 2007 20:49:35 -0000	1.1
@@ -0,0 +1,31 @@
+package org.lcsim.contrib.HansWenzel.Tracking;
+import java.io.File;
+import org.lcsim.util.Driver;
+import java.util.*;
+import org.lcsim.event.*;
+import org.lcsim.util.loop.*;
+import org.lcsim.detector.driver.*;
+
+public class MainLoop extends Driver {
+    public MainLoop() {
+    }
+    public static void main(String[] args) throws Exception {
+        LCSimLoop loop = new LCSimLoop();
+        File input = new File("/home/wenzel/TrackerHitAccessDriver/planar_mu.slcio");
+//        File input = new File("/home/wenzel/TrackerHitAccessDriver/planar_mu_1gev.slcio");
+        loop.setLCIORecordSource(input);
+        String[] colls = {"TrackerBarrelHits","TkrEndcapHits","VtxBarrelHits","VtxEndcapHits"};
+//      For now only look at the hits in the Barrel detectors:
+//        String[] colls = {"TrackerBarrelHits","VtxBarrelHits"};
+        loop.add( new SimTrackerHitIdentifierReadoutDriver(colls));
+//      loop.add(new SimTrackerHitIdentifierReadoutDriver());
+//        loop.add( new SimTrackerHitPositionalReadoutDriver(new String[] {"SiTrackerBarrel_RO"} ) );
+        loop.add(new TrackerHitAccessDriver());
+        loop.add(new ParticlewithHitsAccessDriver());
+        //      File output = new File("exampleAnalysisJava.slcio");
+        //      loop.add(new LCIODriver(output));
+        long n = loop.loop(5);
+        loop.dispose();
+        //AIDA.defaultInstance().saveAs("exampleAnalysisJava.aida");
+    }
+}

lcsim/src/org/lcsim/contrib/HansWenzel/Tracking
ParticlewithHits.java added at 1.1
diff -N ParticlewithHits.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ParticlewithHits.java	6 Sep 2007 20:49:35 -0000	1.1
@@ -0,0 +1,19 @@
+package org.lcsim.contrib.HansWenzel.Tracking;
+import hep.physics.particle.BasicParticle;
+import org.lcsim.event.MCParticle;
+import java.util.Collections;
+import java.util.List;
+public class ParticlewithHits {
+    private MCParticle particle;
+    private List<SiMeasurement> ListofMeasurements;
+ 
+    public ParticlewithHits(MCParticle inParticle,
+			 List<SiMeasurement> inList)
+    {
+	particle            = inParticle;
+	ListofMeasurements  = inList;
+    }
+    public MCParticle   GetMCParticle()      {return particle;}
+    public List<SiMeasurement>  GetList()    {return ListofMeasurements;}
+    
+}

lcsim/src/org/lcsim/contrib/HansWenzel/Tracking
ParticlewithHitsAccessDriver.java added at 1.1
diff -N ParticlewithHitsAccessDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ParticlewithHitsAccessDriver.java	6 Sep 2007 20:49:35 -0000	1.1
@@ -0,0 +1,85 @@
+package org.lcsim.contrib.HansWenzel.Tracking;
+import hep.physics.particle.properties.ParticleType;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.EventHeader.LCMetaData;
+import org.lcsim.event.SimTrackerHit;
+import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
+import hep.aida.ITree;
+
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.HashMap;
+
+import hep.physics.particle.BasicParticle;
+import org.lcsim.event.MCParticle;
+import org.lcsim.geometry.Subdetector;
+import org.lcsim.geometry.subdetector.SiTrackerBarrel;
+import org.lcsim.detector.IDetectorElement;
+import org.lcsim.detector.IDetectorElementContainer;
+import org.lcsim.detector.IGeometryInfo;
+import org.lcsim.detector.ILogicalVolume;
+import org.lcsim.detector.IPhysicalVolume;
+import org.lcsim.detector.material.IMaterial;
+import org.lcsim.detector.solids.ISolid;
+import org.lcsim.detector.solids.Box;
+import org.lcsim.detector.solids.Tube;
+import hep.physics.vec.Hep3Vector;
+import hep.physics.vec.BasicHep3Vector;
+import org.lcsim.detector.identifier.Identifier;
+import org.lcsim.detector.driver.CollectionHandler;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.SimTrackerHit;
+import org.lcsim.util.Driver;
+import org.lcsim.util.cache.FileCache;
+import org.lcsim.util.loop.LCSimLoop;
+import java.util.Random;
+import java.lang.Math;
+//import SiMeasurement;
+/*
+ * ParticlewithHitsAccessDriver.java
+ *
+ * Created on July 31, 2005, 3:03 PM
+ *
+ */
+
+/**
+ *
+ * @author Hans Wenzel
+ */
+public class ParticlewithHitsAccessDriver extends Driver {
+    
+    public ParticlewithHitsAccessDriver() {
+    }
+    protected void process(EventHeader event) {
+        
+        List<List<ParticlewithHits>> SiMeasurementLists = event.get(ParticlewithHits.class);
+        System.out.println("List size "+SiMeasurementLists.size());
+        // now loop over the List  and print it out:
+        for (List<ParticlewithHits> SiMeasurementList: SiMeasurementLists) {
+            for (ParticlewithHits phits : SiMeasurementList) {
+                MCParticle part = phits.GetMCParticle();
+                System.out.println("Particle PDGID:  "+part.getPDGID());
+                List<SiMeasurement> MList = phits.GetList();
+                Collections.sort(MList, new TimeComparator());
+                
+                System.out.println("Number of Hits:  "+MList.size());
+                for ( SiMeasurement point : MList) {
+                    point.Print();
+                }
+            }
+        }
+    }
+}
+
+
+
+

lcsim/src/org/lcsim/contrib/HansWenzel/Tracking
ReverseTimeComparator.java added at 1.1
diff -N ReverseTimeComparator.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ReverseTimeComparator.java	6 Sep 2007 20:49:35 -0000	1.1
@@ -0,0 +1,13 @@
+package org.lcsim.contrib.HansWenzel.Tracking;
+import org.lcsim.event.SimTrackerHit;
+import java.util.Comparator;
+
+class ReverseTimeComparator implements Comparator<SiMeasurement>
+{
+    public int compare(SiMeasurement h1, SiMeasurement h2)
+   {        
+        SimTrackerHit  hit1 = h1.GetHit();
+        SimTrackerHit  hit2 = h2.GetHit();   
+        return (hit1.getTime() > hit2.getTime() ? -1 : (hit1.getTime() == hit2.getTime() ? 0 : 1));
+    }
+}

lcsim/src/org/lcsim/contrib/HansWenzel/Tracking
SiMeasurement.java added at 1.1
diff -N SiMeasurement.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ SiMeasurement.java	6 Sep 2007 20:49:35 -0000	1.1
@@ -0,0 +1,49 @@
+package org.lcsim.contrib.HansWenzel.Tracking;
+import org.lcsim.event.SimTrackerHit;
+import java.util.Comparator;
+import org.lcsim.event.SimTrackerHit;
+import hep.physics.particle.BasicParticle;
+import org.lcsim.event.MCParticle;
+import org.lcsim.detector.IDetectorElement;
+
+public class SiMeasurement {
+    private SimTrackerHit Hit;
+    private double LocalX;
+    private double LocalY;
+    private double SigX;
+    private double SigY;
+    private IDetectorElement IDet;
+    private String DetectorType;
+    public SiMeasurement(SimTrackerHit inHit,
+            double inLocalX,
+            double inLocalY,
+            double inSigX,
+            double inSigY,
+            IDetectorElement inIDet,
+            String inDetectorType) {
+        Hit          = inHit;
+        LocalX       = inLocalX;
+        LocalY       = inLocalY;
+        SigX         = inSigX;
+        SigY         = inSigY;
+        IDet         = inIDet;
+        DetectorType = inDetectorType;
+    }
+    public SimTrackerHit    GetHit()         {return Hit;}
+    public double           GetLocalX()      {return LocalX;}
+    public double           GetLocalY()      {return LocalY;}
+    public double           GetSigX()        {return SigX;}
+    public double           GetSigY()        {return SigY;}
+    public IDetectorElement GetIDet()        {return IDet;}
+    public String           GetDetectorType(){return DetectorType;}
+    public void             Print() {
+        System.out.println( "Local x:        "+LocalX+
+                " Local Y: "+LocalY+
+                " Sigma X: "+SigX+
+                " Sigma Y: "+SigY+
+                " Detector name:  "+IDet.getName()+
+                " Detector Type:  "+DetectorType);
+        return;
+    }
+    
+}

lcsim/src/org/lcsim/contrib/HansWenzel/Tracking
TimeComparator.java added at 1.1
diff -N TimeComparator.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ TimeComparator.java	6 Sep 2007 20:49:35 -0000	1.1
@@ -0,0 +1,14 @@
+package org.lcsim.contrib.HansWenzel.Tracking;
+import org.lcsim.event.SimTrackerHit;
+import java.util.Comparator;
+
+class TimeComparator implements Comparator<SiMeasurement>
+{
+    
+    public int compare(SiMeasurement h1, SiMeasurement h2)
+    {
+        SimTrackerHit  hit1 = h1.GetHit();
+        SimTrackerHit  hit2 = h2.GetHit();        
+        return (hit1.getTime() < hit2.getTime() ? -1 : (hit1.getTime() == hit2.getTime() ? 0 : 1));
+    }
+}

lcsim/src/org/lcsim/contrib/HansWenzel/Tracking
TrackerHitAccessDriver.java added at 1.1
diff -N TrackerHitAccessDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ TrackerHitAccessDriver.java	6 Sep 2007 20:49:35 -0000	1.1
@@ -0,0 +1,168 @@
+package org.lcsim.contrib.HansWenzel.Tracking;
+import hep.physics.particle.properties.ParticleType;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.EventHeader.LCMetaData;
+import org.lcsim.event.SimTrackerHit;
+import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
+import hep.aida.ITree;
+
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.HashMap;
+
+import hep.physics.particle.BasicParticle;
+import org.lcsim.event.MCParticle;
+import org.lcsim.geometry.Subdetector;
+import org.lcsim.geometry.subdetector.SiTrackerBarrel;
+import org.lcsim.detector.IDetectorElement;
+import org.lcsim.detector.IDetectorElementContainer;
+import org.lcsim.detector.IGeometryInfo;
+import org.lcsim.detector.ILogicalVolume;
+import org.lcsim.detector.IPhysicalVolume;
+import org.lcsim.detector.material.IMaterial;
+import org.lcsim.detector.solids.ISolid;
+import org.lcsim.detector.solids.Box;
+import org.lcsim.detector.solids.Tube;
+import hep.physics.vec.Hep3Vector;
+import hep.physics.vec.BasicHep3Vector;
+import org.lcsim.detector.identifier.Identifier;
+import org.lcsim.detector.driver.CollectionHandler;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.SimTrackerHit;
+import org.lcsim.util.Driver;
+import org.lcsim.util.cache.FileCache;
+import org.lcsim.util.loop.LCSimLoop;
+import java.util.Random;
+import java.lang.Math;
+//import SiMeasurement;
+/*
+ * TrackerHitAccessDriver.java
+ *
+ * Created on July 31, 2005, 3:03 PM
+ *
+ */
+
+/**
+ *
+ * @author Hans Wenzel
+ */
+public class TrackerHitAccessDriver extends Driver {
+    
+    final double strippitch = 0.05;  // 50 micron strips
+    final double sigstripy  = strippitch/Math.sqrt(12.); // pitch/sqrt(12)
+    double sigstripx   = 0.0;
+    double MeasureX    = 0.0;
+    double MeasureY    = 0.0;
+    double sigMeasureX = 0.0;
+    double sigMeasureY = 0.0;
+    final double pixelx     = 0.01;  // 10 x 10 microns Pixels
+    final double pixely     = 0.01;
+    final double sigpixelx  = pixelx/Math.sqrt(12.);
+    final double sigpixely  = pixely/Math.sqrt(12.);
+//    private SiMeasurement measurement;
+    Random rndm;
+    public TrackerHitAccessDriver() {
+        rndm = new Random();
+    }
+    protected void process(EventHeader event) {
+        SiMeasurement measurement=null;
+        List<MCParticle> particles = event.get(MCParticle.class,event.MC_PARTICLES);
+        System.out.println("Nr of MC particles:  "+particles.size());
+        List<List<SimTrackerHit>> collections   = event.get(SimTrackerHit.class);
+        Map<MCParticle,Integer> IndexMap = new HashMap<MCParticle,Integer>();
+        Integer index = 0;
+        List<ParticlewithHits> SiMeasurementList = new ArrayList<ParticlewithHits>();
+        
+//        Map<MCParticle,List<SiMeasurement>> SiMeasurementMap = new HashMap<MCParticle,List<SiMeasurement>>();
+        //   Loop over all SimTrackerHit collections:
+        for (List<SimTrackerHit> collection : collections) {
+            LCMetaData meta = event.getMetaData(collection);
+            if ((meta.getName().substring(0,13).equals("TrackerBarrel"))||(meta.getName().substring(0,9).equals("VtxBarrel"))) {
+                //               System.out.println("meta:  "+meta.getName());
+                for (SimTrackerHit hit : collection) {
+                    MCParticle particle       = hit.getMCParticle();
+                    if (particle !=null){
+                        
+                        IDetectorElement DEofHit  = hit.getDetectorElement();
+                        IGeometryInfo gi          = DEofHit.getGeometry();
+                        double[] pos              = hit.getPoint();
+                        Hep3Vector heppoint       = new BasicHep3Vector(pos);
+                        Hep3Vector locpoint       = gi.transformGlobalToLocal(heppoint);
+                        IPhysicalVolume pv        = gi.getPhysicalVolume();
+                        ILogicalVolume  lv        = pv.getLogicalVolume();
+                        IMaterial gimat           = lv.getMaterial();
+                        ISolid    gisolid         = lv.getSolid();
+                        if(gisolid instanceof Box) {
+                            Box gbox = (Box)gisolid;   //casting
+                            sigstripx  = (2.*gbox.getXHalfLength())/Math.sqrt(12.); // pit/sqrt(12)
+                        } else if(gisolid instanceof Tube) {
+                            Tube tube =(Tube)gisolid;  //casting
+                        } else {
+                            System.out.println("ISolid not known!!!!");
+                        }
+                        if (DEofHit.getName().substring(0,13).equals("TrackerBarrel")) {
+                            MeasureX    = 0.0;
+                            MeasureY    = locpoint.y()+sigstripy*rndm.nextGaussian();
+                            sigMeasureX = sigstripx;
+                            sigMeasureY = sigstripy;
+                            measurement = new SiMeasurement(hit,MeasureX,MeasureY,sigMeasureX,sigMeasureY,DEofHit,"TrackerBarrel");
+                        } else if (DEofHit.getName().substring(0,9).equals("VtxBarrel")) {
+                            MeasureX    = locpoint.x()+sigpixelx*rndm.nextGaussian();;
+                            MeasureY    = locpoint.y()+sigpixely*rndm.nextGaussian();
+                            sigMeasureX = sigpixelx;
+                            sigMeasureY = sigpixely;
+                            measurement = new SiMeasurement(hit,MeasureX,MeasureY,sigMeasureX,sigMeasureY,DEofHit,"VtxBarrel");
+                        } else {
+                            System.out.println("Currently endcaps not implemented");
+                        }
+                        
+                        Boolean found             = IndexMap.containsKey(particle);
+                        if (found) {
+                            ParticlewithHits pwh                = SiMeasurementList.get(IndexMap.get(particle));
+                            List<SiMeasurement> MeasurementList = pwh.GetList();
+                            MeasurementList.add(measurement);
+                        } else {
+                            List<SiMeasurement> MeasurementList =new ArrayList();
+                            MeasurementList.add(measurement);
+                            ParticlewithHits particlewh = new ParticlewithHits(particle,MeasurementList);
+                            SiMeasurementList.add(particlewh);
+                            IndexMap.put(particle,index);
+                            index = index+1;
+                        }
+                    } // end if MCparticle found
+                }   // end loop over hits
+            }   // end barrel selection
+        }// end loop over hit collections
+        System.out.println("List size "+SiMeasurementList.size());
+        /*
+        // now loop over the List  and print it out:
+        for (ParticlewithHits phits: SiMeasurementList) {
+            MCParticle part = phits.GetMCParticle();
+            System.out.println("Particle PDGID:  "+part.getPDGID());
+            List<SiMeasurement> MList = phits.GetList();
+            Collections.sort(MList, new TimeComparator());
+            
+            System.out.println("Number of Hits:  "+MList.size());
+            for ( SiMeasurement point : MList) {
+                point.Print();
+            }
+        }
+        */
+        // Put the   collection into the event.
+        System.out.println("Adding object to event: "  );
+        event.put("_ParticlewithHits",SiMeasurementList , ParticlewithHits.class, 0);
+    }
+}
+
+
+
+
CVSspam 0.2.8