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>