Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-05-06 02:07:31

0001 import FWCore.ParameterSet.Config as cms
0002 from  PhysicsTools.NanoAOD.common_cff import *
0003 from PhysicsTools.NanoAOD.simpleCandidateFlatTableProducer_cfi import simpleCandidateFlatTableProducer
0004 from Configuration.Eras.Modifier_run3_scouting_nanoAOD_2023_cff import run3_scouting_nanoAOD_2023
0005 from Configuration.Eras.Modifier_run3_scouting_nanoAOD_2024_cff import run3_scouting_nanoAOD_2024
0006 
0007 #####################################
0008 ##### Scouting Original Objects #####
0009 #####################################
0010 # objects directly from Run3Scouting* formats
0011 
0012 # Scouting Muon
0013 # https://github.com/cms-sw/cmssw/blob/CMSSW_14_0_X/DataFormats/Scouting/interface/Run3ScoutingMuon.h
0014 
0015 scoutingMuonTable = cms.EDProducer("SimpleRun3ScoutingMuonCollectionFlatTableProducer",
0016     src = cms.InputTag("hltScoutingMuonPacker"),
0017     cut = cms.string(""),
0018     name = cms.string("ScoutingMuon"),
0019     doc  = cms.string("Scouting Muon"),
0020     singleton = cms.bool(False),
0021     extension = cms.bool(False),
0022     variables = cms.PSet(
0023         pt = Var('pt', 'float', precision=10, doc='pt'),
0024         eta = Var('eta', 'float', precision=10, doc='eta'),
0025         phi = Var('phi', 'float', precision=10, doc='phi'),
0026         m = Var('m', 'float', precision=10, doc='mass'),
0027         type = Var('type', 'int', doc='type of muon'),
0028         charge = Var('charge', 'int', doc='track charge'),
0029         normchi2 = Var('normalizedChi2', 'float', precision=10, doc='normalized chi squared'),
0030         ecalIso = Var('ecalIso', 'float', precision=10, doc='PF ECAL isolation'),
0031         hcalIso = Var('hcalIso', 'float', precision=10, doc='PF HCAL isolation'),
0032         trackIso = Var('trackIso', 'float', precision=10, doc='track isolation'),
0033         nValidStandAloneMuonHits = Var('nValidStandAloneMuonHits', 'int', doc='number of valid standalone muon hits'),
0034         nStandAloneMuonMatchedStations = Var('nStandAloneMuonMatchedStations', 'int', doc='number of muon stations with valid hits'),
0035         nValidRecoMuonHits = Var('nValidRecoMuonHits', 'int', doc='number of valid reco muon hits'),
0036         nRecoMuonChambers = Var('nRecoMuonChambers', 'int', doc='number of reco muon chambers'),
0037         nRecoMuonChambersCSCorDT = Var('nRecoMuonChambersCSCorDT', 'int', doc='number of reco muon chambers CSC or DT'),
0038         nRecoMuonMatches = Var('nRecoMuonMatches', 'int', doc='number of reco muon matches'),
0039         nRecoMuonMatchedStations = Var('nRecoMuonMatchedStations', 'int', doc='number of reco muon matched stations'),
0040         nRecoMuonExpectedMatchedStations = Var('nRecoMuonExpectedMatchedStations', 'int', doc='number of reco muon expected matched stations'),
0041         recoMuonStationMask = Var('recoMuonStationMask', 'int', doc='reco muon station mask'),
0042         nRecoMuonMatchedRPCLayers = Var('nRecoMuonMatchedRPCLayers', 'int', doc='number of reco muon matched RPC layers'),
0043         recoMuonRPClayerMask = Var('recoMuonRPClayerMask', 'int', doc='reco muon RPC layer mask'),
0044         nValidPixelHits = Var('nValidPixelHits', 'int', doc='number of valid pixel hits'),
0045         nValidStripHits = Var('nValidStripHits', 'int', doc='number of valid strip hits'),
0046         nPixelLayersWithMeasurement = Var('nPixelLayersWithMeasurement', 'int', doc='number of pixel layers with measurement'),
0047         nTrackerLayersWithMeasurement = Var('nTrackerLayersWithMeasurement', 'int', doc='number of tracker layer with measurements'),
0048         trk_chi2 = Var('trk_chi2', 'float', precision=10, doc='track chi squared'),
0049         trk_ndof = Var('trk_ndof', 'float', precision=10, doc='track number of degrees of freedom'),
0050         trk_dxy = Var('trk_dxy', 'float', precision=10, doc='track dxy'),
0051         trk_dz = Var('trk_dz', 'float', precision=10, doc='track dz'),
0052         trk_qoverp = Var('trk_qoverp', 'float', precision=10, doc='track qoverp'),
0053         trk_lambda = Var('trk_lambda', 'float', precision=10, doc='track lambda'),
0054         trk_pt = Var('trk_pt', 'float', precision=10, doc='track pt'),
0055         trk_phi = Var('trk_phi', 'float', precision=10, doc='track phi'),
0056         trk_eta = Var('trk_eta', 'float', precision=10, doc='track eta'),
0057         trk_dxyError = Var('trk_dxyError', 'float', precision=10, doc='track dxyError'),
0058         trk_dzError = Var('trk_dzError', 'float', precision=10, doc='tracl dzError'),
0059         trk_qoverpError = Var('trk_qoverpError', 'float', precision=10, doc='track qoverpError'),
0060         trk_lambdaError = Var('trk_lambdaError', 'float', precision=10, doc='track lambdaError'),
0061         trk_phiError = Var('trk_phiError', 'float', precision=10, doc='track phiError'),
0062         trk_dsz = Var('trk_dsz', 'float', precision=10, doc='track dsz'),
0063         trk_dszError = Var('trk_dszError', 'float', precision=10, doc='track dszError'),
0064         trk_qoverp_lambda_cov = Var('trk_qoverp_lambda_cov', 'float', precision=10, doc='track qoverp lambda covariance ((0,1) element of covariance matrix)'),
0065         trk_qoverp_phi_cov = Var('trk_qoverp_phi_cov', 'float', precision=10, doc='track qoverp phi covariance ((0,2) element of covariance matrix)'),
0066         trk_qoverp_dxy_cov = Var('trk_qoverp_dxy_cov', 'float', precision=10, doc='track qoverp dxy covariance ((0,3) element of covariance matrix)'),
0067         trk_qoverp_dsz_cov = Var('trk_qoverp_dsz_cov', 'float', precision=10, doc='track qoverp dsz covariance ((0,4) element of covariance matrix)'),
0068         trk_lambda_phi_cov = Var('trk_lambda_phi_cov', 'float', precision=10, doc='track lambda phi covariance ((1,2) element of covariance matrix)'),
0069         trk_lambda_dxy_cov = Var('trk_lambda_dxy_cov', 'float', precision=10, doc='track lambda dxy covariance ((1,3) element of covariance matrix)'),
0070         trk_lambda_dsz_cov = Var('trk_lambda_dsz_cov', 'float', precision=10, doc='track lambda dsz covariance ((1,4) element of covariance matrix)'),
0071         trk_phi_dxy_cov = Var('trk_phi_dxy_cov', 'float', precision=10, doc='track phi dxy covariance ((2,3) element of covariance matrix)'),
0072         trk_phi_dsz_cov = Var('trk_phi_dsz_cov', 'float', precision=10, doc='track phi dsz covariance ((2,4) element of covariance matrix)'),
0073         trk_dxy_dsz_cov = Var('trk_dxy_dsz_cov', 'float', precision=10, doc='track dxy dsz covariance ((3,4) element of covariance matrix)'),
0074         trk_vx = Var('trk_vx', 'float', precision=10, doc='track vx'),
0075         trk_vy = Var('trk_vy', 'float', precision=10, doc='track vy'),
0076         trk_vz = Var('trk_vz', 'float', precision=10, doc='track vz'),
0077         trk_hitPattern_hitCount = Var("trk_hitPattern().hitCount", "uint8", doc="track hitPattern hitCount"),
0078         trk_hitPattern_beginTrackHits = Var("trk_hitPattern().beginTrackHits", "uint8", doc="track hitPattern beginTrackHits"),
0079         trk_hitPattern_endTrackHits = Var("trk_hitPattern().endTrackHits", "uint8", doc="track hitPattern endTrackHits"),
0080         trk_hitPattern_beginInner = Var("trk_hitPattern().beginInner", "uint8", doc="track hitPattern beginInner"),
0081         trk_hitPattern_endInner = Var("trk_hitPattern().endInner", "uint8", doc="track hitPattern endInner"),
0082         trk_hitPattern_beginOuter = Var("trk_hitPattern().beginOuter", "uint8", doc="track hitPattern beginOuter"),
0083         trk_hitPattern_endOuter = Var("trk_hitPattern().endOuter", "uint8", doc="track hitPattern endOuter"),
0084     ),
0085     collectionVariables = cms.PSet(
0086         ScoutingMuonVtxIndx = cms.PSet(
0087             name = cms.string("ScoutingMuonVtxIndx"),
0088             doc = cms.string("Scouting Muon Displaced Vertex Index"),
0089             useCount = cms.bool(True),
0090             useOffset = cms.bool(True),
0091             variables = cms.PSet(
0092                 vtxIndx = Var('vtxIndx', 'int', doc='vertex indices'),
0093             ),
0094         ),
0095         ScoutingMuonHitPattern = cms.PSet(
0096             name = cms.string("ScoutingMuonHitPattern"),
0097             doc = cms.string("Scouting Muon HitPattern"),
0098             useCount = cms.bool(True),
0099             useOffset = cms.bool(True),
0100             variables = cms.PSet(
0101                 hitPattern = Var('trk_hitPattern().hitPattern', 'uint16', doc='track hitPattern hitPattern'),
0102             ),
0103         )
0104     )
0105 )
0106 
0107 # Scouting Vertex
0108 # format during 2022-23 data-taking used for both primary vertex and dimuon displaced vertex
0109 # https://github.com/cms-sw/cmssw/blob/CMSSW_14_0_X/DataFormats/Scouting/interface/Run3ScoutingVertex.h
0110 
0111 scoutingVertexVariables = cms.PSet(
0112     x = Var('x', 'float', precision=10, doc='position x coordinate'),
0113     y = Var('y', 'float', precision=10, doc='position y coordinate'),
0114     z = Var('z', 'float', precision=10, doc='position z coordinate'),
0115     xError = Var('xError', 'float', precision=10, doc='x error'),
0116     yError = Var('yError', 'float', precision=10, doc='y error'),
0117     zError = Var('zError', 'float', precision=10, doc='z error'),
0118     tracksSize = Var('tracksSize', 'int', doc='number of tracks'),
0119     chi2 = Var('chi2', 'float', precision=10, doc='chi squared'),
0120     ndof = Var('ndof', 'int', doc='number of degrees of freedom'),
0121     isValidVtx = Var('isValidVtx', 'bool', doc='is valid'),
0122 )
0123 
0124 # scouting vertex format changed for 2024 data-taking in https://github.com/cms-sw/cmssw/pull/43758
0125 # used for both primary vertex and dimuon displaced vertex
0126 # https://github.com/cms-sw/cmssw/blob/CMSSW_14_0_X/DataFormats/Scouting/interface/Run3ScoutingVertex.h
0127 
0128 run3_scouting_nanoAOD_2024.toModify(
0129     scoutingVertexVariables,
0130     xyCov = Var('xyCov', 'float', precision=10, doc='xy covariance'),
0131     xzCov = Var('xzCov', 'float', precision=10, doc='xz covariance'),
0132     yzCov = Var('yzCov', 'float', precision=10, doc='yz covariance'),
0133 )
0134 
0135 # Scouting Displaced Vertex (from dimuon)
0136 # https://github.com/cms-sw/cmssw/blob/CMSSW_14_0_X/DataFormats/Scouting/interface/Run3ScoutingVertex.h
0137 
0138 scoutingMuonDisplacedVertexTable = cms.EDProducer("SimpleRun3ScoutingVertexFlatTableProducer",
0139     src = cms.InputTag("hltScoutingMuonPacker","displacedVtx"),
0140     cut = cms.string(""),
0141     name = cms.string("ScoutingMuonDisplacedVertex"),
0142     doc  = cms.string("Scouting Muon Displaced Vertex"),
0143     singleton = cms.bool(False),
0144     extension = cms.bool(False),
0145     variables = scoutingVertexVariables,
0146 )
0147 
0148 # from 2024, there are two scouting muon collections
0149 
0150 # muonVtx
0151 scoutingMuonVtxTable = scoutingMuonTable.clone(
0152     src = cms.InputTag("hltScoutingMuonPackerVtx"),
0153     name = cms.string("ScoutingMuonVtx"),
0154     doc  = cms.string("Scouting Muon Vtx"),
0155 )
0156 scoutingMuonVtxTable.collectionVariables.ScoutingMuonVtxIndx.name = cms.string("ScoutingMuonVtxVtxIndx")
0157 scoutingMuonVtxTable.collectionVariables.ScoutingMuonVtxIndx.doc = cms.string("ScoutingMuonVtx VtxIndx")
0158 scoutingMuonVtxTable.collectionVariables.ScoutingMuonHitPattern.name = cms.string("ScoutingMuonVtxHitPattern")
0159 scoutingMuonVtxTable.collectionVariables.ScoutingMuonHitPattern.doc = cms.string("ScoutingMuonVtx HitPattern")
0160 
0161 scoutingMuonVtxDisplacedVertexTable = scoutingMuonDisplacedVertexTable.clone(
0162     src = cms.InputTag("hltScoutingMuonPackerVtx", "displacedVtx"),
0163     name = cms.string("ScoutingMuonVtxDisplacedVertex"),
0164     doc  = cms.string("Scouting Muon Vtx DisplacedVertex"),
0165 )
0166 
0167 # muonNoVtx
0168 scoutingMuonNoVtxTable = scoutingMuonTable.clone(
0169     src = cms.InputTag("hltScoutingMuonPackerNoVtx"),
0170     name = cms.string("ScoutingMuonNoVtx"),
0171     doc  = cms.string("Scouting Muon NoVtx"),
0172 )
0173 scoutingMuonNoVtxTable.collectionVariables.ScoutingMuonVtxIndx.name = cms.string("ScoutingMuonNoVtxVtxIndx")
0174 scoutingMuonNoVtxTable.collectionVariables.ScoutingMuonVtxIndx.doc = cms.string("ScoutingMuonNoVtx VtxIndx")
0175 scoutingMuonNoVtxTable.collectionVariables.ScoutingMuonHitPattern.name = cms.string("ScoutingMuonNoVtxHitPattern")
0176 scoutingMuonNoVtxTable.collectionVariables.ScoutingMuonHitPattern.doc = cms.string("ScoutingMuonNoVtx HitPattern")
0177 
0178 scoutingMuonNoVtxDisplacedVertexTable = scoutingMuonDisplacedVertexTable.clone(
0179     src = cms.InputTag("hltScoutingMuonPackerNoVtx", "displacedVtx"),
0180     name = cms.string("ScoutingMuonNoVtxDisplacedVertex"),
0181     doc  = cms.string("Scouting Muon NoVtx DisplacedVertex"),
0182 )
0183 
0184 # Scouting Electron
0185 # format during 2022 data-taking
0186 # for accessing d0, dz, and charge, use changes from https://github.com/cms-sw/cmssw/pull/41025
0187 # https://github.com/cms-sw/cmssw/blob/CMSSW_12_4_X/DataFormats/Scouting/interface/Run3ScoutingElectron.h
0188 
0189 scoutingElectronTable = cms.EDProducer("SimpleRun3ScoutingElectronCollectionFlatTableProducer",
0190     src = cms.InputTag("hltScoutingEgammaPacker"),
0191     cut = cms.string(""),
0192     name = cms.string("ScoutingElectron"),
0193     doc  = cms.string("Scouting Electron"),
0194     singleton = cms.bool(False),
0195     extension = cms.bool(False),
0196     variables = cms.PSet(
0197         pt = Var('pt', 'float', precision=10, doc='super-cluster (SC) pt'),
0198         eta = Var('eta', 'float', precision=10, doc='super-cluster (SC) eta'),
0199         phi = Var('phi', 'float', precision=10, doc='super-cluster (SC) phi'),
0200         m = Var('m', 'float', precision=10, doc='super-cluster (SC) mass'),
0201         d0 = Var('trkd0[0]', 'float', precision=10, doc='track d0'),
0202         dz = Var('trkdz[0]', 'float', precision=10, doc='track dz'),
0203         dEtaIn = Var('dEtaIn', 'float', precision=10, doc='#Delta#eta(SC seed, track pixel seed)'),
0204         dPhiIn = Var('dPhiIn', 'float', precision=10, doc='#Delta#phi(SC seed, track pixel seed)'),
0205         sigmaIetaIeta = Var('sigmaIetaIeta', 'float', precision=10, doc='sigmaIetaIeta of the SC, calculated with full 5x5 region, noise cleaned'),
0206         hOverE = Var('hOverE', 'float', precision=10, doc='Energy in HCAL / Energy in ECAL'),
0207         ooEMOop = Var('ooEMOop', 'float', precision=10, doc='1/E(SC) - 1/p(track momentum)'),
0208         missingHits = Var('missingHits', 'int', doc='missing hits in the tracker'),
0209         charge = Var('trkcharge[0]', 'int', doc='track charge'),
0210         ecalIso = Var('ecalIso', 'float', precision=10, doc='Isolation of SC in the ECAL'),
0211         hcalIso = Var('hcalIso', 'float', precision=10, doc='Isolation of SC in the HCAL'),
0212         trackIso = Var('trackIso', 'float', precision=10, doc='Isolation of electron track in the tracker'),
0213         r9 = Var('r9', 'float', precision=10, doc='Electron SC r9 as defined in https://twiki.cern.ch/twiki/bin/view/CMSPublic/SWGuideEgammaShowerShape'),
0214         sMin = Var('sMin', 'float', precision=10, doc='minor moment of the SC shower shape'),
0215         sMaj = Var('sMaj', 'float', precision=10, doc='major moment of the SC shower shape'),
0216         seedId = Var('seedId', 'uint', doc='ECAL ID of the SC seed'),
0217         rechitZeroSuppression = Var('rechitZeroSuppression', 'bool', doc='rechit zero suppression'),
0218     ),
0219     externalVariables = cms.PSet(),
0220 )
0221 
0222 # scouting electron format changed for 2023 data-taking in https://github.com/cms-sw/cmssw/pull/41025
0223 # https://github.com/cms-sw/cmssw/blob/CMSSW_13_0_X/DataFormats/Scouting/interface/Run3ScoutingElectron.h
0224 
0225 # from 2023, scouting electron's tracks are added as std::vector since multiple tracks are associated to scouting electrons
0226 # this plugin selects the best track to reduce to a single track per scouting electron, which is more suitable for NanoAOD format
0227 # https://github.com/cms-sw/cmssw/pull/47726
0228 
0229 scoutingElectronBestTrack = cms.EDProducer("Run3ScoutingElectronBestTrackProducer",
0230     Run3ScoutingElectron = cms.InputTag("hltScoutingEgammaPacker"),
0231     TrackPtMin = cms.vdouble(12.0, 12.0),
0232     TrackChi2OverNdofMax = cms.vdouble(3.0, 2.0),
0233     RelativeEnergyDifferenceMax = cms.vdouble(1.0, 1.0),
0234     DeltaPhiMax = cms.vdouble(0.06, 0.06)
0235 )
0236 
0237 (run3_scouting_nanoAOD_2023 | run3_scouting_nanoAOD_2024).toModify(
0238     scoutingElectronTable.variables,
0239     d0 = None,      # replaced with trkd0 (std::vector)
0240     dz = None,      # replaced with trkdz (std::vector)
0241     charge = None,  # replaced with trkcharge (std::vector)
0242 ).toModify(
0243     scoutingElectronTable.externalVariables,
0244     bestTrack_d0 = ExtVar(cms.InputTag("scoutingElectronBestTrack", "Run3ScoutingElectronTrackd0"), float, doc="best track d0"),
0245     bestTrack_dz = ExtVar(cms.InputTag("scoutingElectronBestTrack", "Run3ScoutingElectronTrackdz"), float, doc="best track dz"),
0246     bestTrack_pt = ExtVar(cms.InputTag("scoutingElectronBestTrack", "Run3ScoutingElectronTrackpt"), float, doc="best track pt"),
0247     bestTrack_eta = ExtVar(cms.InputTag("scoutingElectronBestTrack", "Run3ScoutingElectronTracketa"), float, doc="best track eta"),
0248     bestTrack_phi = ExtVar(cms.InputTag("scoutingElectronBestTrack", "Run3ScoutingElectronTrackphi"), float, doc="best track phi"),
0249     bestTrack_chi2overndf = ExtVar(cms.InputTag("scoutingElectronBestTrack", "Run3ScoutingElectronTrackchi2overndf"), float, doc="best track chi2overndf"),
0250     bestTrack_charge = ExtVar(cms.InputTag("scoutingElectronBestTrack", "Run3ScoutingElectronTrackcharge"), int, doc="best track charge"),
0251 )
0252 
0253 # scouting electron format changed for 2024 data-taking in https://github.com/cms-sw/cmssw/pull/43744
0254 # https://github.com/cms-sw/cmssw/blob/CMSSW_14_0_X/DataFormats/Scouting/interface/Run3ScoutingElectron.h
0255 
0256 run3_scouting_nanoAOD_2024.toModify(
0257     scoutingElectronTable.variables,
0258     rawEnergy = Var("rawEnergy", "float", precision=10, doc="raw energy"),
0259     preshowerEnergy = Var("preshowerEnergy", "float", precision=10, doc='preshower energy'),
0260     corrEcalEnergyError = Var("corrEcalEnergyError", "float", precision=10, doc='corrEcalEnergyError'),
0261     trackfbrem = Var("trackfbrem", "float", precision=10, doc="trackfbrem"),
0262     nClusters = Var("nClusters", "uint", precision=10, doc="number of clusters"),
0263     nCrystals = Var("nCrystals", "uint", precision=10, doc="number of crystals"),
0264 ).toModify(
0265     scoutingElectronTable.externalVariables,
0266     bestTrack_pMode = ExtVar(cms.InputTag("scoutingElectronBestTrack", "Run3ScoutingElectronTrackpMode"), float, doc="best track pMode"),
0267     bestTrack_etaMode = ExtVar(cms.InputTag("scoutingElectronBestTrack", "Run3ScoutingElectronTracketaMode"), float, doc="best track etaMode"),
0268     bestTrack_phiMode = ExtVar(cms.InputTag("scoutingElectronBestTrack", "Run3ScoutingElectronTrackphiMode"), float, doc="best track phiMode"),
0269     bestTrack_qoverpModeError = ExtVar(cms.InputTag("scoutingElectronBestTrack", "Run3ScoutingElectronTrackqoverpModeError"), float, doc="best track qoverpModeError"),
0270 )
0271 
0272 # Scouting Photon
0273 # format during 2022-23 data-taking
0274 # https://github.com/cms-sw/cmssw/blob/CMSSW_13_0_X/DataFormats/Scouting/interface/Run3ScoutingPhoton.h
0275 
0276 scoutingPhotonTable = cms.EDProducer("SimpleRun3ScoutingPhotonFlatTableProducer",
0277     src = cms.InputTag("hltScoutingEgammaPacker"),
0278     cut = cms.string(""),
0279     name = cms.string("ScoutingPhoton"),
0280     doc  = cms.string("Scouting Photon"),
0281     singleton = cms.bool(False),
0282     extension = cms.bool(False),
0283     variables = cms.PSet(
0284         pt = Var('pt', 'float', precision=10, doc='super-cluster (SC) pt'),
0285         eta = Var('eta', 'float', precision=10, doc='SC eta'),
0286         phi = Var('phi', 'float', precision=10, doc='SC phi'),
0287         m = Var('m', 'float', precision=10, doc='SC mass'),
0288         sigmaIetaIeta = Var('sigmaIetaIeta', 'float', precision=10, doc='sigmaIetaIeta of the SC, calculated with full 5x5 region, noise cleaned'),
0289         hOverE = Var('hOverE', 'float', precision=10, doc='Energy in HCAL / Energy in ECAL'),
0290         ecalIso = Var('ecalIso', 'float', precision=10, doc='Isolation of SC in the ECAL'),
0291         hcalIso = Var('hcalIso', 'float', precision=10, doc='Isolation of SC in the HCAL'),
0292         trkIso = Var('trkIso', 'float', precision=10, doc='Isolation of track in the tracker'),
0293         r9 = Var('r9', 'float', precision=10, doc='Photon SC r9 as defined in https://twiki.cern.ch/twiki/bin/view/CMSPublic/SWGuideEgammaShowerShape'),
0294         sMin = Var('sMin', 'float', precision=10, doc='minor moment of the SC shower shape'),
0295         sMaj = Var('sMaj', 'float', precision=10, doc='major moment of the SC shower shape'),
0296         seedId = Var('seedId', 'uint', doc='ECAL ID of the SC seed'),
0297         rechitZeroSuppression = Var('rechitZeroSuppression', 'bool', doc='rechit zero suppression'),
0298     ),
0299 )
0300 
0301 # scouting photon format changed for 2024 data-taking in https://github.com/cms-sw/cmssw/pull/43744
0302 # https://github.com/cms-sw/cmssw/blob/CMSSW_14_0_X/DataFormats/Scouting/interface/Run3ScoutingPhoton.h
0303 
0304 run3_scouting_nanoAOD_2024.toModify(
0305     scoutingPhotonTable.variables,
0306     rawEnergy = Var("rawEnergy", "float", precision=10, doc="raw energy"),
0307     preshowerEnergy = Var("preshowerEnergy", "float", precision=10, doc='preshower energy'),
0308     corrEcalEnergyError = Var("corrEcalEnergyError", "float", precision=10, doc='corrEcalEnergyError'),
0309     nClusters = Var("nClusters", "uint", precision=10, doc="number of clusters"),
0310     nCrystals = Var("nCrystals", "uint", precision=10, doc="number of crystals"),
0311 )
0312 
0313 # Scouting Track
0314 # https://github.com/cms-sw/cmssw/blob/CMSSW_14_0_X/DataFormats/Scouting/interface/Run3ScoutingTrack.h
0315 
0316 scoutingTrackTable = cms.EDProducer("SimpleRun3ScoutingTrackFlatTableProducer",
0317     src = cms.InputTag("hltScoutingTrackPacker"),
0318     cut = cms.string(""),
0319     name = cms.string("ScoutingTrack"),
0320     doc  = cms.string("Scouting Track"),
0321     singleton = cms.bool(False),
0322     extension = cms.bool(False),
0323     variables = cms.PSet(
0324         pt = Var('tk_pt', 'float', precision=10, doc='pt'),
0325         eta = Var('tk_eta', 'float', precision=10, doc='eta'),
0326         phi = Var('tk_phi', 'float', precision=10, doc='phi'),
0327         chi2 = Var('tk_chi2', 'float', precision=10, doc='chi squared'),
0328         ndof = Var('tk_ndof', 'float', precision=10, doc='number of degrees of freedom'),
0329         charge = Var('tk_charge', 'int', doc='charge'),
0330         dxy = Var('tk_dxy', 'float', precision=10, doc='dxy'),
0331         dz = Var('tk_dz', 'float', precision=10, doc='dz'),
0332         nValidPixelHits = Var('tk_nValidPixelHits', 'int', doc='number of valid pixel hits'),
0333         nValidStripHits = Var('tk_nValidStripHits', 'int', doc='number of valid strip hits'),
0334         nTrackerLayersWithMeasurement = Var('tk_nTrackerLayersWithMeasurement', 'int', doc='number of tracker layers with measurements'),
0335         qoverp = Var('tk_qoverp', 'float', precision=10, doc='qoverp'),
0336         lambda_ = Var('tk_lambda', 'float', precision=10, doc='lambda'),
0337         dxyError = Var('tk_dxy_Error', 'float', precision=10, doc='dxyError'),
0338         dzError = Var('tk_dz_Error', 'float', precision=10, doc='dzError'),
0339         qoverpError = Var('tk_qoverp_Error', 'float', precision=10, doc='qoverpError'),
0340         lambdaError = Var('tk_lambda_Error', 'float', precision=10, doc='lambdaError'),
0341         phiError = Var('tk_phi_Error', 'float', precision=10, doc='phiError'),
0342         dsz = Var('tk_dsz', 'float', precision=10, doc='dsz'),
0343         dszError = Var('tk_dsz_Error', 'float', precision=10, doc='dszError'),
0344         qoverp_lambda_cov = Var('tk_qoverp_lambda_cov', 'float', precision=10, doc='qoverp lambda covariance ((0,1) element of covariance matrix)'),
0345         qoverp_phi_cov = Var('tk_qoverp_phi_cov', 'float', precision=10, doc='qoverp phi covariance ((0,2) element of covariance matrix)'),
0346         qoverp_dxy_cov = Var('tk_qoverp_dxy_cov', 'float', precision=10, doc='qoverp dxy covariance ((0,3) element of covariance matrix)'),
0347         qoverp_dsz_cov = Var('tk_qoverp_dsz_cov', 'float', precision=10, doc='qoverp dsz covariance ((0,4) element of covariance matrix)'),
0348         lambda_phi_cov = Var('tk_lambda_phi_cov', 'float', precision=10, doc='lambda phi covariance ((1,2) element of covariance matrix)'),
0349         lambda_dxy_cov = Var('tk_lambda_dxy_cov', 'float', precision=10, doc='lambda dxy covariance ((1,3) element of covariance matrix)'),
0350         lambda_dsz_cov = Var('tk_lambda_dsz_cov', 'float', precision=10, doc='lambd dsz covariance ((1,4) element of covariance matrix)'),
0351         phi_dxy_cov = Var('tk_phi_dxy_cov', 'float', precision=10, doc='phi dxy covariance ((2,3) element of covariance matrix)'),
0352         phi_dsz_cov = Var('tk_phi_dsz_cov', 'float', precision=10, doc='phi dsz covariance ((2,4) element of covariance matrix)'),
0353         dxy_dsz_cov = Var('tk_dxy_dsz_cov', 'float', precision=10, doc='dxy dsz covariance ((3,4) element of covariance matrix)'),
0354         vtxInd = Var('tk_vtxInd', 'int', doc='vertex index'),
0355         vx = Var('tk_vx', 'float', precision=10, doc='vx'),
0356         vy = Var('tk_vy', 'float', precision=10, doc='vy'),
0357         vz = Var('tk_vz', 'float', precision=10, doc='vz'),
0358     ),
0359 )
0360 
0361 # Scouting Primary Vertex
0362 # https://github.com/cms-sw/cmssw/blob/CMSSW_14_0_X/DataFormats/Scouting/interface/Run3ScoutingVertex.h
0363 
0364 scoutingPrimaryVertexTable = cms.EDProducer("SimpleRun3ScoutingVertexFlatTableProducer",
0365     src = cms.InputTag("hltScoutingPrimaryVertexPacker", "primaryVtx"),
0366     cut = cms.string(""),
0367     name = cms.string("ScoutingPrimaryVertex"),
0368     doc  = cms.string("Scouting Primary Vertex"),
0369     singleton = cms.bool(False),
0370     extension = cms.bool(False),
0371     variables = scoutingVertexVariables,
0372 )
0373 
0374 # Scouting Particle (PF candidate)
0375 # https://github.com/cms-sw/cmssw/blob/CMSSW_14_0_X/DataFormats/Scouting/interface/Run3ScoutingParticle.h
0376 
0377 scoutingParticleTable = cms.EDProducer("SimpleRun3ScoutingParticleFlatTableProducer",
0378     src = cms.InputTag("hltScoutingPFPacker"),
0379     name = cms.string("ScoutingParticle"),
0380     cut = cms.string(""),
0381     doc = cms.string("Scouting Particle"),
0382     singleton = cms.bool(False),
0383     extension = cms.bool(False),
0384     variables = cms.PSet(
0385         P3Vars,
0386         pdgId = Var("pdgId", int, doc="PDG code assigned by the event reconstruction (not by MC truth)"),
0387         vertex = Var("vertex()", int, doc="vertex index"),
0388         normchi2 = Var("normchi2()", float, doc="normalized chi squared of best track"),
0389         dz = Var("dz()", float, doc="dz of best track"),
0390         dxy = Var("dxy()", float, doc="dxy of best track"),
0391         dzsig = Var("dzsig()", float, doc="dzsig of best track"),
0392         dxysig = Var("dxysig()", float, doc="dxysig of best track"),
0393         lostInnerHits = Var("lostInnerHits()", "uint8", doc="lostInnerHits of best track"),
0394         quality = Var("quality()", "uint8", doc="quality of best track"),
0395         trk_pt = Var("trk_pt()", "float", doc="pt of best track"),
0396         trk_eta = Var("trk_eta()", "float", doc="eta of best track"),
0397         trk_phi = Var("trk_phi()", "float", doc="phi of best track"),
0398         relative_trk_vars = Var("relative_trk_vars()", "bool", doc="relative_trk_vars"),
0399     ),
0400 )
0401 
0402 # Scouting PFJet
0403 # https://github.com/cms-sw/cmssw/blob/CMSSW_14_0_X/DataFormats/Scouting/interface/Run3ScoutingPFJet.h
0404 
0405 scoutingPFJetTable = cms.EDProducer("SimpleRun3ScoutingPFJetFlatTableProducer",
0406     src = cms.InputTag("hltScoutingPFPacker"),
0407     cut = cms.string(""),
0408     name = cms.string("ScoutingPFJet"),
0409     doc  = cms.string("Scouting PFJet"),
0410     singleton = cms.bool(False),
0411     extension = cms.bool(False),
0412     variables = cms.PSet(
0413         P3Vars,
0414         m = Var('m', 'float', precision=10, doc='mass'),
0415         jetArea = Var('jetArea', 'float', precision=10, doc='jet area'),
0416         chargedHadronEnergy = Var('chargedHadronEnergy', 'float', precision=10, doc='charged hadron energy'),
0417         neutralHadronEnergy = Var('neutralHadronEnergy', 'float', precision=10, doc='neutral hadron energy'),
0418         photonEnergy = Var('photonEnergy', 'float', precision=10, doc='photon energy'),
0419         electronEnergy = Var('electronEnergy', 'float', precision=10, doc='electron energy'),
0420         muonEnergy = Var('muonEnergy', 'float', precision=10, doc='muon energy'),
0421         HFHadronEnergy = Var('HFHadronEnergy', 'float', precision=10, doc='hadronic energy in HF'),
0422         HFEMEnergy = Var('HFEMEnergy', 'float', precision=10, doc='electromagnetic energy in HF'),
0423         chargedHadronMultiplicity = Var('chargedHadronMultiplicity', 'int', doc='number of charged hadrons in the jet'),
0424         neutralHadronMultiplicity = Var('neutralHadronMultiplicity', 'int', doc='number of neutral hadrons in the jet'),
0425         photonMultiplicity = Var('photonMultiplicity', 'int', doc='number of photons in the jet'),
0426         electronMultiplicity = Var('electronMultiplicity', 'int', doc='number of electrons in the jet'),
0427         muonMultiplicity = Var('muonMultiplicity', 'int', doc='number of muons in the jet'),
0428         HFHadronMultiplicity = Var('HFHadronMultiplicity', 'int', doc='number of hadronic particles in the jet in HF'),
0429         HFEMMultiplicity = Var('HFEMMultiplicity', 'int', doc='number of electromagnetic particles in the jet in HF'),
0430         HOEnergy = Var('HOEnergy', 'float', precision=10, doc='hadronic energy in HO'),
0431     ),
0432 )
0433 
0434 # Scouting MET
0435 scoutingMETTable = cms.EDProducer("GlobalVariablesTableProducer",
0436     name = cms.string("ScoutingMET"),
0437     variables = cms.PSet(
0438         pt = ExtVar( cms.InputTag("hltScoutingPFPacker", "pfMetPt"), "double", doc = "pt"),
0439         phi = ExtVar( cms.InputTag("hltScoutingPFPacker", "pfMetPhi"), "double", doc = "phi"),
0440     ),
0441 )
0442 
0443 # Scouting Rho
0444 scoutingRhoTable = cms.EDProducer("GlobalVariablesTableProducer",
0445     name = cms.string("ScoutingRho"),
0446     variables = cms.PSet(
0447         fixedGridRhoFastjetAll = ExtVar(cms.InputTag("hltScoutingPFPacker", "rho"), "double", doc = "rho from all scouting PF Candidates, used e.g. for JECs" ),
0448     ),
0449 )
0450 
0451 ####################################
0452 ##### Scouting Derived Objects #####
0453 ####################################
0454 # objects built from scouting objects, e.g. reclustered jets
0455 
0456 #########################
0457 # Scouting PF Candidate #
0458 #########################
0459 # translation from Run3ScoutingParticle to reco::PFCandidate
0460 # used as input for standard algorithm, e.g. jet clustering
0461 
0462 scoutingPFCandidate = cms.EDProducer("Run3ScoutingParticleToRecoPFCandidateProducer",
0463     scoutingparticle = cms.InputTag("hltScoutingPFPacker"),
0464     CHS = cms.bool(False),
0465 )
0466 
0467 # this table is similar to scoutingParticleTable
0468 # except if relative_trk_vars is true, PF candidate variables will be already added to PF candidate's track variables
0469 scoutingPFCandidateTable = cms.EDProducer("SimpleCandidateFlatTableProducer",
0470     src = cms.InputTag("scoutingPFCandidate"),
0471     name = cms.string("ScoutingPFCandidate"),
0472     cut = cms.string(""),
0473     doc = cms.string("Scouting Candidate"),
0474     singleton = cms.bool(False),
0475     extension = cms.bool(False),
0476     variables = cms.PSet(
0477         CandVars,
0478     ),
0479     externalVariables = cms.PSet(
0480         vertexIndex = ExtVar(cms.InputTag("scoutingPFCandidate", "vertexIndex"), int, doc="vertex index"),
0481         trkNormchi2 = ExtVar(cms.InputTag("scoutingPFCandidate", "normchi2"), float, doc="normalized chi squared of best track", precision=6),
0482         trkDz = ExtVar(cms.InputTag("scoutingPFCandidate", "dz"), float, doc="dz of best track", precision=6),
0483         trkDxy = ExtVar(cms.InputTag("scoutingPFCandidate", "dxy"), float, doc="dxy of best track", precision=6),
0484         trkDzsig = ExtVar(cms.InputTag("scoutingPFCandidate", "dzsig"), float, doc="dzsig of best track", precision=6),
0485         trkDxysig = ExtVar(cms.InputTag("scoutingPFCandidate", "dxysig"), float, doc="dxysig of best track", precision=6),
0486         trkLostInnerHits = ExtVar(cms.InputTag("scoutingPFCandidate", "lostInnerHits"), int, doc="lostInnerHits of best track"),
0487         trkQuality = ExtVar(cms.InputTag("scoutingPFCandidate", "quality"), int, doc="quality of best track"),
0488         trkPt = ExtVar(cms.InputTag("scoutingPFCandidate", "trkPt"), float, doc="pt of best track", precision=6),
0489         trkEta = ExtVar(cms.InputTag("scoutingPFCandidate", "trkEta"), float, doc="eta of best track", precision=6),
0490         trkPhi = ExtVar(cms.InputTag("scoutingPFCandidate", "trkPhi"), float, doc="phi of best track", precision=6),
0491     ),
0492 )
0493 
0494 #########################
0495 # AK4 PFJet Reclustered #
0496 #########################
0497 # AK4 jets from reclustering PF candidates
0498 
0499 # AK4 jet clustering
0500 
0501 from RecoJets.JetProducers.ak4PFJets_cfi import ak4PFJets
0502 scoutingPFJetRecluster = ak4PFJets.clone(
0503     src = ("scoutingPFCandidate"),
0504     jetPtMin = 20,
0505 )
0506 
0507 # AK4 jet tagging 
0508 
0509 scoutingPFJetReclusterParticleNetJetTagInfos = cms.EDProducer("DeepBoostedJetTagInfoProducer",
0510     jet_radius = cms.double(0.4),
0511     min_jet_pt = cms.double(5.0),
0512     max_jet_eta = cms.double(2.5),
0513     min_pt_for_track_properties = cms.double(0.95),
0514     min_pt_for_pfcandidates = cms.double(0.1),
0515     use_puppiP4 = cms.bool(False),
0516     include_neutrals = cms.bool(True),
0517     sort_by_sip2dsig = cms.bool(False),
0518     min_puppi_wgt = cms.double(-1.0),
0519     flip_ip_sign = cms.bool(False),
0520     sip3dSigMax = cms.double(-1.0),
0521     use_hlt_features = cms.bool(False),
0522     pf_candidates = cms.InputTag("scoutingPFCandidate"),
0523     jets = cms.InputTag("scoutingPFJetRecluster"),
0524     puppi_value_map = cms.InputTag(""),
0525     use_scouting_features = cms.bool(True),
0526     normchi2_value_map = cms.InputTag("scoutingPFCandidate", "normchi2"),
0527     dz_value_map = cms.InputTag("scoutingPFCandidate", "dz"),
0528     dxy_value_map = cms.InputTag("scoutingPFCandidate", "dxy"),
0529     dzsig_value_map = cms.InputTag("scoutingPFCandidate", "dzsig"),
0530     dxysig_value_map = cms.InputTag("scoutingPFCandidate", "dxysig"),
0531     lostInnerHits_value_map = cms.InputTag("scoutingPFCandidate", "lostInnerHits"),
0532     quality_value_map = cms.InputTag("scoutingPFCandidate", "quality"),
0533     trkPt_value_map = cms.InputTag("scoutingPFCandidate", "trkPt"),
0534     trkEta_value_map = cms.InputTag("scoutingPFCandidate", "trkEta"),
0535     trkPhi_value_map = cms.InputTag("scoutingPFCandidate", "trkPhi"),
0536 )
0537 
0538 from RecoBTag.ONNXRuntime.boostedJetONNXJetTagsProducer_cfi import boostedJetONNXJetTagsProducer
0539 scoutingPFJetReclusterParticleNetJetTags = cms.EDProducer("BoostedJetONNXJetTagsProducer",
0540     jets = cms.InputTag("scoutingPFJetRecluster"),
0541     produceValueMap = cms.untracked.bool(True),
0542     src = cms.InputTag("scoutingPFJetReclusterParticleNetJetTagInfos"),
0543     preprocess_json = cms.string("RecoBTag/Combined/data/Run3Scouting/ParticleNetAK4/V00/preprocess.json"),
0544     model_path = cms.FileInPath("RecoBTag/Combined/data/Run3Scouting/ParticleNetAK4/V00/particle-net.onnx"),
0545     flav_names = cms.vstring(["probb", "probbb","probc", "probcc", "probuds", "probg", "probundef"]),
0546     debugMode = cms.untracked.bool(False),
0547 )
0548 
0549 # output AK4 jet to nanoaod::flattable
0550 
0551 scoutingPFJetReclusterTable = cms.EDProducer("SimplePFJetFlatTableProducer",
0552     src = cms.InputTag("scoutingPFJetRecluster"),
0553     name = cms.string("ScoutingPFJetRecluster"),
0554     cut = cms.string(""),
0555     doc = cms.string("ak4 jet from reclustering scouting PF candidates"),
0556     singleton = cms.bool(False),
0557     extension = cms.bool(False),
0558     variables = cms.PSet(
0559         P4Vars,
0560         area = Var("jetArea()", float, doc="jet catchment area, for JECs",precision=10),
0561         # energy fractions
0562         chHEF = Var("chargedHadronEnergyFraction()", float, doc="charged Hadron Energy Fraction", precision= 6),
0563         neHEF = Var("neutralHadronEnergyFraction()", float, doc="neutral Hadron Energy Fraction", precision= 6),
0564         chEmEF = Var("chargedEmEnergyFraction()", float, doc="charged Electromagnetic Energy Fraction", precision= 6),
0565         neEmEF = Var("neutralEmEnergyFraction()", float, doc="neutral Electromagnetic Energy Fraction", precision= 6),
0566         muEF = Var("muonEnergyFraction()", float, doc="muon Energy Fraction", precision= 6),
0567         hfHEF = Var("HFHadronEnergyFraction()",float,doc="hadronic Energy Fraction in HF",precision= 6),
0568         hfEmEF = Var("HFEMEnergyFraction()",float,doc="electromagnetic Energy Fraction in HF",precision= 6),
0569         # multiplicities
0570         nCh = Var("chargedHadronMultiplicity()", int, doc="number of charged hadrons in the jet"),
0571         nNh = Var("neutralHadronMultiplicity()", int, doc="number of neutral hadrons in the jet"),
0572         nMuons = Var("muonMultiplicity()", int, doc="number of muons in the jet"),
0573         nElectrons = Var("electronMultiplicity()", int, doc="number of electrons in the jet"),
0574         nPhotons = Var("photonMultiplicity()", int, doc="number of photons in the jet"),
0575         nConstituents = Var("numberOfDaughters()", "uint8", doc="number of particles in the jet")
0576     ),
0577     externalVariables = cms.PSet(
0578         # jet tagging probabilities
0579         particleNet_prob_b = ExtVar(cms.InputTag("scoutingPFJetReclusterParticleNetJetTags:probb"), float, doc="ParticleNet probability of b", precision=10),
0580         particleNet_prob_bb = ExtVar(cms.InputTag("scoutingPFJetReclusterParticleNetJetTags:probbb"), float, doc="ParticleNet probability of bb", precision=10),
0581         particleNet_prob_c = ExtVar(cms.InputTag("scoutingPFJetReclusterParticleNetJetTags:probc"), float, doc="ParticleNet probability of c", precision=10),
0582         particleNet_prob_cc = ExtVar(cms.InputTag("scoutingPFJetReclusterParticleNetJetTags:probcc"), float, doc="ParticleNet probability of cc", precision=10),
0583         particleNet_prob_uds = ExtVar(cms.InputTag("scoutingPFJetReclusterParticleNetJetTags:probuds"), float, doc="particlenet probability of uds", precision=10),
0584         particleNet_prob_g = ExtVar(cms.InputTag("scoutingPFJetReclusterParticleNetJetTags:probg"), float, doc="ParticleNet probability of g", precision=10),
0585         particleNet_prob_undef = ExtVar(cms.InputTag("scoutingPFJetReclusterParticleNetJetTags:probundef"), float, doc="ParticleNet probability of undef", precision=10),
0586     ),
0587 )
0588 
0589 # AK4 gen jet matching (only for MC)
0590 
0591 scoutingPFJetReclusterMatchGen = cms.EDProducer("RecoJetToGenJetDeltaRValueMapProducer",
0592     src = cms.InputTag("scoutingPFJetRecluster"),
0593     matched = cms.InputTag("slimmedGenJets"),
0594     distMax = cms.double(0.4),
0595     value = cms.string("index"),
0596 )
0597 
0598 scoutingPFJetReclusterMatchGenExtensionTable = cms.EDProducer("SimplePFJetFlatTableProducer",
0599     src = cms.InputTag("scoutingPFJetRecluster"),
0600     name = cms.string("ScoutingPFJetRecluster"),
0601     cut = cms.string(""),
0602     singleton = cms.bool(False),
0603     extension = cms.bool(True),
0604     variables = cms.PSet(),
0605     externalVariables = cms.PSet(
0606         genJetIdx = ExtVar(cms.InputTag("scoutingPFJetReclusterMatchGen"), int, doc="gen jet idx"),
0607     ),
0608 )
0609 
0610 #########################
0611 # AK8 PFJet Reclustered #
0612 #########################
0613 
0614 # AK8 jet clustering
0615 
0616 scoutingFatPFJetRecluster = ak4PFJets.clone(
0617     src = ("scoutingPFCandidate"),
0618     rParam   = 0.8,
0619     jetPtMin = 170.0,
0620 )
0621 
0622 # AK8 jet tagging
0623 
0624 scoutingFatPFJetReclusterParticleNetJetTagInfos = cms.EDProducer("DeepBoostedJetTagInfoProducer",
0625     jet_radius = cms.double(0.8),
0626     min_jet_pt = cms.double(50),
0627     max_jet_eta = cms.double(2.5),
0628     min_pt_for_track_properties = cms.double(0.95),
0629     min_pt_for_pfcandidates = cms.double(0.1),
0630     use_puppiP4 = cms.bool(False),
0631     include_neutrals = cms.bool(True),
0632     sort_by_sip2dsig = cms.bool(False),
0633     min_puppi_wgt = cms.double(-1.0),
0634     flip_ip_sign = cms.bool(False),
0635     sip3dSigMax = cms.double(-1.0),
0636     use_hlt_features = cms.bool(False),
0637     pf_candidates = cms.InputTag("scoutingPFCandidate"),
0638     jets = cms.InputTag("scoutingFatPFJetRecluster"),
0639     puppi_value_map = cms.InputTag(""),
0640     use_scouting_features = cms.bool(True),
0641     normchi2_value_map = cms.InputTag("scoutingPFCandidate", "normchi2"),
0642     dz_value_map = cms.InputTag("scoutingPFCandidate", "dz"),
0643     dxy_value_map = cms.InputTag("scoutingPFCandidate", "dxy"),
0644     dzsig_value_map = cms.InputTag("scoutingPFCandidate", "dzsig"),
0645     dxysig_value_map = cms.InputTag("scoutingPFCandidate", "dxysig"),
0646     lostInnerHits_value_map = cms.InputTag("scoutingPFCandidate", "lostInnerHits"),
0647     quality_value_map = cms.InputTag("scoutingPFCandidate", "quality"),
0648     trkPt_value_map = cms.InputTag("scoutingPFCandidate", "trkPt"),
0649     trkEta_value_map = cms.InputTag("scoutingPFCandidate", "trkEta"),
0650     trkPhi_value_map = cms.InputTag("scoutingPFCandidate", "trkPhi"),
0651 )
0652 
0653 from RecoBTag.ONNXRuntime.boostedJetONNXJetTagsProducer_cfi import boostedJetONNXJetTagsProducer
0654 scoutingFatPFJetReclusterParticleNetJetTags = cms.EDProducer("BoostedJetONNXJetTagsProducer",
0655     jets = cms.InputTag("scoutingFatPFJetRecluster"),
0656     produceValueMap = cms.untracked.bool(True),
0657     src = cms.InputTag("scoutingFatPFJetReclusterParticleNetJetTagInfos"),
0658     preprocess_json = cms.string("RecoBTag/Combined/data/Run3Scouting/ParticleNetAK8/General/V00/preprocess.json"),
0659     model_path = cms.FileInPath("RecoBTag/Combined/data/Run3Scouting/ParticleNetAK8/General/V00/particle-net.onnx"),
0660     flav_names = cms.vstring(["probQCDall", "probHbb","probHcc", "probHqq"]),
0661     debugMode = cms.untracked.bool(False),
0662 )
0663 
0664 scoutingFatPFJetReclusterGlobalParticleTransformerJetTagInfos = cms.EDProducer("DeepBoostedJetTagInfoProducer",
0665     jet_radius = cms.double(0.8),
0666     min_jet_pt = cms.double(50),
0667     max_jet_eta = cms.double(2.5),
0668     min_pt_for_track_properties = cms.double(0.95),
0669     min_pt_for_pfcandidates = cms.double(0.1),
0670     use_puppiP4 = cms.bool(False),
0671     include_neutrals = cms.bool(True),
0672     sort_by_sip2dsig = cms.bool(False),
0673     min_puppi_wgt = cms.double(-1.0),
0674     flip_ip_sign = cms.bool(False),
0675     sip3dSigMax = cms.double(-1.0),
0676     use_hlt_features = cms.bool(False),
0677     pf_candidates = cms.InputTag("scoutingPFCandidate"),
0678     jets = cms.InputTag("scoutingFatPFJetRecluster"),
0679     puppi_value_map = cms.InputTag(""),
0680     use_scouting_features = cms.bool(True),
0681     normchi2_value_map = cms.InputTag("scoutingPFCandidate", "normchi2"),
0682     dz_value_map = cms.InputTag("scoutingPFCandidate", "dz"),
0683     dxy_value_map = cms.InputTag("scoutingPFCandidate", "dxy"),
0684     dzsig_value_map = cms.InputTag("scoutingPFCandidate", "dzsig"),
0685     dxysig_value_map = cms.InputTag("scoutingPFCandidate", "dxysig"),
0686     lostInnerHits_value_map = cms.InputTag("scoutingPFCandidate", "lostInnerHits"),
0687     quality_value_map = cms.InputTag("scoutingPFCandidate", "quality"),
0688     trkPt_value_map = cms.InputTag("scoutingPFCandidate", "trkPt"),
0689     trkEta_value_map = cms.InputTag("scoutingPFCandidate", "trkEta"),
0690     trkPhi_value_map = cms.InputTag("scoutingPFCandidate", "trkPhi"),
0691 )
0692 
0693 scoutingFatPFJetReclusterGlobalParticleTransformerJetTags = cms.EDProducer("BoostedJetONNXJetTagsProducer",
0694     jets = cms.InputTag("scoutingFatPFJetRecluster"),
0695     produceValueMap = cms.untracked.bool(True),
0696     src = cms.InputTag("scoutingFatPFJetReclusterGlobalParticleTransformerJetTagInfos"),
0697     preprocess_json = cms.string("RecoBTag/Combined/data/Run3Scouting/GlobalParticleTransformerAK8/General/V00/preprocess.json"),
0698     model_path = cms.FileInPath("RecoBTag/Combined/data/Run3Scouting/GlobalParticleTransformerAK8/General/V00/global-part_2022to2023.onnx"),
0699     flav_names = cms.vstring([
0700              "probQCD", "probXbb", "probXcc", "probXss", "probXqq", "probXbs", "probXgg", "probXee", "probXmm", "probXtauhtaue", "probXtauhtaum", "probXtauhtauh", "probXbc", "probXcs", "probXud", "massCorrGeneric", "massCorrGenericX2p", "massCorrGenericW2p", "massCorrResonance"
0701      ]),
0702     debugMode = cms.untracked.bool(False),
0703 )
0704 
0705 run3_scouting_nanoAOD_2024.toModify(
0706     scoutingFatPFJetReclusterGlobalParticleTransformerJetTags,
0707     model_path = cms.FileInPath("RecoBTag/Combined/data/Run3Scouting/GlobalParticleTransformerAK8/General/V00/global-part_2024.onnx")
0708 )
0709 
0710 # AK8 jet softdrop mass
0711 
0712 scoutingFatPFJetReclusterSoftDrop = ak4PFJets.clone(
0713     src = ("scoutingPFCandidate"),
0714     rParam   = 0.8,
0715     jetPtMin = 170.0,
0716     useSoftDrop = cms.bool(True),
0717     zcut = cms.double(0.1),
0718     beta = cms.double(0.0),
0719     R0   = cms.double(0.8),
0720     useExplicitGhosts = cms.bool(True),
0721     writeCompound = cms.bool(True),
0722     jetCollInstanceName=cms.string("SubJets"),
0723 )
0724 
0725 scoutingFatPFJetReclusterSoftDropMass = cms.EDProducer("RecoJetDeltaRValueMapProducer",
0726     src = cms.InputTag("scoutingFatPFJetRecluster"),
0727     matched = cms.InputTag("scoutingFatPFJetReclusterSoftDrop"),
0728     distMax = cms.double(0.8),
0729     value = cms.string("mass")
0730 )
0731 
0732 # AK8 jet regressed mass
0733 
0734 scoutingFatPFJetReclusterParticleNetMassRegressionJetTags = cms.EDProducer("BoostedJetONNXJetTagsProducer",
0735     jets = cms.InputTag("scoutingFatPFJetRecluster"),
0736     produceValueMap = cms.untracked.bool(True),
0737     src = cms.InputTag("scoutingFatPFJetReclusterParticleNetJetTagInfos"),
0738     preprocess_json = cms.string("RecoBTag/Combined/data/Run3Scouting/ParticleNetAK8/MassRegression/V00/preprocess.json"),
0739     model_path = cms.FileInPath("RecoBTag/Combined/data/Run3Scouting/ParticleNetAK8/MassRegression/V00/particle-net.onnx"),
0740     flav_names = cms.vstring(["mass"]),
0741     debugMode = cms.untracked.bool(False),
0742 )
0743 
0744 # AK8 jet substructure variables 
0745 
0746 from RecoJets.JetProducers.ECF_cff import ecfNbeta1
0747 scoutingFatPFJetReclusterEcfNbeta1 = ecfNbeta1.clone(src = cms.InputTag("scoutingFatPFJetRecluster"), srcWeights="")
0748 
0749 from RecoJets.JetProducers.nJettinessAdder_cfi import Njettiness
0750 scoutingFatPFJetReclusterNjettiness = Njettiness.clone(src = cms.InputTag("scoutingFatPFJetRecluster"), srcWeights="")
0751 
0752 # output AK8 jet to nanoaod::flattable
0753 
0754 scoutingFatPFJetReclusterTable = cms.EDProducer("SimplePFJetFlatTableProducer",
0755     src = cms.InputTag("scoutingFatPFJetRecluster"),
0756     name = cms.string("ScoutingFatPFJetRecluster"),
0757     cut = cms.string(""),
0758     doc = cms.string("ak8 jet from re-clustering scouting PF Candidates"),
0759     singleton = cms.bool(False),
0760     extension = cms.bool(False),
0761     variables = cms.PSet(
0762         P4Vars,
0763         area = Var("jetArea()", float, doc="jet catchment area, for JECs",precision=10),
0764         # energy fractions
0765         chHEF = Var("chargedHadronEnergyFraction()", float, doc="charged Hadron Energy Fraction", precision= 6),
0766         neHEF = Var("neutralHadronEnergyFraction()", float, doc="neutral Hadron Energy Fraction", precision= 6),
0767         chEmEF = Var("chargedEmEnergyFraction()", float, doc="charged Electromagnetic Energy Fraction", precision= 6),
0768         neEmEF = Var("neutralEmEnergyFraction()", float, doc="neutral Electromagnetic Energy Fraction", precision= 6),
0769         muEF = Var("muonEnergyFraction()", float, doc="muon Energy Fraction", precision= 6),
0770         hfHEF = Var("HFHadronEnergyFraction()",float,doc="hadronic Energy Fraction in HF",precision= 6),
0771         hfEmEF = Var("HFEMEnergyFraction()",float,doc="electromagnetic Energy Fraction in HF",precision= 6),
0772         # multiplicities
0773         nCh = Var("chargedHadronMultiplicity()", int, doc="number of charged hadrons in the jet"),
0774         nNh = Var("neutralHadronMultiplicity()", int, doc="number of neutral hadrons in the jet"),
0775         nMuons = Var("muonMultiplicity()", int, doc="number of muons in the jet"),
0776         nElectrons = Var("electronMultiplicity()", int, doc="number of electrons in the jet"),
0777         nPhotons = Var("photonMultiplicity()", int, doc="number of photons in the jet"),
0778         nConstituents = Var("numberOfDaughters()", "uint8", doc="number of particles in the jet")
0779     ),
0780     externalVariables = cms.PSet(
0781         # jet tagging probabilities
0782         particleNet_prob_QCD = ExtVar(cms.InputTag("scoutingFatPFJetReclusterParticleNetJetTags:probQCDall"), float, doc="ParticleNet probability of QCD", precision=10),
0783         particleNet_prob_Hbb = ExtVar(cms.InputTag("scoutingFatPFJetReclusterParticleNetJetTags:probHbb"), float, doc="ParticleNet probability of Hbb", precision=10),
0784         particleNet_prob_Hcc = ExtVar(cms.InputTag("scoutingFatPFJetReclusterParticleNetJetTags:probHcc"), float, doc="ParticleNet probability of Hcc", precision=10),
0785         particleNet_prob_Hqq = ExtVar(cms.InputTag("scoutingFatPFJetReclusterParticleNetJetTags:probHqq"), float, doc="ParticleNet probability of Hqq", precision=10),
0786         scoutGlobalParT_prob_QCD = ExtVar(cms.InputTag("scoutingFatPFJetReclusterGlobalParticleTransformerJetTags:probQCD"), float, doc="Mass-decorrelated Scouting GlobalParT QCD score", precision=10),
0787         scoutGlobalParT_prob_Xbb = ExtVar(cms.InputTag("scoutingFatPFJetReclusterGlobalParticleTransformerJetTags:probXbb"), float, doc="Mass-decorrelated Scouting GlobalParT X->bb score", precision=10),
0788         scoutGlobalParT_prob_Xcc = ExtVar(cms.InputTag("scoutingFatPFJetReclusterGlobalParticleTransformerJetTags:probXcc"), float, doc="Mass-decorrelated Scouting GlobalParT X->cc score", precision=10),
0789         scoutGlobalParT_prob_Xss = ExtVar(cms.InputTag("scoutingFatPFJetReclusterGlobalParticleTransformerJetTags:probXss"), float, doc="Mass-decorrelated Scouting GlobalParT X->ss score", precision=10),
0790         scoutGlobalParT_prob_Xqq = ExtVar(cms.InputTag("scoutingFatPFJetReclusterGlobalParticleTransformerJetTags:probXqq"), float, doc="Mass-decorrelated Scouting GlobalParT X->qq score", precision=10),
0791         scoutGlobalParT_prob_Xbc = ExtVar(cms.InputTag("scoutingFatPFJetReclusterGlobalParticleTransformerJetTags:probXbc"), float, doc="Mass-decorrelated Scouting GlobalParT X->bc score", precision=10),
0792         scoutGlobalParT_prob_Xbs = ExtVar(cms.InputTag("scoutingFatPFJetReclusterGlobalParticleTransformerJetTags:probXbs"), float, doc="Mass-decorrelated Scouting GlobalParT X->bs score", precision=10),
0793         scoutGlobalParT_prob_Xcs = ExtVar(cms.InputTag("scoutingFatPFJetReclusterGlobalParticleTransformerJetTags:probXcs"), float, doc="Mass-decorrelated Scouting GlobalParT X->cs score", precision=10),
0794         scoutGlobalParT_prob_Xud = ExtVar(cms.InputTag("scoutingFatPFJetReclusterGlobalParticleTransformerJetTags:probXud"), float, doc="Mass-decorrelated Scouting GlobalParT X->ud score", precision=10),
0795         scoutGlobalParT_prob_Xgg = ExtVar(cms.InputTag("scoutingFatPFJetReclusterGlobalParticleTransformerJetTags:probXgg"), float, doc="Mass-decorrelated Scouting GlobalParT X->gg score", precision=10),
0796         scoutGlobalParT_prob_Xtauhtaue = ExtVar(cms.InputTag("scoutingFatPFJetReclusterGlobalParticleTransformerJetTags:probXtauhtaue"), float, doc="Mass-decorrelated Scouting GlobalParT X->tauhtaue score", precision=10),
0797         scoutGlobalParT_prob_Xtauhtaum = ExtVar(cms.InputTag("scoutingFatPFJetReclusterGlobalParticleTransformerJetTags:probXtauhtaum"), float, doc="Mass-decorrelated Scouting GlobalParT X->tauhtaum score", precision=10),
0798         scoutGlobalParT_prob_Xtauhtauh = ExtVar(cms.InputTag("scoutingFatPFJetReclusterGlobalParticleTransformerJetTags:probXtauhtauh"), float, doc="Mass-decorrelated Scouting GlobalParT X->tauhtauh score", precision=10),
0799         # softdrop mass
0800         msoftdrop = ExtVar(cms.InputTag("scoutingFatPFJetReclusterSoftDropMass"), float, doc="Softdrop mass", precision=10),
0801         # regressed mass
0802         particleNet_mass = ExtVar(cms.InputTag("scoutingFatPFJetReclusterParticleNetMassRegressionJetTags:mass"), float, doc="ParticleNet regressed mass", precision=10),
0803         scoutGlobalParT_massCorrGeneric = ExtVar(cms.InputTag("scoutingFatPFJetReclusterGlobalParticleTransformerJetTags:massCorrGeneric"), float, doc="Mass-decorrelated Scouting GlobalParT mass regression corrector with respect to the original jet mass, optimised for generic jet cases. Use (massCorrGeneric * mass) to get the regressed mass", precision=10),
0804         scoutGlobalParT_massCorrGenericX2p = ExtVar(cms.InputTag("scoutingFatPFJetReclusterGlobalParticleTransformerJetTags:massCorrGenericX2p"), float, doc="Mass-decorrelated Scouting GlobalParT mass regression corrector with respect to the original jet mass, optimised for generic X2p jet cases. Use (massCorrGenericX2p * mass) to get the regressed mass", precision=10),
0805         scoutGlobalParT_massCorrGenericW2p = ExtVar(cms.InputTag("scoutingFatPFJetReclusterGlobalParticleTransformerJetTags:massCorrGenericW2p"), float, doc="Mass-decorrelated Scouting GlobalParT mass regression corrector with respect to the original jet mass, optimised for generic W jet cases. Use (massCorrGenericW2p * mass) to get the regressed mass", precision=10),
0806         scoutGlobalParT_massCorrResonance = ExtVar(cms.InputTag("scoutingFatPFJetReclusterGlobalParticleTransformerJetTags:massCorrResonance"), float, doc="Scouting GlobalParT mass regression corrector with respect to the original jet mass, optimised for resonance jets. Use (massCorrResonance * mass) to get the regressed mass", precision=10),
0807         # substructure variables    
0808         n2b1 = ExtVar(cms.InputTag("scoutingFatPFJetReclusterEcfNbeta1:ecfN2"), float, doc="N2 with beta=1", precision=10),
0809         n3b1 = ExtVar(cms.InputTag("scoutingFatPFJetReclusterEcfNbeta1:ecfN3"), float, doc="N3 with beta=1", precision=10),
0810         tau1 = ExtVar(cms.InputTag("scoutingFatPFJetReclusterNjettiness:tau1"), float, doc="Nsubjettiness (1 axis)", precision=10),
0811         tau2 = ExtVar(cms.InputTag("scoutingFatPFJetReclusterNjettiness:tau2"), float, doc="Nsubjettiness (2 axis)", precision=10),
0812         tau3 = ExtVar(cms.InputTag("scoutingFatPFJetReclusterNjettiness:tau3"), float, doc="Nsubjettiness (3 axis)", precision=10),
0813         tau4 = ExtVar(cms.InputTag("scoutingFatPFJetReclusterNjettiness:tau4"), float, doc="Nsubjettiness (4 axis)", precision=10),
0814     ),
0815 )
0816 
0817 # AK8 gen jet matching (only for MC)
0818 
0819 scoutingFatPFJetReclusterMatchGen = cms.EDProducer("RecoJetToGenJetDeltaRValueMapProducer",
0820     src = cms.InputTag("scoutingFatPFJetRecluster"),
0821     matched = cms.InputTag("slimmedGenJetsAK8"),
0822     distMax = cms.double(0.8),
0823     value = cms.string("index"),
0824 )
0825 
0826 scoutingFatPFJetReclusterMatchGenExtensionTable = cms.EDProducer("SimplePFJetFlatTableProducer",
0827     src = cms.InputTag("scoutingFatPFJetRecluster"),
0828     name = cms.string("ScoutingFatPFJetRecluster"),
0829     cut = cms.string(""),
0830     singleton = cms.bool(False),
0831     extension = cms.bool(True),
0832     variables = cms.PSet(),
0833     externalVariables = cms.PSet(
0834         genJetAK8Idx = ExtVar(cms.InputTag("scoutingFatPFJetReclusterMatchGen"), int, doc="gen jet idx"),
0835     ),
0836 )