Print

Print


Author: [log in to unmask]
Date: Fri Mar  6 18:30:47 2015
New Revision: 2314

Log:
3-hit tracking and an SVT alignment driver to help with SVT opening angle measurements

Added:
    java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/SVTOpeningAlignment.java
    java/trunk/steering-files/src/main/resources/org/hps/steering/users/mgraham/AlignmentMonitorTest.lcsim
      - copied, changed from r2296, java/trunk/steering-files/src/main/resources/org/hps/steering/users/mgraham/MattsScrewAround.lcsim
    java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full-3Hit.xml
      - copied, changed from r2296, java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full-L1-3.xml
Modified:
    java/trunk/steering-files/src/main/resources/org/hps/steering/readout/CommRun2014LoosePairs.lcsim

Added: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/SVTOpeningAlignment.java
 =============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/SVTOpeningAlignment.java	(added)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/SVTOpeningAlignment.java	Fri Mar  6 18:30:47 2015
@@ -0,0 +1,197 @@
+package org.hps.monitoring.drivers.trackrecon;
+
+import hep.aida.IAnalysisFactory;
+import hep.aida.IHistogram1D;
+import hep.aida.IPlotter;
+import hep.aida.IPlotterStyle;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.Track;
+import org.lcsim.event.TrackState;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.fit.helicaltrack.HelicalTrackHit;
+import org.lcsim.geometry.Detector;
+import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
+
+/**
+ *
+ * @author mgraham
+ */
+public class SVTOpeningAlignment extends Driver {
+
+    private AIDA aida = AIDA.defaultInstance();
+    private String helicalTrackHitCollectionName = "HelicalTrackHits";
+    private String rotatedTrackHitCollectionName = "RotatedHelicalTrackHits";
+    private String l1to3CollectionName = "L1to3Tracks";
+    private String l4to6CollectionName = "L4to6Tracks";
+    private String outputPlots = null;
+    IPlotter plotterTop;
+    IPlotter plotterBot;
+    IHistogram1D nTracks46Top;
+    IHistogram1D nTracks13Top;
+    IHistogram1D nTracks46Bot;
+    IHistogram1D nTracks13Bot;
+
+    public SVTOpeningAlignment() {
+    }
+
+    public void setOutputPlots(String output) {
+        this.outputPlots = output;
+    }
+
+    public void setHelicalTrackHitCollectionName(String helicalTrackHitCollectionName) {
+        this.helicalTrackHitCollectionName = helicalTrackHitCollectionName;
+    }
+
+    public void setL1to3CollectionName(String trackCollectionName) {
+        this.l1to3CollectionName = trackCollectionName;
+    }
+
+    public void setL4to6CollectionName(String trackCollectionName) {
+        this.l4to6CollectionName = trackCollectionName;
+    }
+
+    @Override
+    protected void detectorChanged(Detector detector) {
+        aida.tree().cd("/");
+
+        IAnalysisFactory fac = aida.analysisFactory();
+        plotterTop = fac.createPlotterFactory().create("HPS Tracking Plots");
+        plotterTop.setTitle("Momentum");
+        IPlotterStyle style = plotterTop.style();
+        style.dataStyle().fillStyle().setColor("yellow");
+        style.dataStyle().errorBarStyle().setVisible(false);
+        plotterTop.createRegions(3, 3);
+        //plotterFrame.addPlotter(plotter);
+
+        nTracks13Top = aida.histogram1D("Number of L1-3 Tracks: Top ", 7, 0, 7.0);
+        nTracks46Top = aida.histogram1D("Number of L4-6 Tracks: Top ", 7, 0, 7.0);
+
+        IHistogram1D deld0Top = aida.histogram1D("Delta d0: Top", 50, -20.0, 20.0);
+        IHistogram1D delphiTop = aida.histogram1D("Delta sin(phi): Top", 50, -0.1, 0.1);
+        IHistogram1D delwTop = aida.histogram1D("Delta curvature: Top", 50, -0.0002, 0.0002);
+        IHistogram1D dellamdaTop = aida.histogram1D("Delta slope: Top", 50, -0.02, 0.02);
+        IHistogram1D delz0Top = aida.histogram1D("Delta y0: Top", 50, -5, 5.0);
+
+        plotterTop.region(0).plot(deld0Top);
+        plotterTop.region(3).plot(delphiTop);
+        plotterTop.region(6).plot(delwTop);
+        plotterTop.region(1).plot(dellamdaTop);
+        plotterTop.region(4).plot(delz0Top);
+        plotterTop.region(2).plot(nTracks13Top);
+        plotterTop.region(5).plot(nTracks46Top);
+
+        plotterBot = fac.createPlotterFactory().create("HPS Tracking Plots");
+        plotterBot.setTitle("Momentum");
+        IPlotterStyle styleBot = plotterBot.style();
+        styleBot.dataStyle().fillStyle().setColor("yellow");
+        styleBot.dataStyle().errorBarStyle().setVisible(false);
+        plotterBot.createRegions(3, 3);
+        //plotterFrame.addPlotter(plotter);
+
+        nTracks13Bot = aida.histogram1D("Number of L1-3 Tracks: Bot ", 7, 0, 7.0);
+        nTracks46Bot = aida.histogram1D("Number of L4-6 Tracks: Bot ", 7, 0, 7.0);
+
+        IHistogram1D deld0Bot = aida.histogram1D("Delta d0: Bot", 50, -20.0, 20.0);
+        IHistogram1D delphiBot = aida.histogram1D("Delta sin(phi): Bot", 50, -0.1, 0.1);
+        IHistogram1D delwBot = aida.histogram1D("Delta curvature: Bot", 50, -0.0002, 0.0002);
+        IHistogram1D dellamdaBot = aida.histogram1D("Delta slope: Bot", 50, -0.02, 0.02);
+        IHistogram1D delz0Bot = aida.histogram1D("Delta y0: Bot", 50, -5, 5.0);
+
+        plotterBot.region(0).plot(deld0Bot);
+        plotterBot.region(3).plot(delphiBot);
+        plotterBot.region(6).plot(delwBot);
+        plotterBot.region(1).plot(dellamdaBot);
+        plotterBot.region(4).plot(delz0Bot);
+        plotterBot.region(2).plot(nTracks13Bot);
+        plotterBot.region(5).plot(nTracks46Bot);
+
+    }
+
+    @Override
+    public void process(EventHeader event) {
+        aida.tree().cd("/");
+        if (!event.hasCollection(HelicalTrackHit.class, helicalTrackHitCollectionName))
+            return;
+
+        if (!event.hasCollection(Track.class, l1to3CollectionName))
+            return;
+
+        if (!event.hasCollection(Track.class, l4to6CollectionName))
+            return;
+
+        List<Track> l1to3tracks = event.get(Track.class, l1to3CollectionName);
+        List<Track> l4to6tracks = event.get(Track.class, l4to6CollectionName);
+
+        List<Track> l1to3tracksTop = splitTrackList(l1to3tracks, true);
+        List<Track> l1to3tracksBot = splitTrackList(l1to3tracks, false);
+        List<Track> l4to6tracksTop = splitTrackList(l4to6tracks, true);
+        List<Track> l4to6tracksBot = splitTrackList(l4to6tracks, false);
+
+        nTracks13Top.fill(l1to3tracksTop.size());
+        nTracks13Bot.fill(l1to3tracksBot.size());
+        nTracks46Top.fill(l4to6tracksTop.size());
+        nTracks46Bot.fill(l4to6tracksBot.size());
+
+        for (Track trk46 : l4to6tracksTop) {
+            TrackState ts46 = trk46.getTrackStates().get(0);
+            for (Track trk13 : l1to3tracksTop) {
+                TrackState ts13 = trk13.getTrackStates().get(0);
+                aida.histogram1D("Delta d0: Top").fill(ts46.getD0() - ts13.getD0());
+                aida.histogram1D("Delta sin(phi): Top").fill(Math.sin(ts46.getPhi()) - Math.sin(ts13.getPhi()));
+                aida.histogram1D("Delta curvature: Top").fill(ts46.getOmega() - ts13.getOmega());
+                aida.histogram1D("Delta y0: Top").fill(ts46.getZ0() - ts13.getZ0());
+                aida.histogram1D("Delta slope: Top").fill(ts46.getTanLambda() - ts13.getTanLambda());
+            }
+        }
+
+        for (Track trk46 : l4to6tracksBot) {
+            TrackState ts46 = trk46.getTrackStates().get(0);
+            for (Track trk13 : l1to3tracksBot) {
+                TrackState ts13 = trk13.getTrackStates().get(0);
+                aida.histogram1D("Delta d0: Bot").fill(ts46.getD0() - ts13.getD0());
+                aida.histogram1D("Delta sin(phi): Bot").fill(Math.sin(ts46.getPhi()) - Math.sin(ts13.getPhi()));
+                aida.histogram1D("Delta curvature: Bot").fill(ts46.getOmega() - ts13.getOmega());
+                aida.histogram1D("Delta y0: Bot").fill(ts46.getZ0() - ts13.getZ0());
+                aida.histogram1D("Delta slope: Bot").fill(ts46.getTanLambda() - ts13.getTanLambda());
+            }
+        }
+
+    }
+
+    @Override
+    public void endOfData() {
+        if (outputPlots != null)
+            try {
+                plotterTop.writeToFile(outputPlots + "-deltasTop.gif");
+                plotterBot.writeToFile(outputPlots + "-deltasBottom.gif");
+            } catch (IOException ex) {
+                Logger.getLogger(TrackingReconPlots.class.getName()).log(Level.SEVERE, null, ex);
+            }
+    }
+
+    private List<Track> splitTrackList(List<Track> trks, boolean doTop) {
+        List<Track> tracksHalf = new ArrayList<Track>();
+        boolean isTop = false;
+        boolean isBot = false;
+        for (Track trk : trks) {
+            isTop = false;
+            isBot = false;
+            for (TrackerHit hit : trk.getTrackerHits())
+                if (hit.getPosition()[2] > 0)//remember, non-bend in tracking frame is z-direction
+                    isTop = true;
+                else
+                    isBot = true;
+            if (isTop == true && isBot != true && doTop == true)  //if we want top tracks and all hits are in top
+                tracksHalf.add(trk);
+            if (isBot == true && isTop != true && doTop == false) //if we want bottom tracks and all hits are in bottom
+                tracksHalf.add(trk);
+        }
+        return tracksHalf;
+    }
+}

Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/readout/CommRun2014LoosePairs.lcsim
 =============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/readout/CommRun2014LoosePairs.lcsim	(original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/readout/CommRun2014LoosePairs.lcsim	Fri Mar  6 18:30:47 2015
@@ -47,16 +47,18 @@
             <inputHitCollectionName>EcalCorrectedHits</inputHitCollectionName>
             <clusterWindow>1</clusterWindow>
         </driver>
-        <driver name="PairTrigger0" type="org.hps.readout.ecal.FADCPrimaryTriggerDriver">
+        <driver name="PairTrigger1" type="org.hps.readout.ecal.FADCPrimaryTriggerDriver">
             <clusterCollectionName>EcalClusters</clusterCollectionName>
             <deadTime>10</deadTime>
             <pairCoincidence>4</pairCoincidence>
-            <minHitCount>2</minHitCount>
+            <minHitCount>3</minHitCount>
             <energySumHigh>2.0</energySumHigh>
-            <energySumLow>0.0</energySumLow>
+            <energySumLow>1.0</energySumLow>
             <energyDifferenceHigh>1.2</energyDifferenceHigh>
-            <coplanarityHigh>90</coplanarityHigh>
+            <coplanarityHigh>40</coplanarityHigh>
             <seedEnergyLow>0.1</seedEnergyLow>
+            <energySlopeParamF>0.005500</energySlopeParamF>
+            <energySlopeLow>0.4</energySlopeLow>
             <outputFileName>${outputFile}.triggers</outputFileName>
         </driver>	      
         <driver name="AidaSaveDriver"

Copied: java/trunk/steering-files/src/main/resources/org/hps/steering/users/mgraham/AlignmentMonitorTest.lcsim (from r2296, java/trunk/steering-files/src/main/resources/org/hps/steering/users/mgraham/MattsScrewAround.lcsim)
 =============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/mgraham/MattsScrewAround.lcsim	(original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/mgraham/AlignmentMonitorTest.lcsim	Fri Mar  6 18:30:47 2015
@@ -1,27 +1,32 @@
 <!-- 
-  Steering file for testing DataQualityMonitoring classes
+  Steering file for testing Alignment Monitoring classes
   @author Matt Graham <[log in to unmask]>
 -->
 <lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
     <execute>
         <driver name="EventMarkerDriver" />
         <driver name="SvtSensorSetup" />
-        <driver name="RawTrackerHitSensorSetup" />
-        <driver name="RawTrackerHitFitterDriver" />
-        <driver name="TrackerHitDriver" />
+      <driver name="TrackerDigiDriver"/>
+<!--  the 3 drivers below are for reading out 6-sample ADC data -->
+<!--        <driver name="RawTrackerHitSensorSetup" /> 
+        <driver name="RawTrackerHitFitterDriver" /> 
+        <driver name="TrackerHitDriver" />  -->
         <driver name="HelicalTrackHitDriver" />
-         <driver name="TrackerReconDriver"/> 
-          <driver name="TrackDataDriver"/>   
+         <driver name="TrackerL1to3ReconDriver"/> 
+  <driver name="TrackerL4to6ReconDriver"/> 
+<!--           <driver name="TrackDataDriver"/>   
         <driver name="EcalRawConverter" />
         <driver name="EcalClusterer" />
-        <driver name="ReconParticle" />
-<!--        <driver name="TrackingMonitoring" />
+       <driver name="ReconParticle" />
+        <driver name="TrackingMonitoring" />
         <driver name="TrackingResiduals"/>  
-        <driver name="V0Monitoring"/>  -->
-        <driver name="TrackingDQM" />
+        <driver name="V0Monitoring"/> -->
+        <driver name="SVTAlignment"/> 
+
+<!--        <driver name="TrackingDQM" />
         <driver name="TrackingResidualsDQM"/>  
         <driver name="FinalStateDQM"/>  
-        <driver name="V0DQM"/>  
+        <driver name="V0DQM"/>  -->
         <driver name="AidaSaveDriver"/> 
         <driver name="CleanupDriver" />
     </execute>
@@ -31,29 +36,43 @@
          <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
             <eventInterval>10</eventInterval>
         </driver>
+  <driver name="TrackerDigiDriver" type="org.hps.recon.tracking.SimpleTrackerDigiDriver">
+            <!-- <dropBadChannels>true</dropBadChannels> -->
+            <rawTrackerHitOutputCollectionName>SVTRawTrackerHits</rawTrackerHitOutputCollectionName>
+            <debug>false</debug>
+        </driver>
         <driver name="RawTrackerHitSensorSetup" type="org.lcsim.recon.tracking.digitization.sisim.config.RawTrackerHitSensorSetup" />
         <driver name="BadChannelFilter" type="org.hps.recon.tracking.SVTBadChannelFilterDriver" />
         <driver name="RawTrackerHitFitterDriver" type="org.hps.recon.tracking.RawTrackerHitFitterDriver">
             <fitAlgorithm>Analytic</fitAlgorithm>
             <useTimestamps>false</useTimestamps>
             <correctT0Shift>false</correctT0Shift>
-            <useTruthTime>true</useTruthTime>
-            <subtractTOF>true</subtractTOF>
+            <useTruthTime>false</useTruthTime>
+            <subtractTOF>false</subtractTOF>
+            <debug>false</debug>
         </driver>
         <driver name="TrackerHitDriver" type="org.hps.recon.tracking.DataTrackerHitDriver">
             <debug>false</debug>
         </driver>
         <driver name="HelicalTrackHitDriver" type="org.hps.recon.tracking.HelicalTrackHitDriver">
-            <debug>true</debug>
-            <clusterTimeCut>16.0</clusterTimeCut>
+            <debug>false</debug>
+<!--            <clusterTimeCut>16.0</clusterTimeCut> -->
             <maxSeperation>20.0</maxSeperation>
             <tolerance>1.0</tolerance>
             <saveAxialHits>false</saveAxialHits>
         </driver>
-        <driver name="TrackerReconDriver" type="org.hps.recon.tracking.TrackerReconDriver">
+        <driver name="TrackerL1to3ReconDriver" type="org.hps.recon.tracking.TrackerReconDriver">
             <debug>false</debug>
-            <strategyResource>/org/hps/recon/tracking/strategies/HPS-Full.xml</strategyResource>
+<!--            <strategyResource>/org/hps/recon/tracking/strategies/HPS-Full.xml</strategyResource> -->
+        <trackCollectionName>L1to3Tracks</trackCollectionName>
+            <strategyResource>/org/hps/recon/tracking/strategies/HPS-Full-L1-3.xml</strategyResource>
         </driver>
+ <driver name="TrackerL4to6ReconDriver" type="org.hps.recon.tracking.TrackerReconDriver">
+            <debug>false</debug>
+        <trackCollectionName>L4to6Tracks</trackCollectionName>
+            <strategyResource>/org/hps/recon/tracking/strategies/HPS-Full-L4-6.xml</strategyResource>
+        </driver>
+
         <driver name="TrackDataDriver" type="org.hps.recon.tracking.TrackDataDriver">
         </driver>
         <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
@@ -86,7 +105,9 @@
          <driver name="V0Monitoring" type="org.hps.monitoring.drivers.trackrecon.V0ReconPlots">         
         <outputPlots>v0recon</outputPlots>
         </driver>      
-
+  <driver name="SVTAlignment" type="org.hps.monitoring.drivers.trackrecon.SVTOpeningAlignment">         
+        <outputPlots>alignment</outputPlots>
+        </driver>
 
         <driver name="TrackingDQM" type="org.hps.analysis.dataquality.TrackingMonitoring">         
             <overwriteDB>false</overwriteDB>

Copied: java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full-3Hit.xml (from r2296, java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full-L1-3.xml)
 =============================================================================
--- java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full-L1-3.xml	(original)
+++ java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full-3Hit.xml	Fri Mar  6 18:30:47 2015
@@ -1,27 +1,39 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <StrategyList xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="http://lcsim.org/recon/tracking/seedtracker/strategybuilder/strategies.xsd">
     <TargetDetector>HPS-Full</TargetDetector>
-    <Strategy name="Layers 1-3 Tracking">
-        
-        <!--Cutoffs-->
-        
+    <Strategy name="L1to3 ">        
+        <!--Cutoffs-->        
         <MinPT>0.100</MinPT>
         <MinHits>3</MinHits>
-        <MinConfirm>0</MinConfirm>
-        
-        <MaxDCA>4.0</MaxDCA>
-        <MaxZ0>4.0</MaxZ0>
-
-        <MaxChisq>25.0</MaxChisq>
+        <MinConfirm>0</MinConfirm>        
+        <MaxDCA>100.0</MaxDCA>
+        <MaxZ0>100.0</MaxZ0>
+        <MaxChisq>2500.0</MaxChisq>
         <BadHitChisq>10.0</BadHitChisq>
-
         <!--Layers-->
-
         <Layers>                 
             <Layer type="Seed" layer_number="5" detector_name="Tracker" be_flag="BARREL" />
             <Layer type="Seed" layer_number="3" detector_name="Tracker" be_flag="BARREL" />
             <Layer type="Seed" layer_number="1" detector_name="Tracker" be_flag="BARREL" />          
         </Layers>
     </Strategy>
+    
+       <Strategy name="L4to6">        
+        <!--Cutoffs-->        
+        <MinPT>0.100</MinPT>
+        <MinHits>3</MinHits>
+        <MinConfirm>0</MinConfirm>        
+        <MaxDCA>100.0</MaxDCA>
+        <MaxZ0>100.0</MaxZ0>
+        <MaxChisq>2500.0</MaxChisq>
+        <BadHitChisq>10.0</BadHitChisq>
+        <!--Layers-->
+        <Layers>                 
+            <Layer type="Seed" layer_number="11" detector_name="Tracker" be_flag="BARREL" />
+            <Layer type="Seed" layer_number="9" detector_name="Tracker" be_flag="BARREL" />
+            <Layer type="Seed" layer_number="7" detector_name="Tracker" be_flag="BARREL" />          
+        </Layers>
+    </Strategy>
+    
 </StrategyList>