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  December 2014

HPS-SVN December 2014

Subject:

r1758 - in /java/trunk: analysis/src/main/java/org/hps/analysis/dataquality/ steering-files/src/main/resources/org/hps/steering/production/ steering-files/src/main/resources/org/hps/steering/recon/

From:

[log in to unmask]

Reply-To:

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

Date:

Tue, 16 Dec 2014 19:20:20 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (404 lines)

Author: [log in to unmask]
Date: Tue Dec 16 11:20:09 2014
New Revision: 1758

Log:
Added dqm driver + steering file for ecal monitoring; some random changes to other stuff. 

Added:
    java/trunk/steering-files/src/main/resources/org/hps/steering/production/DataQualityEcalOnlyEngineeringRun.lcsim
      - copied, changed from r1755, java/trunk/steering-files/src/main/resources/org/hps/steering/production/DataQualityRecon.lcsim
Modified:
    java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java
    java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackMCEfficiency.java
    java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2014ECalRecon.lcsim

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java	Tue Dec 16 11:20:09 2014
@@ -1,11 +1,16 @@
 package org.hps.analysis.dataquality;
 
 import hep.aida.IHistogram1D;
+import hep.aida.IHistogram2D;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
+import org.apache.commons.math.stat.StatUtils;
+import org.hps.recon.ecal.HPSEcalCluster;
+import org.hps.recon.ecal.HPSEcalClusterIC;
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
-import org.lcsim.event.RawCalorimeterHit;
-import org.lcsim.event.ReconstructedParticle;
 import org.lcsim.geometry.Detector;
 
 /**
@@ -13,6 +18,9 @@
  * @author mgraham on Mar 28, 2014...just added empty (almost) file into svn May
  * 14, 2014 put some DQM template stuff in...ECal-ers should really fill in the
  * guts
+ *
+ * mg...12/16/2014: added a bunch of plots to use with engineering run data;
+ * mostly copied from online monitoring
  */
 public class EcalMonitoring extends DataQualityMonitor {
 
@@ -20,23 +28,150 @@
     String calibratedHitCollectionName = "EcalCalHits";//these are in energy
     String clusterCollectionName = "EcalClusters";
 
+    //ecal hit plots
+    IHistogram1D hitCountPlot;
+    IHistogram1D hitTimePlot;
+    IHistogram1D hitEnergyPlot;
+    IHistogram1D fiducialHitCountPlot;
+    IHistogram1D fiducialEnergyPlot;
+    //  ecal cluster plots
+    IHistogram1D clusterCountPlot;
+    IHistogram1D clusterSizePlot;
+    IHistogram1D clusterEnergyPlot;
+    IHistogram1D clusterTimes;
+    IHistogram1D clusterTimeSigma;
+    //mg...12/13/2014
+    IHistogram1D twoclusterTotEnergy;
+    IHistogram1D twoclusterEnergyAsymmetry;
+//    IHistogram1D twoclusterEnergyMeanYPos;
+//    IHistogram1D twoclusterEnergyMeanXPos;
+    //mg...12/14/2014
+    IHistogram1D fiducialClusterCountPlot;
+    IHistogram1D fiducialClusterEnergyPlot;
+    IHistogram1D fiducialClusterSizePlot;
+    IHistogram2D fiducialenergyVsY;
+    IHistogram2D fiducialenergyVsX;
+    IHistogram2D energyVsY;
+    IHistogram2D energyVsX;
+
     private Map<String, Double> monitoredQuantityMap = new HashMap<>();
     String[] ecalQuantNames = {"Good", "Stuff", "For", "ECAL"};
+    double maxE = 2.5;
+    private final String plotHitsDir = "EcalHits/";
+    private final String plotClustersDir = "EcalClusters/";
 
     protected void detectorChanged(Detector detector) {
         System.out.println("EcalMonitoring::detectorChanged  Setting up the plotter");
         aida.tree().cd("/");
 
-        //make some cool plots that will get saved in root format...2D is good too!
-        IHistogram1D energy = aida.histogram1D("Cluster Energy", 25, 0, 2.5);
+        // Setup hit plots.
+        hitCountPlot = aida.histogram1D(plotHitsDir + "Hit Count In Event", 40, -0.5, 39.5);
+        hitTimePlot = aida.histogram1D(plotHitsDir + "Hit Time", 50, 0 * 4.0, 50 * 4.0);
+        hitEnergyPlot = aida.histogram1D(plotHitsDir + "Hit Energy", 100, -0.1, maxE);
+        fiducialHitCountPlot = aida.histogram1D(plotHitsDir + "Hit Count with Fiducial Cut", 10, -0.5, 9.5);
+        fiducialEnergyPlot = aida.histogram1D(plotHitsDir + "Hit Energy with Fiducial Cut", 100, -0.1, maxE);
+
+        // Setup cluster plots
+        clusterCountPlot = aida.histogram1D(plotClustersDir + "Cluster Count per Event", 10, -0.5, 9.5);
+        clusterSizePlot = aida.histogram1D(plotClustersDir + "Cluster Size", 10, -0.5, 9.5);
+        clusterEnergyPlot = aida.histogram1D(plotClustersDir + "Cluster Energy", 100, -0.1, maxE);
+        clusterTimes = aida.histogram1D(plotClustersDir + "Cluster Time Mean", 200, 0, 4.0 * 50);
+        clusterTimeSigma = aida.histogram1D(plotClustersDir + "Cluster Time Sigma", 100, 0, 10);
+        twoclusterTotEnergy = aida.histogram1D(plotClustersDir + "Two Cluster Energy Sum", 100, 0, maxE);
+        twoclusterEnergyAsymmetry = aida.histogram1D(plotClustersDir + "Two Cluster Energy Asymmetry", 100, 0, 1.0);
+        energyVsX = aida.histogram2D(plotClustersDir + "Energy vs X", 50, 0, 1.6, 50, .0, 200.0);
+        energyVsY = aida.histogram2D(plotClustersDir + "Energy vs Y", 50, 0, 1.6, 50, 20.0, 85.0);
+
+        fiducialClusterCountPlot = aida.histogram1D(plotClustersDir + "Cluster Count with Fiducal Cut", 10, -0.5, 9.5);
+        fiducialClusterSizePlot = aida.histogram1D(plotClustersDir + "Cluster Size with Fiducal Cut", 10, -0.5, 9.5);
+        fiducialClusterEnergyPlot = aida.histogram1D(plotClustersDir + "Cluster Energy with Fiducal Cut", 100, -0.1, maxE);
+        fiducialenergyVsY = aida.histogram2D(plotClustersDir + "Energy vs Y with Fiducial Cuts", 50, 0, 1.6, 50, 45.0, 85.0);
+        fiducialenergyVsX = aida.histogram2D(plotClustersDir + "Energy vs X with Fiducial Cuts", 50, 0, 1.6, 50, 0.0, 200.0);
 
     }
 
     @Override
     public void process(EventHeader event) {
         /*  make sure everything is there */
-        if (!event.hasCollection(RawCalorimeterHit.class, readoutHitCollectionName))
+        List<CalorimeterHit> hits;
+        if (event.hasCollection(CalorimeterHit.class, calibratedHitCollectionName))
+            hits = event.get(CalorimeterHit.class, calibratedHitCollectionName);
+        else
+            return; //this might be a non-data event
+
+        hitCountPlot.fill(hits.size());
+        int fidHitCount = 0;
+        for (CalorimeterHit hit : hits) {
+
+            hitEnergyPlot.fill(hit.getCorrectedEnergy());
+            hitTimePlot.fill(hit.getTime());
+            int ix = hit.getIdentifierFieldValue("ix");
+            int iy = hit.getIdentifierFieldValue("iy");
+            if (Math.abs(iy) > 2) {
+                fidHitCount++;
+                fiducialEnergyPlot.fill(hit.getCorrectedEnergy());
+            }
+            fiducialHitCountPlot.fill(fidHitCount);
+        }
+
+        List<Cluster> clusters;
+        if (event.hasCollection(HPSEcalCluster.class, clusterCollectionName))
+            clusters = event.get(Cluster.class, clusterCollectionName);
+        else if (event.hasCollection(HPSEcalClusterIC.class, clusterCollectionName))
+            clusters = event.get(Cluster.class, clusterCollectionName);
+        else if(event.hasCollection(Cluster.class, clusterCollectionName))
+            clusters = event.get(Cluster.class, clusterCollectionName);
+        else {
+            clusterCountPlot.fill(0);
             return;
+        }
+
+        clusterCountPlot.fill(clusters.size());
+
+        int fidcnt = 0;
+        for (Cluster cluster : clusters) {
+            clusterEnergyPlot.fill(cluster.getEnergy());
+            double[] times = new double[cluster.getCalorimeterHits().size()];
+            double[] energies = new double[cluster.getCalorimeterHits().size()];
+            CalorimeterHit seed = cluster.getCalorimeterHits().get(0);
+            int ix = seed.getIdentifierFieldValue("ix");
+            int iy = seed.getIdentifierFieldValue("iy");
+            if (cluster.getCalorimeterHits().size() > 1) {
+                energyVsX.fill(cluster.getEnergy(), Math.abs(cluster.getPosition()[0]));
+                energyVsY.fill(cluster.getEnergy(), Math.abs(cluster.getPosition()[1]));
+            }
+            if (Math.abs(iy) > 2) {
+                fidcnt++;
+                fiducialClusterSizePlot.fill(cluster.getCalorimeterHits().size());
+                fiducialClusterEnergyPlot.fill(cluster.getEnergy());
+                if (cluster.getCalorimeterHits().size() > 1)
+                    fiducialenergyVsY.fill(cluster.getEnergy(), Math.abs(cluster.getPosition()[1]));
+            }
+
+            int size = 0;
+            for (CalorimeterHit hit : cluster.getCalorimeterHits()) {
+                energies[size] = hit.getCorrectedEnergy();
+                times[size] = hit.getTime();
+                size++;
+            }
+            clusterTimes.fill(StatUtils.mean(times, 0, size));
+            clusterSizePlot.fill(size); //The number of "hits" in a "cluster"
+            clusterTimeSigma.fill(Math.sqrt(StatUtils.variance(times, 0, size)));
+
+        }
+        fiducialClusterCountPlot.fill(fidcnt);
+        //make some interesting 2-cluster plots
+        if (clusters.size() == 2) {
+            Cluster cl1 = clusters.get(0);
+            Cluster cl2 = clusters.get(1);
+            double[] p1 = cl1.getPosition();
+            double[] p2 = cl2.getPosition();
+            double e1 = cl1.getEnergy();
+            double e2 = cl2.getEnergy();
+            twoclusterTotEnergy.fill(e1 + e2);
+            twoclusterEnergyAsymmetry.fill(Math.abs(e1 - e2)/(e1+e2));
+        }
+        
 
     }
 

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackMCEfficiency.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackMCEfficiency.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackMCEfficiency.java	Tue Dec 16 11:20:09 2014
@@ -153,11 +153,9 @@
         Map<Track, TrackAnalysis> tkanalMap = new HashMap<Track, TrackAnalysis>();
         RelationalTable hittomc = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
         List<LCRelation> mcrelations = event.get(LCRelation.class, trackHitMCRelationsCollectionName);
-        System.out.println(this.getClass().getSimpleName() + ": number of MC relations = " + mcrelations.size());
         for (LCRelation relation : mcrelations)
             if (relation != null && relation.getFrom() != null && relation.getTo() != null)
                 hittomc.add(relation.getFrom(), relation.getTo());
-        System.out.println(this.getClass().getSimpleName() + ": number of hittomc relations = " + hittomc.size());
         RelationalTable mcHittomcP = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
         //  Get the collections of SimTrackerHits
         List<List<SimTrackerHit>> simcols = event.get(SimTrackerHit.class);
@@ -214,13 +212,11 @@
         FindableTrack findable = new FindableTrack(event);
 
         List<Track> tracks = event.get(Track.class, trackCollectionName);
-        System.out.println(this.getClass().getSimpleName() + ": nTracks = " + tracks.size());
         for (Track trk : tracks) {
             TrackAnalysis tkanal = new TrackAnalysis(trk, hittomc, rawtomc, hittostrip, hittorotated);
             tkanalMap.put(trk, tkanal);
             MCParticle mcp = tkanal.getMCParticleNew();
             if (mcp != null) {//  Create a map between the tracks found and the assigned MC particle            
-                System.out.println(this.getClass().getSimpleName() + ": found MCP match");
                 trktomc.add(trk, tkanal.getMCParticleNew());
             }
         }
@@ -242,7 +238,6 @@
             double eta = -Math.log(Math.tan(Math.atan2(pt, pz) / 2));
             double phi = Math.atan2(px, pz);
             //  Find the number of layers hit by this mc particle
-            System.out.println("MC pt=" + pt);
             int nhits = findable.LayersHit(mcp);
             boolean isFindable = findable.InnerTrackerIsFindable(mcp, nlayers - 2);
 
@@ -364,30 +359,30 @@
                 if (hit.Layer() == layer)
                     hasThisLayer = true;
             if (!hasThisLayer) {
-                System.out.println("Missing reconstructed hit in layer = " + layer);
+//                System.out.println("Missing reconstructed hit in layer = " + layer);
                 boolean hasFitHitSL1 = false;
                 boolean hasFitHitSL2 = false;
                 FittedRawTrackerHit fitSL1 = null;
                 FittedRawTrackerHit fitSL2 = null;
-                System.out.println("fitted hit list size = " + fitlist.size());
+//                System.out.println("fitted hit list size = " + fitlist.size());
                 for (FittedRawTrackerHit fit : fitlist) {
-                    System.out.println("fitted hit layer number = " + fit.getRawTrackerHit().getLayerNumber());
+//                    System.out.println("fitted hit layer number = " + fit.getRawTrackerHit().getLayerNumber());
                     if (fit.getRawTrackerHit().getLayerNumber() == layer) {
                         hasFitHitSL1 = true;
                         fitSL1 = fit;
-                        System.out.println("Found a hit in SL1 with t0 = " + fitSL1.getT0() + "; amp = " + fitSL1.getAmp() + "; chi^2 = " + fitSL1.getShapeFitParameters().getChiProb() + "; strip = " + fitSL1.getRawTrackerHit().getCellID());
+//                        System.out.println("Found a hit in SL1 with t0 = " + fitSL1.getT0() + "; amp = " + fitSL1.getAmp() + "; chi^2 = " + fitSL1.getShapeFitParameters().getChiProb() + "; strip = " + fitSL1.getRawTrackerHit().getCellID());
                     }
                     if (fit.getRawTrackerHit().getLayerNumber() == layer + 1) {
                         hasFitHitSL2 = true;
                         fitSL2 = fit;
-                        System.out.println("Found a hit in SL2 with t0 = " + fitSL2.getT0() + "; amp = " + fitSL2.getAmp() + "; chi^2 = " + fitSL2.getShapeFitParameters().getChiProb() + "; strip = " + fitSL2.getRawTrackerHit().getCellID());
+//                        System.out.println("Found a hit in SL2 with t0 = " + fitSL2.getT0() + "; amp = " + fitSL2.getAmp() + "; chi^2 = " + fitSL2.getShapeFitParameters().getChiProb() + "; strip = " + fitSL2.getRawTrackerHit().getCellID());
 
                     }
                 }
-                if (!hasFitHitSL1)
-                    System.out.println("MISSING a hit in SL1!!!");
-                if (!hasFitHitSL2)
-                    System.out.println("MISSING a hit in SL2!!!");
+//                if (!hasFitHitSL1)
+//                    System.out.println("MISSING a hit in SL1!!!");
+//                if (!hasFitHitSL2)
+//                    System.out.println("MISSING a hit in SL2!!!");
 
                 return false;
             }

Copied: java/trunk/steering-files/src/main/resources/org/hps/steering/production/DataQualityEcalOnlyEngineeringRun.lcsim (from r1755, java/trunk/steering-files/src/main/resources/org/hps/steering/production/DataQualityRecon.lcsim)
 =============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/production/DataQualityRecon.lcsim	(original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/production/DataQualityEcalOnlyEngineeringRun.lcsim	Tue Dec 16 11:20:09 2014
@@ -6,48 +6,20 @@
        xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
     <execute>
         <driver name="EventMarkerDriver"/>
-        <!--        <driver name="DQMDatabaseDriver"/>  -->
-        <driver name="RawTrackerHitSensorSetup"/>
-        <driver name="SVTMonitoring"/>  
-        <driver name="SVTHitMCEfficiency"/>  
-        <driver name="TrackingMonitoring"/>  
-        <driver name="TrackingResiduals"/>
-        <driver name="TrackMCEfficiency"/> 
-        <driver name="FinalStateMonitoring"/>          
-        <driver name="V0Monitoring"/>          
+        <driver name="EcalMonitoring"/>
         <driver name="AidaSaveDriver"/>
         <driver name="CleanupDriver"/>
     </execute>    
     <drivers>    
-        <!--    <driver name="DQMDatabaseDriver" type="org.hps.analysis.dataquality.DQMDatabaseDriver"/> -->
         <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
-            <eventInterval>1</eventInterval>
+            <eventInterval>1000</eventInterval>
         </driver>        
-        <driver name="RawTrackerHitSensorSetup" type="org.lcsim.recon.tracking.digitization.sisim.config.RawTrackerHitSensorSetup"/>
         <driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver">
             <outputFileName>${outputFile}.root</outputFileName>
         </driver>
-        <driver name="SVTMonitoring" type="org.hps.analysis.dataquality.SvtMonitoring">
-            <overwriteDB>false</overwriteDB>
-        </driver>
-        <driver name="TrackingMonitoring" type="org.hps.analysis.dataquality.TrackingMonitoring">
-            <overwriteDB>false</overwriteDB>
-        </driver>
-        <driver name="TrackingResiduals" type="org.hps.analysis.dataquality.TrackingResiduals">
-            <overwriteDB>false</overwriteDB>
-        </driver>
-        <driver name="FinalStateMonitoring" type="org.hps.analysis.dataquality.FinalStateMonitoring">
-            <overwriteDB>false</overwriteDB>
-        </driver>
-        <driver name="TrackMCEfficiency" type="org.hps.analysis.dataquality.TrackMCEfficiency">
+        <driver name="EcalMonitoring" type="org.hps.analysis.dataquality.EcalMonitoring">
             <overwriteDB>false</overwriteDB>
         </driver> 
-        <driver name="SVTHitMCEfficiency" type="org.hps.analysis.dataquality.SVTHitMCEfficiency">
-            <overwriteDB>false</overwriteDB>
-        </driver> 
-        <driver name="V0Monitoring" type="org.hps.analysis.dataquality.V0Monitoring">
-            <overwriteDB>false</overwriteDB>
-        </driver>
         <driver name="CleanupDriver" type="org.lcsim.recon.tracking.digitization.sisim.config.ReadoutCleanupDriver"/>
 
     </drivers>

Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2014ECalRecon.lcsim
 =============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2014ECalRecon.lcsim	(original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2014ECalRecon.lcsim	Tue Dec 16 11:20:09 2014
@@ -8,15 +8,17 @@
         <driver name="EventMarkerDriver"/>              
         <driver name="EcalRawConverter" />
         <driver name="EcalClusterer" />
+<!--        <driver name="EcalClustererIC" /> -->
         <driver name="EcalHitPlots"/>             <!-- Single hit distributions -->
         <driver name="EcalClusterPlots"/>         <!-- Clusters distributions -->
-        <driver name="LCIOWriter"/>
+<!--      <driver name="EcalClusterPlotsIC"/>   -->       <!-- Clusters distributions with IC clusters-->
+        <driver name="LCIOWriter"/> 
         <driver name="AidaSaveDriver"/>  
         <driver name="CleanupDriver"/>
    </execute>    
     <drivers>    
         <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
-            <eventInterval>1000</eventInterval>
+            <eventInterval>1</eventInterval>
         </driver>        
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
             <ecalCollectionName>EcalCalHits</ecalCollectionName>
@@ -27,9 +29,19 @@
         <driver name="EcalClusterer" type="org.hps.recon.ecal.EcalClusterer">
             <ecalName>Ecal</ecalName>
             <ecalCollectionName>EcalCalHits</ecalCollectionName>
+            <seedEMin>0.1</seedEMin>
             <addEMin>0.01</addEMin>
 <!--            <timeCut>true</timeCut>  -->
         </driver>
+   <driver name="EcalClustererIC" type="org.hps.recon.ecal.EcalClusterIC">
+            <ecalName>Ecal</ecalName>
+            <ecalCollectionName>EcalCalHits</ecalCollectionName>
+            <clusterCollectionName>EcalClustersIC</clusterCollectionName>
+            <hitEnergyThreshold>0.01</hitEnergyThreshold>
+            <seedEnergyThreshold>0.100</seedEnergyThreshold>        
+            <clusterEnergyThreshold>0.200</clusterEnergyThreshold>        
+        </driver>
+
      <driver name="EcalHitPlots" type="org.hps.monitoring.ecal.plots.EcalHitPlots">
             <inputCollection>EcalCalHits</inputCollection>        
             <maxE>2.0</maxE>
@@ -39,10 +51,17 @@
         <driver name="EcalClusterPlots" type="org.hps.monitoring.ecal.plots.EcalClusterPlots">
             <maxE>2.0</maxE>
             <logScale>false</logScale>
-            <hide>true</hide>            
+            <hide>true</hide>                        
         </driver>
+        <driver name="EcalClusterPlotsIC" type="org.hps.monitoring.ecal.plots.EcalClusterPlots">
+            <maxE>2.0</maxE>
+            <logScale>false</logScale>
+            <hide>true</hide>
+            <inputCollection>EcalClustersIC</inputCollection>
+        </driver>
+
         <driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver">
-            <outputFileName>triggerEPlots.root</outputFileName>
+            <outputFileName>ecalplots.root</outputFileName>
         </driver> 
 
         <driver name="LCIOWriter" type="org.lcsim.util.loop.LCIODriver">

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