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