lcsim/src/org/lcsim/contrib/SODTracker
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
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
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