3 added + 4 removed + 6 modified, total 13 files
hps-java/src/main/java/org/lcsim/HPSBase
diff -N HPSTrackerHitDriver.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ HPSTrackerHitDriver.java 10 Mar 2011 23:17:50 -0000 1.1
@@ -0,0 +1,243 @@
+/*
+ * TrackerHitDriver Class
+ *
+ */
+package org.lcsim.HPSBase;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.lcsim.detector.IDetectorElement;
+import org.lcsim.detector.tracker.silicon.SiSensor;
+import org.lcsim.detector.tracker.silicon.SiTrackerModule;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.geometry.Detector;
+import org.lcsim.recon.tracking.digitization.sisim.CDFSiSensorSim;
+import org.lcsim.recon.tracking.digitization.sisim.ClusteringAlgorithm;
+import org.lcsim.recon.tracking.digitization.sisim.BasicReadoutChip;
+import org.lcsim.recon.tracking.digitization.sisim.NearestNeighbor;
+import org.lcsim.recon.tracking.digitization.sisim.NearestNeighborRMS;
+import org.lcsim.recon.tracking.digitization.sisim.PixelHitMaker;
+import org.lcsim.recon.tracking.digitization.sisim.RawTrackerHitMaker;
+import org.lcsim.recon.tracking.digitization.sisim.SiDigitizer;
+import org.lcsim.recon.tracking.digitization.sisim.SiSensorSim;
+import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHit;
+import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitPixel;
+import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
+import org.lcsim.recon.tracking.digitization.sisim.StripHitMaker;
+import org.lcsim.recon.tracking.digitization.sisim.config.SimTrackerHitReadoutDriver;
+import org.lcsim.util.Driver;
+import org.lcsim.util.lcio.LCIOConstants;
+
+/**
+ *
+ * @author tknelson
+ */
+public class HPSTrackerHitDriver extends Driver {
+
+ List<String> _readouts = new ArrayList<String>();
+ List<String> _process_paths = new ArrayList<String>();
+ List<IDetectorElement> _process_de = new ArrayList<IDetectorElement>();
+ Set<SiSensor> _process_sensors = new HashSet<SiSensor>();
+ Set<SiTrackerModule> _process_modules = new HashSet<SiTrackerModule>();
+ SiDigitizer _strip_digitizer;
+ SiDigitizer _pixel_digitizer;
+ StripHitMaker _strip_clusterer;
+ PixelHitMaker _pixel_clusterer;
+ String _digitizer_name;
+ int _nev = 0;
+ int _ngc = 0;
+
+ /**
+ * Creates a new instance of TrackerHitDriver
+ */
+ public HPSTrackerHitDriver() {
+
+ // Instantiate the sensor simulation classes and set the thresholds
+// SiSensorSim strip_simulation = new CDFSiSensorSim();
+ CDFSiSensorSim strip_simulation = new CDFSiSensorSim();
+
+ // Instantiate the readout chips and set the noise parameters
+ BasicReadoutChip strip_readout = new BasicReadoutChip();
+// ABCD -- Pristine
+/*
+ strip_readout.setNoiseIntercept(600.);
+ strip_readout.setNoiseSlope(65.);
+ strip_readout.setNoiseThreshold(4.);
+ strip_readout.setNeighborThreshold(4.);
+ strip_readout.setNbits(1);
+ strip_readout.setDynamicRange(10);
+ */
+ // APV25 -- Pristine
+
+ strip_readout.setNoiseIntercept(270.);
+ strip_readout.setNoiseSlope(36.);
+ strip_readout.setNoiseThreshold(4.);
+ strip_readout.setNeighborThreshold(4.);
+ strip_readout.setNbits(10);
+ strip_readout.setDynamicRange(40);
+
+ //set trapping to 0.2 to simulate radiation damage.
+// strip_simulation.setTrapping(0.2);
+// strip_simulation.setTrapping(0.12);
+
+ // Instantiate the digitizer that produces the raw hits
+ _strip_digitizer = new RawTrackerHitMaker(strip_simulation, strip_readout);
+
+ _digitizer_name = _strip_digitizer.getName();
+
+ // Instantiate a nearest neighbor clustering algorithm for the strips
+// NearestNeighbor strip_clustering = new NearestNeighbor();
+// strip_clustering.setSeedThreshold(4.);
+// strip_clustering.setNeighborThreshold(4.);
+
+ NearestNeighborRMS strip_clustering = new NearestNeighborRMS();
+ strip_clustering.setSeedThreshold(4.);
+ strip_clustering.setNeighborThreshold(3.);
+ strip_clustering.setClusterThreshold(4.);
+
+ // Instantiate the clusterers and set hit-making parameters
+ _strip_clusterer = new StripHitMaker(strip_simulation, strip_readout, strip_clustering);
+ _strip_clusterer.setMaxClusterSize(10);
+ _strip_clusterer.setCentralStripAveragingThreshold(4);
+ /*
+ _strip_clusterer.SetOneClusterErr(1 / Math.sqrt(12.));
+ _strip_clusterer.SetTwoClusterErr(1 / 5.0);
+ _strip_clusterer.SetThreeClusterErr(1 / 3.0);
+ _strip_clusterer.SetFourClusterErr(1 / 2.0);
+ _strip_clusterer.SetFiveClusterErr(1 / 1.0);
+ */
+ double multiplier = 1.0;
+ _strip_clusterer.SetOneClusterErr(multiplier / Math.sqrt(12.));
+ _strip_clusterer.SetTwoClusterErr(multiplier / 5.0);
+ _strip_clusterer.SetThreeClusterErr(multiplier / 3.0);
+ _strip_clusterer.SetFourClusterErr(multiplier / 2.0);
+ _strip_clusterer.SetFiveClusterErr(multiplier / 1.0);
+
+
+ // Specify the readouts to process
+ _readouts.add("TrackerHits");
+ // Specify the detectors to process
+ _process_paths.add("Tracker");
+ }
+
+ /**
+ * Initialize whenever we have a new detector
+ *
+ * @param detector
+ */
+ public void detectorChanged(Detector detector) {
+ System.out.println(detector.getName());
+ super.detectorChanged(detector);
+
+ // Process detectors specified by path, otherwise process entire detector
+ IDetectorElement detector_de = detector.getDetectorElement();
+ System.out.println("detector_de Name =" + detector_de.getName());
+ for (String de_path : _process_paths)
+ _process_de.add(detector_de.findDetectorElement(de_path));
+
+ if (_process_de.size() == 0)
+ _process_de.add(detector_de);
+
+ for (IDetectorElement detector_element : _process_de) {
+ _process_sensors.addAll(detector_element.findDescendants(SiSensor.class));
+ _process_modules.addAll(detector_element.findDescendants(SiTrackerModule.class));
+ }
+
+ }
+
+ /**
+ * Setup readouts
+ */
+ public void startOfData() {
+ // If readouts not already set, set them up
+ if (_readouts.size() != 0) {
+ System.out.println("Adding SimTrackerHitIdentifierReadoutDriver with readouts: " + _readouts);
+ super.add(new SimTrackerHitReadoutDriver(_readouts));
+ }
+
+ super.startOfData();
+ _readouts.clear();
+ _nev = 0;
+ _ngc = 0;
+ }
+
+ /**
+ * Main digitization driver. Creates raw hits, forms clusters, and makes
+ * tracker hits using the sisim package.
+ *
+ * @param event
+ */
+ public void process(EventHeader event) {
+ super.process(event);
+
+ // Print out the event number
+
+ _nev++;
+ _ngc++;
+ if (_ngc == 100) {
+ System.out.println("TrackerHitDriver processing event " + _nev);
+ System.gc();
+ _ngc = 0;
+ }
+
+
+ // Lists of hits
+ List<RawTrackerHit> raw_hits = new ArrayList<RawTrackerHit>();
+ List<SiTrackerHit> hits_strip1D = new ArrayList<SiTrackerHit>();
+ List<SiTrackerHit> hits_pixel = new ArrayList<SiTrackerHit>();
+
+ for (SiSensor sensor : _process_sensors) {
+
+ if (sensor.hasStrips()) {
+ raw_hits.addAll(_strip_digitizer.makeHits(sensor));
+ hits_strip1D.addAll(_strip_clusterer.makeHits(sensor));
+
+ }
+
+
+ if (sensor.hasPixels()) {
+ raw_hits.addAll(_pixel_digitizer.makeHits(sensor));
+ hits_pixel.addAll(_pixel_clusterer.makeHits(sensor));
+ }
+
+ }
+
+// int flag = (1 << LCIOConstants.RTHBIT_HITS | 1 << LCIOConstants.TRAWBIT_ID1); //correct flag for persistence
+ int flag=0;
+ event.put(getRawHitsName(), raw_hits, RawTrackerHit.class, flag, toString());
+ event.put(getStripHits1DName(), hits_strip1D, SiTrackerHitStrip1D.class, 0, toString());
+// event.put(getPixelHitsName(), hits_pixel, SiTrackerHitPixel.class, 0, toString());
+
+ }
+
+ /**
+ * Return the name of the raw hits collection
+ *
+ * @return name of raw hits collection
+ */
+ public String getRawHitsName() {
+ return _digitizer_name + "_RawTrackerHits";
+ }
+
+ /**
+ * Return the name of the strip hits collection
+ *
+ * @return name of strip hits collection
+ */
+ public String getStripHits1DName() {
+ return _strip_clusterer.getName() + "_SiTrackerHitStrip1D";
+ }
+
+ /**
+ * Return the name of the pixel hits collection
+ *
+ * @return name of pixel hits collection
+ */
+ public String getPixelHitsName() {
+ return _pixel_clusterer.getName() + "_SiTrackerHitPixel";
+ }
+}
\ No newline at end of file
hps-java/src/main/java/org/lcsim/HPSBase
diff -N HPSHelicalTrackHitDriver.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ HPSHelicalTrackHitDriver.java 10 Mar 2011 23:17:50 -0000 1.1
@@ -0,0 +1,323 @@
+/*
+ * HPSHelicalTrackHitDriver.java
+ *
+ * Created on January 4, 2010
+ *
+ */
+package org.lcsim.HPSBase;
+
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Vector;
+import hep.physics.vec.VecOp;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.lcsim.detector.IDetectorElement;
+import org.lcsim.detector.ITransform3D;
+import org.lcsim.digisim.MyLCRelation;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.LCRelation;
+import org.lcsim.event.MCParticle;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.fit.helicaltrack.HelicalTrack2DHit;
+import org.lcsim.fit.helicaltrack.HelicalTrack3DHit;
+import org.lcsim.fit.helicaltrack.HelicalTrackCross;
+import org.lcsim.fit.helicaltrack.HelicalTrackHit;
+import org.lcsim.fit.helicaltrack.HelicalTrackStrip;
+import org.lcsim.fit.helicaltrack.HitIdentifier;
+import org.lcsim.fit.helicaltrack.StereoHitMaker;
+import org.lcsim.geometry.subdetector.BarrelEndcapFlag;
+import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHit;
+import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
+import org.lcsim.recon.tracking.digitization.sisim.TrackerHitType.CoordinateSystem;
+import org.lcsim.recon.tracking.vsegment.hit.DigiTrackerHit;
+import org.lcsim.recon.tracking.vsegment.hit.TrackerCluster;
+import org.lcsim.util.Driver;
+
+/**
+ * Create the appropriate HelicalTrackHits for the specified TrackerHit
+ * collections. The resulting HelicalTrackHits encapsulate the information
+ * needed to perform a helical track hit for either a segmented strip
+ * detector, a pixel detector, or cross hits from a stereo detector.
+ *
+ * This driver was developed for the Dark Forces silicon tracker, where
+ * digitized hits are in either axial or stereo layers. The pairs of layers
+ * to be used in forming stereo hits can be specified using the setStereoPairs
+ * method.
+ *
+ * The list of hit collections to be converted must be specified
+ * before the process method is executed.
+ *
+ * @author Richard Partridge
+ * @version 1.0
+ */
+public class HPSHelicalTrackHitDriver extends Driver {
+
+// private StereoHitMaker _crosser = new StereoHitMaker(2., 10.);
+ private StereoHitMaker _crosser = new StereoHitMaker(0.0, 10.);
+ private HitIdentifier _ID = new HitIdentifier();
+ private String _outname = "HelicalTrackHits";
+ private String _hitrelname = "HelicalTrackHitRelations";
+ private String _mcrelname = "HelicalTrackMCRelations";
+ private List<String> _colnames = new ArrayList<String>();
+ private Map<String, String> _stereomap = new HashMap<String, String>();
+ private Hep3Vector _orgloc = new BasicHep3Vector(0., 0., 0.);
+ private double _eps = 1.0e-6;
+
+ /** Creates a new instance of HelicalTrackHitDriver */
+ public HPSHelicalTrackHitDriver() {
+ }
+
+ /**
+ * Create the HelicalTrackHits for the specified hit collections.
+ * @param event EventHeader of the event to be processed
+ */
+
+ public void process(EventHeader event) {
+ super.process(event);
+
+ // Initialize the list of HelicalTrackHits
+ List<HelicalTrackHit> helhits = new ArrayList<HelicalTrackHit>();
+
+ // Create a List of LCRelations to relate HelicalTrackHits to the original hits
+ List<LCRelation> hitrelations = new ArrayList<LCRelation>();
+
+ for (String _colname : _colnames) {
+
+ // Get the list of SiTrackerHits for this collection
+ List<SiTrackerHit> hitlist = (List<SiTrackerHit>) event.get(_colname);
+
+ // Create collections for strip hits by layer and hit cross references
+ Map<String, List<HelicalTrackStrip>> striplistmap = new HashMap<String, List<HelicalTrackStrip>>();
+ Map<HelicalTrackStrip, SiTrackerHitStrip1D> stripmap = new HashMap<HelicalTrackStrip, SiTrackerHitStrip1D>();
+
+ // Loop over the SiTrackerHits in this collection
+ for (SiTrackerHit hit : hitlist) {
+
+ // Check if we have a 1D strip hit
+ if (hit instanceof SiTrackerHitStrip1D) {
+
+ // Cast the hit as a 1D strip hit and find the identifier for the detector/layer combo
+ SiTrackerHitStrip1D h = (SiTrackerHitStrip1D) hit;
+ IDetectorElement de = h.getSensor();
+ String id = makeID(_ID.getName(de), _ID.getLayer(de));
+
+ // Check if hit is on a stereo pair layer
+ if (_stereomap.containsKey(id) || _stereomap.containsValue(id)) {
+
+ // Create a HelicalTrackStrip for this hit
+ HelicalTrackStrip strip = makeDigiStrip(h);
+
+ // Get the list of strips for this layer - create a new list if one doesn't already exist
+ List<HelicalTrackStrip> lyrhits = striplistmap.get(id);
+ if (lyrhits == null) {
+ lyrhits = new ArrayList<HelicalTrackStrip>();
+ striplistmap.put(id, lyrhits);
+ }
+
+ // Add the strip to the list of strips on this sensor
+ lyrhits.add(strip);
+
+ // Map a reference back to the hit needed to create the stereo hit LC relations
+ stripmap.put(strip, h);
+
+ } else {
+
+ // If not a stereo hit, create an axial strip hit and the corresponding LC Relation
+ HelicalTrackHit dah = makeDigiAxialHit(h);
+ helhits.add(dah);
+ hitrelations.add(new MyLCRelation(dah, hit));
+ }
+
+ } else {
+
+ // If not a 1D strip hit, make a pixel hit
+ HelicalTrackHit hit3d = makeDigi3DHit(hit);
+ helhits.add(hit3d);
+ hitrelations.add(new MyLCRelation(hit3d, hit));
+ }
+ }
+
+ // Now create the stereo hits
+ // Create a list of stereo hits
+ List<HelicalTrackCross> stereohits = new ArrayList<HelicalTrackCross>();
+
+ // Loop over the stereo layer pairs
+ for (String id1 : _stereomap.keySet()) {
+
+ // Get the second layer
+ String id2 = _stereomap.get(id1);
+
+ // Form the stereo hits and add them to our hit list
+ stereohits.addAll(_crosser.MakeHits(striplistmap.get(id1), striplistmap.get(id2)));
+ }
+
+ for (HelicalTrackCross htc : stereohits) {
+ double ypos = htc.x();
+ double zpos = htc.z();
+ List<HelicalTrackStrip> htstrips = htc.getStrips();
+ for (HelicalTrackStrip hts : htstrips) {
+ }
+ }
+
+
+ // Add the stereo hits to our list of HelicalTrackHits
+ helhits.addAll(stereohits);
+
+ //add LCRelation for strip hits
+ for (HelicalTrackCross cross : stereohits) {
+ for (HelicalTrackStrip strip : cross.getStrips()) {
+ hitrelations.add(new MyLCRelation(cross, stripmap.get(strip)));
+ }
+ }
+ }
+
+ // Create the LCRelations between HelicalTrackHits and MC particles
+ List<LCRelation> mcrelations = new ArrayList<LCRelation>();
+ for (HelicalTrackHit hit : helhits) {
+ for (MCParticle mcp : hit.getMCParticles()) {
+ mcrelations.add(new MyLCRelation(hit, mcp));
+ }
+ }
+
+
+ // Put the HelicalTrackHits back into the event
+ event.put(_outname, helhits, HelicalTrackHit.class, 0);
+ event.put(_hitrelname, hitrelations, LCRelation.class, 0);
+ event.put(_mcrelname, mcrelations, LCRelation.class, 0);
+ return;
+ }
+
+ /**
+ * Name of the HelicalTrackHit collection to be put back in the event.
+ * @param outname Name to use for the HelicalTrackHit collection
+ */
+ public void addCollection(String colname) {
+ _colnames.add(colname);
+ }
+
+ public void OutputCollection(String outname) {
+ _outname = outname;
+ return;
+ }
+
+ public void setOutputCollectionName(String outname) {
+ _outname = outname;
+ return;
+ }
+
+ public void HitRelationName(String hitrelname) {
+ _hitrelname = hitrelname;
+ return;
+ }
+
+ public void MCRelationName(String mcrelname) {
+ _mcrelname = mcrelname;
+ return;
+ }
+
+ public void setMaxSeperation(double maxsep) {
+ _crosser.setMaxSeparation(maxsep);
+ return;
+ }
+
+ public void setTolerance(double tolerance) {
+ _crosser.setTolerance(tolerance);
+ return;
+ }
+
+ public void setStereoPair(String detname, int lyr1, int lyr2) {
+ _stereomap.put(makeID(detname, lyr1), makeID(detname, lyr2));
+ }
+
+ private List<MCParticle> getMCParticles(TrackerCluster cluster) {
+ List<MCParticle> mcplist = new ArrayList<MCParticle>();
+ for (DigiTrackerHit dhit : cluster.getDigiHits()) {
+ // Get the elemental hits - not sure what the dif is...
+ for (DigiTrackerHit dhit2 : dhit.getElementalHits()) {
+ // Get the MCParticle and add it to the hit
+ MCParticle mcp = dhit2.getMCParticle();
+ if (mcp != null) {
+ mcplist.add(mcp);
+ }
+ }
+ }
+ return mcplist;
+ }
+
+ private HelicalTrackHit makeDigi3DHit(SiTrackerHit h) {
+
+ IDetectorElement de = h.getSensor();
+ int lyr = _ID.getLayer(de);
+ BarrelEndcapFlag be = _ID.getBarrelEndcapFlag(de);
+
+ HelicalTrackHit hit = new HelicalTrack3DHit(h.getPositionAsVector(),
+ h.getCovarianceAsMatrix(), h.getdEdx(), h.getTime(),
+ h.getRawHits(), _ID.getName(de), lyr, be);
+
+ for (MCParticle p : h.getMCParticles()) {
+ hit.addMCParticle(p);
+ }
+
+ return hit;
+
+ }
+
+ private HelicalTrackHit makeDigiAxialHit(SiTrackerHitStrip1D h) {
+
+ double z1 = h.getHitSegment().getEndPoint().z();
+ double z2 = h.getHitSegment().getStartPoint().z();
+ double zmin = Math.min(z1, z2);
+ double zmax = Math.max(z1, z2);
+ IDetectorElement de = h.getSensor();
+
+ HelicalTrackHit hit = new HelicalTrack2DHit(h.getPositionAsVector(),
+ h.getCovarianceAsMatrix(), h.getdEdx(), h.getTime(),
+ h.getRawHits(), _ID.getName(de), _ID.getLayer(de),
+ _ID.getBarrelEndcapFlag(de), zmin, zmax);
+
+ for (MCParticle p : h.getMCParticles()) {
+ hit.addMCParticle(p);
+ }
+ return hit;
+ }
+
+ private HelicalTrackStrip makeDigiStrip(SiTrackerHitStrip1D h) {
+
+ SiTrackerHitStrip1D local = h.getTransformedHit(CoordinateSystem.SENSOR);
+ SiTrackerHitStrip1D global = h.getTransformedHit(CoordinateSystem.GLOBAL);
+
+ ITransform3D trans = local.getLocalToGlobal();
+ Hep3Vector org = trans.transformed(_orgloc);
+ Hep3Vector u = global.getMeasuredCoordinate();
+ Hep3Vector v = global.getUnmeasuredCoordinate();
+
+ double umeas = local.getPosition()[0];
+ double vmin = VecOp.dot(local.getUnmeasuredCoordinate(), local.getHitSegment().getStartPoint());
+ double vmax = VecOp.dot(local.getUnmeasuredCoordinate(), local.getHitSegment().getEndPoint());
+ double du = Math.sqrt(local.getCovarianceAsMatrix().diagonal(0));
+
+ IDetectorElement de = h.getSensor();
+ String det = _ID.getName(de);
+ int lyr = _ID.getLayer(de);
+ BarrelEndcapFlag be = _ID.getBarrelEndcapFlag(de);
+
+ double dEdx = h.getdEdx();
+ double time = h.getTime();
+ List<RawTrackerHit> rawhits = h.getRawHits();
+ HelicalTrackStrip strip = new HelicalTrackStrip(org, u, v, umeas, du,
+ vmin, vmax, dEdx, time, rawhits, det, lyr, be);
+
+ for (MCParticle p : h.getMCParticles()) {
+ strip.addMCParticle(p);
+ }
+ return strip;
+ }
+
+ private String makeID(String detname, int lyr) {
+ return detname + lyr;
+ }
+}
\ No newline at end of file
hps-java/src/main/java/org/lcsim/HPSBase
diff -u -r1.1 -r1.2
--- OccupancyDriver.java 10 Mar 2011 22:53:00 -0000 1.1
+++ OccupancyDriver.java 10 Mar 2011 23:17:49 -0000 1.2
@@ -4,13 +4,9 @@
*/
package org.lcsim.HPSBase;
-import org.lcsim.HPSTestv1.*;
import java.io.IOException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
import hep.aida.IHistogramFactory;
import hep.aida.IProfile1D;
-import hep.physics.vec.BasicHep3Vector;
import hep.physics.vec.Hep3Vector;
import java.util.ArrayList;
hps-java/src/main/java/org/lcsim/HPSBase
diff -u -r1.1 -r1.2
--- MultiTrackReco.java 10 Mar 2011 22:52:59 -0000 1.1
+++ MultiTrackReco.java 10 Mar 2011 23:17:49 -0000 1.2
@@ -3,7 +3,6 @@
*/
package org.lcsim.HPSBase;
-import org.lcsim.HPSBase.*;
import java.io.File;
import java.util.List;
@@ -23,11 +22,11 @@
public MultiTrackReco(String strategyPrefix,double bField, String sAxialfile, String sFinalfile, String sLongLived, List<int[]> stereoPairs, List<Integer> passLayers) {
// Digitization and hit making driver for planar sensors
- TrackerHitDriver_DarkPhoton thd = new TrackerHitDriver_DarkPhoton();
+ HPSTrackerHitDriver thd = new HPSTrackerHitDriver();
add(thd);
- DarkForcesHitDriver hitdriver = new DarkForcesHitDriver();
- hitdriver.addCollection(((TrackerHitDriver_DarkPhoton) thd).getStripHits1DName());
+ HPSHelicalTrackHitDriver hitdriver = new HPSHelicalTrackHitDriver();
+ hitdriver.addCollection(((HPSTrackerHitDriver) thd).getStripHits1DName());
hitdriver.OutputCollection("AxialTrackHits");
hitdriver.HitRelationName("AxialTrackHitRelations");
hitdriver.MCRelationName("AxialTrackMCRelations");
@@ -56,8 +55,8 @@
}
- DarkForcesHitDriver hthdriver = new DarkForcesHitDriver();
- hthdriver.addCollection(((TrackerHitDriver_DarkPhoton) thd).getStripHits1DName());
+ HPSHelicalTrackHitDriver hthdriver = new HPSHelicalTrackHitDriver();
+ hthdriver.addCollection(((HPSTrackerHitDriver) thd).getStripHits1DName());
hthdriver.OutputCollection("HelicalTrackHits");
hthdriver.HitRelationName("HelicalTrackHitRelations");
hthdriver.MCRelationName("HelicalTrackMCRelations");
hps-java/src/main/java/org/lcsim/HPSBase
diff -u -r1.1 -r1.2
--- ReReconstructionDriver.java 10 Mar 2011 22:53:00 -0000 1.1
+++ ReReconstructionDriver.java 10 Mar 2011 23:17:49 -0000 1.2
@@ -3,7 +3,6 @@
*/
package org.lcsim.HPSBase;
-import org.lcsim.HPSTestv1.*;
import java.util.ArrayList;
import java.util.List;
hps-java/src/main/java/org/lcsim/HPSBase
diff -u -r1.1 -r1.2
--- SiTrackerFixedTargetSensorSetup.java 10 Mar 2011 22:52:59 -0000 1.1
+++ SiTrackerFixedTargetSensorSetup.java 10 Mar 2011 23:17:50 -0000 1.2
@@ -1,6 +1,5 @@
package org.lcsim.HPSBase;
-import org.lcsim.HPSTestv1.*;
import hep.physics.matrix.BasicMatrix;
import hep.physics.vec.BasicHep3Vector;
import hep.physics.vec.VecOp;
hps-java/src/main/java/org/lcsim/HPSBase
diff -u -r1.1 -r1.2
--- MakeSensorsDriver.java 10 Mar 2011 22:53:00 -0000 1.1
+++ MakeSensorsDriver.java 10 Mar 2011 23:17:50 -0000 1.2
@@ -4,7 +4,6 @@
*/
package org.lcsim.HPSBase;
-import org.lcsim.HPSTestv1.*;
import org.lcsim.util.Driver;
/**
hps-java/src/main/java/org/lcsim/HPSBase
diff -u -r1.1 -r1.2
--- StripHitsOnTrack.java 10 Mar 2011 22:53:00 -0000 1.1
+++ StripHitsOnTrack.java 10 Mar 2011 23:17:50 -0000 1.2
@@ -3,7 +3,6 @@
*/
package org.lcsim.HPSBase;
-import org.lcsim.HPSTestv1.*;
import java.util.ArrayList;
import java.util.List;
hps-java/src/main/java/org/lcsim/HPSBase
diff -N TrackerHitDriver_DarkPhoton.java
--- TrackerHitDriver_DarkPhoton.java 10 Mar 2011 22:53:00 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,244 +0,0 @@
-/*
- * TrackerHitDriver Class
- *
- */
-package org.lcsim.HPSBase;
-
-import org.lcsim.HPSTestv1.*;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.lcsim.detector.IDetectorElement;
-import org.lcsim.detector.tracker.silicon.SiSensor;
-import org.lcsim.detector.tracker.silicon.SiTrackerModule;
-import org.lcsim.event.EventHeader;
-import org.lcsim.event.RawTrackerHit;
-import org.lcsim.geometry.Detector;
-import org.lcsim.recon.tracking.digitization.sisim.CDFSiSensorSim;
-import org.lcsim.recon.tracking.digitization.sisim.ClusteringAlgorithm;
-import org.lcsim.recon.tracking.digitization.sisim.BasicReadoutChip;
-import org.lcsim.recon.tracking.digitization.sisim.NearestNeighbor;
-import org.lcsim.recon.tracking.digitization.sisim.NearestNeighborRMS;
-import org.lcsim.recon.tracking.digitization.sisim.PixelHitMaker;
-import org.lcsim.recon.tracking.digitization.sisim.RawTrackerHitMaker;
-import org.lcsim.recon.tracking.digitization.sisim.SiDigitizer;
-import org.lcsim.recon.tracking.digitization.sisim.SiSensorSim;
-import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHit;
-import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitPixel;
-import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
-import org.lcsim.recon.tracking.digitization.sisim.StripHitMaker;
-import org.lcsim.recon.tracking.digitization.sisim.config.SimTrackerHitReadoutDriver;
-import org.lcsim.util.Driver;
-import org.lcsim.util.lcio.LCIOConstants;
-
-/**
- *
- * @author tknelson
- */
-public class TrackerHitDriver_DarkPhoton extends Driver {
-
- List<String> _readouts = new ArrayList<String>();
- List<String> _process_paths = new ArrayList<String>();
- List<IDetectorElement> _process_de = new ArrayList<IDetectorElement>();
- Set<SiSensor> _process_sensors = new HashSet<SiSensor>();
- Set<SiTrackerModule> _process_modules = new HashSet<SiTrackerModule>();
- SiDigitizer _strip_digitizer;
- SiDigitizer _pixel_digitizer;
- StripHitMaker _strip_clusterer;
- PixelHitMaker _pixel_clusterer;
- String _digitizer_name;
- int _nev = 0;
- int _ngc = 0;
-
- /**
- * Creates a new instance of TrackerHitDriver
- */
- public TrackerHitDriver_DarkPhoton() {
-
- // Instantiate the sensor simulation classes and set the thresholds
-// SiSensorSim strip_simulation = new CDFSiSensorSim();
- CDFSiSensorSim strip_simulation = new CDFSiSensorSim();
-
- // Instantiate the readout chips and set the noise parameters
- BasicReadoutChip strip_readout = new BasicReadoutChip();
-// ABCD -- Pristine
-/*
- strip_readout.setNoiseIntercept(600.);
- strip_readout.setNoiseSlope(65.);
- strip_readout.setNoiseThreshold(4.);
- strip_readout.setNeighborThreshold(4.);
- strip_readout.setNbits(1);
- strip_readout.setDynamicRange(10);
- */
- // APV25 -- Pristine
-
- strip_readout.setNoiseIntercept(270.);
- strip_readout.setNoiseSlope(36.);
- strip_readout.setNoiseThreshold(4.);
- strip_readout.setNeighborThreshold(4.);
- strip_readout.setNbits(10);
- strip_readout.setDynamicRange(40);
-
- //set trapping to 0.2 to simulate radiation damage.
-// strip_simulation.setTrapping(0.2);
-// strip_simulation.setTrapping(0.12);
-
- // Instantiate the digitizer that produces the raw hits
- _strip_digitizer = new RawTrackerHitMaker(strip_simulation, strip_readout);
-
- _digitizer_name = _strip_digitizer.getName();
-
- // Instantiate a nearest neighbor clustering algorithm for the strips
-// NearestNeighbor strip_clustering = new NearestNeighbor();
-// strip_clustering.setSeedThreshold(4.);
-// strip_clustering.setNeighborThreshold(4.);
-
- NearestNeighborRMS strip_clustering = new NearestNeighborRMS();
- strip_clustering.setSeedThreshold(4.);
- strip_clustering.setNeighborThreshold(3.);
- strip_clustering.setClusterThreshold(4.);
-
- // Instantiate the clusterers and set hit-making parameters
- _strip_clusterer = new StripHitMaker(strip_simulation, strip_readout, strip_clustering);
- _strip_clusterer.setMaxClusterSize(10);
- _strip_clusterer.setCentralStripAveragingThreshold(4);
- /*
- _strip_clusterer.SetOneClusterErr(1 / Math.sqrt(12.));
- _strip_clusterer.SetTwoClusterErr(1 / 5.0);
- _strip_clusterer.SetThreeClusterErr(1 / 3.0);
- _strip_clusterer.SetFourClusterErr(1 / 2.0);
- _strip_clusterer.SetFiveClusterErr(1 / 1.0);
- */
- double multiplier = 1.0;
- _strip_clusterer.SetOneClusterErr(multiplier / Math.sqrt(12.));
- _strip_clusterer.SetTwoClusterErr(multiplier / 5.0);
- _strip_clusterer.SetThreeClusterErr(multiplier / 3.0);
- _strip_clusterer.SetFourClusterErr(multiplier / 2.0);
- _strip_clusterer.SetFiveClusterErr(multiplier / 1.0);
-
-
- // Specify the readouts to process
- _readouts.add("TrackerHits");
- // Specify the detectors to process
- _process_paths.add("Tracker");
- }
-
- /**
- * Initialize whenever we have a new detector
- *
- * @param detector
- */
- public void detectorChanged(Detector detector) {
- System.out.println(detector.getName());
- super.detectorChanged(detector);
-
- // Process detectors specified by path, otherwise process entire detector
- IDetectorElement detector_de = detector.getDetectorElement();
- System.out.println("detector_de Name =" + detector_de.getName());
- for (String de_path : _process_paths)
- _process_de.add(detector_de.findDetectorElement(de_path));
-
- if (_process_de.size() == 0)
- _process_de.add(detector_de);
-
- for (IDetectorElement detector_element : _process_de) {
- _process_sensors.addAll(detector_element.findDescendants(SiSensor.class));
- _process_modules.addAll(detector_element.findDescendants(SiTrackerModule.class));
- }
-
- }
-
- /**
- * Setup readouts
- */
- public void startOfData() {
- // If readouts not already set, set them up
- if (_readouts.size() != 0) {
- System.out.println("Adding SimTrackerHitIdentifierReadoutDriver with readouts: " + _readouts);
- super.add(new SimTrackerHitReadoutDriver(_readouts));
- }
-
- super.startOfData();
- _readouts.clear();
- _nev = 0;
- _ngc = 0;
- }
-
- /**
- * Main digitization driver. Creates raw hits, forms clusters, and makes
- * tracker hits using the sisim package.
- *
- * @param event
- */
- public void process(EventHeader event) {
- super.process(event);
-
- // Print out the event number
-
- _nev++;
- _ngc++;
- if (_ngc == 100) {
- System.out.println("TrackerHitDriver processing event " + _nev);
- System.gc();
- _ngc = 0;
- }
-
-
- // Lists of hits
- List<RawTrackerHit> raw_hits = new ArrayList<RawTrackerHit>();
- List<SiTrackerHit> hits_strip1D = new ArrayList<SiTrackerHit>();
- List<SiTrackerHit> hits_pixel = new ArrayList<SiTrackerHit>();
-
- for (SiSensor sensor : _process_sensors) {
-
- if (sensor.hasStrips()) {
- raw_hits.addAll(_strip_digitizer.makeHits(sensor));
- hits_strip1D.addAll(_strip_clusterer.makeHits(sensor));
-
- }
-
-
- if (sensor.hasPixels()) {
- raw_hits.addAll(_pixel_digitizer.makeHits(sensor));
- hits_pixel.addAll(_pixel_clusterer.makeHits(sensor));
- }
-
- }
-
-// int flag = (1 << LCIOConstants.RTHBIT_HITS | 1 << LCIOConstants.TRAWBIT_ID1); //correct flag for persistence
- int flag=0;
- event.put(getRawHitsName(), raw_hits, RawTrackerHit.class, flag, toString());
- event.put(getStripHits1DName(), hits_strip1D, SiTrackerHitStrip1D.class, 0, toString());
-// event.put(getPixelHitsName(), hits_pixel, SiTrackerHitPixel.class, 0, toString());
-
- }
-
- /**
- * Return the name of the raw hits collection
- *
- * @return name of raw hits collection
- */
- public String getRawHitsName() {
- return _digitizer_name + "_RawTrackerHits";
- }
-
- /**
- * Return the name of the strip hits collection
- *
- * @return name of strip hits collection
- */
- public String getStripHits1DName() {
- return _strip_clusterer.getName() + "_SiTrackerHitStrip1D";
- }
-
- /**
- * Return the name of the pixel hits collection
- *
- * @return name of pixel hits collection
- */
- public String getPixelHitsName() {
- return _pixel_clusterer.getName() + "_SiTrackerHitPixel";
- }
-}
\ No newline at end of file
hps-java/src/main/java/org/lcsim/HPSBase
diff -N DarkForcesHitDriver.java
--- DarkForcesHitDriver.java 10 Mar 2011 22:52:59 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,324 +0,0 @@
-/*
- * DarkForcesHitDriver.java
- *
- * Created on January 4, 2010
- *
- */
-package org.lcsim.HPSBase;
-
-import org.lcsim.HPSTestv1.*;
-import hep.physics.vec.BasicHep3Vector;
-import hep.physics.vec.Hep3Vector;
-import hep.physics.vec.VecOp;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.lcsim.detector.IDetectorElement;
-import org.lcsim.detector.ITransform3D;
-import org.lcsim.digisim.MyLCRelation;
-import org.lcsim.event.EventHeader;
-import org.lcsim.event.LCRelation;
-import org.lcsim.event.MCParticle;
-import org.lcsim.event.RawTrackerHit;
-import org.lcsim.fit.helicaltrack.HelicalTrack2DHit;
-import org.lcsim.fit.helicaltrack.HelicalTrack3DHit;
-import org.lcsim.fit.helicaltrack.HelicalTrackCross;
-import org.lcsim.fit.helicaltrack.HelicalTrackHit;
-import org.lcsim.fit.helicaltrack.HelicalTrackStrip;
-import org.lcsim.fit.helicaltrack.HitIdentifier;
-import org.lcsim.fit.helicaltrack.StereoHitMaker;
-import org.lcsim.geometry.subdetector.BarrelEndcapFlag;
-import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHit;
-import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
-import org.lcsim.recon.tracking.digitization.sisim.TrackerHitType.CoordinateSystem;
-import org.lcsim.recon.tracking.vsegment.hit.DigiTrackerHit;
-import org.lcsim.recon.tracking.vsegment.hit.TrackerCluster;
-import org.lcsim.util.Driver;
-
-/**
- * Create the appropriate HelicalTrackHits for the specified TrackerHit
- * collections. The resulting HelicalTrackHits encapsulate the information
- * needed to perform a helical track hit for either a segmented strip
- * detector, a pixel detector, or cross hits from a stereo detector.
- *
- * This driver was developed for the Dark Forces silicon tracker, where
- * digitized hits are in either axial or stereo layers. The pairs of layers
- * to be used in forming stereo hits can be specified using the setStereoPairs
- * method.
- *
- * The list of hit collections to be converted must be specified
- * before the process method is executed.
- *
- * @author Richard Partridge
- * @version 1.0
- */
-public class DarkForcesHitDriver extends Driver {
-
-// private StereoHitMaker _crosser = new StereoHitMaker(2., 10.);
- private StereoHitMaker _crosser = new StereoHitMaker(0.0, 10.);
- private HitIdentifier _ID = new HitIdentifier();
- private String _outname = "HelicalTrackHits";
- private String _hitrelname = "HelicalTrackHitRelations";
- private String _mcrelname = "HelicalTrackMCRelations";
- private List<String> _colnames = new ArrayList<String>();
- private Map<String, String> _stereomap = new HashMap<String, String>();
- private Hep3Vector _orgloc = new BasicHep3Vector(0., 0., 0.);
- private double _eps = 1.0e-6;
-
- /** Creates a new instance of HelicalTrackHitDriver */
- public DarkForcesHitDriver() {
- }
-
- /**
- * Create the HelicalTrackHits for the specified hit collections.
- * @param event EventHeader of the event to be processed
- */
-
- public void process(EventHeader event) {
- super.process(event);
-
- // Initialize the list of HelicalTrackHits
- List<HelicalTrackHit> helhits = new ArrayList<HelicalTrackHit>();
-
- // Create a List of LCRelations to relate HelicalTrackHits to the original hits
- List<LCRelation> hitrelations = new ArrayList<LCRelation>();
-
- for (String _colname : _colnames) {
-
- // Get the list of SiTrackerHits for this collection
- List<SiTrackerHit> hitlist = (List<SiTrackerHit>) event.get(_colname);
-
- // Create collections for strip hits by layer and hit cross references
- Map<String, List<HelicalTrackStrip>> striplistmap = new HashMap<String, List<HelicalTrackStrip>>();
- Map<HelicalTrackStrip, SiTrackerHitStrip1D> stripmap = new HashMap<HelicalTrackStrip, SiTrackerHitStrip1D>();
-
- // Loop over the SiTrackerHits in this collection
- for (SiTrackerHit hit : hitlist) {
-
- // Check if we have a 1D strip hit
- if (hit instanceof SiTrackerHitStrip1D) {
-
- // Cast the hit as a 1D strip hit and find the identifier for the detector/layer combo
- SiTrackerHitStrip1D h = (SiTrackerHitStrip1D) hit;
- IDetectorElement de = h.getSensor();
- String id = makeID(_ID.getName(de), _ID.getLayer(de));
-
- // Check if hit is on a stereo pair layer
- if (_stereomap.containsKey(id) || _stereomap.containsValue(id)) {
-
- // Create a HelicalTrackStrip for this hit
- HelicalTrackStrip strip = makeDigiStrip(h);
-
- // Get the list of strips for this layer - create a new list if one doesn't already exist
- List<HelicalTrackStrip> lyrhits = striplistmap.get(id);
- if (lyrhits == null) {
- lyrhits = new ArrayList<HelicalTrackStrip>();
- striplistmap.put(id, lyrhits);
- }
-
- // Add the strip to the list of strips on this sensor
- lyrhits.add(strip);
-
- // Map a reference back to the hit needed to create the stereo hit LC relations
- stripmap.put(strip, h);
-
- } else {
-
- // If not a stereo hit, create an axial strip hit and the corresponding LC Relation
- HelicalTrackHit dah = makeDigiAxialHit(h);
- helhits.add(dah);
- hitrelations.add(new MyLCRelation(dah, hit));
- }
-
- } else {
-
- // If not a 1D strip hit, make a pixel hit
- HelicalTrackHit hit3d = makeDigi3DHit(hit);
- helhits.add(hit3d);
- hitrelations.add(new MyLCRelation(hit3d, hit));
- }
- }
-
- // Now create the stereo hits
- // Create a list of stereo hits
- List<HelicalTrackCross> stereohits = new ArrayList<HelicalTrackCross>();
-
- // Loop over the stereo layer pairs
- for (String id1 : _stereomap.keySet()) {
-
- // Get the second layer
- String id2 = _stereomap.get(id1);
-
- // Form the stereo hits and add them to our hit list
- stereohits.addAll(_crosser.MakeHits(striplistmap.get(id1), striplistmap.get(id2)));
- }
-
- for (HelicalTrackCross htc : stereohits) {
- double ypos = htc.x();
- double zpos = htc.z();
- List<HelicalTrackStrip> htstrips = htc.getStrips();
- for (HelicalTrackStrip hts : htstrips) {
- }
- }
-
-
- // Add the stereo hits to our list of HelicalTrackHits
- helhits.addAll(stereohits);
-
- //add LCRelation for strip hits
- for (HelicalTrackCross cross : stereohits) {
- for (HelicalTrackStrip strip : cross.getStrips()) {
- hitrelations.add(new MyLCRelation(cross, stripmap.get(strip)));
- }
- }
- }
-
- // Create the LCRelations between HelicalTrackHits and MC particles
- List<LCRelation> mcrelations = new ArrayList<LCRelation>();
- for (HelicalTrackHit hit : helhits) {
- for (MCParticle mcp : hit.getMCParticles()) {
- mcrelations.add(new MyLCRelation(hit, mcp));
- }
- }
-
-
- // Put the HelicalTrackHits back into the event
- event.put(_outname, helhits, HelicalTrackHit.class, 0);
- event.put(_hitrelname, hitrelations, LCRelation.class, 0);
- event.put(_mcrelname, mcrelations, LCRelation.class, 0);
- return;
- }
-
- /**
- * Name of the HelicalTrackHit collection to be put back in the event.
- * @param outname Name to use for the HelicalTrackHit collection
- */
- public void addCollection(String colname) {
- _colnames.add(colname);
- }
-
- public void OutputCollection(String outname) {
- _outname = outname;
- return;
- }
-
- public void setOutputCollectionName(String outname) {
- _outname = outname;
- return;
- }
-
- public void HitRelationName(String hitrelname) {
- _hitrelname = hitrelname;
- return;
- }
-
- public void MCRelationName(String mcrelname) {
- _mcrelname = mcrelname;
- return;
- }
-
- public void setMaxSeperation(double maxsep) {
- _crosser.setMaxSeparation(maxsep);
- return;
- }
-
- public void setTolerance(double tolerance) {
- _crosser.setTolerance(tolerance);
- return;
- }
-
- public void setStereoPair(String detname, int lyr1, int lyr2) {
- _stereomap.put(makeID(detname, lyr1), makeID(detname, lyr2));
- }
-
- private List<MCParticle> getMCParticles(TrackerCluster cluster) {
- List<MCParticle> mcplist = new ArrayList<MCParticle>();
- for (DigiTrackerHit dhit : cluster.getDigiHits()) {
- // Get the elemental hits - not sure what the dif is...
- for (DigiTrackerHit dhit2 : dhit.getElementalHits()) {
- // Get the MCParticle and add it to the hit
- MCParticle mcp = dhit2.getMCParticle();
- if (mcp != null) {
- mcplist.add(mcp);
- }
- }
- }
- return mcplist;
- }
-
- private HelicalTrackHit makeDigi3DHit(SiTrackerHit h) {
-
- IDetectorElement de = h.getSensor();
- int lyr = _ID.getLayer(de);
- BarrelEndcapFlag be = _ID.getBarrelEndcapFlag(de);
-
- HelicalTrackHit hit = new HelicalTrack3DHit(h.getPositionAsVector(),
- h.getCovarianceAsMatrix(), h.getdEdx(), h.getTime(),
- h.getRawHits(), _ID.getName(de), lyr, be);
-
- for (MCParticle p : h.getMCParticles()) {
- hit.addMCParticle(p);
- }
-
- return hit;
-
- }
-
- private HelicalTrackHit makeDigiAxialHit(SiTrackerHitStrip1D h) {
-
- double z1 = h.getHitSegment().getEndPoint().z();
- double z2 = h.getHitSegment().getStartPoint().z();
- double zmin = Math.min(z1, z2);
- double zmax = Math.max(z1, z2);
- IDetectorElement de = h.getSensor();
-
- HelicalTrackHit hit = new HelicalTrack2DHit(h.getPositionAsVector(),
- h.getCovarianceAsMatrix(), h.getdEdx(), h.getTime(),
- h.getRawHits(), _ID.getName(de), _ID.getLayer(de),
- _ID.getBarrelEndcapFlag(de), zmin, zmax);
-
- for (MCParticle p : h.getMCParticles()) {
- hit.addMCParticle(p);
- }
- return hit;
- }
-
- private HelicalTrackStrip makeDigiStrip(SiTrackerHitStrip1D h) {
-
- SiTrackerHitStrip1D local = h.getTransformedHit(CoordinateSystem.SENSOR);
- SiTrackerHitStrip1D global = h.getTransformedHit(CoordinateSystem.GLOBAL);
-
- ITransform3D trans = local.getLocalToGlobal();
- Hep3Vector org = trans.transformed(_orgloc);
- Hep3Vector u = global.getMeasuredCoordinate();
- Hep3Vector v = global.getUnmeasuredCoordinate();
-
- double umeas = local.getPosition()[0];
- double vmin = VecOp.dot(local.getUnmeasuredCoordinate(), local.getHitSegment().getStartPoint());
- double vmax = VecOp.dot(local.getUnmeasuredCoordinate(), local.getHitSegment().getEndPoint());
- double du = Math.sqrt(local.getCovarianceAsMatrix().diagonal(0));
-
- IDetectorElement de = h.getSensor();
- String det = _ID.getName(de);
- int lyr = _ID.getLayer(de);
- BarrelEndcapFlag be = _ID.getBarrelEndcapFlag(de);
-
- double dEdx = h.getdEdx();
- double time = h.getTime();
- List<RawTrackerHit> rawhits = h.getRawHits();
- HelicalTrackStrip strip = new HelicalTrackStrip(org, u, v, umeas, du,
- vmin, vmax, dEdx, time, rawhits, det, lyr, be);
-
- for (MCParticle p : h.getMCParticles()) {
- strip.addMCParticle(p);
- }
- return strip;
- }
-
- private String makeID(String detname, int lyr) {
- return detname + lyr;
- }
-}
\ No newline at end of file
hps-java/src/main/java/org/lcsim/HPSBase
diff -N DarkPhotonTrackHitDriver.java
--- DarkPhotonTrackHitDriver.java 10 Mar 2011 22:53:00 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,573 +0,0 @@
-/*
- * HelicalTrackHitDriver.java
- *
- * Created on November 30, 2007, 3:50 PM
- *
- */
-
-package org.lcsim.HPSBase;
-
-import org.lcsim.HPSTestv1.*;
-import hep.physics.matrix.SymmetricMatrix;
-import hep.physics.vec.BasicHep3Vector;
-import hep.physics.vec.Hep3Vector;
-import hep.physics.vec.VecOp;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.lcsim.detector.IDetectorElement;
-import org.lcsim.detector.ITransform3D;
-import org.lcsim.detector.tracker.silicon.SiSensor;
-import org.lcsim.detector.tracker.silicon.SiTrackerModule;
-import org.lcsim.digisim.MyLCRelation;
-import org.lcsim.event.EventHeader;
-import org.lcsim.event.LCRelation;
-import org.lcsim.event.MCParticle;
-import org.lcsim.event.RawTrackerHit;
-import org.lcsim.event.SimTrackerHit;
-import org.lcsim.event.TrackerHit;
-import org.lcsim.event.base.BaseTrackerHitMC;
-import org.lcsim.fit.helicaltrack.HelicalTrack2DHit;
-import org.lcsim.fit.helicaltrack.HelicalTrack3DHit;
-import org.lcsim.fit.helicaltrack.HelicalTrackCross;
-import org.lcsim.fit.helicaltrack.HelicalTrackHit;
-import org.lcsim.fit.helicaltrack.HelicalTrackStrip;
-import org.lcsim.fit.helicaltrack.HitIdentifier;
-import org.lcsim.fit.helicaltrack.HitUtils;
-import org.lcsim.fit.helicaltrack.StereoHitMaker;
-import org.lcsim.geometry.subdetector.BarrelEndcapFlag;
-import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHit;
-import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
-import org.lcsim.recon.tracking.digitization.sisim.TrackerHitType.CoordinateSystem;
-import org.lcsim.recon.tracking.vsegment.geom.SegmentationManager;
-import org.lcsim.recon.tracking.vsegment.geom.Sensor;
-import org.lcsim.recon.tracking.vsegment.geom.SensorType;
-import org.lcsim.recon.tracking.vsegment.geom.sensortypes.Cylinder;
-import org.lcsim.recon.tracking.vsegment.hit.DigiTrackerHit;
-import org.lcsim.recon.tracking.vsegment.hit.TrackerCluster;
-import org.lcsim.spacegeom.SpacePointVector;
-import org.lcsim.util.Driver;
-
-/**
- * Create the appropriate HelicalTrackHits for the specified TrackerHit
- * collections. The resulting HelicalTrackHits encapsulate the information
- * needed to perform a helical track hit for either a segmented strip
- * detector, a pixel detector, or cross hits from a stereo detector.
- *
- * At this time, this driver supports the virtual segmentation hits
- * produced by the packages in contrib.onoprien.tracking. Additional
- * coding needs to be done to support fully segmented detectors.
- *
- * The list of hit collections to be converted must be specified
- * before the process method is executed.
- *
- * Currently,
- * @author Richard Partridge
- * @version 1.0
- * modified for fixed target dark photon search on 1/4/09
- * @author Matt Graham
- */
-public class DarkPhotonTrackHitDriver extends Driver {
- /**
- * Type of hits to be converted/
- */
- public enum HitType {
- /**
- * Anything that uses BaseTrackerHit or BaseTrackerHitMC, for examples
- * hits created by PixSim or TrackerHitCheater
- */
- Base,
- /**
- * Virtual segmentation (OldTrackerHit) hits.
- */
- VirtualSegmentation,
- /**
- *
- * Digitized (SiTrackerHit)
- */
- Digitized
- }
- private StereoHitMaker _crosser = new StereoHitMaker(2., 10.);
- private HitIdentifier _ID = new HitIdentifier();
- private SegmentationManager _segman;
- private List<String> _vscol = new ArrayList<String>();
- private List<String> _bscol = new ArrayList<String>();
- private List<String> _digcol = new ArrayList<String>();
- private String _outname = "HelicalTrackHits";
- private String _hitrelname = "HelicalTrackHitRelations";
- private String _mcrelname = "HelicalTrackMCRelations";
- private Hep3Vector _uloc = new BasicHep3Vector(1., 0., 0.);
- private Hep3Vector _vloc = new BasicHep3Vector(0., 1., 0.);
- private Hep3Vector _zhat = new BasicHep3Vector(0., 0., 1.);
- private Hep3Vector _orgloc = new BasicHep3Vector(0., 0., 0.);
- private double _eps = 1.0e-6;
-
- /** Creates a new instance of HelicalTrackHitDriver */
- public DarkPhotonTrackHitDriver() {
- }
-
- /**
- * Create the HelicalTrackHits for the specified hit collections.
- * @param event EventHeader of the event to be processed
- */
-
- public void process(EventHeader event) {
- super.process(event);
-
- // Initialize the list of HelicalTrackHits and vector with local z direction
- List<HelicalTrackHit> helhits = new ArrayList<HelicalTrackHit>();
- Hep3Vector lz = new BasicHep3Vector(0., 0., 1.);
-
- // Create a List of LCRelations to relate HelicalTrackHits to the original hits
- List<LCRelation> hitrelations = new ArrayList<LCRelation>();
-
- for (String colname : _bscol) {
- List<TrackerHit> hitlist = (List<TrackerHit>) event.get(colname);
- for (TrackerHit hit : hitlist) {
- Hep3Vector pos = new BasicHep3Vector(hit.getPosition());
- SymmetricMatrix cov = new SymmetricMatrix(3, hit.getCovMatrix(), true);
- TrackerHit ohit = hit;
-
-// try {
- //create a BaseTrackerHitMC from a BaseTrackerHit if necessary
- if (!(hit instanceof BaseTrackerHitMC)){
- List<SimTrackerHit> thesehits = new ArrayList<SimTrackerHit>();
- List<RawTrackerHit> rawhits = (List<RawTrackerHit>)hit.getRawHits();
- for (RawTrackerHit raw : rawhits) {
- thesehits.addAll(raw.getSimTrackerHits());
- }
- hit = new BaseTrackerHitMC(hit.getPosition(), hit.getCovMatrix(),
- hit.getTime(), hit.getdEdx(), hit.getType(), thesehits);
- ((BaseTrackerHitMC)hit).addRawTrackerHits(rawhits);
-
- }
-
- SimTrackerHit simhit = ((BaseTrackerHitMC)hit).getSimHits().get(0);
- HelicalTrackHit hthit = new HelicalTrack3DHit(pos, cov, hit.getdEdx(), hit.getTime(), hit.getRawHits(),
- _ID.getName(simhit), _ID.getLayer(simhit), _ID.getBarrelEndcapFlag(simhit));
-// IDetectorElementContainer cont = DetectorElementStore.getInstance().find(simhit.getIdentifier());
-// if (cont.isEmpty()) {
-// throw new RuntimeException("Detector Container is empty!");
-// } else {
-// IDetectorElement de = cont.get(0);
-
- for (MCParticle p : ((BaseTrackerHitMC)hit).mcParticles()) hthit.addMCParticle(p);
- hitrelations.add(new MyLCRelation(hthit, ohit));
- helhits.add(hthit);
-// }
-//
-// } catch(Exception e) {
-// System.out.println("Warning, could not complete Identification for smeared hits. Reason: "+e.getMessage());
-// HelicalTrackHit hthit = new HelicalTrack3DHit(pos, cov, hit.getdEdx(), hit.getTime(),
-// hit.getRawHits(), "Unknown", 0, BarrelEndcapFlag.BARREL);
-// hitrelations.add(new MyLCRelation(hthit, ohit));
-// helhits.add(hthit);
-// }
- }
- }
-
- // Loop over the collections of hits with virtual segmentation
- for (String colname : _vscol) {
-
- // Get the segmentation manager if we haven't already done so
- if (_segman == null) _segman = (SegmentationManager) event.get("SegmentationManager");
-
- // Make a mapping between the stereo strips and corresponding hits
- Map<HelicalTrackStrip, org.lcsim.recon.tracking.vsegment.hit.TrackerHit> stripmap =
- new HashMap<HelicalTrackStrip, org.lcsim.recon.tracking.vsegment.hit.TrackerHit>();
-
- // Get the hit map that gives the list of hits on a particular sensor
- Map<Sensor, List<org.lcsim.recon.tracking.vsegment.hit.TrackerHit>> hitmap =
- (Map<Sensor, List<org.lcsim.recon.tracking.vsegment.hit.TrackerHit>>) event.get(colname);
-
- // Loop over sensors in the hit map
- for (Sensor sensor : hitmap.keySet()) {
- // Get a list of hits for this sensor and loop over the hits
- List<org.lcsim.recon.tracking.vsegment.hit.TrackerHit> sensorhits = hitmap.get(sensor);
- for (org.lcsim.recon.tracking.vsegment.hit.TrackerHit hit : sensorhits) {
- // Convert to an old tracker hit for reference
- ArrayList<TrackerCluster> parents = new ArrayList<TrackerCluster>(1);
- parents.add(hit.getCluster());
- // Check if we have a strip or pixel hit
- if (sensor.getType().getHitDimension() == 1) {
- // Strip hit - now check if this hit is part of a stereo pair
- if (_segman.getStereoPartners(sensor) == null) {
- // Isolated axial hit - convert it and add to the hit list
- HelicalTrackHit axialhit = MakeAxialHit(hit);
- if (axialhit != null) {
- hitrelations.add(new MyLCRelation(axialhit, hit));
- helhits.add(axialhit);
- }
- } else {
- // Stereo hit - convert it and add it to the list of stereo strips
- HelicalTrackStrip strip = MakeStrip(hit);
- stripmap.put(strip, hit);
- }
- } else {
- // Pixel hit - convert it and add to the hit list
- HelicalTrackHit pixelhit = MakePixelHit(hit);
- hitrelations.add(new MyLCRelation(pixelhit, hit));
- helhits.add(pixelhit);
- }
- }
- }
-
- // Make the stereo hits
- List<HelicalTrackStrip> striplist = new ArrayList<HelicalTrackStrip>(stripmap.keySet());
- List<HelicalTrackCross> stereohits = _crosser.MakeHits(striplist);
- for (HelicalTrackCross hit : stereohits) {
- for (HelicalTrackStrip strip : hit.getStrips()) {
- hitrelations.add(new MyLCRelation(hit, stripmap.get(strip)));
- }
- helhits.add(hit);
- }
- }
-
- // Loop over the collections of hits produced by the sisim digitization code
- for (String colname : _digcol) {
-
- // Get the list of SiTrackerHits for this collection
- List<SiTrackerHit> hitlist = (List<SiTrackerHit>) event.get(colname);
-
- // Create collections for modules, strip hits by sensor, and hit cross references
- Set<SiTrackerModule> modules = new HashSet<SiTrackerModule>();
- Map<SiSensor, List<HelicalTrackStrip>> sensormap = new HashMap<SiSensor, List<HelicalTrackStrip>>();
- Map<HelicalTrackStrip, SiTrackerHitStrip1D> stripmap = new HashMap<HelicalTrackStrip, SiTrackerHitStrip1D>();
-
- // Loop over the SiTrackerHits in this collection
- for (SiTrackerHit hit : hitlist) {
-
- if (hit instanceof SiTrackerHitStrip1D) {
- //determine if the hit is stereoed or not
- SiTrackerHitStrip1D h = (SiTrackerHitStrip1D) hit;
-
- // Get the sensor and parent modules
- SiSensor sensor = h.getSensor();
- SiTrackerModule m = (SiTrackerModule) sensor.getParent();
-
- // Check if we have a stereo hit (i.e., the module has 2 children)
- if (m.getChildren().size()==2) {
-
- // Add the module to the set of modules containing stereo hits
- modules.add(m);
-
- // Create a HelicalTrackStrip for this hit
- HelicalTrackStrip strip = makeDigiStrip(h);
-
- // Get the list of strips for this module - create a new list if one doesn't already exist
- List<HelicalTrackStrip> modhits = sensormap.get(sensor);
- if (modhits == null) {
- modhits = new ArrayList<HelicalTrackStrip>();
- sensormap.put(sensor, modhits);
- }
-
- // Add the strip to the list of strips on this sensor
- modhits.add(strip);
-
- // Map a reference back to the hit needed to create the stereo hit LC relations
- stripmap.put(strip, h);
-
- } else {
- //System.out.println("trying to make an axial hit???");
- HelicalTrackHit dah = makeDigiAxialHit(h);
- helhits.add(dah); //isolated hit
- hitrelations.add(new MyLCRelation(dah,hit));
- }
- }
- //for other types, make 3d hits
- else {
- HelicalTrackHit hit3d = makeDigi3DHit(hit);
- helhits.add(hit3d);
- hitrelations.add(new MyLCRelation(hit3d, hit));
- }
- }
- // Now create the stereo hits
- // Create a list of stereo hits
- List<HelicalTrackCross> stereohits = new ArrayList<HelicalTrackCross>();
-
- // Loop over the modules with hits
- for (SiTrackerModule m : modules) {
-
- // Make sure we have 2 sensors, and get the sensors for this module
- if (m.getChildren().size() != 2) continue;
- SiSensor sensor1 = (SiSensor) m.getChildren().get(0);
- SiSensor sensor2 = (SiSensor) m.getChildren().get(1);
-
- // Form the stereo hits and add them to our hit list
- stereohits.addAll(_crosser.MakeHits(sensormap.get(sensor1), sensormap.get(sensor2)));
- }
-
- helhits.addAll(stereohits);
-
- //add LCRelation for strip hits
- for (HelicalTrackCross cross : stereohits) {
- for (HelicalTrackStrip strip : cross.getStrips()) {
- hitrelations.add(new MyLCRelation(cross,stripmap.get(strip)));
- }
- }
-
- }
-
- // Create the LCRelations between HelicalTrackHits and MC particles
- List<LCRelation> mcrelations = new ArrayList<LCRelation>();
- for (HelicalTrackHit hit : helhits) {
- for (MCParticle mcp : hit.getMCParticles()) {
- mcrelations.add(new MyLCRelation(hit, mcp));
- }
- }
-
- // Put the HelicalTrackHits back into the event
- event.put(_outname, helhits, HelicalTrackHit.class, 0);
- event.put(_hitrelname, hitrelations, LCRelation.class, 0);
- event.put(_mcrelname, mcrelations, LCRelation.class, 0);
- return;
- }
-
- /**
- * Add a TrackerHit collection to be processed.
- * @param name Name of the hit collection
- * @param type Type of collection
- */
- public void addCollection(String name, HitType type) {
- if (type == HitType.VirtualSegmentation) {
- _vscol.add(name);
- } else if (type == HitType.Base) {
- _bscol.add(name);
- } else if (type == HitType.Digitized)
- _digcol.add(name);
- return;
- }
-
- public void setDigiCollectionName(String name)
- {
- _digcol.add(name);
- }
-
- public void setDigiCollectionNames(String names[])
- {
- _digcol.addAll(Arrays.asList(names));
- }
-
- public void setVirtualSegmentationCollectionName(String name)
- {
- _vscol.add(name);
- }
-
- public void setVirtualSegmentationCollectionNames(String names[])
- {
- _vscol.addAll(Arrays.asList(names));
- }
-
- public void setBaseCollectionName(String name)
- {
- _bscol.add(name);
- }
-
- public void setBaseCollectionNames(String names[])
- {
- _bscol.addAll(Arrays.asList(names));
- }
-
- /**
- * Name of the HelicalTrackHit collection to be put back in the event.
- * @param outname Name to use for the HelicalTrackHit collection
- */
- public void OutputCollection(String outname) {
- _outname = outname;
- return;
- }
-
- public void setOutputCollectionName(String outname) {
- _outname = outname;
- return;
- }
-
- public void HitRelationName(String hitrelname) {
- _hitrelname = hitrelname;
- return;
- }
-
- public void MCRelationName(String mcrelname) {
- _mcrelname = mcrelname;
- return;
- }
-
- public void setMaxSeperation(double maxsep) {
- _crosser.setMaxSeparation(maxsep);
- return;
- }
-
- public void setTolerance(double tolerance) {
- _crosser.setTolerance(tolerance);
- return;
- }
-
- private HelicalTrackHit MakeAxialHit(org.lcsim.recon.tracking.vsegment.hit.TrackerHit hit) {
- HelicalTrackStrip strip = MakeStrip(hit);
- if (VecOp.cross(strip.v(), _zhat).magnitude() > _eps) return null;
- double zmin = VecOp.add(HitUtils.StripCenter(strip), VecOp.mult(strip.vmin(), strip.v())).z();
- double zmax = VecOp.add(HitUtils.StripCenter(strip), VecOp.mult(strip.vmax(), strip.v())).z();
- HelicalTrackHit axialhit = new HelicalTrack2DHit(strip.origin(), HitUtils.StripCov(strip),
- strip.dEdx(), strip.time(), strip.rawhits(), strip.detector(), strip.layer(), strip.BarrelEndcapFlag(),
- zmin, zmax);
- List<MCParticle> mcplist = getMCParticles(hit.getCluster());
- for (MCParticle mcp : mcplist) {
- axialhit.addMCParticle(mcp);
- }
- return axialhit;
- }
-
- private HelicalTrackStrip MakeStrip(org.lcsim.recon.tracking.vsegment.hit.TrackerHit hit) {
- Hep3Vector u;
- Hep3Vector v;
- Hep3Vector org;
- double umeas;
- double du;
- double vmin;
- double vmax;
- Sensor s = hit.getSensor();
- SensorType stype = s.getType();
- if (stype instanceof Cylinder) {
- SpacePointVector seg = hit.getSegment();
- v = VecOp.unit(seg.getDirection());
- Hep3Vector r = new BasicHep3Vector(hit.getPosition().x(), hit.getPosition().y(), 0.0);
- u = VecOp.unit(VecOp.cross(v, r));
- umeas = 0.;
- du = r.magnitude() * Math.sqrt(hit.getLocalCovMatrix().diagonal(0));
- org = VecOp.mult(0.5, VecOp.add(seg.getStartPoint(), seg.getEndPoint()));
- vmax = seg.getDirection().magnitude() / 2.;
- vmin = -vmax;
- } else {
- org = s.localToGlobal(_orgloc);
- u = VecOp.sub(s.localToGlobal(_uloc), org);
- v = VecOp.sub(s.localToGlobal(_vloc), org);
- umeas = hit.getLocalPosition().x();
- du = Math.sqrt(hit.getLocalCovMatrix().diagonal(0));
- vmin = hit.getLocalSegment().getStartPoint().y();
- vmax = hit.getLocalSegment().getEndPoint().y();
- }
-
- double dEdx = hit.getSignal();
- double time = hit.getTime();
- IDetectorElement de = s.getDetectorElement();
- String det = _ID.getName(de);
- int lyr = _ID.getLayer(de);
- if (_segman.getStereoPartners(s) != null) lyr = lyr / 2;
- BarrelEndcapFlag beflag = _ID.getBarrelEndcapFlag(de);
-
- HelicalTrackStrip strip = new HelicalTrackStrip(org, u, v, umeas, du, vmin, vmax, dEdx, time, null,
- det, lyr, beflag);
- List<MCParticle> mcplist = getMCParticles(hit.getCluster());
- for (MCParticle mcp : mcplist) {
- strip.addMCParticle(mcp);
- }
- return strip;
- }
-
- private HelicalTrackHit MakePixelHit(org.lcsim.recon.tracking.vsegment.hit.TrackerHit hit) {
- IDetectorElement de = hit.getSensor().getDetectorElement();
- HelicalTrackHit pixel = new HelicalTrack3DHit(hit.getPosition(), hit.getCovMatrix(), hit.getSignal(),
- hit.getTime(), null, _ID.getName(de), _ID.getLayer(de), _ID.getBarrelEndcapFlag(de));
- List<MCParticle> mcplist = getMCParticles(hit.getCluster());
- for (MCParticle mcp : mcplist) {
- pixel.addMCParticle(mcp);
- }
-
- return pixel;
- }
-
- private List<MCParticle> getMCParticles(TrackerCluster cluster) {
- List<MCParticle> mcplist = new ArrayList<MCParticle>();
- for (DigiTrackerHit dhit : cluster.getDigiHits()) {
- // Get the elemental hits - not sure what the dif is...
- for (DigiTrackerHit dhit2 : dhit.getElementalHits()) {
- // Get the MCParticle and add it to the hit
- MCParticle mcp = dhit2.getMCParticle();
- if (mcp != null) mcplist.add(mcp);
- }
- }
- return mcplist;
- }
-
- private HelicalTrackHit makeDigi3DHit(SiTrackerHit h) {
-
- IDetectorElement de = h.getSensor();
- int lyr = _ID.getLayer(de);
- BarrelEndcapFlag be = _ID.getBarrelEndcapFlag(de);
-
- HelicalTrackHit hit = new HelicalTrack3DHit(h.getPositionAsVector(),
- h.getCovarianceAsMatrix(), h.getdEdx(), h.getTime(),
- h.getRawHits(), _ID.getName(de), lyr, be);
-
- for (MCParticle p : h.getMCParticles()) hit.addMCParticle(p);
-
- return hit;
-
- }
-
- private HelicalTrackHit makeDigiAxialHit(SiTrackerHitStrip1D h){
-
- double z1 = h.getHitSegment().getEndPoint().z();
- double z2 = h.getHitSegment().getStartPoint().z();
- double zmin = Math.min(z1,z2);
- double zmax = Math.max(z1,z2);
- IDetectorElement de = h.getSensor();
-
- HelicalTrackHit hit = new HelicalTrack2DHit(h.getPositionAsVector(),
- h.getCovarianceAsMatrix(), h.getdEdx(), h.getTime(),
- h.getRawHits(), _ID.getName(de), _ID.getLayer(de),
- _ID.getBarrelEndcapFlag(de), zmin, zmax);
-
- for (MCParticle p : h.getMCParticles()) hit.addMCParticle(p);
- return hit;
- }
-
-
- private HelicalTrackStrip makeDigiStrip(SiTrackerHitStrip1D h){
-
- SiTrackerHitStrip1D local = h.getTransformedHit(CoordinateSystem.SENSOR);
- SiTrackerHitStrip1D global = h.getTransformedHit(CoordinateSystem.GLOBAL);
-
- ITransform3D trans = local.getLocalToGlobal();
- Hep3Vector org = trans.transformed(_orgloc);
- Hep3Vector u = global.getMeasuredCoordinate();
- Hep3Vector v = global.getUnmeasuredCoordinate();
-// System.out.println("Strip hit origin x: "+org.x()+" y: "+org.y()+" z: "+org.z());
-// System.out.println("Strip hit measured x: "+u.x()+" y: "+u.y()+" z: "+u.z());
-// System.out.println("Strip hit unmeasured x: "+v.x()+" y: "+v.y()+" z: "+v.z());
-
- double umeas = local.getPosition()[0];
- double vmin = VecOp.dot(local.getUnmeasuredCoordinate(),local.getHitSegment().getStartPoint());
- double vmax = VecOp.dot(local.getUnmeasuredCoordinate(),local.getHitSegment().getEndPoint());
- double du = Math.sqrt(local.getCovarianceAsMatrix().diagonal(0));
-// System.out.println("umeas: "+umeas+" vmin: "+vmin+" vmax: "+vmax+" du: "+du);
-
- IDetectorElement de = h.getSensor();
- String det = _ID.getName(de);
- int lyr = _ID.getLayer(de);
- BarrelEndcapFlag be = _ID.getBarrelEndcapFlag(de);
-// System.out.println("Identifier: "+det+lyr+be);
-
- double dEdx = h.getdEdx();
- double time = h.getTime();
- List<RawTrackerHit> rawhits = h.getRawHits();
-// for (RawTrackerHit raw : rawhits) {
-// for (SimTrackerHit shit : raw.getSimTrackerHits()) {
-// System.out.println("Sim Hit x: "+shit.getPoint()[0]+
-// " y: "+shit.getPoint()[1]+" z: "+shit.getPoint()[2]);
-// }
-// }
- HelicalTrackStrip strip = new HelicalTrackStrip(org, u, v, umeas, du,
- vmin, vmax, dEdx, time, rawhits, det, lyr, be);
-
- for (MCParticle p : h.getMCParticles()) strip.addMCParticle(p);
- return strip;
- }
-
-}
hps-java/src/main/java/org/lcsim/HPSUsers/Example
diff -N HeavyPhotonLLDriver.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ HeavyPhotonLLDriver.java 10 Mar 2011 23:17:50 -0000 1.1
@@ -0,0 +1,145 @@
+/*
+ * DarkPhotonMainDriver class
+ */
+package org.lcsim.HPSUsers.Example;
+
+import java.util.List;
+import java.util.ArrayList;
+import org.lcsim.HPSBase.*;
+import org.lcsim.util.Driver;
+import org.lcsim.util.loop.LCIODriver;
+
+/**
+ * Driver for track reconstruction and analysis of sATLAS detector
+ *
+ * @author M. Graham and R. Partridge
+ */
+public final class HeavyPhotonLLDriver extends Driver {
+
+ //********************
+ // set pname to the detector you want to run...HPS1pt8 is the default test detector (uses strategy file 1.3)
+ // see "setPName" method for list
+ public String pName = "HPS1pt8";
+ JasAnalysisDriver jad;
+ FastTrackAnalysisDriver ftad;
+ List<int[]> pairs = new ArrayList();
+ List<Integer> passLayers = new ArrayList();
+ //// Change the prefix for your site
+ String strategyPrefix = "/nfs/sulky21/g.ec.u12/users/mgraham/AtlasUpgrade/hps-java/src/main/resources/";
+
+ ////////////////////////////////////////
+ // everything below will
+ // get overwritten by setPName
+ int nlayers = 9;
+ // bfield needs to be set because tracking doesn't
+ // seme to deal with fields in the negative
+ // z-direction well (need to fix this)
+ double bfield = 0.5;
+ String axialStrategy = "HPS-Test-1pt8.xml";
+ String finalStrategy = "HPS-Test-1pt8.xml";
+ String llStrategy = "HPS-Test-1pt8.xml";
+ public String outputFile = "foobar.slcio";
+ public String plotsFile = "myplots.aida";
+ public String outputTextName = "myevents.txt";
+ ///////////////
+ public HeavyPhotonLLDriver() {
+ add(new MakeSensorsDriver());
+
+ setPName(pName);
+
+ MultiTrackReco trd = new MultiTrackReco(strategyPrefix, bfield, axialStrategy, finalStrategy, llStrategy, pairs, passLayers);
+ add(trd);
+
+ jad = new JasAnalysisDriver(nlayers);
+ ftad = new FastTrackAnalysisDriver(nlayers);
+// add(ftad); //uncomment to run the fasttrackanalysisdriver (text file output)
+ add(jad);
+// uncomment this to look at occupancies
+// add(new OccupancyDriver());
+ }
+
+ public void setOutputFile(String outputFile) {
+ System.out.println("Will output events to " + outputFile);
+ add(new LCIODriver(outputFile));
+ }
+
+ public void setPlotsFile(String plotsFile) {
+ System.out.println("Will output plots to " + plotsFile);
+ jad.setOutputPlots(plotsFile);
+ }
+
+ public void setOutputTextName(String outputTextName) {
+ System.out.println("Will output selected events to " + outputTextName);
+ ftad.setOutputText(outputTextName);
+ }
+
+ public void setPName(String pName) {
+ System.out.println("Setting parameter set to " + pName);
+ pairs.clear();
+ if (pName.contentEquals("HPS3pt2")) {
+ bfield = 1.0;
+ nlayers = 12;
+ axialStrategy = "DarkPhoton-Axial-HPS3pt2.xml";
+ finalStrategy = "DarkPhoton-HPS3pt2.xml";
+ llStrategy = "DarkPhoton-HPS3pt2-LongLived.xml";
+
+ int[] p1 = {1, 2};
+ int[] p2 = {3, 4};
+ int[] p3 = {5, 6};
+ int[] p4 = {7, 8};
+ int[] p5 = {9, 10};
+ int[] p6 = {11, 12};
+ pairs.add(p1);
+ pairs.add(p2);
+ pairs.add(p3);
+ pairs.add(p4);
+ pairs.add(p5);
+ pairs.add(p6);
+ passLayers.add(11);
+ }
+ if (pName.contentEquals("HPS3pt4")) {
+ bfield = 0.5;
+ nlayers = 12;
+ axialStrategy = "DarkPhoton-Axial-HPS3pt2.xml";
+ finalStrategy = "DarkPhoton-HPS3pt2.xml";
+ llStrategy = "DarkPhoton-HPS3pt2-LongLived.xml";
+
+ int[] p1 = {1, 2};
+ int[] p2 = {3, 4};
+ int[] p3 = {5, 6};
+ int[] p4 = {7, 8};
+ int[] p5 = {9, 10};
+ int[] p6 = {11, 12};
+ pairs.add(p1);
+ pairs.add(p2);
+ pairs.add(p3);
+ pairs.add(p4);
+ pairs.add(p5);
+ pairs.add(p6);
+ passLayers.add(11);
+ }
+
+ if (pName.contentEquals("HPS1pt8")) {
+ nlayers = 10;
+ bfield = 0.5;
+
+ axialStrategy = "none"; // don't fit tracks axially first
+ finalStrategy = "HPS-Test-1pt3.xml";
+ llStrategy = "none";// don't fit tracks ignoring first plane
+
+ int[] p1 = {1, 2};
+ int[] p2 = {3, 4};
+ int[] p3 = {5, 6};
+ int[] p4 = {7, 8};
+ int[] p5 = {9, 10};
+
+ pairs.add(p1);
+ pairs.add(p2);
+ pairs.add(p3);
+ pairs.add(p4);
+ pairs.add(p5);
+// passLayers.add(11);
+ }
+
+ }
+}
hps-java/src/main/java/org/lcsim/HPSUsers/Example
diff -N DarkPhotonLLDriver.java
--- DarkPhotonLLDriver.java 10 Mar 2011 22:58:13 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,119 +0,0 @@
-/*
- * DarkPhotonMainDriver class
- */
-package org.lcsim.HPSUsers.Example;
-
-import java.util.List;
-import java.util.ArrayList;
-import org.lcsim.HPSBase.*;
-import org.lcsim.util.Driver;
-import org.lcsim.util.loop.LCIODriver;
-
-/**
- * Driver for track reconstruction and analysis of sATLAS detector
- *
- * @author M. Graham and R. Partridge
- */
-public final class DarkPhotonLLDriver extends Driver {
-
- //********************
- // set pname to the detector you want to run...HPS1pt8 is the default test detector (uses strategy file 1.3)
- // see "setPName" method for list
- public String pName = "HPS1pt8";
-
- JasAnalysisDriver jad;
- FastTrackAnalysisDriver ftad;
-
- List<int[]> pairs = new ArrayList();
- List<Integer> passLayers = new ArrayList();
-
- String strategyPrefix = "/nfs/sulky21/g.ec.u12/users/mgraham/AtlasUpgrade/hps-java/src/main/resources/";
-
- //these get overwritten by setPName
- int nlayers = 9;
- double bfield=0.5; //this needs to be set because trackign doesn't deal with fields in the negative z-direction well (need to fix this)
- String axialStrategy = "HPS-Test-1pt0.xml";
- String finalStrategy = "HPS-Test-1pt0.xml";
- String llStrategy = "HPS-Test-1pt0.xml";
- public String outputFile = "foobar.slcio";
- public String plotsFile = "myplots.aida";
- public String outputTextName = "myevents.txt";
-
- public DarkPhotonLLDriver() {
- add(new MakeSensorsDriver());
-
- setPName(pName);
-
- MultiTrackReco trd = new MultiTrackReco(strategyPrefix, bfield, axialStrategy, finalStrategy, llStrategy, pairs, passLayers);
- add(trd);
-
- jad = new JasAnalysisDriver(nlayers);
- ftad = new FastTrackAnalysisDriver(nlayers);
-// add(ftad); //uncomment to run the fasttrackanalysisdriver (text file output)
- add(jad);
-// uncomment this to look at occupancies
-// add(new OccupancyDriver());
- }
-
- public void setOutputFile(String outputFile) {
- System.out.println("Will output events to " + outputFile);
- add(new LCIODriver(outputFile));
- }
-
- public void setPlotsFile(String plotsFile) {
- System.out.println("Will output plots to " + plotsFile);
- jad.setOutputPlots(plotsFile);
- }
-
- public void setOutputTextName(String outputTextName) {
- System.out.println("Will output selected events to " + outputTextName);
- ftad.setOutputText(outputTextName);
- }
-
- public void setPName(String pName) {
- System.out.println("Setting parameter set to " + pName);
- pairs.clear();
- if (pName.contentEquals("HPS1pt0")) {
- nlayers = 8;
- bfield = 0.5;
-
- axialStrategy = "none";
- finalStrategy = "HPS-Test-1pt0.xml";
- llStrategy = "none";
-
- int[] p1 = {1, 2};
- int[] p2 = {3, 4};
- int[] p3 = {5, 6};
- int[] p4 = {7, 8};
-
- pairs.add(p1);
- pairs.add(p2);
- pairs.add(p3);
- pairs.add(p4);
-
- passLayers.add(11);
- }
- if (pName.contentEquals("HPS1pt8")) {
- nlayers = 10;
- bfield = 0.5;
-
- axialStrategy = "none"; // don't fit tracks axially first
- finalStrategy = "HPS-Test-1pt3.xml";
- llStrategy = "none";// don't fit tracks ignoring first plane
-
- int[] p1 = {1, 2};
- int[] p2 = {3, 4};
- int[] p3 = {5, 6};
- int[] p4 = {7, 8};
- int[] p5 = {9, 10};
-
- pairs.add(p1);
- pairs.add(p2);
- pairs.add(p3);
- pairs.add(p4);
- pairs.add(p5);
-// passLayers.add(11);
- }
-
- }
-}
CVSspam 0.2.8