LISTSERV mailing list manager LISTSERV 16.5

Help for HPS-SVN Archives


HPS-SVN Archives

HPS-SVN Archives


HPS-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

HPS-SVN Home

HPS-SVN Home

HPS-SVN  June 2016

HPS-SVN June 2016

Subject:

r4401 - in /java/trunk/tracking/src/main/java/org/hps/recon/tracking: MaterialSupervisor.java SeedTracker.java TrackerReconDriver.java

From:

[log in to unmask]

Reply-To:

Notification of commits to the hps svn repository <[log in to unmask]>

Date:

Fri, 10 Jun 2016 02:36:54 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (680 lines)

Author: [log in to unmask]
Date: Thu Jun  9 19:36:52 2016
New Revision: 4401

Log:
Allow subdetector name to be set in TrackerReconDriver and the classes it uses; apply code formatting

Modified:
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/MaterialSupervisor.java
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/SeedTracker.java
    java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java

Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/MaterialSupervisor.java
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/MaterialSupervisor.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/MaterialSupervisor.java	Thu Jun  9 19:36:52 2016
@@ -23,73 +23,75 @@
 import org.lcsim.geometry.Detector;
 
 /**
- * Material manager using the detector geometry.
- *
- * Uses a private class to set up detector volumes. This can probably make use
- * of the DetectorGeometry classes from lcsim instead for the model. Something
- * to consider in the future.
+ * Material manager using the detector geometry. Uses a private class to set up detector volumes. This can probably make
+ * use of the DetectorGeometry classes from lcsim instead for the model. Something to consider in the future.
  *
  * @author Per Hansson <[log in to unmask]>
  */
-public class MaterialSupervisor extends MaterialManager
-{
+public class MaterialSupervisor extends MaterialManager {
 
     private List<ScatteringDetectorVolume> _detectorVolumes = new ArrayList<ScatteringDetectorVolume>();
-
-    public MaterialSupervisor()
-    {
+    private String subdetectorName = "Tracker";
+
+    public MaterialSupervisor() {
         super();
         this._includeMS = true;
-    }
-
-    public MaterialSupervisor(boolean includeMS)
-    {
+    }    
+
+    public MaterialSupervisor(boolean includeMS) {
         super(includeMS);
     }
 
     @Override
-    public void setDebug(boolean debug)
-    {
+    public void setDebug(boolean debug) {
         super.setDebug(debug);
     }
-
-    public List<ScatteringDetectorVolume> getMaterialVolumes()
-    {
+    
+    public void setSubdetectorName(String subdetectorName) {
+        this.subdetectorName = subdetectorName;
+    }
+
+    public List<ScatteringDetectorVolume> getMaterialVolumes() {
         return _detectorVolumes;
     }
 
     @Override
-    public void buildModel(Detector det)
-    {
+    public void buildModel(Detector det) {
         boolean local_debug = false;
         // super.buildModel(det);
         if (DEBUG || local_debug) {
-            System.out.printf("%s: ###########################################################\n", this.getClass().getSimpleName());
+            System.out.printf("%s: ###########################################################\n", this.getClass()
+                    .getSimpleName());
             System.out.printf("%s: Build detector model\n", this.getClass().getSimpleName());
         }
-        List<SiSensor> sensors = det.getSubdetector("Tracker").getDetectorElement().findDescendants(SiSensor.class);
-        // List<SiTrackerModule> modules =
-        // det.getDetectorElement().findDescendants(SiTrackerModule.class);
+        
+        List<SiSensor> sensors = det.getSubdetector(subdetectorName).getDetectorElement()
+                .findDescendants(SiSensor.class);
+
         if (DEBUG || local_debug) {
             System.out.printf("%s: %d SiSensors:\n", this.getClass().getSimpleName(), sensors.size());
-            System.out.printf("%s: %45s %35s %35s %35s %35s\n", this.getClass().getSimpleName(), "DE", "Origin", "u", "v", "w");
+            System.out.printf("%s: %45s %35s %35s %35s %35s\n", this.getClass().getSimpleName(), "DE", "Origin", "u",
+                    "v", "w");
         }
         for (SiSensor module : sensors) {
 
             SiStripPlane plane = new SiStripPlane(module);
 
             if (DEBUG || local_debug) {
-                System.out.printf("%s: %45s %35s %35s %35s %35s\n", this.getClass().getSimpleName(), plane.getDetectorElement().getName(), plane.getGeometry().getPosition().toString(), plane.getMeasuredCoordinate().toString(), plane.getUnmeasuredCoordinate().toString(),plane.getPsidePlane().getNormal().toString());
+                System.out.printf("%s: %45s %35s %35s %35s %35s\n", this.getClass().getSimpleName(), plane
+                        .getDetectorElement().getName(), plane.getGeometry().getPosition().toString(), plane
+                        .getMeasuredCoordinate().toString(), plane.getUnmeasuredCoordinate().toString(), plane
+                        .getPsidePlane().getNormal().toString());
             }
             _detectorVolumes.add(plane);
         }
         if (DEBUG || local_debug) {
-            System.out.printf("%s: ###########################################################\n", this.getClass().getSimpleName());
-        }
-    }
-
-    public interface ScatteringDetectorVolume
-    {
+            System.out.printf("%s: ###########################################################\n", this.getClass()
+                    .getSimpleName());
+        }
+    }
+
+    public interface ScatteringDetectorVolume {
 
         public String getName();
 
@@ -103,8 +105,7 @@
     }
 
     // public abstract class DetectorPlane extends SiSensor {
-    public interface DetectorPlane extends ScatteringDetectorVolume
-    {
+    public interface DetectorPlane extends ScatteringDetectorVolume {
 
         public double getThickness();
 
@@ -122,14 +123,12 @@
 
     }
 
-    private abstract class SiPlane implements DetectorPlane
-    {
+    private abstract class SiPlane implements DetectorPlane {
 
         abstract void addMaterial();
     }
 
-    public class SiStripPlane extends SiPlane
-    {
+    public class SiStripPlane extends SiPlane {
 
         private Hep3Vector _org = null; // origin
         private Hep3Vector _w = null; // normal to plane
@@ -140,8 +139,7 @@
         private double _length;
         private double _width;
 
-        public SiStripPlane(SiSensor module)
-        {
+        public SiStripPlane(SiSensor module) {
             _sensor = module;
             setOrigin();
             setNormal();
@@ -153,39 +151,32 @@
         }
 
         @Override
-        public IDetectorElement getDetectorElement()
-        {
+        public IDetectorElement getDetectorElement() {
             return getSensor();
         }
 
-        private SiTrackerModule getModule()
-        {
+        private SiTrackerModule getModule() {
             return (SiTrackerModule) getGeometry().getDetectorElement().getParent();
         }
 
-        private IGeometryInfo getGeometry()
-        {
+        private IGeometryInfo getGeometry() {
             return getSensor().getGeometry();
         }
 
-        public SiSensor getSensor()
-        {
+        public SiSensor getSensor() {
             return _sensor;
         }
 
-        public Polygon3D getPsidePlane()
-        {
+        public Polygon3D getPsidePlane() {
             return getSensor().getBiasSurface(ChargeCarrier.HOLE);
         }
 
-        public Polygon3D getNsidePlane()
-        {
+        public Polygon3D getNsidePlane() {
             return getSensor().getBiasSurface(ChargeCarrier.ELECTRON);
         }
 
         @Override
-        public double getMaterialTraversed(Hep3Vector dir)
-        {
+        public double getMaterialTraversed(Hep3Vector dir) {
             // the distance inside the plane (note I don't care about sign of unit vector only
             // projection distance)
             double cth = Math.abs(VecOp.dot(dir, _w));
@@ -194,8 +185,7 @@
         }
 
         @Override
-        public double getMaterialTraversedInRL(Hep3Vector dir)
-        {
+        public double getMaterialTraversedInRL(Hep3Vector dir) {
             // the distance inside the plane (note I don't care about sign of unit vector only
             // projection distance)
             double cth = Math.abs(VecOp.dot(dir, _w));
@@ -204,8 +194,7 @@
         }
 
         @Override
-        protected void addMaterial()
-        {
+        protected void addMaterial() {
 
             IPhysicalVolume parent = getModule().getGeometry().getPhysicalVolume();
             IPhysicalVolumeContainer daughters = parent.getLogicalVolume().getDaughters();
@@ -222,25 +211,21 @@
             }
         }
 
-        public void addMaterial(String type, double density, double radLen, double t)
-        {
+        public void addMaterial(String type, double density, double radLen, double t) {
             _materials.add(type, density, radLen, t);
         }
 
         @Override
-        public double getThickness()
-        {
+        public double getThickness() {
             return _materials.getThickness();
         }
 
         @Override
-        public double getThicknessInRL()
-        {
+        public double getThicknessInRL() {
             return _materials.getThicknessInRL();
         }
 
-        private void setDimensions()
-        {
+        private void setDimensions() {
             // The dimensions are taken from the full module
             IPhysicalVolume physVol_parent = getModule().getGeometry().getPhysicalVolume();
             ILogicalVolume logVol_parent = physVol_parent.getLogicalVolume();
@@ -257,176 +242,162 @@
         }
 
         @Override
-        public Hep3Vector origin()
-        {
+        public Hep3Vector origin() {
 
             return _org;
         }
 
-        public void setOrigin(Hep3Vector org)
-        {
+        public void setOrigin(Hep3Vector org) {
 
             this._org = org;
         }
 
-        private void setOrigin()
-        {
+        private void setOrigin() {
             // Use origin of p-side surface
             Hep3Vector origin = VecOp.mult(CoordinateTransformations.getMatrix(), _sensor.getGeometry().getPosition());
             // transform to p-side
             Polygon3D psidePlane = this.getPsidePlane();
-            Translation3D transformToPside = new Translation3D(VecOp.mult(-1 * psidePlane.getDistance(), psidePlane.getNormal()));
+            Translation3D transformToPside = new Translation3D(VecOp.mult(-1 * psidePlane.getDistance(),
+                    psidePlane.getNormal()));
             this._org = transformToPside.translated(origin);
         }
 
         @Override
-        public Hep3Vector normal()
-        {
+        public Hep3Vector normal() {
             if (_w == null) {
                 _w = this.getPsidePlane().getNormal();
                 System.out.printf("setting normal from pside normal %s\n", _w.toString());
-                _w = VecOp.mult(VecOp.mult(CoordinateTransformations.getMatrix(), getSensor().getReadoutElectrodes(ChargeCarrier.HOLE).getLocalToGlobal().getRotation().getRotationMatrix()), _w);
+                _w = VecOp.mult(
+                        VecOp.mult(CoordinateTransformations.getMatrix(),
+                                getSensor().getReadoutElectrodes(ChargeCarrier.HOLE).getLocalToGlobal().getRotation()
+                                        .getRotationMatrix()), _w);
                 System.out.printf("normal after local to global to tracking rotation %s\n", _w.toString());
             }
             return this._w;
         }
 
-        private void setNormal()
-        {
+        private void setNormal() {
             _w = this.getPsidePlane().getNormal();
-            _w = VecOp.mult(VecOp.mult(CoordinateTransformations.getMatrix(), getSensor().getReadoutElectrodes(ChargeCarrier.HOLE).getLocalToGlobal().getRotation().getRotationMatrix()), _w);
-        }
-
-        public void setNormal(Hep3Vector w)
-        {
+            _w = VecOp.mult(
+                    VecOp.mult(CoordinateTransformations.getMatrix(),
+                            getSensor().getReadoutElectrodes(ChargeCarrier.HOLE).getLocalToGlobal().getRotation()
+                                    .getRotationMatrix()), _w);
+        }
+
+        public void setNormal(Hep3Vector w) {
             this._w = w;
         }
 
         @Override
-        public void print()
-        {
-            System.out.printf("DetectorPlane:  org %s normal vector %s %.2fx%.2fmm  thickness %f R.L. (%fmm)\n", origin().toString(), normal().toString(), getLength(), getWidth(), getThicknessInRL(), getThickness());
-        }
-
-        @Override
-        public int getId()
-        {
+        public void print() {
+            System.out.printf("DetectorPlane:  org %s normal vector %s %.2fx%.2fmm  thickness %f R.L. (%fmm)\n",
+                    origin().toString(), normal().toString(), getLength(), getWidth(), getThicknessInRL(),
+                    getThickness());
+        }
+
+        @Override
+        public int getId() {
             return _sensor.getSensorID();
         }
 
         @Override
-        public String getName()
-        {
+        public String getName() {
             return _sensor.getName();
         }
 
         @Override
-        public double getLength()
-        {
+        public double getLength() {
             return _length;
         }
 
         @Override
-        public double getWidth()
-        {
+        public double getWidth() {
             return _width;
         }
 
-        public double getMeasuredDimension()
-        {
+        public double getMeasuredDimension() {
             return getLength();
         }
 
-        public double getUnmeasuredDimension()
-        {
+        public double getUnmeasuredDimension() {
             return getWidth();
         }
 
-        public Hep3Vector getUnmeasuredCoordinate()
-        {
+        public Hep3Vector getUnmeasuredCoordinate() {
             return _v;
         }
 
-        public Hep3Vector getMeasuredCoordinate()
-        {
+        public Hep3Vector getMeasuredCoordinate() {
             return _u;
         }
 
-        private void setMeasuredCoordinate()
-        {
+        private void setMeasuredCoordinate() {
             // p-side unit vector
             ITransform3D electrodes_to_global = getSensor().getReadoutElectrodes(ChargeCarrier.HOLE).getLocalToGlobal();
-            Hep3Vector measuredCoordinate = getSensor().getReadoutElectrodes(ChargeCarrier.HOLE).getMeasuredCoordinate(0);
-            measuredCoordinate = VecOp.mult(VecOp.mult(CoordinateTransformations.getMatrix(), electrodes_to_global.getRotation().getRotationMatrix()), measuredCoordinate);
+            Hep3Vector measuredCoordinate = getSensor().getReadoutElectrodes(ChargeCarrier.HOLE).getMeasuredCoordinate(
+                    0);
+            measuredCoordinate = VecOp.mult(VecOp.mult(CoordinateTransformations.getMatrix(), electrodes_to_global
+                    .getRotation().getRotationMatrix()), measuredCoordinate);
             _u = measuredCoordinate;
         }
 
-        private void setUnmeasuredCoordinate()
-        {
+        private void setUnmeasuredCoordinate() {
             // p-side unit vector
             ITransform3D electrodes_to_global = getSensor().getReadoutElectrodes(ChargeCarrier.HOLE).getLocalToGlobal();
-            Hep3Vector unmeasuredCoordinate = getSensor().getReadoutElectrodes(ChargeCarrier.HOLE).getUnmeasuredCoordinate(0);
-            unmeasuredCoordinate = VecOp.mult(VecOp.mult(CoordinateTransformations.getMatrix(), electrodes_to_global.getRotation().getRotationMatrix()), unmeasuredCoordinate);
+            Hep3Vector unmeasuredCoordinate = getSensor().getReadoutElectrodes(ChargeCarrier.HOLE)
+                    .getUnmeasuredCoordinate(0);
+            unmeasuredCoordinate = VecOp.mult(VecOp.mult(CoordinateTransformations.getMatrix(), electrodes_to_global
+                    .getRotation().getRotationMatrix()), unmeasuredCoordinate);
             _v = unmeasuredCoordinate;
         }
 
     }
 
-    private static class Material
-    {
+    private static class Material {
 
         private String _name;
         private double _X0;
         private double _density;
         private double _thickness;
 
-        public Material(String _name, double _X0, double _density, double _thickness)
-        {
+        public Material(String _name, double _X0, double _density, double _thickness) {
             this._name = _name;
             this._X0 = _X0;
             this._density = _density;
             this._thickness = _thickness;
         }
 
-        private void add(double t)
-        {
+        private void add(double t) {
             _thickness += t;
         }
 
-        public double getThickness()
-        {
+        public double getThickness() {
             return _thickness;
         }
 
-        public double getDensity()
-        {
+        public double getDensity() {
             return _density;
         }
 
-        public double getX0()
-        {
+        public double getX0() {
             return _X0;
         }
 
     }
 
-    private static class Materials
-    {
+    private static class Materials {
 
         private List<Material> _materials = new ArrayList<Material>();
         private double _tot_X0 = -1;
 
-        public Materials()
-        {
-        }
-
-        public int numberOfMaterials()
-        {
+        public Materials() {
+        }
+
+        public int numberOfMaterials() {
             return _materials.size();
         }
 
-        public void add(String mat, double density, double radLen, double t)
-        {
+        public void add(String mat, double density, double radLen, double t) {
             boolean found = false;
             for (Material m : _materials) {
                 if (m._name == mat) {
@@ -442,8 +413,7 @@
 
         }
 
-        public double getThicknessInRL()
-        {
+        public double getThicknessInRL() {
             if (_materials.isEmpty()) {
                 return 0;
             }
@@ -464,8 +434,7 @@
             return _tot_X0;
         }
 
-        private double getThickness()
-        {
+        private double getThickness() {
             double t_tot = 0.;
             for (Material m : _materials) {
                 t_tot += m.getThickness();

Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/SeedTracker.java
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/SeedTracker.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/SeedTracker.java	Thu Jun  9 19:36:52 2016
@@ -14,38 +14,40 @@
  * @author Per Hansson Adrian <[log in to unmask]>
  */
 public class SeedTracker extends org.lcsim.recon.tracking.seedtracker.SeedTracker  {
-
+    
     public SeedTracker(List<SeedStrategy> strategylist) {
         // use base class only if this constructor is called!
         super(strategylist);
     }
 
-    public SeedTracker(List<SeedStrategy> strategylist,boolean includeMS) {
+    public SeedTracker(List<SeedStrategy> strategylist, boolean includeMS) {
         super(strategylist);
         initialize(strategylist, true, includeMS);
     }
 
-    public SeedTracker(List<SeedStrategy> strategylist,boolean useHPSMaterialManager, boolean includeMS) {
+    public SeedTracker(List<SeedStrategy> strategylist, boolean useHPSMaterialManager, boolean includeMS) {
         super(strategylist);
         initialize(strategylist, useHPSMaterialManager, includeMS);
     }
     
-    private void initialize(List<SeedStrategy> strategylist,boolean useHPSMaterialManager, boolean includeMS) {
+    private void initialize(List<SeedStrategy> strategylist, boolean useHPSMaterialManager, boolean includeMS) {
             
-            // Explicitly only replace the objects that might change to avoid getting the lcsim versions
+        // Explicitly only replace the objects that might change to avoid getting the lcsim versions
             
-            //  Instantiate the material manager for HPS,  the helix fitter and seed track finder as tey depends on the material manager
-            if(useHPSMaterialManager) {
-                MaterialSupervisor materialSupervisor = new MaterialSupervisor(includeMS);
-                _materialmanager = materialSupervisor;
-                _helixfitter = new HelixFitter(materialSupervisor);
-            } else {
-                MaterialManager materialmanager = new MaterialManager(includeMS);
-                _materialmanager = materialmanager; //mess around with types here...
-                _helixfitter = new HelixFitter(materialmanager);
-            }
-            //  Instantiate the helix finder since it depends on the material manager
-            _finder = new SeedTrackFinder(_hitmanager, _helixfitter);
+        //  Instantiate the material manager for HPS,  the helix fitter and seed track finder as tey depends on the material manager
+        if(useHPSMaterialManager) {
+            MaterialSupervisor materialSupervisor = new MaterialSupervisor(includeMS);
+            materialSupervisor.setDebug(true);
+            _materialmanager = materialSupervisor;
+            _helixfitter = new HelixFitter(materialSupervisor);
+        } else {
+            MaterialManager materialmanager = new MaterialManager(includeMS);
+            _materialmanager = materialmanager; //mess around with types here...
+            _helixfitter = new HelixFitter(materialmanager);
+        }
+        
+        //  Instantiate the helix finder since it depends on the material manager
+        _finder = new SeedTrackFinder(_hitmanager, _helixfitter);
     } 
 
      /**
@@ -67,7 +69,10 @@
      */
     public void setApplySectorBinning(boolean applySectorBinning) {
         _finder.setApplySectorBinning(applySectorBinning);
-        _finder.getConfirmer().setApplySectorBinning(applySectorBinning);
-        
+        _finder.getConfirmer().setApplySectorBinning(applySectorBinning);        
+    }
+    
+    public void setSubdetectorName(String subdetectorName) {
+        ((MaterialSupervisor) this._materialmanager).setSubdetectorName(subdetectorName);
     }
 }

Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java
 =============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java	(original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackerReconDriver.java	Thu Jun  9 19:36:52 2016
@@ -36,32 +36,48 @@
 
     private static final Logger LOGGER = Logger.getLogger(TrackerReconDriver.class.getPackage().getName());
 
+    private String subdetectorName = "Tracker";
+    
     // Debug flag.
     private boolean debug = false;
+    
     // Tracks found across all events.
     int ntracks = 0;
+    
     // Number of events processed.
     int nevents = 0;
+    
     // Cache detector object.
     Detector detector = null;
+    
     // Default B-field value.
     private double bfield = 0.5;
+    
     // Tracking strategies resource path.
     private String strategyResource = "HPS-Test-4pt1.xml";
+    
     // Output track collection.
     private String trackCollectionName = "MatchedTracks";
+    
     // HelicalTrackHit input collection.
     private String stInputCollectionName = "RotatedHelicalTrackHits";
+    
     // Include MS (done by removing XPlanes from the material manager results)
     private boolean includeMS = true;
+    
     // number of repetitive fits on confirmed/extended tracks
     private int _iterativeConfirmed = 3;
+    
     // use HPS implementation of material manager
     private boolean _useHPSMaterialManager = true;
+    
     // enable the use of sectoring using sector binning in SeedTracker
     private boolean _applySectorBinning = true;
+    
     private double rmsTimeCut = -1;
+    
     private boolean rejectUncorrectedHits = true;
+    
     private boolean rejectSharedHits = false;
 
     public TrackerReconDriver() {
@@ -69,6 +85,10 @@
 
     public void setDebug(boolean debug) {
         this.debug = debug;
+    }
+    
+    public void setSubdetectorName(String subdetectorName) {
+        this.subdetectorName = subdetectorName;
     }
 
     /**
@@ -158,14 +178,14 @@
      */
     private void initialize() {
 
-        //
-        // 1) Driver to run Seed Tracker.
-        //
+        System.out.println("TrackerReconDriver: initializing");
+        
         if (!strategyResource.startsWith("/")) {
             strategyResource = "/org/hps/recon/tracking/strategies/" + strategyResource;
         }
         List<SeedStrategy> sFinallist = StrategyXMLUtils.getStrategyListFromInputStream(this.getClass().getResourceAsStream(strategyResource));
         SeedTracker stFinal = new SeedTracker(sFinallist, this._useHPSMaterialManager, this.includeMS);
+        stFinal.setSubdetectorName(subdetectorName);
         stFinal.setApplySectorBinning(_applySectorBinning);
         stFinal.setUseDefaultXPlane(false);
         stFinal.setDebug(this.debug);
@@ -185,7 +205,7 @@
             HitTimeTrackCheck timeCheck = new HitTimeTrackCheck(rmsTimeCut);
             timeCheck.setDebug(debug);
             stFinal.setTrackCheck(timeCheck);
-        }
+        }        
     }
 
     /**

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

November 2017
August 2017
July 2017
January 2017
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use