diff --git a/part3/cms-hls4ml/L1TMLDemo/L1TMLDemo_v1/L1TMLDemo_emulator_v1.cpp b/part3/cms-hls4ml/L1TMLDemo/L1TMLDemo_v1/L1TMLDemo_emulator_v1.cpp
index 2145b667734edc84b5473b54c3f1d7078c8b9d47..823f74d641e826ea544594c30d6026a7547a58ba 100644
--- a/part3/cms-hls4ml/L1TMLDemo/L1TMLDemo_v1/L1TMLDemo_emulator_v1.cpp
+++ b/part3/cms-hls4ml/L1TMLDemo/L1TMLDemo_v1/L1TMLDemo_emulator_v1.cpp
@@ -10,7 +10,7 @@ class L1TMLDemo_emulator_v1 : public hls4mlEmulator::Model {
 
 private:
     // Note: these need to match the defined model
-    static const int N_INPUT=26;
+    static const int N_INPUT=56;
     static const int N_OUTPUT=1;
     input_t _input[N_INPUT];
     result_t _result[N_OUTPUT];
@@ -33,7 +33,7 @@ public:
   virtual void read_result(std::any result) {
     // copy result
     result_t *result_p = std::any_cast<result_t*>(result);
-    *result_p = _result;
+    *result_p = *_result;
   }
   
 };
diff --git a/part3/cmssw/src/L1Trigger/L1TMLDemo/plugins/l1tDemoMLAnalyzer.cc b/part3/cmssw/src/L1Trigger/L1TMLDemo/plugins/l1tDemoMLAnalyzer.cc
index 6989315d52c03981be3c43f01b5959bb2e01f3bf..b8d2b6ab178066d31b336f56679bb8b1cdea0dea 100644
--- a/part3/cmssw/src/L1Trigger/L1TMLDemo/plugins/l1tDemoMLAnalyzer.cc
+++ b/part3/cmssw/src/L1Trigger/L1TMLDemo/plugins/l1tDemoMLAnalyzer.cc
@@ -47,8 +47,12 @@ private:
   unsigned nJet;
   unsigned nNNIn;
 
+  typedef ap_fixed<16,6,AP_RND_CONV,AP_SAT> scale_t;
+  typedef ap_fixed<16,6,AP_RND_CONV,AP_SAT> bias_t;
   // hls4ml emulator model path
   std::string model_so_path;
+  std::vector<scale_t> scale;
+  std::vector<bias_t> bias;
 
 };
 
@@ -64,11 +68,18 @@ L1TMLDemoProducer::L1TMLDemoProducer(const edm::ParameterSet& cfg){
   nTau = cfg.getParameter<unsigned>("nTau");
   nJet = cfg.getParameter<unsigned>("nJet");
   // total number of inputs to NN
-  nNNIn = 3 * (1 + nMu + nEG + nTau + nJet);
+  nNNIn = 2 + 3 * (nMu + nEG + nTau + nJet);
 
   // store the path to the .so file
   model_so_path = cfg.getParameter<std::string>("model_so_path");
 
+  // get the scaler parameters and cast them to fixed point types
+  std::vector<double> scale_double = cfg.getParameter<std::vector<double>>("scale");
+  std::transform(scale_double.begin(), scale_double.end(), std::back_inserter(scale), [](double s){ return (scale_t)s; });
+  // get the bias parameters and cast them to fixed point types
+  std::vector<double> bias_double = cfg.getParameter<std::vector<double>>("bias");
+  std::transform(bias_double.begin(), bias_double.end(), std::back_inserter(bias), [](double s){ return (bias_t)s; });
+
   // produce
   produces<nanoaod::FlatTable>("L1TMLDemo");
 
@@ -92,55 +103,59 @@ void L1TMLDemoProducer::produce(edm::StreamID id, edm::Event& iEvent, const edm:
   iEvent.getByToken(jetToken, jets);
   iEvent.getByToken(sumToken, sums);
 
-  // The unscaled inputs are hwInts apart from ET that is in GeV with 0.5 GeV LSB
+  // The unscaled inputs are hwInts
   // ap_fixed<14,13> is wide enough for all the ET, pT, eta, phi
   ap_fixed<14,13>* X_unscaled = new ap_fixed<14,13>[nNNIn];
+  // initialize to zeros
+  for(unsigned i = 0; i < nNNIn; i++){
+    X_unscaled[i] = 0;
+  }
 
   // fill the inputs
   unsigned ix = 0;
   // sums first, just find the MET
   for(unsigned i = 0; i < sums->size(0); i++){
     if(sums->at(0, i).getType() == l1t::EtSum::EtSumType::kMissingEt){
-      X_unscaled[ix++] = (float)(sums->at(0,i).hwPt())/2;
-      X_unscaled[ix++] = 0; // for eta
+      X_unscaled[ix++] = sums->at(0,i).hwPt();
       X_unscaled[ix++] = sums->at(0,i).hwPhi();
     }
   }
-  // muons next
-  ix=3 * ( 1 );
-  for(unsigned i = 0; i < std::min(nMu, muons->size(0)); i++){
-    X_unscaled[ix++] = (float)(muons->at(0, i).hwPt())/2;
-    X_unscaled[ix++] = muons->at(0, i).hwEta();
-    X_unscaled[ix++] = muons->at(0, i).hwPhi();
+  // jets next
+  ix = 2 * ( 1 );
+  for(unsigned i = 0; i < std::min(nJet, jets->size(0)); i++){
+    X_unscaled[ix++] = jets->at(0, i).hwPt();
+    X_unscaled[ix++] = jets->at(0, i).hwEta();
+    X_unscaled[ix++] = jets->at(0, i).hwPhi();
   }
   // egammas next
-  ix = 3 * ( 1 + nMu );
+  ix = 2 * ( 1 + nJet );
   for(unsigned i = 0; i < std::min(nEG, egammas->size(0)); i++){
-    X_unscaled[ix++] = (float)(egammas->at(0, i).hwPt())/2;
+    X_unscaled[ix++] = egammas->at(0, i).hwPt();
     X_unscaled[ix++] = egammas->at(0, i).hwEta();
     X_unscaled[ix++] = egammas->at(0, i).hwPhi();
   }
+  // muons next
+  ix = 2 * ( 1 + nJet + nEG );
+  for(unsigned i = 0; i < std::min(nMu, muons->size(0)); i++){
+    X_unscaled[ix++] = muons->at(0, i).hwPt();
+    X_unscaled[ix++] = muons->at(0, i).hwEta();
+    X_unscaled[ix++] = muons->at(0, i).hwPhi();
+  }
   // taus next
-  ix = 3 * ( 1 + nMu + nEG );
+  ix = 2 * ( 1 + nJet + nEG + nMu );
   for(unsigned i = 0; i < std::min(nTau, taus->size(0)); i++){
-    X_unscaled[ix++] = (float)(taus->at(0, i).hwPt())/2;
+    X_unscaled[ix++] = taus->at(0, i).hwPt();
     X_unscaled[ix++] = taus->at(0, i).hwEta();
     X_unscaled[ix++] = taus->at(0, i).hwPhi();
   }
-  // jets last
-  ix = 3 * ( 1 + nMu + nEG + nTau );
-  for(unsigned i = 0; i < std::min(nEG, jets->size(0)); i++){
-    X_unscaled[ix++] = (float)(jets->at(0, i).hwPt())/2;
-    X_unscaled[ix++] = jets->at(0, i).hwEta();
-    X_unscaled[ix++] = jets->at(0, i).hwPhi();
-  }
-
 
   ap_fixed<16,7,AP_RND,AP_SAT>* X_scaled = new ap_fixed<16,7,AP_RND,AP_SAT>[nNNIn];
   // scale the inputs
   for(unsigned i = 0; i < nNNIn; i++){
-    X_scaled[i] = X_unscaled[i]; // placeholder
+    X_scaled[i] = (X_unscaled[i] - bias[i]) * scale[i];
+    //std::cout << X_scaled[i] << ",";
   }
+  //std::cout << std::endl;
 
   // load the NN emulator object
   hls4mlEmulator::ModelLoader loader(model_so_path);
diff --git a/part3/cmssw/src/L1Trigger/L1TMLDemo/test/L1TMLDemo_NanoAOD.root b/part3/cmssw/src/L1Trigger/L1TMLDemo/test/L1TMLDemo_NanoAOD.root
deleted file mode 100644
index c51965712f6945cce9169ecab07e55f4248c6c72..0000000000000000000000000000000000000000
Binary files a/part3/cmssw/src/L1Trigger/L1TMLDemo/test/L1TMLDemo_NanoAOD.root and /dev/null differ
diff --git a/part3/cmssw/src/L1Trigger/L1TMLDemo/test/demoL1TMLNtuple.py b/part3/cmssw/src/L1Trigger/L1TMLDemo/test/demoL1TMLNtuple.py
index 39abe09ede4fa3de0f0028c24ef153632fdc8413..dc4ae28d3f6bde85c28c54c0dff06064fc49c479 100644
--- a/part3/cmssw/src/L1Trigger/L1TMLDemo/test/demoL1TMLNtuple.py
+++ b/part3/cmssw/src/L1Trigger/L1TMLDemo/test/demoL1TMLNtuple.py
@@ -1,6 +1,22 @@
+# argparsing
+from FWCore.ParameterSet.VarParsing import VarParsing
+options = VarParsing('python')
+options.register('signal', False, VarParsing.multiplicity.singleton, VarParsing.varType.bool)
+options.parseArguments()
+
 # import of standard configurations
 import FWCore.ParameterSet.Config as cms
 
+# load the model scales
+# note you should not really load these from a pkl file for real CMSSW
+import os
+import pickle
+scales_file = os.environ['MLATL1T_DIR'] + '/part1_outputs/hwScaler.pkl'
+scales = pickle.load(open(scales_file, 'rb'))
+# the standard scaler does (x - u) / s while we will do (x - u) * (1 / s) so invert s here
+scale = 1. / scales.scale_
+bias = scales.mean_
+
 process = cms.Process("l1tMLDemo")
 
 process.load('Configuration.StandardSequences.Services_cff')
@@ -13,38 +29,44 @@ process.load('Configuration.StandardSequences.EndOfProcess_cff')
 process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
 
 process.maxEvents = cms.untracked.PSet(
-    input = cms.untracked.int32(-1)
+    input = cms.untracked.int32(100_000)
 )
 
+filelist = 'files_signal.txt' if options.signal else 'files_background.txt'
+input_files = open(filelist).readlines()
+
 process.source = cms.Source (
     "PoolSource",
-    fileNames = cms.untracked.vstring('/store/relval/CMSSW_13_3_0_pre3/RelValMinBias_14TeV/GEN-SIM-DIGI-RAW/132X_mcRun3_2023_realistic_v4-v1/2580000/0911bb55-82fb-4a51-bb8f-be79f61b020d.root'),
+    fileNames = cms.untracked.vstring(input_files),
 )
 
 from Configuration.AlCa.GlobalTag import GlobalTag
 process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:startup', '')
 
 process.l1tDemoMLProducer = cms.EDProducer('L1TMLDemoProducer',
-    muToken    = cms.InputTag("simGmtStage2Digis"),
-    egToken    = cms.InputTag("simCaloStage2Digis"),
-    tauToken   = cms.InputTag("simCaloStage2Digis"),
-    jetToken   = cms.InputTag("simCaloStage2Digis"),
-    etSumToken = cms.InputTag("simCaloStage2Digis"),
+    muToken    = cms.InputTag("gmtStage2Digis:Muon"),
+    egToken    = cms.InputTag("caloStage2Digis:EGamma"),
+    tauToken   = cms.InputTag("caloStage2Digis:Tau"),
+    jetToken   = cms.InputTag("caloStage2Digis:Jet"),
+    etSumToken = cms.InputTag("caloStage2Digis:EtSum"),
     nMu = cms.uint32(2),
-    nEg = cms.uint32(2),
+    nEg = cms.uint32(8),
     nTau = cms.uint32(0),
-    nJet = cms.uint32(4),
-    model_so_path = cms.string("../data/L1TMLDemo_v1")
+    nJet = cms.uint32(8),
+    model_so_path = cms.string("../data/L1TMLDemo_v1"),
+    scale = cms.vdouble(*scale),
+    bias = cms.vdouble(*bias),
 )
 
 process.path = cms.Path(
     process.l1tDemoMLProducer
 )
 
+oname = 'L1TMLDemo_NanoAOD_signal.root' if options.signal else 'L1TMLDemo_NanoAOD_background.root'
 process.outnano = cms.OutputModule("NanoAODOutputModule",
-    fileName = cms.untracked.string("L1TMLDemo_NanoAOD.root"),
+    fileName = cms.untracked.string(oname),
     outputCommands = cms.untracked.vstring("drop *", "keep nanoaodFlatTable_*_*_*"),
     compressionLevel = cms.untracked.int32(4),
     compressionAlgorithm = cms.untracked.string("ZLIB"),
 )
-process.end = cms.EndPath(process.outnano)
\ No newline at end of file
+process.end = cms.EndPath(process.outnano)
diff --git a/part3/cmssw/src/L1Trigger/L1TMLDemo/test/demoL1TMLNtuple.root b/part3/cmssw/src/L1Trigger/L1TMLDemo/test/demoL1TMLNtuple.root
deleted file mode 100644
index 349d83e7446540ff9d4c3e19ec9d33441e5a4a31..0000000000000000000000000000000000000000
Binary files a/part3/cmssw/src/L1Trigger/L1TMLDemo/test/demoL1TMLNtuple.root and /dev/null differ
diff --git a/part3/cmssw/src/L1Trigger/L1TMLDemo/test/files_background.txt b/part3/cmssw/src/L1Trigger/L1TMLDemo/test/files_background.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7ea82904845eefa132e9b7e2ab8aebf0065b7621
--- /dev/null
+++ b/part3/cmssw/src/L1Trigger/L1TMLDemo/test/files_background.txt
@@ -0,0 +1,157 @@
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/f68803d4-9e03-4fa6-a80c-49d1d80d0080.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/2137dfb9-8afd-4429-b3a2-c265f2f72614.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/b6248392-bd52-4683-acfc-3007976ce756.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/492da0ca-5e0f-4007-b092-7c2dd8072b7e.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/894c5a96-b831-40d8-85f1-78d4b99b4544.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/5ea40661-3f00-4d70-9fbf-1395e0fe9f8a.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/7f65d6aa-a702-40c9-9440-092bfa259314.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/2ab081db-d65a-4ac3-ba6b-d67639fa3f54.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/388161b7-4e4f-485b-a7bb-2d50f5a779e3.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/50a12efd-02c2-47b2-8ff6-2e93a4ee3bde.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/3109a8c0-2476-47e9-80f8-172a0a060dfd.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/92832a3c-035f-481a-82e4-7862b5560f2f.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/601814b7-e3a4-4cf1-aac6-30bec0969d32.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/6a648ddd-af3e-4c09-8e61-98170d9c6102.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/63e15b86-9460-4671-b07e-505c211238ec.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/ba7ecc1b-26e6-4a63-b6d4-db4b638abc7c.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/341f1c9f-9266-4af9-8075-19435965b198.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/548b7c8c-36ec-4d88-a48e-4ac00600891c.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/91edd5a1-8cd4-49ba-9905-158c30360af0.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/c2dda1cb-82a2-4682-b882-cbedc5839a28.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/39aa61c6-0014-41eb-96e0-364571353e88.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/2d7fd13b-0810-463e-a402-3ff606426140.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/05039485-9213-485d-8df8-4d996a18c8fc.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/657e73cd-351a-4b18-8d5d-10d8b9d1d7a3.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/06f13f17-2ba6-436c-a030-48992e7f8e5b.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/a4012925-839e-4296-bb13-4c9cd60ea9b2.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/7b1371cb-7df5-4f4c-aa20-a604d6934e88.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/6ec68b2e-6e60-4405-84b4-c3afce5a7608.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/0f7c8227-fb68-4981-8841-15048b16a97b.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/a35244f5-549b-42da-ba8a-9a67cf275629.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/227f8269-bdb7-4dce-9802-3cf2d5900ac4.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/336bd227-9566-4768-9af3-8315c222067c.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/c3ea8408-3ff8-4371-87a1-2c2d7cf6195c.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/13ba6699-0035-447a-87b6-a7753ca31323.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/06d8cbae-d9b4-4db9-9159-f4df680fa993.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/530cdac5-121a-4913-861e-bc6153d0131c.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/8b9a78f6-ab9d-4f29-8ec5-dc1747570391.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/fe5823b2-7816-450c-a628-b82a47d2097a.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/b5fa94c7-1be9-4b2a-b9c8-f4ed8a5b4dd5.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/991a155f-efa8-4d39-a409-c124fed8c934.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/974970fa-ad47-414b-8c00-97f563286435.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/6ff28ba6-be4f-406e-bd7d-2fd701622b76.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/4af092cc-378e-4295-8f9e-b38410024b03.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/513a75ac-1447-4b03-bc56-5f1e0c4a5c2b.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/2d0faa47-14b1-4475-a1a6-defa586c1990.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/f8fbfef4-d38b-46b3-98e3-ca5a8b19d038.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/0e11ac58-ee51-4595-b2be-427240021a5f.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/f20ec2c9-1ae9-4ecd-8756-a1b22adab202.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/07d3b4b8-fda1-4b6d-bd34-3f878ba95f0a.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/13ea75f2-98a1-4117-be03-8943abf8cfc5.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/5c7b4dca-1bba-4b23-8fa0-2b122e742a3b.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/19600c06-a321-43f8-a373-9650a6562ee7.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/66908aad-eead-4a2d-842b-93df90013632.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/eedde723-8733-4df4-9533-43ab2cad7667.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/017c8ffc-09af-4c8e-8563-c37d924b1c1d.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/56a540cd-1af9-46be-a285-cb544fef71ef.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/6b847dc9-2dd8-4336-a0b4-6aaf4f8f0102.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/39f878d6-cdda-45a8-b427-b4bbe3c1297e.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/0d12ff0c-902a-4c38-ac40-11b0fff5e8a1.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/cc2c8b71-0bba-46ab-ad5c-dac861cb1bfd.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/32aa03ec-b9e0-4e32-bae2-b35d28f7e930.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/c0f881e2-d26d-484f-ac80-0b1751909754.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/2b190430-f660-49c7-bd60-8af4f9ee49d7.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/f45b918e-a7bf-4d38-a448-d36421ad3f91.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/ea4ce9d3-c489-4292-b4ca-7ce2e1e7395e.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/c82f6208-bf38-46c1-90a3-df646cb1a15f.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/6d34cb1c-baa0-43aa-a689-ee0aa68ca94f.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/49c45b6e-392c-4f8d-9d15-ff20b6c91e0d.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/6b5826bc-c0a6-4331-a9bb-9db2a83f69c1.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/cc258d13-7dbd-4bfa-8d99-53f89dffcaf8.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/d33f6cbd-1b67-41f7-a3c2-a71b42609ba2.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/fc724aa0-6738-4dc9-b5ac-7b55ccff8813.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/878034a0-9e48-414a-8c84-ff46cafd53df.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/51011061-a515-473a-8984-f1536b8bb80f.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/79ac17ff-7619-4382-a359-4fb41fb11e79.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/331e307c-6551-4fc8-a76f-a92fd0ad8e48.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/1994cdaa-34ad-4914-b0f6-5bbb1e257d0d.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/8c766978-13fd-4ebb-ade9-8c16d23965ae.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/a105622c-1a2d-4dd6-b6ce-9fec4ccb406a.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/24a2bbe4-3191-431b-8ffb-25ba8886370f.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/69d7923c-b734-454c-9530-87208dc1b553.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/8448e0e7-d292-4bde-9108-246e752c4b77.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/538a06a8-6bca-4d58-862a-eeea9b9ed6dd.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/2a90f944-16f3-415a-91da-4c1f25f1a95b.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/b5f4ff72-e71e-4f57-acf4-0d9dcaf9f77a.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/85e7ecbd-b125-4e1f-851e-7de7e78a6329.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/0e4e3f8e-9a70-4241-abcf-5daf788d4b6c.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/cd6c3e3c-35b9-49bb-b44d-dbcc01afc2f0.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/a8731c7e-5c4c-4dfb-88b5-97edde2fec37.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/dcd780c5-a72a-4b81-877c-bd09343c94c5.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/25aff0d3-eee1-44db-9f8a-399a6ee6d454.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/98eded1b-573e-4341-b1a6-4bb4ade508c7.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/ab41e488-ad4a-46ea-80e1-3149aeb3df3a.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/7c51dc3d-e4c9-470f-abf8-e6c53f0b73bd.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/14695319-f30f-4ae8-a520-3920db8cffcb.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/b0e1e630-44a5-4e26-86c8-f862f6f29aa7.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/6338b923-e249-4a52-b56e-2ba134f9c7d8.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/47315246-974d-4a7e-a5d1-697470ddc854.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/dbcaf728-0218-45d4-9506-60e28b5cb007.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/0b4e3a53-bb64-43fb-a5b3-8d08956a1ead.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/94b1eb59-ef6f-479f-9eed-bf18c79c1a9f.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/102bd220-1347-49df-8656-418b65470d00.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/16b250a2-5be8-4777-b8fc-b268c8bf71b0.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/c60f4e5e-6684-42d6-9f8e-d6e78af131f1.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/76eefcbe-cfa9-40c0-a754-47eecd9df402.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/72787a1d-d8f9-4824-a114-ebbe283c851e.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/653a6793-1322-4e35-a129-10c060981463.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/7ddc998c-4840-4315-b9fb-320ae4552d5a.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/a7a4c205-f966-44f5-b19e-72998b23be22.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/b93c93b4-034c-4e30-b799-c6a223e63e88.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/0ab26617-060e-480a-8659-3cbe73917541.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/d114bf0e-f2ad-4de7-95ff-a17e24ea1193.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/ee374b19-b749-4603-b085-dedb61802940.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/e6aa7070-aab1-40ba-90eb-b655080b9b13.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/ed1ab761-e1f4-4f04-a0c1-011af6762c33.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/f66bef5d-d901-426b-bf00-f08d0d0001f9.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/ad387d60-3644-40c2-8115-fb34177ac4bd.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/e7ccebb7-17a8-4262-8d0f-805b35013f50.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/06124239-6aee-4e25-aeb0-e7a559929573.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/860b90c9-42f8-46a6-9c13-27445fe15ec9.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/1d638b84-c376-4f42-9415-8f75e15b8460.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/ad2828be-d506-4562-a799-f7dd068aad92.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/d1bbdf51-b704-4acc-940e-6b9d88e76fce.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/a87d3d6b-c922-4331-af1f-fb588631b91d.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/4420a5d0-ff35-43ff-a985-a1db69899cd4.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/697e8c1c-c5b9-4d21-8af0-7b37f19f84cf.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/5be8b13a-c42b-499b-b80a-719bc40be163.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/0c849607-bf65-48a2-8209-2ef8f8ac7ce6.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/98a9713e-a6a1-4c2a-a0e9-edd0b1f94678.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/93ea8f49-85ed-4a0b-bf18-80677aae36d7.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/90831131-6bb7-43bf-84e3-f5174a4688cd.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/724226fc-3388-4a86-aea4-0c81af597f56.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/74199a12-d716-433b-b80a-ccaf89b2fd27.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/ad571f02-f8d4-4e7c-8c0c-c4967565420a.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/d6b3f69b-7d24-4e56-9ac4-78e58f77618d.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/d5ab798a-fabe-4184-b584-2185a38f157b.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/c44140f3-4b25-44cf-91ad-79d93f9258d1.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/4f417d4a-a0f5-4a14-aab9-7b00ae724f4b.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/d402ed45-188b-430e-a1f0-1846490b531b.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/60df859e-007c-4f75-8799-55b6b63330d2.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/d5b452ab-a8e2-4f95-8f6b-19175e0b6637.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/4a4e4f6f-6102-464c-971d-278ad885f080.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/4f108fdd-563c-4855-ba2d-594de88e4bf4.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/46f6efee-76b3-4ee3-83b5-f88a6e9394da.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/245404bf-99d0-4c79-9bd6-4286b3a8c967.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/b7f1c34c-c789-41e0-b7f8-2b74b50c66e0.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/0ec06d92-c766-4576-a93c-b85b37908575.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/7952ba49-d8ab-4cc8-b2a2-cf1a6d95c5a6.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/b7f757c2-53ae-4b1e-9e6b-f52f228d8c94.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/58e1dd98-7d94-4b8a-9b6e-548655fdcd83.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/f44bd570-67c2-480a-8140-1b8afc63edec.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/945c7002-5104-4f3c-a237-8ec75c0ece2e.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/378fe5c7-13d5-4663-901f-25292ae089e3.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/132219a0-32d5-482e-8c4c-746f70bc0e4a.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/e3d0173c-20e3-4c35-81f4-3e5701384448.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/720d4180-dbf0-454d-8948-2dd325bcdec7.root
+/store/mc/Run3Summer23BPixMiniAODv4/SingleNeutrino_E-10-gun/MINIAODSIM/130X_mcRun3_2023_realistic_postBPix_v2-v2/2550000/79e1c31c-e05e-46a1-ab24-cbed4fdbe11a.root
diff --git a/part3/cmssw/src/L1Trigger/L1TMLDemo/test/files_signal.txt b/part3/cmssw/src/L1Trigger/L1TMLDemo/test/files_signal.txt
new file mode 100644
index 0000000000000000000000000000000000000000..94ee854876417150e307cb2180250c5f014f6947
--- /dev/null
+++ b/part3/cmssw/src/L1Trigger/L1TMLDemo/test/files_signal.txt
@@ -0,0 +1,3 @@
+/store/mc/Run3Summer22MiniAODv4/GluGlutoHHto2B2Tau_kl-1p00_kt-1p00_c2-0p00_TuneCP5_13p6TeV_powheg-pythia8/MINIAODSIM/130X_mcRun3_2022_realistic_v5-v2/50000/67062162-0b04-4738-b8ab-c31cddf64a1d.root
+/store/mc/Run3Summer22MiniAODv4/GluGlutoHHto2B2Tau_kl-1p00_kt-1p00_c2-0p00_TuneCP5_13p6TeV_powheg-pythia8/MINIAODSIM/130X_mcRun3_2022_realistic_v5-v2/50000/0a94d194-7c19-4d36-b540-fccacecbe60b.root
+/store/mc/Run3Summer22MiniAODv4/GluGlutoHHto2B2Tau_kl-1p00_kt-1p00_c2-0p00_TuneCP5_13p6TeV_powheg-pythia8/MINIAODSIM/130X_mcRun3_2022_realistic_v5-v2/40000/504487f5-0a4f-46b2-9c53-e6687362db4f.root
diff --git a/part3/exercise.md b/part3/exercise.md
index 8bea47f54bbc603fee91b38059223c8c95ebf258..234f35e837f3e5916143c860433650ddaad11914 100644
--- a/part3/exercise.md
+++ b/part3/exercise.md
@@ -21,6 +21,8 @@ As of `hls4ml` `0.8.1`, when run outside of Vivado HLS, the C++ code loads the w
 
 This one liner will replace the `#define` that would cause the weights to be loaded from txt files with one that will load them from the header files when we compile instead.
 
+If you don't do this, when you `cmsRun` you will see a runtime error like `ERROR: file w2.txt does not exist`
+
 ```shell
 find $MLATL1T_DIR/part3/cms-hls4ml/L1TMLDemo/L1TMLDemo_v1/NN \( -type d -name .git -prune \) -o -type f -print0 | xargs -0 sed -i 's/#ifndef __SYNTHESIS__/#ifdef __HLS4ML_LOAD_TXT_WEIGHTS__/'
 ```
@@ -69,11 +71,24 @@ cp $MLATL1T_DIR/part3/cms-hls4ml/L1TMLDemo/L1TMLDemo_v1.so $CMSSW_BASE/src/L1Tri
 
 ## 7.
 
-Run the test config!
+Run the test config over signal and background!
 
 ```shell
 cd $CMSSW_BASE/src/L1Trigger/L1TMLDemo/test
-cmsRun demoL1TMLNtuple.py
+cmsRun demoL1TMLNtuple.py signal=True
+cmsRun demoL1TMLNtuple.py signal=False
 ```
 
+We run over the same datasets as part 1:
+- Signal: `/GluGlutoHHto2B2Tau_kl-1p00_kt-1p00_c2-0p00_TuneCP5_13p6TeV_powheg-pythia8/Run3Summer22MiniAODv4-130X_mcRun3_2022_realistic_v5-v2/MINIAODSIM`
+- Background: `/SingleNeutrino_E-10-gun/Run3Summer23BPixMiniAODv4-130X_mcRun3_2023_realistic_postBPix_v2-v2/MINIAODSIM`
+
+This will produce the files
+- `L1TMLDemo_NanoAOD_signal.root`
+- `L1TMLDemo_NanoAOD_background.root`
+
 *Note* when developing your own models, you may unfortunately run into segmentation violations while developing. The most common reason is that the input and output data type set in the producer mismatch the types used by the model emulator. In this emulator workflow, this causes a runtime error rather than a compile time error.
+
+## 8.
+
+Run the notebook part3.ipynb
diff --git a/part3/part3.ipynb b/part3/part3.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..e0227b859ee1c7216596037ff9dddd800dfe51bf
--- /dev/null
+++ b/part3/part3.ipynb
@@ -0,0 +1,227 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "3e175280",
+   "metadata": {},
+   "source": [
+    "# CMSSW Emulator\n",
+    "\n",
+    "In this exercise you will be guided through the steps to create, compile, and run the emulator of the hls4ml model you trained in part 2. The code in these steps should be executed from the command line on `lxplus` after doing `source setup.sh` from this `cms_mlatl1t_tutorial`.\n",
+    "\n",
+    "When developing your own hls4ml NN emulators, you should compile and run your model emulator locally before delivering it to `cms-hls4ml`.\n",
+    "\n",
+    "**Note** you need to run the steps described below in the terminal before going through the cells in this notebook!\n",
+    "\n",
+    "## Prerequisite\n",
+    "\n",
+    "You will need the HLS for the model of part 2.\n",
+    "\n",
+    "## 1.\n",
+    "\n",
+    "Copy the NN-specific part of the hls4ml project to the `cms-hls4ml` repo. We _don't_ copy `ap_types` since we'll reference them from the externals.\n",
+    "\n",
+    "```shell\n",
+    "[ ! -d $MLATL1T_DIR/part3/cms-hls4ml/L1TMLDemo/L1TMLDemo_v1/NN ] && mkdir $MLATL1T_DIR/part3/cms-hls4ml/L1TMLDemo/L1TMLDemo_v1/NN\n",
+    "cp -r $MLATL1T_DIR/part2/L1TMLDemo_v1/firmware/{*.h,*.cpp,weights,nnet_utils} $MLATL1T_DIR/part3/cms-hls4ml/L1TMLDemo/L1TMLDemo_v1/NN\n",
+    "```\n",
+    "\n",
+    "## 2.\n",
+    "\n",
+    "As of `hls4ml` `0.8.1`, when run outside of Vivado HLS, the C++ code loads the weights from txt files. We need to force compilation of the weights from the header file instead. \n",
+    "\n",
+    "This one liner will replace the `#define` that would cause the weights to be loaded from txt files with one that will load them from the header files when we compile instead.\n",
+    "\n",
+    "If you don't do this, when you `cmsRun` you will see a runtime error like `ERROR: file w2.txt does not exist`\n",
+    "\n",
+    "```shell\n",
+    "find $MLATL1T_DIR/part3/cms-hls4ml/L1TMLDemo/L1TMLDemo_v1/NN \\( -type d -name .git -prune \\) -o -type f -print0 | xargs -0 sed -i 's/#ifndef __SYNTHESIS__/#ifdef __HLS4ML_LOAD_TXT_WEIGHTS__/'\n",
+    "```\n",
+    "\n",
+    "## 3.\n",
+    "\n",
+    "`make` the hls4ml emulator interface shared object\n",
+    "\n",
+    "```shell\n",
+    "cd $MLATL1T_DIR/part3/cms-hls4ml/hls4mlEmulatorExtras\n",
+    "make\n",
+    "mkdir lib64\n",
+    "mv libemulator_interface.so lib64\n",
+    "```\n",
+    "\n",
+    "## 4.\n",
+    "\n",
+    "`make` the `L1TMLDemo` model shared object\n",
+    "\n",
+    "```shell\n",
+    "cd $MLATL1T_DIR/part3/cms-hls4ml/L1TMLDemo\n",
+    "make\n",
+    "```\n",
+    "\n",
+    "*Note* you might benefit from adding `-g` to `CXXFLAGS` to compile with debugging while developing.\n",
+    "The Makefile line would change to `CXXFLAGS := -O3 -fPIC -std=$(CPP_STANDARD) -g`.\n",
+    "\n",
+    "\n",
+    "## 5.\n",
+    "\n",
+    "`scram build` compile the CMSSW code\n",
+    "\n",
+    "```shell\n",
+    "cd $CMSSW_BASE/src\n",
+    "scram b -j8\n",
+    "```\n",
+    "\n",
+    "## 6.\n",
+    "\n",
+    "Copy the `L1TMLDemo` model shared object to the CMSSW area.\n",
+    "\n",
+    "```shell\n",
+    "mkdir $CMSSW_BASE/src/L1Trigger/L1TMLDemo/data\n",
+    "cp $MLATL1T_DIR/part3/cms-hls4ml/L1TMLDemo/L1TMLDemo_v1.so $CMSSW_BASE/src/L1Trigger/L1TMLDemo/data\n",
+    "```\n",
+    "\n",
+    "## 7.\n",
+    "\n",
+    "Run the test config over signal and background!\n",
+    "\n",
+    "```shell\n",
+    "cd $CMSSW_BASE/src/L1Trigger/L1TMLDemo/test\n",
+    "cmsRun demoL1TMLNtuple.py signal=True\n",
+    "cmsRun demoL1TMLNtuple.py signal=False\n",
+    "```\n",
+    "\n",
+    "We run over the same datasets as part 1:\n",
+    "- Signal: `/GluGlutoHHto2B2Tau_kl-1p00_kt-1p00_c2-0p00_TuneCP5_13p6TeV_powheg-pythia8/Run3Summer22MiniAODv4-130X_mcRun3_2022_realistic_v5-v2/MINIAODSIM`\n",
+    "- Background: `/SingleNeutrino_E-10-gun/Run3Summer23BPixMiniAODv4-130X_mcRun3_2023_realistic_postBPix_v2-v2/MINIAODSIM`\n",
+    "\n",
+    "This will produce the files\n",
+    "- `L1TMLDemo_NanoAOD_signal.root`\n",
+    "- `L1TMLDemo_NanoAOD_background.root`\n",
+    "\n",
+    "*Note* when developing your own models, you may unfortunately run into segmentation violations while developing. The most common reason is that the input and output data type set in the producer mismatch the types used by the model emulator. In this emulator workflow, this causes a runtime error rather than a compile time error.\n",
+    "\n",
+    "## 8.\n",
+    "\n",
+    "Run the notebook part3.ipynb\n",
+    "\n",
+    "# Notebook\n",
+    "\n",
+    "Now we can read the predictions from our Nano AOD ntuple and check they make sense compared to part 1 and part 2."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "8d652e36",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import numpy as np\n",
+    "import uproot\n",
+    "import awkward as ak\n",
+    "import matplotlib.pyplot as plt\n",
+    "import mplhep"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "f40b86af",
+   "metadata": {},
+   "source": [
+    "## Load data\n",
+    "Load our signal and background data with `uproot`"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "e8fc68f0",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "f_sig = uproot.open('part3/cmssw/src/L1Trigger/L1TMLDemo/test/L1TMLDemo_NanoAOD_signal.root')\n",
+    "f_bkg = uproot.open('part3/cmssw/src/L1Trigger/L1TMLDemo/test/L1TMLDemo_NanoAOD_background.root')\n",
+    "y_sig_cmssw = ak.flatten(f_sig['Events/L1TMLDemo_y'].array()).to_numpy()\n",
+    "y_bkg_cmssw = ak.flatten(f_bkg['Events/L1TMLDemo_y'].array()).to_numpy()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "2069399f",
+   "metadata": {},
+   "source": [
+    "## Histogram\n",
+    "\n",
+    "Plot the score distribution for signal and background"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "d55f97b8",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "bins=np.linspace(0, 1, 100)\n",
+    "w = bins[1]\n",
+    "h_sig, _ = np.histogram(y_sig_cmssw, bins=bins)\n",
+    "h_bkg, _ = np.histogram(y_bkg_cmssw, bins=bins)\n",
+    "h_sig = h_sig.astype('float') / np.sum(h_sig)\n",
+    "h_bkg = h_bkg.astype('float') / np.sum(h_bkg)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "08e81144",
+   "metadata": {},
+   "source": [
+    "## Plot"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "eda30259",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "mplhep.histplot(h_bkg, bins, label='Background')\n",
+    "mplhep.histplot(h_sig, bins, label='Signal')\n",
+    "plt.semilogy()\n",
+    "plt.legend()\n",
+    "plt.xlim(0,1)\n",
+    "plt.xlabel('CMSSW NN Emulator Prediction')\n",
+    "plt.ylabel('Frequency')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "cc0de85f",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.9.14"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}