diff --git a/Configuration/PyReleaseValidation/python/relval_2017.py b/Configuration/PyReleaseValidation/python/relval_2017.py
index 065b101eadc3e..51c1b99becfad 100644
--- a/Configuration/PyReleaseValidation/python/relval_2017.py
+++ b/Configuration/PyReleaseValidation/python/relval_2017.py
@@ -31,7 +31,7 @@
# 2021 (DD4HEP: TTbar, ZMM)
# (ele guns 10, 35, 1000; pho guns 10, 35; mu guns 1, 10, 100, 1000, QCD 3TeV, QCD Flat)
# (ZMM, TTbar, ZEE, MinBias, TTbar PU, TTbar PU premix, ZEE PU, TTbar design)
-# (TTbar trackingOnly, pixelTrackingOnly, trackingMkFit)
+# (TTbar trackingOnly, pixelTrackingOnly, trackingMkFit, trackdnn)
# (Patatrack pixel-only: ZMM - on CPU)
# (Patatrack pixel-only: TTbar - on CPU)
# (Patatrack ECAL-only: TTbar - on CPU)
@@ -58,7 +58,7 @@
11624.911, 11642.911,
11601.0,11602.0,11603.0,11604.0,11605.0,11606.0,11607.0,11608.0,11609.0,11630.0,11643.0,
11650.0,11634.0,11646.0,11640.0,11834.0,11834.99,11846.0,12024.0,
- 11634.1,11634.5,11634.7,
+ 11634.1,11634.5,11634.7,11634.91,
11650.501,
11634.501,
11634.511,
@@ -67,7 +67,7 @@
11834.13,
11723.17,
12434.0,12634.0,12634.99,
- 12834.0,13034.0,13034.99]
+ 12834.0,13034.0,13034.99,]
for numWF in numWFIB:
if not numWF in _upgrade_workflows: continue
workflows[numWF] = _upgrade_workflows[numWF]
diff --git a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py
index 6f1183db3d5d0..a773e827b7577 100644
--- a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py
+++ b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py
@@ -356,6 +356,26 @@ def condition(self, fragment, stepList, key, hasHarvest):
offset = 0.9,
)
+
+# Track DNN workflows
+class UpgradeWorkflow_trackdnn(UpgradeWorkflow):
+ def setup_(self, step, stepName, stepDict, k, properties):
+ stepDict[stepName][k] = merge([{'--procModifiers': 'trackdnn'}, stepDict[step][k]])
+
+ def condition(self, fragment, stepList, key, hasHarvest):
+ return fragment=="TTbar_14TeV" and '2021' in key
+upgradeWFs['trackdnn'] = UpgradeWorkflow_trackdnn(
+ steps = [
+ 'Reco',
+ ],
+ PU = [
+ 'Reco',
+ ],
+ suffix = '_trackdnn',
+ offset = 0.91,
+)
+
+
# MLPF workflows
class UpgradeWorkflow_mlpf(UpgradeWorkflow):
def setup_(self, step, stepName, stepDict, k, properties):
diff --git a/RecoTracker/FinalTrackSelectors/BuildFile.xml b/RecoTracker/FinalTrackSelectors/BuildFile.xml
index 09e00807dbbcf..c3b79de3f91c6 100644
--- a/RecoTracker/FinalTrackSelectors/BuildFile.xml
+++ b/RecoTracker/FinalTrackSelectors/BuildFile.xml
@@ -7,6 +7,8 @@
+
+
diff --git a/RecoTracker/FinalTrackSelectors/interface/TfGraphDefWrapper.h b/RecoTracker/FinalTrackSelectors/interface/TfGraphDefWrapper.h
new file mode 100644
index 0000000000000..5adaee9352d72
--- /dev/null
+++ b/RecoTracker/FinalTrackSelectors/interface/TfGraphDefWrapper.h
@@ -0,0 +1,20 @@
+#ifndef RecoTracker_FinalTrackSelectors_TfGraphDefWrapper_h
+#define RecoTracker_FinalTrackSelectors_TfGraphDefWrapper_h
+
+#include "PhysicsTools/TensorFlow/interface/TensorFlow.h"
+
+class TfGraphDefWrapper {
+public:
+ TfGraphDefWrapper(tensorflow::Session*);
+ ~TfGraphDefWrapper() { tensorflow::closeSession(session_); };
+ TfGraphDefWrapper(const TfGraphDefWrapper&) = delete;
+ TfGraphDefWrapper& operator=(const TfGraphDefWrapper&) = delete;
+ TfGraphDefWrapper(TfGraphDefWrapper&&) = delete;
+ TfGraphDefWrapper& operator=(TfGraphDefWrapper&&) = delete;
+ const tensorflow::Session* getSession() const;
+
+private:
+ tensorflow::Session* session_;
+};
+
+#endif
diff --git a/RecoTracker/FinalTrackSelectors/plugins/TfGraphDefProducer.cc b/RecoTracker/FinalTrackSelectors/plugins/TfGraphDefProducer.cc
new file mode 100644
index 0000000000000..8dd2dc3ee5be8
--- /dev/null
+++ b/RecoTracker/FinalTrackSelectors/plugins/TfGraphDefProducer.cc
@@ -0,0 +1,63 @@
+// -*- C++ -*-
+//
+// Package: RecoTracker/FinalTrackSelectors
+// Class: TFGraphDefProducer
+//
+/**\class TFGraphDefProducer
+ Description: Produces TfGraphRecord into the event containing a tensorflow GraphDef object that can be used for running inference on a pretrained network
+*/
+//
+// Original Author: Joona Havukainen
+// Created: Fri, 24 Jul 2020 08:04:00 GMT
+//
+//
+
+// system include files
+#include
+
+// user include files
+#include "FWCore/Framework/interface/ModuleFactory.h"
+#include "FWCore/Framework/interface/ESProducer.h"
+
+#include "FWCore/Framework/interface/ESHandle.h"
+#include "TrackingTools/Records/interface/TfGraphRecord.h"
+#include "RecoTracker/FinalTrackSelectors/interface/TfGraphDefWrapper.h"
+
+// class declaration
+
+class TfGraphDefProducer : public edm::ESProducer {
+public:
+ TfGraphDefProducer(const edm::ParameterSet&);
+ using ReturnType = std::unique_ptr;
+
+ ReturnType produce(const TfGraphRecord&);
+
+ static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
+
+private:
+ const std::string filename_;
+ // ----------member data ---------------------------
+};
+
+TfGraphDefProducer::TfGraphDefProducer(const edm::ParameterSet& iConfig)
+ : filename_(iConfig.getParameter("FileName").fullPath()) {
+ auto componentName = iConfig.getParameter("ComponentName");
+ setWhatProduced(this, componentName);
+}
+
+// ------------ method called to produce the data ------------
+std::unique_ptr TfGraphDefProducer::produce(const TfGraphRecord& iRecord) {
+ return std::make_unique(tensorflow::createSession(tensorflow::loadGraphDef(filename_), 1));
+}
+
+void TfGraphDefProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
+ edm::ParameterSetDescription desc;
+ desc.add("ComponentName", "tfGraphDef");
+ desc.add("FileName");
+ descriptions.add("tfGraphDefProducer", desc);
+}
+
+//define this as a plug-in
+#include "FWCore/PluginManager/interface/ModuleDef.h"
+#include "FWCore/Framework/interface/MakerMacros.h"
+DEFINE_FWK_EVENTSETUP_MODULE(TfGraphDefProducer);
diff --git a/RecoTracker/FinalTrackSelectors/plugins/TrackTfClassifier.cc b/RecoTracker/FinalTrackSelectors/plugins/TrackTfClassifier.cc
new file mode 100644
index 0000000000000..9052194f5b606
--- /dev/null
+++ b/RecoTracker/FinalTrackSelectors/plugins/TrackTfClassifier.cc
@@ -0,0 +1,107 @@
+#include "RecoTracker/FinalTrackSelectors/interface/TrackMVAClassifier.h"
+
+#include "FWCore/Framework/interface/EventSetup.h"
+#include "FWCore/Framework/interface/global/EDProducer.h"
+#include "DataFormats/TrackReco/interface/Track.h"
+#include "DataFormats/VertexReco/interface/Vertex.h"
+#include "FWCore/Framework/interface/ConsumesCollector.h"
+#include "getBestVertex.h"
+
+#include "TrackingTools/Records/interface/TfGraphRecord.h"
+#include "PhysicsTools/TensorFlow/interface/TensorFlow.h"
+#include "RecoTracker/FinalTrackSelectors/interface/TfGraphDefWrapper.h"
+
+namespace {
+ class TfDnn {
+ public:
+ TfDnn(const edm::ParameterSet& cfg)
+ : tfDnnLabel_(cfg.getParameter("tfDnnLabel")),
+ session_(nullptr)
+
+ {}
+
+ static const char* name() { return "TrackTfClassifier"; }
+
+ static void fillDescriptions(edm::ParameterSetDescription& desc) {
+ desc.add("tfDnnLabel", "trackSelectionTf");
+ }
+
+ void beginStream() {}
+
+ void initEvent(const edm::EventSetup& es) {
+ if (session_ == nullptr) {
+ edm::ESHandle tfDnnHandle;
+ es.get().get(tfDnnLabel_, tfDnnHandle);
+ session_ = tfDnnHandle.product()->getSession();
+ }
+ }
+
+ float operator()(reco::Track const& trk,
+ reco::BeamSpot const& beamSpot,
+ reco::VertexCollection const& vertices) const {
+ const auto& bestVertex = getBestVertex(trk, vertices);
+
+ tensorflow::Tensor input1(tensorflow::DT_FLOAT, {1, 29});
+ tensorflow::Tensor input2(tensorflow::DT_FLOAT, {1, 1});
+
+ input1.matrix()(0, 0) = trk.pt();
+ input1.matrix()(0, 1) = trk.innerMomentum().x();
+ input1.matrix()(0, 2) = trk.innerMomentum().y();
+ input1.matrix()(0, 3) = trk.innerMomentum().z();
+ input1.matrix()(0, 4) = trk.innerMomentum().rho();
+ input1.matrix()(0, 5) = trk.outerMomentum().x();
+ input1.matrix()(0, 6) = trk.outerMomentum().y();
+ input1.matrix()(0, 7) = trk.outerMomentum().z();
+ input1.matrix()(0, 8) = trk.outerMomentum().rho();
+ input1.matrix()(0, 9) = trk.ptError();
+ input1.matrix()(0, 10) = trk.dxy(bestVertex);
+ input1.matrix()(0, 11) = trk.dz(bestVertex);
+ input1.matrix()(0, 12) = trk.dxy(beamSpot.position());
+ input1.matrix()(0, 13) = trk.dz(beamSpot.position());
+ input1.matrix()(0, 14) = trk.dxyError();
+ input1.matrix()(0, 15) = trk.dzError();
+ input1.matrix()(0, 16) = trk.normalizedChi2();
+ input1.matrix()(0, 17) = trk.eta();
+ input1.matrix()(0, 18) = trk.phi();
+ input1.matrix()(0, 19) = trk.etaError();
+ input1.matrix()(0, 20) = trk.phiError();
+ input1.matrix()(0, 21) = trk.hitPattern().numberOfValidPixelHits();
+ input1.matrix()(0, 22) = trk.hitPattern().numberOfValidStripHits();
+ input1.matrix()(0, 23) = trk.ndof();
+ input1.matrix()(0, 24) = trk.hitPattern().numberOfLostTrackerHits(reco::HitPattern::MISSING_INNER_HITS);
+ input1.matrix()(0, 25) = trk.hitPattern().numberOfLostTrackerHits(reco::HitPattern::MISSING_OUTER_HITS);
+ input1.matrix()(0, 26) =
+ trk.hitPattern().trackerLayersTotallyOffOrBad(reco::HitPattern::MISSING_INNER_HITS);
+ input1.matrix()(0, 27) =
+ trk.hitPattern().trackerLayersTotallyOffOrBad(reco::HitPattern::MISSING_OUTER_HITS);
+ input1.matrix()(0, 28) = trk.hitPattern().trackerLayersWithoutMeasurement(reco::HitPattern::TRACK_HITS);
+
+ //Original algo as its own input, it will enter the graph so that it gets one-hot encoded, as is the preferred
+ //format for categorical inputs, where the labels do not have any metric amongst them
+ input2.matrix()(0, 0) = trk.originalAlgo();
+
+ //The names for the input tensors get locked when freezing the trained tensorflow model. The NamedTensors must
+ //match those names
+ tensorflow::NamedTensorList inputs;
+ inputs.resize(2);
+ inputs[0] = tensorflow::NamedTensor("x", input1);
+ inputs[1] = tensorflow::NamedTensor("y", input2);
+ std::vector outputs;
+
+ //evaluate the input
+ tensorflow::run(const_cast(session_), inputs, {"Identity"}, &outputs);
+ //scale output to be [-1, 1] due to convention
+ float output = 2.0 * outputs[0].matrix()(0, 0) - 1.0;
+ return output;
+ }
+
+ const std::string tfDnnLabel_;
+ const tensorflow::Session* session_;
+ };
+
+ using TrackTfClassifier = TrackMVAClassifier;
+} // namespace
+#include "FWCore/PluginManager/interface/ModuleDef.h"
+#include "FWCore/Framework/interface/MakerMacros.h"
+
+DEFINE_FWK_MODULE(TrackTfClassifier);
diff --git a/RecoTracker/FinalTrackSelectors/python/trackSelectionTf_cfi.py b/RecoTracker/FinalTrackSelectors/python/trackSelectionTf_cfi.py
new file mode 100644
index 0000000000000..cf4f536adceae
--- /dev/null
+++ b/RecoTracker/FinalTrackSelectors/python/trackSelectionTf_cfi.py
@@ -0,0 +1,5 @@
+from RecoTracker.FinalTrackSelectors.tfGraphDefProducer_cfi import tfGraphDefProducer as _tfGraphDefProducer
+trackSelectionTf = _tfGraphDefProducer.clone(
+ ComponentName = "trackSelectionTf",
+ FileName = "RecoTracker/FinalTrackSelectors/data/TrackTfClassifier/QCDFlatPU_QCDHighPt_ZEE_DisplacedSUSY_2020.pb"
+)
diff --git a/RecoTracker/FinalTrackSelectors/src/ES_TfGraphDefWrapper.cc b/RecoTracker/FinalTrackSelectors/src/ES_TfGraphDefWrapper.cc
new file mode 100644
index 0000000000000..112e741062ed4
--- /dev/null
+++ b/RecoTracker/FinalTrackSelectors/src/ES_TfGraphDefWrapper.cc
@@ -0,0 +1,4 @@
+#include "RecoTracker/FinalTrackSelectors/interface/TfGraphDefWrapper.h"
+#include "FWCore/Utilities/interface/typelookup.h"
+
+TYPELOOKUP_DATA_REG(TfGraphDefWrapper);
diff --git a/RecoTracker/FinalTrackSelectors/src/TfGraphDefWrapper.cc b/RecoTracker/FinalTrackSelectors/src/TfGraphDefWrapper.cc
new file mode 100644
index 0000000000000..1885f6768298e
--- /dev/null
+++ b/RecoTracker/FinalTrackSelectors/src/TfGraphDefWrapper.cc
@@ -0,0 +1,6 @@
+#include "RecoTracker/FinalTrackSelectors/interface/TfGraphDefWrapper.h"
+
+TfGraphDefWrapper::TfGraphDefWrapper(tensorflow::Session* session) : session_(session) {}
+const tensorflow::Session* TfGraphDefWrapper::getSession() const {
+ return const_cast(session_);
+}
diff --git a/RecoTracker/IterativeTracking/python/DetachedQuadStep_cff.py b/RecoTracker/IterativeTracking/python/DetachedQuadStep_cff.py
index df61a9fb7bad1..8f0f7e466fb3a 100644
--- a/RecoTracker/IterativeTracking/python/DetachedQuadStep_cff.py
+++ b/RecoTracker/IterativeTracking/python/DetachedQuadStep_cff.py
@@ -4,6 +4,7 @@
#for dnn classifier
from Configuration.ProcessModifiers.trackdnn_cff import trackdnn
+from RecoTracker.IterativeTracking.dnnQualityCuts import qualityCutDictionary
###############################################
# Low pT and detached tracks from pixel quadruplets
@@ -211,11 +212,11 @@
qualityCuts = [-0.5,0.0,0.5]
)
-from RecoTracker.FinalTrackSelectors.TrackLwtnnClassifier_cfi import *
-from RecoTracker.FinalTrackSelectors.trackSelectionLwtnn_cfi import *
-trackdnn.toReplaceWith(detachedQuadStep, TrackLwtnnClassifier.clone(
- src = 'detachedQuadStepTracks',
- qualityCuts = [-0.6, 0.05, 0.7]
+from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import *
+from RecoTracker.FinalTrackSelectors.trackSelectionTf_cfi import *
+trackdnn.toReplaceWith(detachedQuadStep, TrackTfClassifier.clone(
+ src = 'detachedQuadStepTracks',
+ qualityCuts = qualityCutDictionary['DetachedQuadStep']
))
highBetaStar_2018.toModify(detachedQuadStep,qualityCuts = [-0.7,0.0,0.5])
diff --git a/RecoTracker/IterativeTracking/python/DetachedTripletStep_cff.py b/RecoTracker/IterativeTracking/python/DetachedTripletStep_cff.py
index 658878cd8f8fd..a97483e20256f 100644
--- a/RecoTracker/IterativeTracking/python/DetachedTripletStep_cff.py
+++ b/RecoTracker/IterativeTracking/python/DetachedTripletStep_cff.py
@@ -8,6 +8,7 @@
#for dnn classifier
from Configuration.ProcessModifiers.trackdnn_cff import trackdnn
+from RecoTracker.IterativeTracking.dnnQualityCuts import qualityCutDictionary
###############################################
# Low pT and detached tracks from pixel triplets
@@ -259,11 +260,11 @@
qualityCuts = [-0.2,0.3,0.8]
))
-from RecoTracker.FinalTrackSelectors.TrackLwtnnClassifier_cfi import *
-from RecoTracker.FinalTrackSelectors.trackSelectionLwtnn_cfi import *
-trackdnn.toReplaceWith(detachedTripletStep, TrackLwtnnClassifier.clone(
+from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import *
+from RecoTracker.FinalTrackSelectors.trackSelectionTf_cfi import *
+trackdnn.toReplaceWith(detachedTripletStep, TrackTfClassifier.clone(
src = 'detachedTripletStepTracks',
- qualityCuts = [0.0, 0.4, 0.8],
+ qualityCuts = qualityCutDictionary['DetachedTripletStep'],
))
(trackdnn & fastSim).toModify(detachedTripletStep,vertices = 'firstStepPrimaryVerticesBeforeMixing')
diff --git a/RecoTracker/IterativeTracking/python/HighPtTripletStep_cff.py b/RecoTracker/IterativeTracking/python/HighPtTripletStep_cff.py
index efe2111bd5462..a249bad2528c6 100644
--- a/RecoTracker/IterativeTracking/python/HighPtTripletStep_cff.py
+++ b/RecoTracker/IterativeTracking/python/HighPtTripletStep_cff.py
@@ -4,6 +4,7 @@
#for dnn classifier
from Configuration.ProcessModifiers.trackdnn_cff import trackdnn
+from RecoTracker.IterativeTracking.dnnQualityCuts import qualityCutDictionary
### high-pT triplets ###
@@ -253,11 +254,11 @@
qualityCuts = [0.2,0.3,0.4]
)
-from RecoTracker.FinalTrackSelectors.TrackLwtnnClassifier_cfi import *
-from RecoTracker.FinalTrackSelectors.trackSelectionLwtnn_cfi import *
-trackdnn.toReplaceWith(highPtTripletStep, TrackLwtnnClassifier.clone(
- src = 'highPtTripletStepTracks',
- qualityCuts = [0.75, 0.775, 0.8],
+from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import *
+from RecoTracker.FinalTrackSelectors.trackSelectionTf_cfi import *
+trackdnn.toReplaceWith(highPtTripletStep, TrackTfClassifier.clone(
+ src = 'highPtTripletStepTracks',
+ qualityCuts = qualityCutDictionary['HighPtTripletStep'],
))
highBetaStar_2018.toModify(highPtTripletStep,qualityCuts = [-0.2,0.3,0.4])
diff --git a/RecoTracker/IterativeTracking/python/InitialStep_cff.py b/RecoTracker/IterativeTracking/python/InitialStep_cff.py
index e36252298f4e9..fb77d3ce0acaf 100644
--- a/RecoTracker/IterativeTracking/python/InitialStep_cff.py
+++ b/RecoTracker/IterativeTracking/python/InitialStep_cff.py
@@ -4,6 +4,7 @@
#for dnn classifier
from Configuration.ProcessModifiers.trackdnn_cff import trackdnn
+from RecoTracker.IterativeTracking.dnnQualityCuts import qualityCutDictionary
### STEP 0 ###
@@ -315,11 +316,11 @@
qualityCuts = [-0.95,-0.85,-0.75]
))
-from RecoTracker.FinalTrackSelectors.TrackLwtnnClassifier_cfi import *
-from RecoTracker.FinalTrackSelectors.trackSelectionLwtnn_cfi import *
-trackdnn.toReplaceWith(initialStep, TrackLwtnnClassifier.clone(
+from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import *
+from RecoTracker.FinalTrackSelectors.trackSelectionTf_cfi import *
+trackdnn.toReplaceWith(initialStep, TrackTfClassifier.clone(
src = 'initialStepTracks',
- qualityCuts = [0.0, 0.3, 0.6]
+ qualityCuts = qualityCutDictionary["InitialStep"]
))
(trackdnn & fastSim).toModify(initialStep,vertices = 'firstStepPrimaryVerticesBeforeMixing')
diff --git a/RecoTracker/IterativeTracking/python/JetCoreRegionalStep_cff.py b/RecoTracker/IterativeTracking/python/JetCoreRegionalStep_cff.py
index e9f44e537d619..8984deb616a59 100644
--- a/RecoTracker/IterativeTracking/python/JetCoreRegionalStep_cff.py
+++ b/RecoTracker/IterativeTracking/python/JetCoreRegionalStep_cff.py
@@ -2,6 +2,7 @@
#for dnn classifier
from Configuration.ProcessModifiers.trackdnn_cff import trackdnn
+from RecoTracker.IterativeTracking.dnnQualityCuts import qualityCutDictionary
# This step runs over all clusters
@@ -231,11 +232,11 @@
qualityCuts = [-0.2,0.0,0.4]
))
-from RecoTracker.FinalTrackSelectors.TrackLwtnnClassifier_cfi import *
-from RecoTracker.FinalTrackSelectors.trackSelectionLwtnn_cfi import *
-trackdnn.toReplaceWith(jetCoreRegionalStep, TrackLwtnnClassifier.clone(
- src = 'jetCoreRegionalStepTracks',
- qualityCuts = [0.6, 0.7, 0.8],
+from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import *
+from RecoTracker.FinalTrackSelectors.trackSelectionTf_cfi import *
+trackdnn.toReplaceWith(jetCoreRegionalStep, TrackTfClassifier.clone(
+ src = 'jetCoreRegionalStepTracks',
+ qualityCuts = qualityCutDictionary["JetCoreRegionalStep"],
))
fastSim.toModify(jetCoreRegionalStep,vertices = 'firstStepPrimaryVerticesBeforeMixing')
diff --git a/RecoTracker/IterativeTracking/python/LowPtQuadStep_cff.py b/RecoTracker/IterativeTracking/python/LowPtQuadStep_cff.py
index 806e68b098bcf..93ad826dd28c6 100644
--- a/RecoTracker/IterativeTracking/python/LowPtQuadStep_cff.py
+++ b/RecoTracker/IterativeTracking/python/LowPtQuadStep_cff.py
@@ -4,6 +4,7 @@
#for dnn classifier
from Configuration.ProcessModifiers.trackdnn_cff import trackdnn
+from RecoTracker.IterativeTracking.dnnQualityCuts import qualityCutDictionary
# NEW CLUSTERS (remove previously used clusters)
lowPtQuadStepClusters = _cfg.clusterRemoverForIter('LowPtQuadStep')
@@ -202,11 +203,11 @@
qualityCuts = [-0.7,-0.35,-0.15]
)
-from RecoTracker.FinalTrackSelectors.TrackLwtnnClassifier_cfi import *
-from RecoTracker.FinalTrackSelectors.trackSelectionLwtnn_cfi import *
-trackdnn.toReplaceWith(lowPtQuadStep, TrackLwtnnClassifier.clone(
- src = 'lowPtQuadStepTracks',
- qualityCuts = [0.2, 0.425, 0.75]
+from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import *
+from RecoTracker.FinalTrackSelectors.trackSelectionTf_cfi import *
+trackdnn.toReplaceWith(lowPtQuadStep, TrackTfClassifier.clone(
+ src = 'lowPtQuadStepTracks',
+ qualityCuts = qualityCutDictionary["LowPtQuadStep"]
))
highBetaStar_2018.toModify(lowPtQuadStep,qualityCuts = [-0.9,-0.35,-0.15])
diff --git a/RecoTracker/IterativeTracking/python/LowPtTripletStep_cff.py b/RecoTracker/IterativeTracking/python/LowPtTripletStep_cff.py
index 9ebd3a52da078..b20d60df49116 100644
--- a/RecoTracker/IterativeTracking/python/LowPtTripletStep_cff.py
+++ b/RecoTracker/IterativeTracking/python/LowPtTripletStep_cff.py
@@ -5,6 +5,7 @@
#for dnn classifier
from Configuration.ProcessModifiers.trackdnn_cff import trackdnn
+from RecoTracker.IterativeTracking.dnnQualityCuts import qualityCutDictionary
# NEW CLUSTERS (remove previously used clusters)
lowPtTripletStepClusters = _cfg.clusterRemoverForIter('LowPtTripletStep')
@@ -279,11 +280,11 @@
qualityCuts = [-0.4,0.0,0.3],
))
-from RecoTracker.FinalTrackSelectors.TrackLwtnnClassifier_cfi import *
-from RecoTracker.FinalTrackSelectors.trackSelectionLwtnn_cfi import *
-trackdnn.toReplaceWith(lowPtTripletStep, TrackLwtnnClassifier.clone(
- src = 'lowPtTripletStepTracks',
- qualityCuts = [0.2, 0.5, 0.8]
+from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import *
+from RecoTracker.FinalTrackSelectors.trackSelectionTf_cfi import *
+trackdnn.toReplaceWith(lowPtTripletStep, TrackTfClassifier.clone(
+ src = 'lowPtTripletStepTracks',
+ qualityCuts = qualityCutDictionary['LowPtTripletStep']
))
highBetaStar_2018.toModify(lowPtTripletStep,qualityCuts = [-0.7,-0.3,-0.1])
diff --git a/RecoTracker/IterativeTracking/python/MixedTripletStep_cff.py b/RecoTracker/IterativeTracking/python/MixedTripletStep_cff.py
index 2795d77035499..c3051b3053241 100644
--- a/RecoTracker/IterativeTracking/python/MixedTripletStep_cff.py
+++ b/RecoTracker/IterativeTracking/python/MixedTripletStep_cff.py
@@ -5,6 +5,7 @@
#for dnn classifier
from Configuration.ProcessModifiers.trackdnn_cff import trackdnn
+from RecoTracker.IterativeTracking.dnnQualityCuts import qualityCutDictionary
###############################################################
# Large impact parameter Tracking using mixed-triplet seeding #
@@ -344,11 +345,11 @@
qualityCuts = [-0.5,0.0,0.5]
))
-from RecoTracker.FinalTrackSelectors.TrackLwtnnClassifier_cfi import *
-from RecoTracker.FinalTrackSelectors.trackSelectionLwtnn_cfi import *
-trackdnn.toReplaceWith(mixedTripletStep, TrackLwtnnClassifier.clone(
+from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import *
+from RecoTracker.FinalTrackSelectors.trackSelectionTf_cfi import *
+trackdnn.toReplaceWith(mixedTripletStep, TrackTfClassifier.clone(
src = 'mixedTripletStepTracks',
- qualityCuts = [-0.8, -0.35, 0.1]
+ qualityCuts = qualityCutDictionary['MixedTripletStep']
))
(trackdnn & fastSim).toModify(mixedTripletStep,vertices = 'firstStepPrimaryVerticesBeforeMixing')
diff --git a/RecoTracker/IterativeTracking/python/PixelLessStep_cff.py b/RecoTracker/IterativeTracking/python/PixelLessStep_cff.py
index 433abb1c77412..de8694abee81b 100644
--- a/RecoTracker/IterativeTracking/python/PixelLessStep_cff.py
+++ b/RecoTracker/IterativeTracking/python/PixelLessStep_cff.py
@@ -5,6 +5,7 @@
#for dnn classifier
from Configuration.ProcessModifiers.trackdnn_cff import trackdnn
+from RecoTracker.IterativeTracking.dnnQualityCuts import qualityCutDictionary
##########################################################################
# Large impact parameter tracking using TIB/TID/TEC stereo layer seeding #
@@ -344,11 +345,11 @@
qualityCuts = [-0.4,0.0,0.4]
))
-from RecoTracker.FinalTrackSelectors.TrackLwtnnClassifier_cfi import *
-from RecoTracker.FinalTrackSelectors.trackSelectionLwtnn_cfi import *
-trackdnn.toReplaceWith(pixelLessStep, TrackLwtnnClassifier.clone(
+from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import *
+from RecoTracker.FinalTrackSelectors.trackSelectionTf_cfi import *
+trackdnn.toReplaceWith(pixelLessStep, TrackTfClassifier.clone(
src = 'pixelLessStepTracks',
- qualityCuts = [-0.6, -0.05, 0.5]
+ qualityCuts = qualityCutDictionary['PixelLessStep']
))
(trackdnn & fastSim).toModify(pixelLessStep,vertices = 'firstStepPrimaryVerticesBeforeMixing')
diff --git a/RecoTracker/IterativeTracking/python/PixelPairStep_cff.py b/RecoTracker/IterativeTracking/python/PixelPairStep_cff.py
index a6e5dcc276d9a..0b9d5c6dc5a77 100644
--- a/RecoTracker/IterativeTracking/python/PixelPairStep_cff.py
+++ b/RecoTracker/IterativeTracking/python/PixelPairStep_cff.py
@@ -5,6 +5,7 @@
#for dnn classifier
from Configuration.ProcessModifiers.trackdnn_cff import trackdnn
+from RecoTracker.IterativeTracking.dnnQualityCuts import qualityCutDictionary
# NEW CLUSTERS (remove previously used clusters)
pixelPairStepClusters = _cfg.clusterRemoverForIter('PixelPairStep')
@@ -338,11 +339,11 @@
)
trackingPhase1.toModify(pixelPairStep, mva=dict(GBRForestLabel = 'MVASelectorPixelPairStep_Phase1'))
-from RecoTracker.FinalTrackSelectors.TrackLwtnnClassifier_cfi import *
-from RecoTracker.FinalTrackSelectors.trackSelectionLwtnn_cfi import *
-trackdnn.toReplaceWith(pixelPairStep, TrackLwtnnClassifier.clone(
- src = 'pixelPairStepTracks',
- qualityCuts = [-0.6, -0.1, 0.4]
+from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import *
+from RecoTracker.FinalTrackSelectors.trackSelectionTf_cfi import *
+trackdnn.toReplaceWith(pixelPairStep, TrackTfClassifier.clone(
+ src='pixelPairStepTracks',
+ qualityCuts=qualityCutDictionary['PixelPairStep']
))
highBetaStar_2018.toModify(pixelPairStep,qualityCuts = [-0.95,0.0,0.3])
diff --git a/RecoTracker/IterativeTracking/python/TobTecStep_cff.py b/RecoTracker/IterativeTracking/python/TobTecStep_cff.py
index 2613ed80978b4..af527c2b64769 100644
--- a/RecoTracker/IterativeTracking/python/TobTecStep_cff.py
+++ b/RecoTracker/IterativeTracking/python/TobTecStep_cff.py
@@ -4,6 +4,7 @@
#for dnn classifier
from Configuration.ProcessModifiers.trackdnn_cff import trackdnn
+from RecoTracker.IterativeTracking.dnnQualityCuts import qualityCutDictionary
#######################################################################
# Very large impact parameter tracking using TOB + TEC ring 5 seeding #
@@ -372,11 +373,11 @@
qualityCuts = [-0.6,-0.45,-0.3]
))
-from RecoTracker.FinalTrackSelectors.TrackLwtnnClassifier_cfi import *
-from RecoTracker.FinalTrackSelectors.trackSelectionLwtnn_cfi import *
-trackdnn.toReplaceWith(tobTecStep, TrackLwtnnClassifier.clone(
+from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import *
+from RecoTracker.FinalTrackSelectors.trackSelectionTf_cfi import *
+trackdnn.toReplaceWith(tobTecStep, TrackTfClassifier.clone(
src = 'tobTecStepTracks',
- qualityCuts = [-0.4, -0.25, -0.1]
+ qualityCuts = qualityCutDictionary["TobTecStep"]
))
(trackdnn & fastSim).toModify(tobTecStep,vertices = 'firstStepPrimaryVerticesBeforeMixing')
diff --git a/RecoTracker/IterativeTracking/python/dnnQualityCuts.py b/RecoTracker/IterativeTracking/python/dnnQualityCuts.py
new file mode 100644
index 0000000000000..315e2a9e94dd3
--- /dev/null
+++ b/RecoTracker/IterativeTracking/python/dnnQualityCuts.py
@@ -0,0 +1,14 @@
+# https://indico.cern.ch/event/947686/contributions/3981867/attachments/2090510/3512658/TrackingDNN_24_8_2020.pdf
+qualityCutDictionary = {
+ 'InitialStep': [-0.2, 0.15, 0.40],
+ 'LowPtQuadStep': [-0.2, 0.10, 0.45],
+ 'HighPtTripletStep': [0.55, 0.60, 0.65],
+ 'LowPtTripletStep': [-0.2, -0.1, 0.10],
+ 'DetachedQuadStep': [-0.3, 0.20, 0.55],
+ 'DetachedTripletStep': [-0.5, -0.1, 0.40],
+ 'PixelPairStep': [-0.4, -0.35, -0.3],
+ 'MixedTripletStep': [-0.7, -0.5, -0.3],
+ 'PixelLessStep': [-0.8, -0.7, -0.6],
+ 'TobTecStep': [-0.6, -0.55, -0.5],
+ 'JetCoreRegionalStep': [0.20, 0.30, 0.50]
+}
diff --git a/RecoTracker/IterativeTracking/python/iterativeTkUtils.py b/RecoTracker/IterativeTracking/python/iterativeTkUtils.py
index 1cf5d937276a9..dbaead72d3951 100644
--- a/RecoTracker/IterativeTracking/python/iterativeTkUtils.py
+++ b/RecoTracker/IterativeTracking/python/iterativeTkUtils.py
@@ -22,7 +22,7 @@ def getMVASelectors(postfix):
classifiers = []
if typeName == "ClassifierMerger":
classifiers = mod.inputClassifiers.value()
- elif "TrackMVAClassifier" in typeName or "TrackLwtnnClassifier" in typeName:
+ elif "TrackMVAClassifier" in typeName or "TrackLwtnnClassifier" or "TrackTfClassifier" in typeName:
classifiers = [iterName]
if len(classifiers) > 0:
ret[iterName] = (iterName+"Tracks", classifiers)
diff --git a/RecoTracker/IterativeTracking/python/iterativeTk_cff.py b/RecoTracker/IterativeTracking/python/iterativeTk_cff.py
index e4ff4ed8e4314..89efb64bd62aa 100644
--- a/RecoTracker/IterativeTracking/python/iterativeTk_cff.py
+++ b/RecoTracker/IterativeTracking/python/iterativeTk_cff.py
@@ -24,7 +24,10 @@
from RecoTracker.ConversionSeedGenerators.ConversionStep_cff import *
import RecoTracker.IterativeTracking.iterativeTkConfig as _cfg
+from RecoTracker.FinalTrackSelectors.TrackTfClassifier_cfi import *
+
+trackdnn_source = cms.ESSource("EmptyESSource", recordName = cms.string("TfGraphRecord"), firstValid = cms.vuint32(1), iovIsRunNotTime = cms.bool(True) )
iterTrackingEarlyTask = _cfg.createEarlyTask("", "", globals())
for _eraName, _postfix, _era in _cfg.nonDefaultEras():
_era.toReplaceWith(iterTrackingEarlyTask, _cfg.createEarlyTask(_eraName, _postfix, globals()))
@@ -40,4 +43,8 @@
ConvStepTask,
conversionStepTracks
)
+
+_iterTrackingTask_trackdnn = iterTrackingTask.copy()
+_iterTrackingTask_trackdnn.add(trackdnn_source)
+trackdnn.toReplaceWith(iterTrackingTask, _iterTrackingTask_trackdnn)
iterTracking = cms.Sequence(iterTrackingTask)
diff --git a/TrackingTools/Records/interface/Records.h b/TrackingTools/Records/interface/Records.h
index f5e9e7d7e41b6..fd776205f933c 100644
--- a/TrackingTools/Records/interface/Records.h
+++ b/TrackingTools/Records/interface/Records.h
@@ -2,3 +2,4 @@
#include "TrackingTools/Records/interface/DetIdAssociatorRecord.h"
#include "TrackingTools/Records/interface/TransientRecHitRecord.h"
#include "TrackingTools/Records/interface/TransientTrackRecord.h"
+#include "TrackingTools/Records/interface/TfGraphRecord.h"
diff --git a/TrackingTools/Records/interface/TfGraphRecord.h b/TrackingTools/Records/interface/TfGraphRecord.h
new file mode 100644
index 0000000000000..cad4bfba9f998
--- /dev/null
+++ b/TrackingTools/Records/interface/TfGraphRecord.h
@@ -0,0 +1,22 @@
+#ifndef TrackingTools_Records_TfGraphRecord_h
+#define TrackingTools_Records_TfGraphRecord_h
+// -*- C++ -*-
+//
+// Package: TrackingTools/Records
+// Class : TfGraphRecord
+//
+/**\class TfGraphRecord TfGraphRecord.h TrackingTools/Records/interface/TfGraphRecord.h
+ Description: Class to hold Record of a Tensorflow GraphDef that can be used to serve a pretrained tensorflow model for inference
+ Usage:
+ Used by DataFormats/TrackTfGraph to produce the GraphRecord and RecoTrack/FinalTrackSelection/plugins/TrackTfClassifier.cc to evaluate a track using the graph.
+*/
+//
+// Author: Joona Havukainen
+// Created: Fri, 24 Jul 2020 07:39:35 GMT
+//
+
+#include "FWCore/Framework/interface/EventSetupRecordImplementation.h"
+
+class TfGraphRecord : public edm::eventsetup::EventSetupRecordImplementation {};
+
+#endif
diff --git a/TrackingTools/Records/src/TfGraphRecord.cc b/TrackingTools/Records/src/TfGraphRecord.cc
new file mode 100644
index 0000000000000..edcbf58893369
--- /dev/null
+++ b/TrackingTools/Records/src/TfGraphRecord.cc
@@ -0,0 +1,12 @@
+// -*- C++ -*-
+//
+// Package: TrackingTools/Records
+// Class : TfGraphRecord
+//
+// Author: Joona Havukainen
+// Created: Fri, 24 Jul 2020 07:39:35 GMT
+
+#include "TrackingTools/Records/interface/TfGraphRecord.h"
+#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h"
+
+EVENTSETUP_RECORD_REG(TfGraphRecord);