Commit in lcsim/src/org/lcsim/contrib/SODTracker on MAIN
SODMain.java+96added 1.1
History+18-11.5 -> 1.6
SODHel.java+1-11.2 -> 1.3
SODTrackFinderDriver.java+85-81.6 -> 1.7
test/TestSOD.java+11.4 -> 1.5
+201-10
1 added + 4 modified, total 5 files
added capability to run on sid00 data, and to run on the command line with SODMain.java. Also fixed value of speed of light...

lcsim/src/org/lcsim/contrib/SODTracker
SODMain.java added at 1.1
diff -N SODMain.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ SODMain.java	10 Mar 2007 00:04:58 -0000	1.1
@@ -0,0 +1,96 @@
+package org.lcsim.contrib.SODTracker;
+
+import java.util.*;
+import org.lcsim.util.Driver;
+import org.lcsim.event.*;
+
+import org.lcsim.util.loop.*;
+import java.io.File;
+
+public class SODMain extends Driver
+{
+    private int nEvents = 0;
+  
+    public SODMain() throws Exception
+    {
+	this(new String[0]);
+    }
+  
+    public SODMain(String[] args) throws Exception
+    {
+	add(new SODTrackFinderDriver());
+    }
+
+    public void process(EventHeader event)
+    {
+	super.process(event);
+	if (nEvents%1==0) {
+	    System.out.println("done processing event "+nEvents);
+	}
+	++nEvents;
+    }
+
+    public void mainCopy(String[] args) throws Exception
+    {
+	if (args.length >= 1 &&
+	    args[0].matches("^\\s*[/\\.\\w-_\\+]+\\.slcio")) {
+	    SODMain driver = this;
+	    convert(args[0],driver);
+	}
+	else {
+	    System.out.println("usage: java SODMain <input.slcio> <nb events>");
+	    return;
+	}
+    }
+
+    public static void main(String[] args) throws Exception
+    {
+	if (args.length >= 1 &&
+	    args[0].matches("^\\s*[/\\.\\w-_\\+]+\\.slcio")) {
+	    SODMain driver = new SODMain(args);
+	    int nbEventsToProcess = -1;
+	    if (args.length == 2 && args[1].matches("[0-9]+")) { // matches a number at least 1 time
+		nbEventsToProcess = Integer.parseInt(args[1]);
+		System.out.print("Processing "); System.out.print(nbEventsToProcess); System.out.println(" events"); 
+	    }
+	    convert(args[0],driver,nbEventsToProcess);
+	}
+	else {
+	    System.out.println("usage: java SODMain <input.slcio> <nb events>");
+	    return;
+	}
+    }
+
+    private static void convert(String iFile) throws Exception
+    {
+	convert(iFile, new SODMain());
+    }
+  
+    private static void convert(String iFile, SODMain driver) throws Exception
+    {
+	int nLoop = -1;
+	convert(iFile, new SODMain(), nLoop);
+    }
+  
+    private static void convert(String iFile, SODMain driver, int nbLoops) throws Exception
+    {
+	// Setup LCSim event loop
+	LCSimLoop loop = new LCSimLoop();
+	
+	File input  = new File(iFile);
+
+	loop.setLCIORecordSource(input);
+	loop.add(driver);
+	//    loop.add(new LCIODriver(output));
+
+	loop.loop(nbLoops);
+	loop.dispose();
+
+	System.out.println("Processed "+driver.getNEvents()+" events.");
+    }
+  
+    public int getNEvents()
+    {
+	return nEvents;
+    }
+}

lcsim/src/org/lcsim/contrib/SODTracker
History 1.5 -> 1.6
diff -u -r1.5 -r1.6
--- History	3 Jan 2007 21:45:09 -0000	1.5
+++ History	10 Mar 2007 00:04:58 -0000	1.6
@@ -3,7 +3,24 @@
 ## Please summarize changes to the SODTracker code here.
 ## Most recent first please.
 
-03 January 2007 Fred Blanc
+09 March 2007 Fred Blanc V01-01-03
+
+   - added 'SODMain.java' which can be used for running interactively on the
+     command line, outside of the JAS framework
+
+   - SODTrackFinderDriver: modified the way the SimTrackerHits are read in and
+     selected. This change was driven by the data generated for the 'sid00' detector,
+     which contains 4 SimTrackerHits for each track in every layer. For sid01, which
+     is the default detector at the time of this writing, a few lines have been commented
+     out. They should be uncommented if the data is similar to sid00 data. This whole
+     issue of treatment for SimTrackerHits will be alleviated once realistic TrackerHits
+     will be available.
+
+   - SODHel.java: changed the B-field conversion constant from 'ptcon=0.015' to
+     'ptcon=0.0149896229'. The latter accounts for the true speed of light of 2.99792458e+8
+
+
+03 January 2007 Fred Blanc V01-01-02
 
    - SODFittedHel.java: commented out message about failing matrix inversion.
 

lcsim/src/org/lcsim/contrib/SODTracker
SODHel.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- SODHel.java	28 Jul 2006 20:21:41 -0000	1.2
+++ SODHel.java	10 Mar 2007 00:04:58 -0000	1.3
@@ -206,7 +206,7 @@
  private static double pi=3.14159265359;
  private static double twopi=6.283185307;
  private static double ptmax=3000.0;
- private static double ptcon=0.015;
+ private static double ptcon=0.0149896229;
  private double xref;
  private double yref;
  private double x0;

lcsim/src/org/lcsim/contrib/SODTracker
SODTrackFinderDriver.java 1.6 -> 1.7
diff -u -r1.6 -r1.7
--- SODTrackFinderDriver.java	14 Feb 2007 21:21:14 -0000	1.6
+++ SODTrackFinderDriver.java	10 Mar 2007 00:04:58 -0000	1.7
@@ -6,7 +6,7 @@
 import org.lcsim.event.EventHeader.LCMetaData;
 import org.lcsim.event.SimTrackerHit;
 import org.lcsim.event.MCParticle;
-import org.lcsim.geometry.TrackerIDDecoder;
+//import org.lcsim.geometry.TrackerIDDecoder;
 import org.lcsim.geometry.Subdetector;
 
 public class SODTrackFinderDriver extends Driver
@@ -41,20 +41,93 @@
 	java.util.LinkedList l4vhlist = new java.util.LinkedList();
 	java.util.LinkedList l5vhlist = new java.util.LinkedList();
 	int collection=0;
+
+	List<SimTrackerHit> vtxBarrSimTrackerHits = event.get(SimTrackerHit.class,"VtxBarrHits");
+	int listSize = vtxBarrSimTrackerHits.size();
+	int lay[] = {0,0,0,0,0};
+
+	for (SimTrackerHit hit : vtxBarrSimTrackerHits) {
+
+	    int layer = hit.getLayer();
+	    MCParticle mcp = hit.getMCParticle();
+	    double[] pos = hit.getPoint();
+	    boolean recordCluster = true;
+
+// uncomment the following lines to run with sid00, which contains more than one
+// SimTrackerHit for each intersection of a track in a layer.
+/*
+	    boolean recordCluster = false;
+	    if(lay[layer]==0) {
+		lay[layer]=1;
+		recordCluster = true;
+	    }
+*/
+	    if(recordCluster) {
+		double rg1 = generator.nextGaussian();
+		double rg2=generator.nextGaussian();
+		SODHit sh=new SODHit();
+		sh.make_hit(layer,pos[0],pos[1],pos[2],rg1,rg2,hit,mcp);
+		if (layer==0){boolean success=l1vhlist.add(sh);}
+		if (layer==1){boolean success=l2vhlist.add(sh);}
+		if (layer==2){boolean success=l3vhlist.add(sh);}
+		if (layer==3){boolean success=l4vhlist.add(sh);}
+		if (layer==4){boolean success=l5vhlist.add(sh);}
+	    }
+	}
+
+	List<SimTrackerHit> trkBarrSimTrackerHits = event.get(SimTrackerHit.class,"TkrBarrHits");
+	listSize = trkBarrSimTrackerHits.size();
+	lay[0] = 0;
+	lay[1] = 0;
+	lay[2] = 0;
+	lay[3] = 0;
+	lay[4] = 0;
+
+	for (SimTrackerHit hit : trkBarrSimTrackerHits) {
+	    int layer = hit.getLayer();
+	    MCParticle mcp = hit.getMCParticle();
+	    double[] pos = hit.getPoint();
+	    boolean recordCluster = true;
+
+// uncomment the following lines to run with sid00, which contains more than one
+// SimTrackerHit for each intersection of a track in a layer.
+/*
+	    boolean recordCluster = false;
+	    if(lay[layer]==0) {
+		lay[layer]=1;
+		recordCluster = true;
+	    }
+*/
+	    if(recordCluster) {
+		double rg1 = generator.nextGaussian();
+		SODHit sh=new SODHit();
+		sh.make_hit(layer,pos[0],pos[1],rg1,hit);
+		if (layer==0){boolean success=l1shlist.add(sh);}
+		if (layer==1){boolean success=l2shlist.add(sh);}
+		if (layer==2){boolean success=l3shlist.add(sh);}
+		if (layer==3){boolean success=l4shlist.add(sh);}
+		if (layer==4){boolean success=l5shlist.add(sh);}
+	    }
+
+	}
+
+	/*
 	List<List<SimTrackerHit>> simTrackerHitCollections = event.get(SimTrackerHit.class);
 	for ( List<SimTrackerHit> simTrackerHits : simTrackerHitCollections ) {
 	    collection++;
-	    LCMetaData meta = event.getMetaData(simTrackerHits);
-	    TrackerIDDecoder decoder = (TrackerIDDecoder) meta.getIDDecoder();
+	    //LCMetaData meta = event.getMetaData(simTrackerHits);
+	    //TrackerIDDecoder decoder = (TrackerIDDecoder) meta.getIDDecoder();
 	    for (SimTrackerHit trackerHit : simTrackerHits) {
-		decoder.setID(trackerHit.getCellID() );
-		int layer = decoder.getLayer();
+		//decoder.setID(trackerHit.getCellID() );
+		//int layer = decoder.getLayer();
+		int layer = trackerHit.getLayer();
 		double[] pos = trackerHit.getPoint();
 		// get the MC particle corresponding to this hit
 		MCParticle mcp = trackerHit.getMCParticle();
 		double rgauss = generator.nextGaussian();
 		SODHit sh=new SODHit();
-		if (decoder.getSubdetector().getName().equals("VertexBarrel")){
+		//if (decoder.getSubdetector().getName().equals("VertexBarrel")){
+		if (trackerHit.getSubdetector().getName().equals("VertexBarrel")) {
 		    // the second collection corresponds to the barrel vertex tracker
 		    //		    sh.make_hit(layer,pos[0],pos[1],rgauss,trackerHit,mcp);
                     double rg2=generator.nextGaussian();
@@ -64,14 +137,16 @@
 		}
 		double res=-(0.1*pos[0]-sh.x())*Math.sin(sh.phi())
 		    +(0.1*pos[1]-sh.y())*Math.cos(sh.phi());
-		if (decoder.getSubdetector().getName().equals("VertexBarrel")){
+		//if (decoder.getSubdetector().getName().equals("VertexBarrel")){
+		if (trackerHit.getSubdetector().getName().equals("VertexBarrel")) {
 		    if (layer==0){boolean success=l1vhlist.add(sh);}
 		    if (layer==1){boolean success=l2vhlist.add(sh);}
 		    if (layer==2){boolean success=l3vhlist.add(sh);}
 		    if (layer==3){boolean success=l4vhlist.add(sh);}
 		    if (layer==4){boolean success=l5vhlist.add(sh);}
 		}
-		if (decoder.getSubdetector().getName().equals("TrackerBarrel")){
+		//if (decoder.getSubdetector().getName().equals("TrackerBarrel")){
+		if (trackerHit.getSubdetector().getName().equals("TrackerBarrel")) {
 		    if (layer==0){boolean success=l1shlist.add(sh);}
 		    if (layer==1){boolean success=l2shlist.add(sh);}
 		    if (layer==2){boolean success=l3shlist.add(sh);}
@@ -82,6 +157,8 @@
 		// if ((l1vhlist.size()!=1)||(l2vhlist.size()!=1)||(l3vhlist.size()!=1)||(l4vhlist.size()!=1)||(l5vhlist.size()!=1))clnflg=0;
 	    }
 	}
+	*/
+
 	//        SODNoiseMaker nrdr = new SODNoiseMaker(l1shlist,l2shlist,l3shlist,l4shlist,l5shlist);
 	//
 	//c  no SOD tracking this version; find probe trk (and maybe bgtrk) in vtx and SODHitAdder

lcsim/src/org/lcsim/contrib/SODTracker/test
TestSOD.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- TestSOD.java	27 Sep 2006 20:42:19 -0000	1.4
+++ TestSOD.java	10 Mar 2007 00:04:58 -0000	1.5
@@ -31,6 +31,7 @@
         if (SODTrackList.size()<100){
           aida.cloud1D("nTracks").fill(SODTrackList.size());
 	  for ( SODTrack SODtrk : SODTrackList ) {
+//	        System.out.println("Fitted pt = "+SODtrk.getPT());
 	        aida.cloud1D("Pt").fill(SODtrk.getPT());
 	        aida.cloud1D("ptot").fill(SODtrk.getPtot());
                 aida.cloud1D("d0  ").fill(SODtrk.getTrackParameter(0));
CVSspam 0.2.8