diff --git a/Configuration/PyReleaseValidation/python/relval_nano.py b/Configuration/PyReleaseValidation/python/relval_nano.py index 6c6f13544dee6..ef88f824e14fc 100644 --- a/Configuration/PyReleaseValidation/python/relval_nano.py +++ b/Configuration/PyReleaseValidation/python/relval_nano.py @@ -139,6 +139,12 @@ def subnext(self): steps['MuonEG2023MINIAOD13.0'] = { 'INPUT':InputInfo(location='STD',ls=run3_lumis, dataSet='/MuonEG/Run2023C-PromptReco-v4/MINIAOD')} +steps['ZMuSkim2023DRAWRECO13.0'] = { 'INPUT':InputInfo(location='STD',ls={ 370775: [[1, 168]]}, + dataSet='/Muon0/Run2023D-ZMu-PromptReco-v2/RAW-RECO')} + +steps['ZeroBias2023DRAW13.0']={'INPUT':InputInfo(location='STD', ls={369978: [[1, 800]]}, + dataSet='/ZeroBias/Run2023D-v1/RAW')} + steps['NANO_data13.0']=merge([{'--era':'Run3', '--conditions':'auto:run3_data'}, _NANO_data]) @@ -146,6 +152,20 @@ def subnext(self): steps['NANO_data13.0_prompt']=merge([{'--customise' : 'PhysicsTools/NanoAOD/nano_cff.nanoL1TrigObjCustomize', '-n' : '1000'}, steps['NANO_data13.0']]) +steps['muDPGNANO_data13.0']=merge([{'-s' : 'RAW2DIGI,NANO:@MUDPG', + '--conditions':'auto:run3_data', + '-n' : '100', + '--era' : 'Run3', + '--datatier':'NANOAOD', + '--eventcontent':'NANOAOD'}]) + +steps['muDPGNANOBkg_data13.0']=merge([{'-s' : 'RAW2DIGI,NANO:@MUDPGBKG', + '--conditions':'auto:run3_data', + '-n' : '100', + '--era' : 'Run3', + '--datatier':'NANOAOD', + '--eventcontent':'NANOAOD'}]) + ###current release cycle workflows : 13.2 steps['TTBarMINIAOD13.2'] = {'INPUT':InputInfo(location='STD', ## dataset below to be replaced with a 13.2 relval sample when available @@ -208,6 +228,8 @@ def subnext(self): _wfn.subnext() workflows[_wfn()] = ['NANOdata130Xrun3', ['MuonEG2023MINIAOD13.0', 'NANO_data13.0', 'HRV_NANO_data']] workflows[_wfn()] = ['NANOdata130Xrun3', ['MuonEG2023MINIAOD13.0', 'NANO_data13.0_prompt', 'HRV_NANO_data']] +workflows[_wfn()] = ['muDPGNANO130Xrun3', ['ZMuSkim2023DRAWRECO13.0', 'muDPGNANO_data13.0']] +workflows[_wfn()] = ['muDPGNANOBkg130Xrun3', ['ZeroBias2023DRAW13.0', 'muDPGNANOBkg_data13.0']] _wfn.next() ################ diff --git a/DPGAnalysis/MuonTools/plugins/MuCSCTnPFlatTableProducer.cc b/DPGAnalysis/MuonTools/plugins/MuCSCTnPFlatTableProducer.cc index 552d22aa1768f..ad0b36aa31e45 100644 --- a/DPGAnalysis/MuonTools/plugins/MuCSCTnPFlatTableProducer.cc +++ b/DPGAnalysis/MuonTools/plugins/MuCSCTnPFlatTableProducer.cc @@ -56,8 +56,6 @@ #include "TrackingTools/Records/interface/TransientTrackRecord.h" #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h" #include "TrackingTools/GeomPropagators/interface/Propagator.h" -#include "TrackingTools/TrajectoryParametrization/interface/GlobalTrajectoryParameters.h" -#include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h" class MuonServiceProxy; @@ -383,9 +381,13 @@ void MuCSCTnPFlatTableProducer::fillTable(edm::Event& ev) { m_chamberEndcap.push_back(endcapCSC * 1); Int_t iiStationFail = 0; + Int_t iiStation0Pass = 0; for (int iiStationZ = 0; iiStationZ < 6; iiStationZ++) { UChar_t stationCSC = iiStationZ > 2 ? iiStationZ - 2 : 0; UChar_t ringCSC = 0; + // Could monitor this problem here if necessary; + if (stationCSC == 0 && iiStation0Pass > 0) + continue; TrajectoryStateOnSurface tsos = surfExtrapTrkSam(track, ec ? MEZ[iiStationZ] : -MEZ[iiStationZ]); if (tsos.isValid()) { @@ -407,6 +409,8 @@ void MuCSCTnPFlatTableProducer::fillTable(edm::Event& ev) { tsos = surfExtrapTrkSam(track, Layer3Surface.position().z()); if (tsos.isValid()) { + if (stationCSC == 0) + iiStation0Pass++; // Fill track intersection denominator information LocalPoint localTTIntPoint = Layer3Surface.toLocal(tsos.freeState()->position()); const CSCLayerGeometry* layerGeoma = m_cscGeometry->chamber(Layer0Id)->layer(3)->geometry(); diff --git a/DPGAnalysis/MuonTools/plugins/MuDTMuonExtTableProducer.cc b/DPGAnalysis/MuonTools/plugins/MuDTMuonExtTableProducer.cc index a1653d692407c..8ebcacb24c231 100644 --- a/DPGAnalysis/MuonTools/plugins/MuDTMuonExtTableProducer.cc +++ b/DPGAnalysis/MuonTools/plugins/MuDTMuonExtTableProducer.cc @@ -329,7 +329,16 @@ void MuDTMuonExtTableProducer::fillTable(edm::Event& ev) { tabMatches->setDoc("RECO muon matches_* vectors"); addColumn(tabMatches, "x", matches_x, "x position of the extrapolated track on the matched DT chamber"); - addColumn(tabMatches, "y", matches_y, "x position of the extrapolated track on the matched DT chamber"); + addColumn(tabMatches, "y", matches_y, "y position of the extrapolated track on the matched DT chamber"); + + addColumn(tabMatches, + "edgeX", + matches_edgeX, + "distance in x of the extrapolated track to the matched DT chamber border (<0 == inside the chamber)"); + addColumn(tabMatches, + "edgeY", + matches_edgeY, + "distance in y of the extrapolated track to the matched DT chamber border (<0 == inside the chamber)"); addColumn(tabMatches, "wheel", matches_wheel, "matched DT chamber wheel"); addColumn(tabMatches, "sector", matches_sector, "matched DT chamber sector"); diff --git a/DPGAnalysis/MuonTools/plugins/MuGEMMuonExtTableProducer.cc b/DPGAnalysis/MuonTools/plugins/MuGEMMuonExtTableProducer.cc index a8ba0a8d92d02..6b49b1c34cc8b 100644 --- a/DPGAnalysis/MuonTools/plugins/MuGEMMuonExtTableProducer.cc +++ b/DPGAnalysis/MuonTools/plugins/MuGEMMuonExtTableProducer.cc @@ -213,9 +213,8 @@ void MuGEMMuonExtTableProducer::fillTable(edm::Event& ev) { continue; } - const auto&& start_state = - is_insideout ? transient_track.outermostMeasurementState() : transient_track.innermostMeasurementState(); - auto& propagator = is_incoming ? propagator_along : propagator_opposite; + const auto&& start_state = transient_track.innermostMeasurementState(); + auto& propagator = propagator_any; auto recHitMu = outerTrackRef->recHitsBegin(); auto recHitMuEnd = outerTrackRef->recHitsEnd(); diff --git a/DPGAnalysis/MuonTools/python/muNtupleProducerBkg_cff.py b/DPGAnalysis/MuonTools/python/muNtupleProducerBkg_cff.py index b928bf610b491..0051bdf1e234d 100644 --- a/DPGAnalysis/MuonTools/python/muNtupleProducerBkg_cff.py +++ b/DPGAnalysis/MuonTools/python/muNtupleProducerBkg_cff.py @@ -2,11 +2,14 @@ from PhysicsTools.NanoAOD.common_cff import * +from DPGAnalysis.MuonTools.nano_mu_global_cff import * from DPGAnalysis.MuonTools.nano_mu_digi_cff import * -muNtupleProducerBkg = cms.Sequence(muDigiProducersBkg) +muDPGNanoProducerBkg = cms.Sequence(lhcInfoTableProducer + + lumiTableProducer + + muDigiProducersBkg) -def nanoAOD_customizeCommon(process) : +def muDPGNanoBkgCustomize(process) : if hasattr(process, "NANOAODoutput"): process.NANOAODoutput.outputCommands.append("keep nanoaodFlatTable_*Table*_*_*") diff --git a/DPGAnalysis/MuonTools/python/muNtupleProducer_cff.py b/DPGAnalysis/MuonTools/python/muNtupleProducer_cff.py index 993e2e1098e90..001671e872ca3 100644 --- a/DPGAnalysis/MuonTools/python/muNtupleProducer_cff.py +++ b/DPGAnalysis/MuonTools/python/muNtupleProducer_cff.py @@ -2,19 +2,32 @@ from PhysicsTools.NanoAOD.common_cff import * +from DPGAnalysis.MuonTools.nano_mu_global_cff import * from DPGAnalysis.MuonTools.nano_mu_digi_cff import * from DPGAnalysis.MuonTools.nano_mu_local_reco_cff import * from DPGAnalysis.MuonTools.nano_mu_reco_cff import * from DPGAnalysis.MuonTools.nano_mu_l1t_cff import * +from DPGAnalysis.MuonTools.nano_mu_l1t_cff import * -muNtupleProducer = cms.Sequence(muDigiProducers +muDPGNanoProducer = cms.Sequence(lhcInfoTableProducer + + lumiTableProducer + + muDigiProducers + muLocalRecoProducers + muRecoProducers + muL1TriggerProducers ) -def nanoAOD_customizeCommon(process) : +def muDPGNanoCustomize(process) : + if hasattr(process, "dtrpcPointFlatTableProducer") and \ + hasattr(process, "cscrpcPointFlatTableProducer") and \ + hasattr(process, "RawToDigiTask"): + process.load("RecoLocalMuon.RPCRecHit.rpcPointProducer_cff") + process.rpcPointProducer.dt4DSegments = 'dt4DSegments' + process.rpcPointProducer.cscSegments = 'cscSegments' + process.rpcPointProducer.ExtrapolatedRegion = 0.6 + process.RawToDigiTask.add(process.rpcPointProducer) + if hasattr(process, "muGEMMuonExtTableProducer") or hasattr(process, "muCSCTnPFlatTableProducer"): process.load("TrackingTools/TransientTrack/TransientTrackBuilder_cfi") process.load("TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAny_cfi") diff --git a/DPGAnalysis/MuonTools/python/nano_mu_global_cff.py b/DPGAnalysis/MuonTools/python/nano_mu_global_cff.py new file mode 100644 index 0000000000000..18cace397e6ee --- /dev/null +++ b/DPGAnalysis/MuonTools/python/nano_mu_global_cff.py @@ -0,0 +1,15 @@ +import FWCore.ParameterSet.Config as cms + +from PhysicsTools.NanoAOD.common_cff import * + +lumiTableProducer = cms.EDProducer("SimpleOnlineLuminosityFlatTableProducer", + src = cms.InputTag("onlineMetaDataDigis"), + name = cms.string("lumi"), + doc = cms.string("Online luminosity information"), + variables = cms.PSet( + instLumi = Var( "instLumi()", "double", doc = "Instantaneous luminosity"), + avgPileUp = Var( "avgPileUp()", "double", doc = "Average PU") + ) +) + +lhcInfoTableProducer = cms.EDProducer("LHCInfoProducer") diff --git a/DPGAnalysis/MuonTools/python/nano_mu_local_reco_cff.py b/DPGAnalysis/MuonTools/python/nano_mu_local_reco_cff.py index 307c3c90cc1e7..40fd37ccfa739 100644 --- a/DPGAnalysis/MuonTools/python/nano_mu_local_reco_cff.py +++ b/DPGAnalysis/MuonTools/python/nano_mu_local_reco_cff.py @@ -82,6 +82,85 @@ rawId = DetIdVar("rawId()", "uint", doc = "unique detector unit ID") ) +dtrpcPointFlatTableProducer = rpcRecHitFlatTableProducer.clone(name = 'dtrpcPointProducer', src = cms.InputTag('rpcPointProducer','RPCDTExtrapolatedPoints'), doc = "DT extrapolated point on RPC") + +dtrpcPointFlatTableProducer.variables = cms.PSet( + coordX = Var("localPosition().x()", float, doc = "position x in local coordinates - cm"), + coordY = Var("localPosition().y()", float, doc = "position y in local coordinates - cm"), + coordZ = Var("localPosition().z()", float, doc = "position z in local coordinates - cm"), +) + +dtrpcPointFlatTableProducer.detIdVariables = cms.PSet( + region = DetIdVar("region()", "int8", doc = "0: barrel, +-1: endcap"), + ring = DetIdVar("ring()", "int8", doc = "ring id:" + "
wheel number in barrel (from -2 to +2)" + "
ring number in endcap (from 1 to 3)"), + station = DetIdVar("station()", "int8", doc = "chambers at same R in barrel, chambers at same Z ion endcap"), + layer = DetIdVar("layer()", "int8", doc = "layer id:" + "
in station 1 and 2 for barrel, we have two layers of chambers:" + "
layer 1 is the inner chamber and layer 2 is the outer chamber"), + sector = DetIdVar("sector()", "int8", doc = "group of chambers at same phi"), + subsector = DetIdVar("subsector()", "int8", doc = "Some sectors are divided along the phi direction in subsectors " + "(from 1 to 4 in Barrel, from 1 to 6 in Endcap)"), + roll = DetIdVar("roll()", "int8", doc = "roll id (also known as eta partition):" + "
each chamber is divided along the strip direction"), + rawId = DetIdVar("rawId()", "uint", doc = "unique detector unit ID") +) +cscrpcPointFlatTableProducer = rpcRecHitFlatTableProducer.clone(name = 'cscToRpc', + src = cms.InputTag('rpcPointProducer','RPCCSCExtrapolatedPoints'), + doc = "CSC segment extrapolated on RPC") + +cscrpcPointFlatTableProducer.variables = cms.PSet( + coordX = Var("localPosition().x()", float, doc = "position x in local coordinates - cm"), + coordY = Var("localPosition().y()", float, doc = "position y in local coordinates - cm"), + coordZ = Var("localPosition().z()", float, doc = "position z in local coordinates - cm"), +) + +cscrpcPointFlatTableProducer.detIdVariables = cms.PSet( + region = DetIdVar("region()", "int8", doc = "0: barrel, +-1: endcap"), + ring = DetIdVar("ring()", "int8", doc = "ring id:" + "
wheel number in barrel (from -2 to +2)" + "
ring number in endcap (from 1 to 3)"), + station = DetIdVar("station()", "int8", doc = "chambers at same R in barrel, chambers at same Z ion endcap"), + layer = DetIdVar("layer()", "int8", doc = "layer id:" + "
in station 1 and 2 for barrel, we have two layers of chambers:" + "
layer 1 is the inner chamber and layer 2 is the outer chamber"), + sector = DetIdVar("sector()", "int8", doc = "group of chambers at same phi"), + subsector = DetIdVar("subsector()", "int8", doc = "Some sectors are divided along the phi direction in subsectors " + "(from 1 to 4 in Barrel, from 1 to 6 in Endcap)"), + roll = DetIdVar("roll()", "int8", doc = "roll id (also known as eta partition):" + "
each chamber is divided along the strip direction"), + rawId = DetIdVar("rawId()", "uint", doc = "unique detector unit ID") +) + +dtrpcPointFlatTableProducer = rpcRecHitFlatTableProducer.clone(name = 'dtToRpc', + src = cms.InputTag('rpcPointProducer','RPCDTExtrapolatedPoints'), + doc = "DT segment extrapolated on RPC") + +dtrpcPointFlatTableProducer.variables = cms.PSet( + coordX = Var("localPosition().x()", float, doc = "position x in local coordinates - cm"), + coordY = Var("localPosition().y()", float, doc = "position y in local coordinates - cm"), + coordZ = Var("localPosition().z()", float, doc = "position z in local coordinates - cm"), +) + +dtrpcPointFlatTableProducer.detIdVariables = cms.PSet( + region = DetIdVar("region()", "int8", doc = "0: barrel, +-1: endcap"), + ring = DetIdVar("ring()", "int8", doc = "ring id:" + "
wheel number in barrel (from -2 to +2)" + "
ring number in endcap (from 1 to 3)"), + station = DetIdVar("station()", "int8", doc = "chambers at same R in barrel, chambers at same Z ion endcap"), + layer = DetIdVar("layer()", "int8", doc = "layer id:" + "
in station 1 and 2 for barrel, we have two layers of chambers:" + "
layer 1 is the inner chamber and layer 2 is the outer chamber"), + sector = DetIdVar("sector()", "int8", doc = "group of chambers at same phi"), + subsector = DetIdVar("subsector()", "int8", doc = "Some sectors are divided along the phi direction in subsectors " + "(from 1 to 4 in Barrel, from 1 to 6 in Endcap)"), + roll = DetIdVar("roll()", "int8", doc = "roll id (also known as eta partition):" + "
each chamber is divided along the strip direction"), + rawId = DetIdVar("rawId()", "uint", doc = "unique detector unit ID") +) + + from DPGAnalysis.MuonTools.gemRecHitFlatTableProducer_cfi import gemRecHitFlatTableProducer gemRecHitFlatTableProducer.name = "gemRecHit" @@ -156,6 +235,8 @@ ) muLocalRecoProducers = cms.Sequence(rpcRecHitFlatTableProducer + + dtrpcPointFlatTableProducer + + cscrpcPointFlatTableProducer + gemRecHitFlatTableProducer + dtSegmentFlatTableProducer + muDTSegmentExtTableProducer diff --git a/PhysicsTools/NanoAOD/plugins/BuildFile.xml b/PhysicsTools/NanoAOD/plugins/BuildFile.xml index aaffe2b44b891..2d06b9ec6bfd6 100644 --- a/PhysicsTools/NanoAOD/plugins/BuildFile.xml +++ b/PhysicsTools/NanoAOD/plugins/BuildFile.xml @@ -14,6 +14,7 @@ + diff --git a/PhysicsTools/NanoAOD/plugins/SimpleFlatTableProducerPlugins.cc b/PhysicsTools/NanoAOD/plugins/SimpleFlatTableProducerPlugins.cc index 2288d1fab0b67..f9a2fa3efe213 100644 --- a/PhysicsTools/NanoAOD/plugins/SimpleFlatTableProducerPlugins.cc +++ b/PhysicsTools/NanoAOD/plugins/SimpleFlatTableProducerPlugins.cc @@ -21,6 +21,9 @@ typedef SimpleFlatTableProducer SimpleLocalTrackFlatTablePr #include "DataFormats/Math/interface/Point3D.h" typedef EventSingletonSimpleFlatTableProducer SimpleXYZPointFlatTableProducer; +#include "DataFormats/OnlineMetaData/interface/OnlineLuminosityRecord.h" +typedef EventSingletonSimpleFlatTableProducer SimpleOnlineLuminosityFlatTableProducer; + #include "DataFormats/BeamSpot/interface/BeamSpot.h" typedef EventSingletonSimpleFlatTableProducer SimpleBeamspotFlatTableProducer; @@ -62,6 +65,7 @@ DEFINE_FWK_MODULE(SimpleHTXSFlatTableProducer); DEFINE_FWK_MODULE(SimpleProtonTrackFlatTableProducer); DEFINE_FWK_MODULE(SimpleLocalTrackFlatTableProducer); DEFINE_FWK_MODULE(SimpleXYZPointFlatTableProducer); +DEFINE_FWK_MODULE(SimpleOnlineLuminosityFlatTableProducer); DEFINE_FWK_MODULE(SimpleBeamspotFlatTableProducer); DEFINE_FWK_MODULE(SimpleTriggerL1EGFlatTableProducer); DEFINE_FWK_MODULE(SimpleTriggerL1JetFlatTableProducer); diff --git a/PhysicsTools/NanoAOD/python/autoNANO.py b/PhysicsTools/NanoAOD/python/autoNANO.py index af925733f975d..bb0ce6b721e2b 100644 --- a/PhysicsTools/NanoAOD/python/autoNANO.py +++ b/PhysicsTools/NanoAOD/python/autoNANO.py @@ -28,6 +28,11 @@ def expandNanoMapping(seqList, mapping, key): # L1 flavours: add tables through customize, supposed to be combined with PHYS 'L1' : {'customize': 'nanoL1TrigObjCustomize'}, 'L1FULL' : {'customize': 'nanoL1TrigObjCustomizeFull'}, + # MUDPG flavours: use their own sequence + 'MUDPG' : {'sequence': 'muDPGNanoProducer', + 'customize': 'muDPGNanoCustomize'}, + 'MUDPGBKG' : {'sequence': 'muDPGNanoProducerBkg', + 'customize': 'muDPGNanoBkgCustomize'}, # PromptReco config: PHYS+L1 'Prompt' : {'sequence': '@PHYS', 'customize': '@PHYS+@L1'} diff --git a/PhysicsTools/NanoAOD/python/nano_cff.py b/PhysicsTools/NanoAOD/python/nano_cff.py index cec1cd27dac30..4c142ddc9f2bf 100644 --- a/PhysicsTools/NanoAOD/python/nano_cff.py +++ b/PhysicsTools/NanoAOD/python/nano_cff.py @@ -283,3 +283,8 @@ def nanoL1TrigObjCustomize(process): def nanoL1TrigObjCustomizeFull(process): process.nanoTableTaskCommon.add(process.l1TablesTask) return process + +### muon DPG NANO flavour sequences and customize functions +from DPGAnalysis.MuonTools.muNtupleProducer_cff import * +from DPGAnalysis.MuonTools.muNtupleProducerBkg_cff import * +