From f7837b04c6a47d0d0390dfd5efe388a5116fade5 Mon Sep 17 00:00:00 2001 From: Matthew Gignac Date: Thu, 10 Sep 2026 13:32:02 -0700 Subject: [PATCH 1/3] Implement FEE skimmer with trigger-based event selection Fill in the FEESkimmer template, which previously returned true for every event. The selection is applied in steps; the first is the trigger skim, which requires an FEE trigger bit (TS bits 18/19) in the 2019+ TS bank, so it applies to the 2019 and 2021 running periods. Events with no TSBank fail. Top and bottom trigger counts are tracked separately and reported by MultiSkimDriver at end of job. Cuts are configurable through the same resource-file mechanism used by the V0 and Moller skimmers; downstream FEE kinematic cuts can be added after the trigger step. Also fix the FEE output/parameter file setters in MultiSkimDriver, which were unreachable from a steering file. lcsim maps an XML element to a setter by stripping "set" and lowercasing only the first character (JobControlManager.processDriverParameters), so setFEEParamFile could only be matched by . Renaming to setFeeParamFile/setFeeOutputFile makes / work and matches the v0 and moller naming. The private Skimmer field is renamed feeSkimmer so it no longer obscures the FEESkimmer class name. Verified on run 14185 (hps_014185.evio.00200, 5000 events): 4575 events processed, 90 passed (1.97%), 36 FEE top + 54 FEE bottom. The leading electron momentum in the skimmed events peaks at 3.775 GeV against a 3.742 GeV beam. Claude-Session: https://claude.ai/code/session_01UQzovHnJ6JBihqzYQpZE6J --- .../java/org/hps/recon/skims/FEESkimmer.java | 151 ++++++++++-- .../org/hps/recon/skims/MultiSkimDriver.java | 28 ++- .../recon/skims/feeskim_parameters_ver0.txt | 3 + ...021_pass5_recon_skimmed_dataqual_fee.lcsim | 232 ++++++++++++++++++ 4 files changed, 382 insertions(+), 32 deletions(-) create mode 100644 recon/src/main/resources/org/hps/recon/skims/feeskim_parameters_ver0.txt create mode 100644 steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2021_pass5_recon_skimmed_dataqual_fee.lcsim diff --git a/recon/src/main/java/org/hps/recon/skims/FEESkimmer.java b/recon/src/main/java/org/hps/recon/skims/FEESkimmer.java index 33b34002d..bcd316c10 100644 --- a/recon/src/main/java/org/hps/recon/skims/FEESkimmer.java +++ b/recon/src/main/java/org/hps/recon/skims/FEESkimmer.java @@ -1,39 +1,146 @@ package org.hps.recon.skims; -import java.util.Set; +import java.util.Set; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; -import org.lcsim.event.EventHeader; +import org.hps.record.triggerbank.AbstractIntData; +import org.hps.record.triggerbank.TSData2019; +import org.lcsim.event.EventHeader; +import org.lcsim.event.GenericObject; +/** + * Skimmer for full-energy-electron (FEE) events. + * + * The selection is applied in steps; the first (and, for now, only) step is the + * trigger skim, which requires that the event was taken with an FEE trigger. + * The trigger bits are read from the 2019+ TS bank, so this is applicable to the + * 2019 and 2021 running periods. + */ public class FEESkimmer extends Skimmer { - private String _FEECandidateCollectionName = "UnconstrainedFEECandidates"; - private double _clusterTimingCut = 20.0; // only used if _tight is true - private double _v0Chi2Cut = 100.0; - private double _trackChi2Cut = 80.0; - private double _trackDtCut = 20.0; - private double _trackPMax = 0.9; - private double _v0PMax = 1.4; - private int _nHitsMin=10; - + //default parameters...ok for 2021 run + private String _tsBankCollectionName = "TSBank"; + private boolean _requireFEETrigger = true; + private boolean _useFEETopTrigger = true; + private boolean _useFEEBotTrigger = true; + private boolean _debug = false; + private int totalFEETopTriggers = 0; + private int totalFEEBotTriggers = 0; + @Override public boolean passSelection(EventHeader event){ - // System.out.println(this.getClass().getName()+":: in pass selection"); - boolean pass=true; - - - return pass; + if(_debug) + System.out.println(this.getClass().getName()+":: in pass selection"); + incrementEventProcessed(); + + //step 1: trigger skim + if(!passTriggerSelection(event)) + return false; + + incrementEventPassed(); + return true; + } + + /** + * Require an FEE trigger bit in the TS bank. If neither the top nor the + * bottom FEE trigger is requested, or if the trigger requirement is turned + * off altogether, every event passes this step. + */ + private boolean passTriggerSelection(EventHeader event){ + if(!_requireFEETrigger) + return true; + + if (!event.hasCollection(GenericObject.class, _tsBankCollectionName)) { + if(_debug)System.out.println(this.getClass().getName()+":: no "+_tsBankCollectionName+" collection in event"); + return false; + } + + boolean pass=false; + for (GenericObject tsBank : event.get(GenericObject.class, _tsBankCollectionName)) { + if (AbstractIntData.getTag(tsBank) != TSData2019.BANK_TAG) + continue; + TSData2019 triggerData = new TSData2019(tsBank); + if (_useFEETopTrigger && triggerData.isFEETopTrigger()) { + totalFEETopTriggers++; + pass=true; + } + if (_useFEEBotTrigger && triggerData.isFEEBotTrigger()) { + totalFEEBotTriggers++; + pass=true; + } + } + + if(_debug && !pass) + System.out.println(this.getClass().getName()+":: failed FEE trigger"); + + return pass; + } + + public FEESkimmer(String file) { + super(file, null); } + public FEESkimmer(String file, Set ignore) { + super(file, ignore); + } + @Override public void setParameters(String parsFileName){ + String infilePreResDir = "/org/hps/recon/skims/"; + String infile=infilePreResDir+parsFileName; + InputStream inParamStream = this.getClass().getResourceAsStream(infile); + System.out.println(this.getClass().getName()+":: reading in FEE skimming cuts from "+infile); + BufferedReader reader = new BufferedReader(new InputStreamReader(inParamStream)); + String line; + String delims = "[ ]+";// this will split strings between one or more spaces + try { + while ((line = reader.readLine()) != null) { + String[] tokens = line.split(delims); + String parName=tokens[0].replaceAll("\\s+",""); + System.out.println(this.getClass().getName()+":: parameter name = " + parName + "; value = " + tokens[1]); + putParam(parName,tokens[1]); + + } + } catch (IOException ex) { + System.out.println(this.getClass().getName()+":: died while reading parameters"); + return; + } return; } - - public FEESkimmer(String file) { - super(file, null); - // this(super.addFileExtension(file), null); + private void putParam(String parName, String var){ + if(parName.equals("tsBankCollectionName")) + _tsBankCollectionName=var; + else if(parName.equals("requireFEETrigger")) + _requireFEETrigger=Boolean.parseBoolean(var); + else if(parName.equals("useFEETopTrigger")) + _useFEETopTrigger=Boolean.parseBoolean(var); + else if(parName.equals("useFEEBotTrigger")) + _useFEEBotTrigger=Boolean.parseBoolean(var); + else + System.out.println(this.getClass().getName()+":: couldn't find "+parName+"!"); } - public FEESkimmer(String file, Set ignore) { - super(file, ignore); + + public int getTotalFEETopTriggers(){ + return totalFEETopTriggers; + } + + public int getTotalFEEBotTriggers(){ + return totalFEEBotTriggers; + } + + public void setRequireFEETrigger(boolean require){ + this._requireFEETrigger=require; + } + public void setUseFEETopTrigger(boolean use){ + this._useFEETopTrigger=use; + } + public void setUseFEEBotTrigger(boolean use){ + this._useFEEBotTrigger=use; + } + public void setTsBankCollectionName(String name){ + this._tsBankCollectionName=name; } } diff --git a/recon/src/main/java/org/hps/recon/skims/MultiSkimDriver.java b/recon/src/main/java/org/hps/recon/skims/MultiSkimDriver.java index 1ef486d33..193747bfb 100644 --- a/recon/src/main/java/org/hps/recon/skims/MultiSkimDriver.java +++ b/recon/src/main/java/org/hps/recon/skims/MultiSkimDriver.java @@ -31,17 +31,17 @@ public class MultiSkimDriver extends Driver { private String v0OutputFile="v0Skim"; private String threeBodyOutputFile="threeBodySkim"; - private String FEEOutputFile="FEESkim"; + private String feeOutputFile="FEESkim"; private String mollerOutputFile="mollerSkim"; private String v0ParamFile="default"; private String threeBodyParamFile="default"; - private String FEEParamFile="default"; + private String feeParamFile="default"; private String mollerParamFile="default"; private Skimmer v0Skimmer; private Skimmer threeBodySkimmer; - private Skimmer FEESkimmer; + private Skimmer feeSkimmer; private Skimmer mollerSkimmer; protected Double beamEnergy; @@ -62,6 +62,14 @@ public void endOfData() { System.out.println("Total number of V0s passing skim = "+((V0Skimmer)v0Skimmer).getTotalV0sPassing()); } + if(skimFEE){ + System.out.println("FEE skim events processed = " + feeSkimmer.getNProcessed()); + System.out.println("Events passed = " + feeSkimmer.getNPassed()); + System.out.println(" Pass efficiency = " + feeSkimmer.getPassFraction()); + System.out.println("Total number of FEE top triggers = "+((FEESkimmer)feeSkimmer).getTotalFEETopTriggers()); + System.out.println("Total number of FEE bottom triggers = "+((FEESkimmer)feeSkimmer).getTotalFEEBotTriggers()); + } + if(skimMoller){ System.out.println("Moller skim events processed = " + mollerSkimmer.getNProcessed()); System.out.println("Events passed = " + mollerSkimmer.getNPassed()); @@ -85,8 +93,8 @@ protected void process(EventHeader event) { writeSkimList.add(threeBodySkimmer); if(skimFEE && - FEESkimmer.passSelection(event)) - writeSkimList.add(FEESkimmer); + feeSkimmer.passSelection(event)) + writeSkimList.add(feeSkimmer); if(skimMoller && mollerSkimmer.passSelection(event)) writeSkimList.add(mollerSkimmer); @@ -130,8 +138,8 @@ public void setThreeBodyOutputFile(String outputFile){ this.threeBodyOutputFile=outputFile; } - public void setFEEOutputFile(String outputFile){ - this.FEEOutputFile=outputFile; + public void setFeeOutputFile(String outputFile){ + this.feeOutputFile=outputFile; } public void setMollerOutputFile(String outputFile){ this.mollerOutputFile=outputFile; @@ -154,7 +162,7 @@ protected void detectorChanged(Detector detector) { if(skimThreeBody) threeBodySkimmer=setupSkimmer("ThreeBody",threeBodyOutputFile, threeBodyParamFile); if(skimFEE) - FEESkimmer=setupSkimmer("FEE",FEEOutputFile, FEEParamFile); + feeSkimmer=setupSkimmer("FEE",feeOutputFile, feeParamFile); if(skimMoller) mollerSkimmer=setupSkimmer("Moller",mollerOutputFile, mollerParamFile); } @@ -188,8 +196,8 @@ public void setThreeBodyParamFile(String pFile){ this.threeBodyParamFile=pFile; } - public void setFEEParamFile(String pFile){ - this.FEEParamFile=pFile; + public void setFeeParamFile(String pFile){ + this.feeParamFile=pFile; } public void setMollerParamFile(String pFile){ diff --git a/recon/src/main/resources/org/hps/recon/skims/feeskim_parameters_ver0.txt b/recon/src/main/resources/org/hps/recon/skims/feeskim_parameters_ver0.txt new file mode 100644 index 000000000..593b1a395 --- /dev/null +++ b/recon/src/main/resources/org/hps/recon/skims/feeskim_parameters_ver0.txt @@ -0,0 +1,3 @@ +requireFEETrigger true +useFEETopTrigger true +useFEEBotTrigger true diff --git a/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2021_pass5_recon_skimmed_dataqual_fee.lcsim b/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2021_pass5_recon_skimmed_dataqual_fee.lcsim new file mode 100644 index 000000000..7565e69f6 --- /dev/null +++ b/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2021_pass5_recon_skimmed_dataqual_fee.lcsim @@ -0,0 +1,232 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1000 + + + svt_readout_overlap_good + + + + + + + + CONFIG + + + + + + + + + WARNING + EcalClusters + + + EcalClusters + EcalClustersCorr + + + + SVTRawTrackerHits + + + .5 + 1 + Pileup + Migrad + false + true + false + false + true + true + false + true + false + + + 24.0 + 3.0 + false + 400 + 4.0 + 1.0 + 3.0 + 3.0 + true + true + false + + + true + true + 2 + 1 + 8.881915381218574 + 39.249197341740356 + 8.37847994612359 + 11.546843987796496 + 9 + 9 + 8 + 8 + 3 + 2 + 40.0 + 5.0 + 12.320066328390354 + 9.206482863412027 + 5.862027198856136 + 5.508828061070076 + 5 + false + 400 + 0.3473319986601534 + true + 0.055 + 0.045 + true + -1.1 + 7.197594353612735 + false + + + EcalClustersCorr + KalmanFullTracks + KalmanFullTracks + TrackClusterMatcherMinDistance + UnconstrainedV0Candidates_KF + UnconstrainedV0Vertices_KF + BeamspotConstrainedV0Candidates_KF + BeamspotConstrainedV0Vertices_KF + TargetConstrainedV0Candidates_KF + TargetConstrainedV0Vertices_KF + FinalStateParticles_KF + true + false + true + false + 0.055 + 0.045 + -1.1 + 7.0 + 7.0 + 0.0 + 40.0 + 40 + 40 + false + true + true + false + true + UnconstrainedMollerCandidates_KF + UnconstrainedMollerVertices_KF + BeamspotConstrainedMollerCandidates_KF + BeamspotConstrainedMollerVertices_KF + TargetConstrainedMollerCandidates_KF + TargetConstrainedMollerVertices_KF + + + false + false + true + false + feeskim_parameters_ver0.txt + ${outputFile}_feeskim.slcio + FPGAData HelicalTrackHitRelations HelicalTrackHits HelicalTrackMCRelations KFGBLStripClusterData KFGBLStripClusterDataRelations ReadoutTimestamps RotatedHelicalTrackHitRelations RotatedHelicalTrackHits RotatedHelicalTrackMCRelations SVTFittedRawTrackerHits SVTShapeFitParameters SVTTrueHitRelations StripClusterer_SiTrackerHitStrip1D SVTRawTrackerHits FADCGenericHits HodoReadoutHits HodoCalHits EcalReadoutHits EcalUncalHits HodoGenericClusters VTPBank EcalClusters + + + all + EcalClustersCorr + false + + + all + + + all + KalmanFullTracks + + + FinalStateParticles_KF + all + true + + + FinalStateParticles_KF + UnconstrainedV0Candidates_KF + BeamspotConstrainedV0Candidates_KF + TargetConstrainedV0Candidates_KF + all + true + + + FinalStateParticles_KF + UnconstrainedV0Candidates_KF + BeamspotConstrainedV0Candidates_KF + TargetConstrainedV0Candidates_KF + all + true + + + ${outputFile}_data_quality_plots.root + + + + + ${outputFile}.slcio + + + From 4e7dc35502b76b452ca42eda09474fdbdb456aa4 Mon Sep 17 00:00:00 2001 From: Matthew Gignac Date: Thu, 10 Sep 2026 13:45:42 -0700 Subject: [PATCH 2/3] Add pass6dev 2021 data steering file writing V0 and FEE skims Clone of PhysicsRun2021_pass5_recon_skimmed_dataqual_physics.lcsim with the FEE skim enabled alongside the V0 skim, so a single job writes both ${outputFile}_v0skim.slcio and ${outputFile}_feeskim.slcio. The KalmanPatRecDriver configuration is taken verbatim from PhysicsRun2021MCRecon_KF_WithSpacing_pass6dev_lowp_physics_HitSmear_HitKill_14272.lcsim so data and MC share the same pattern recognition: maxPtInverse 8.88 -> 12.0, maxD0 39.25 -> 55.0, maxZ0 8.38 -> 20.0, minHits{Top,Bot}Iter2 8 -> 6, maxSharedHits 2 -> 3, maxChi2IncShare 5.86 -> 8.0, lowPhThresh dropped, and the explicit 23-entry seed strategy list with numStrategyIter1 17. The MC file's RawTrackerHitFitterDriver settings (useTimestamps, tsCorrectionScale, correctT0Shift, subtractTriggerTime, isMC) are deliberately not carried over; those are MC timing calibrations rather than tracking configuration, and the data values are kept. Claude-Session: https://claude.ai/code/session_01UQzovHnJ6JBihqzYQpZE6J --- ...s6dev_recon_skimmed_dataqual_physics.lcsim | 302 ++++++++++++++++++ 1 file changed, 302 insertions(+) create mode 100644 steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2021_pass6dev_recon_skimmed_dataqual_physics.lcsim diff --git a/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2021_pass6dev_recon_skimmed_dataqual_physics.lcsim b/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2021_pass6dev_recon_skimmed_dataqual_physics.lcsim new file mode 100644 index 000000000..d2f1af94a --- /dev/null +++ b/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2021_pass6dev_recon_skimmed_dataqual_physics.lcsim @@ -0,0 +1,302 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1000 + + + svt_readout_overlap_good + + + + + + + + CONFIG + + + + + + + + + WARNING + EcalClusters + + + EcalClusters + EcalClustersCorr + + + + SVTRawTrackerHits + + + .5 + 1 + Pileup + Migrad + false + true + false + false + true + true + false + true + false + + + 24.0 + 3.0 + false + 400 + 4.0 + 1.0 + 3.0 + 3.0 + true + true + false + + + true + true + 2 + 1 + + + 12.0 + + 55.0 + 20.0 + 11.546843987796496 + + + + + 9 + 9 + + 6 + 6 + + 3 + 3 + 40.0 + 5.0 + 12.320066328390354 + 9.206482863412027 + + + 8.0 + + 5.508828061070076 + 5 + false + + + 400 + + 0.3473319986601534 + true + 0.055 + 0.045 + true + -1.1 + + + + + 000BBS0 + 00BBS00 + 00ASBS0 + 00ABSS0 + 0A0SBS0 + 00B0BS0 + 00SBSA0 + 00SBB00 + 00SBAS0 + 0SA0BS0 + 0000SBB + 000SABS + 0BBS000 + 0SBB000 + 0000BBS + 000SSBA + 000BSSA + ABSS000 + SBB0000 + SABS000 + + BBS0000 + BSB0000 + 0BSB000 + + + 17 + + false + + + EcalClustersCorr + KalmanFullTracks + KalmanFullTracks + TrackClusterMatcherMinDistance + UnconstrainedV0Candidates_KF + UnconstrainedV0Vertices_KF + BeamspotConstrainedV0Candidates_KF + BeamspotConstrainedV0Vertices_KF + TargetConstrainedV0Candidates_KF + TargetConstrainedV0Vertices_KF + FinalStateParticles_KF + true + false + true + false + 0.055 + 0.045 + -1.1 + 7.0 + 7.0 + 0.0 + 40.0 + 40 + 40 + false + true + true + false + true + UnconstrainedMollerCandidates_KF + UnconstrainedMollerVertices_KF + BeamspotConstrainedMollerCandidates_KF + BeamspotConstrainedMollerVertices_KF + TargetConstrainedMollerCandidates_KF + TargetConstrainedMollerVertices_KF + + + true + false + true + false + v0skim_parameters_ver1.txt + ${outputFile}_v0skim.slcio + feeskim_parameters_ver0.txt + ${outputFile}_feeskim.slcio + FPGAData HelicalTrackHitRelations HelicalTrackHits HelicalTrackMCRelations KFGBLStripClusterData KFGBLStripClusterDataRelations ReadoutTimestamps RotatedHelicalTrackHitRelations RotatedHelicalTrackHits RotatedHelicalTrackMCRelations SVTFittedRawTrackerHits SVTShapeFitParameters SVTTrueHitRelations StripClusterer_SiTrackerHitStrip1D SVTRawTrackerHits FADCGenericHits HodoReadoutHits HodoCalHits EcalReadoutHits EcalUncalHits HodoGenericClusters VTPBank EcalClusters + + + all + EcalClustersCorr + false + + + all + + + all + KalmanFullTracks + + + FinalStateParticles_KF + all + true + + + FinalStateParticles_KF + UnconstrainedV0Candidates_KF + BeamspotConstrainedV0Candidates_KF + TargetConstrainedV0Candidates_KF + all + true + + + FinalStateParticles_KF + UnconstrainedV0Candidates_KF + BeamspotConstrainedV0Candidates_KF + TargetConstrainedV0Candidates_KF + all + true + + + ${outputFile}_data_quality_plots.root + + + + + ${outputFile}.slcio + + + From 97c525809427efa214423f6bfe97dc7f2594d725 Mon Sep 17 00:00:00 2001 From: Matthew Gignac Date: Thu, 10 Sep 2026 13:45:51 -0700 Subject: [PATCH 3/3] Drop the FEE-only pass5 steering file The pass6dev steering file writes the FEE skim alongside the V0 skim in a single job, so the standalone FEE-only variant is redundant. Claude-Session: https://claude.ai/code/session_01UQzovHnJ6JBihqzYQpZE6J --- ...021_pass5_recon_skimmed_dataqual_fee.lcsim | 232 ------------------ 1 file changed, 232 deletions(-) delete mode 100644 steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2021_pass5_recon_skimmed_dataqual_fee.lcsim diff --git a/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2021_pass5_recon_skimmed_dataqual_fee.lcsim b/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2021_pass5_recon_skimmed_dataqual_fee.lcsim deleted file mode 100644 index 7565e69f6..000000000 --- a/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2021_pass5_recon_skimmed_dataqual_fee.lcsim +++ /dev/null @@ -1,232 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1000 - - - svt_readout_overlap_good - - - - - - - - CONFIG - - - - - - - - - WARNING - EcalClusters - - - EcalClusters - EcalClustersCorr - - - - SVTRawTrackerHits - - - .5 - 1 - Pileup - Migrad - false - true - false - false - true - true - false - true - false - - - 24.0 - 3.0 - false - 400 - 4.0 - 1.0 - 3.0 - 3.0 - true - true - false - - - true - true - 2 - 1 - 8.881915381218574 - 39.249197341740356 - 8.37847994612359 - 11.546843987796496 - 9 - 9 - 8 - 8 - 3 - 2 - 40.0 - 5.0 - 12.320066328390354 - 9.206482863412027 - 5.862027198856136 - 5.508828061070076 - 5 - false - 400 - 0.3473319986601534 - true - 0.055 - 0.045 - true - -1.1 - 7.197594353612735 - false - - - EcalClustersCorr - KalmanFullTracks - KalmanFullTracks - TrackClusterMatcherMinDistance - UnconstrainedV0Candidates_KF - UnconstrainedV0Vertices_KF - BeamspotConstrainedV0Candidates_KF - BeamspotConstrainedV0Vertices_KF - TargetConstrainedV0Candidates_KF - TargetConstrainedV0Vertices_KF - FinalStateParticles_KF - true - false - true - false - 0.055 - 0.045 - -1.1 - 7.0 - 7.0 - 0.0 - 40.0 - 40 - 40 - false - true - true - false - true - UnconstrainedMollerCandidates_KF - UnconstrainedMollerVertices_KF - BeamspotConstrainedMollerCandidates_KF - BeamspotConstrainedMollerVertices_KF - TargetConstrainedMollerCandidates_KF - TargetConstrainedMollerVertices_KF - - - false - false - true - false - feeskim_parameters_ver0.txt - ${outputFile}_feeskim.slcio - FPGAData HelicalTrackHitRelations HelicalTrackHits HelicalTrackMCRelations KFGBLStripClusterData KFGBLStripClusterDataRelations ReadoutTimestamps RotatedHelicalTrackHitRelations RotatedHelicalTrackHits RotatedHelicalTrackMCRelations SVTFittedRawTrackerHits SVTShapeFitParameters SVTTrueHitRelations StripClusterer_SiTrackerHitStrip1D SVTRawTrackerHits FADCGenericHits HodoReadoutHits HodoCalHits EcalReadoutHits EcalUncalHits HodoGenericClusters VTPBank EcalClusters - - - all - EcalClustersCorr - false - - - all - - - all - KalmanFullTracks - - - FinalStateParticles_KF - all - true - - - FinalStateParticles_KF - UnconstrainedV0Candidates_KF - BeamspotConstrainedV0Candidates_KF - TargetConstrainedV0Candidates_KF - all - true - - - FinalStateParticles_KF - UnconstrainedV0Candidates_KF - BeamspotConstrainedV0Candidates_KF - TargetConstrainedV0Candidates_KF - all - true - - - ${outputFile}_data_quality_plots.root - - - - - ${outputFile}.slcio - - -