Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:22:08

0001 # N,B, DUE TO THE CHANGE IN STUB WINDOW SIZES WITH CMSSW 14_2_0_PRE2, THIS JOB HAS BEEN NODIFIED TO
0002 # RECREATE THE STUBS, WHICH IS NECESSARY WHEN RUNNING ON MONTE CARLO GENERATED WITH OLDER VERSIONS.
0003 
0004 ############################################################
0005 # define basic process
0006 ############################################################
0007 
0008 import FWCore.ParameterSet.Config as cms
0009 import FWCore.Utilities.FileUtils as FileUtils
0010 import os
0011 process = cms.Process("L1TrackNtuple")
0012 
0013 ############################################################
0014 # edit options here
0015 ############################################################
0016 
0017 # D88 was used for CMSSW_12_6 datasets, and D98 recommended for more recent ones.
0018 #GEOMETRY = "D88"
0019 GEOMETRY = "D98"
0020 
0021 # Set L1 tracking algorithm:
0022 # 'HYBRID' (baseline, 4par fit) or 'HYBRID_DISPLACED' (extended, 5par fit).
0023 # 'HYBRID_NEWKF' (baseline, 4par fit, with bit-accurate KF emulation),
0024 # 'HYBRID_REDUCED' to use the "Summer Chain" configuration with reduced inputs.
0025 # (Or legacy algos 'TMTT' or 'TRACKLET').
0026 L1TRKALGO = 'HYBRID'
0027 
0028 WRITE_DATA = False
0029 
0030 ############################################################
0031 # import standard configurations
0032 ############################################################
0033 
0034 process.load('Configuration.StandardSequences.Services_cff')
0035 process.load('Configuration.EventContent.EventContent_cff')
0036 process.load('Configuration.StandardSequences.MagneticField_cff')
0037 
0038 process.load('FWCore.MessageService.MessageLogger_cfi')
0039 process.MessageLogger.L1track = dict(limit = -1)
0040 process.MessageLogger.Tracklet = dict(limit = -1)
0041 process.MessageLogger.TrackTriggerHPH = dict(limit = -1)
0042 
0043 if GEOMETRY == "D88" or GEOMETRY == 'D98':
0044     print("using geometry " + GEOMETRY + " (tilted)")
0045     process.load('Configuration.Geometry.GeometryExtended2026' + GEOMETRY + 'Reco_cff')
0046     process.load('Configuration.Geometry.GeometryExtended2026' + GEOMETRY +'_cff')
0047 else:
0048     print("this is not a valid geometry!!!")
0049 
0050 process.load('Configuration.StandardSequences.EndOfProcess_cff')
0051 process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
0052 
0053 from Configuration.AlCa.GlobalTag import GlobalTag
0054 process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic', '')
0055 
0056 
0057 ############################################################
0058 # input and output
0059 ############################################################
0060 
0061 process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(100))
0062 
0063 #--- To use MCsamples scripts, defining functions get*data*() for easy MC access,
0064 #--- follow instructions in https://github.com/cms-L1TK/MCsamples
0065 
0066 #from MCsamples.Scripts.getCMSdata_cfi import *
0067 #from MCsamples.Scripts.getCMSlocaldata_cfi import *
0068 
0069 if GEOMETRY == "D98":
0070 
0071   # Read data from card files (defines getCMSdataFromCards()):
0072   #from MCsamples.RelVal_1400_D98.PU200_TTbar_14TeV_cfi import *
0073   #inputMC = getCMSdataFromCards()
0074 
0075   # Or read .root files from directory on local computer:
0076   #dirName = "$scratchmc/MCsamples1400_D98/RelVal/TTbar/PU0/"
0077   #inputMC=getCMSlocaldata(dirName)
0078 
0079   # Or read specified dataset (accesses CMS DB, so use this method only occasionally):
0080   #dataName="/RelValTTbar_14TeV/CMSSW_14_0_0_pre2-PU_133X_mcRun4_realistic_v1_STD_2026D98_PU200_RV229-v1/GEN-SIM-DIGI-RAW"
0081   #inputMC=getCMSdata(dataName)
0082 
0083   inputMC = ["/store/relval/CMSSW_14_0_0_pre2/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU_133X_mcRun4_realistic_v1_STD_2026D98_PU200_RV229-v1/2580000/0b2b0b0b-f312-48a8-9d46-ccbadc69bbfd.root"]
0084 
0085 elif GEOMETRY == "D88":
0086 
0087   # Read specified .root file:
0088   inputMC = ["/store/mc/CMSSW_12_6_0/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/PU_125X_mcRun4_realistic_v5_2026D88PU200RV183v2-v1/30000/0959f326-3f52-48d8-9fcf-65fc41de4e27.root"]
0089 
0090 else:
0091 
0092   print("this is not a valid geometry!!!")
0093 
0094 process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring(*inputMC))
0095 
0096 #if GEOMETRY == "D76":
0097 #  # If reading old MC dataset, drop incompatible EDProducts.
0098 #  process.source.dropDescendantsOfDroppedBranches = cms.untracked.bool(False)
0099 #  process.source.inputCommands = cms.untracked.vstring()
0100 #  process.source.inputCommands.append('keep  *_*_*Level1TTTracks*_*')
0101 #  process.source.inputCommands.append('keep  *_*_*StubAccepted*_*')
0102 #  process.source.inputCommands.append('keep  *_*_*ClusterAccepted*_*')
0103 #  process.source.inputCommands.append('keep  *_*_*MergedTrackTruth*_*')
0104 #  process.source.inputCommands.append('keep  *_genParticles_*_*')
0105 
0106 # Use skipEvents to select particular single events for test vectors
0107 #process.source.skipEvents = cms.untracked.uint32(11)
0108 
0109 process.TFileService = cms.Service("TFileService", fileName = cms.string('L1TrkNtuple.root'), closeFileFast = cms.untracked.bool(True))
0110 process.Timing = cms.Service("Timing", summaryOnly = cms.untracked.bool(True))
0111 
0112 
0113 ############################################################
0114 # L1 tracking: stubs / DTC emulation
0115 ############################################################
0116 
0117 process.load('L1Trigger.TrackTrigger.TrackTrigger_cff')
0118 process.load('L1Trigger.TrackerTFP.ProducerES_cff')
0119 process.load('L1Trigger.TrackerTFP.ProducerLayerEncoding_cff')
0120 
0121 # remake stubs?
0122 #from L1Trigger.TrackTrigger.TTStubAlgorithmRegister_cfi import *
0123 #process.load("SimTracker.TrackTriggerAssociation.TrackTriggerAssociator_cff")
0124 
0125 #from SimTracker.TrackTriggerAssociation.TTClusterAssociation_cfi import *
0126 #TTClusterAssociatorFromPixelDigis.digiSimLinks = cms.InputTag("simSiPixelDigis","Tracker")
0127 
0128 #process.TTClusterStub = cms.Path(process.TrackTriggerClustersStubs)
0129 #process.TTClusterStubTruth = cms.Path(process.TrackTriggerAssociatorClustersStubs)
0130 
0131 
0132 # DTC emulation
0133 process.load('L1Trigger.TrackerDTC.ProducerED_cff')
0134 
0135 # load code that analyzes DTCStubs
0136 #process.load('L1Trigger.TrackerDTC.Analyzer_cff')
0137 
0138 # modify default cuts
0139 #process.TrackTriggerSetup.FrontEnd.BendCut = 5.0
0140 #process.TrackTriggerSetup.Hybrid.MinPt = 1.0
0141 
0142 process.dtc = cms.Path(process.TrackerDTCProducer)#*process.TrackerDTCAnalyzer)
0143 # Throw error if reading MC produced with different stub window sizes.
0144 process.TrackerDTCProducer.CheckHistory = True
0145 
0146 ############################################################
0147 # L1 tracking
0148 ############################################################
0149 
0150 process.load("L1Trigger.TrackFindingTracklet.L1HybridEmulationTracks_cff")
0151 
0152 # HYBRID: prompt tracking
0153 if (L1TRKALGO == 'HYBRID'):
0154     process.TTTracksEmulation = cms.Path(process.L1THybridTracks)
0155     process.TTTracksEmulationWithTruth = cms.Path(process.L1THybridTracksWithAssociators)
0156     NHELIXPAR = 4
0157     L1TRK_NAME  = "l1tTTTracksFromTrackletEmulation"
0158     L1TRK_LABEL = "Level1TTTracks"
0159     L1TRUTH_NAME = "TTTrackAssociatorFromPixelDigis"
0160 
0161 # HYBRID: extended tracking
0162 elif (L1TRKALGO == 'HYBRID_DISPLACED'):
0163     process.TTTracksEmulation = cms.Path(process.L1TExtendedHybridTracks)
0164     process.TTTracksEmulationWithTruth = cms.Path(process.L1TExtendedHybridTracksWithAssociators)
0165     NHELIXPAR = 5
0166     L1TRK_NAME  = "l1tTTTracksFromExtendedTrackletEmulation"
0167     L1TRK_LABEL = "Level1TTTracks"
0168     L1TRUTH_NAME = "TTTrackAssociatorFromPixelDigisExtended"
0169 
0170 # HYBRID_NEWKF: prompt tracking or reduced
0171 elif (L1TRKALGO == 'HYBRID_NEWKF' or L1TRKALGO == 'HYBRID_REDUCED'):
0172     process.load( 'L1Trigger.TrackFindingTracklet.Producer_cff' )
0173     NHELIXPAR = 4
0174     L1TRK_NAME  = process.TrackFindingTrackletProducer_params.LabelTT.value()
0175     L1TRK_LABEL = process.TrackFindingTrackletProducer_params.BranchAcceptedTracks.value()
0176     L1TRUTH_NAME = "TTTrackAssociatorFromPixelDigis"
0177     process.TTTrackAssociatorFromPixelDigis.TTTracks = cms.VInputTag( cms.InputTag(L1TRK_NAME, L1TRK_LABEL) )
0178     process.HybridNewKF = cms.Sequence(process.L1THybridTracks + process.TrackFindingTrackletProducerTBout + process.TrackFindingTrackletProducerDRin + process.TrackFindingTrackletProducerDR + process.TrackFindingTrackletProducerKFin + process.TrackFindingTrackletProducerKF + process.TrackFindingTrackletProducerTT + process.TrackFindingTrackletProducerAS + process.TrackFindingTrackletProducerKFout)
0179     process.TTTracksEmulation = cms.Path(process.HybridNewKF)
0180     #process.TTTracksEmulationWithTruth = cms.Path(process.HybridNewKF +  process.TrackTriggerAssociatorTracks)
0181     # Optionally include code producing performance plots & end-of-job summary.
0182     process.load( 'SimTracker.TrackTriggerAssociation.StubAssociator_cff' )
0183     process.load( 'L1Trigger.TrackFindingTracklet.Analyzer_cff' )
0184     process.TTTracksEmulationWithTruth = cms.Path(process.HybridNewKF +  process.TrackTriggerAssociatorTracks + process.StubAssociator +  process.TrackFindingTrackletAnalyzerTracklet + process.TrackFindingTrackletAnalyzerTBout + process.TrackFindingTrackletAnalyzerDRin + process.TrackFindingTrackletAnalyzerDR + process.TrackFindingTrackletAnalyzerKFin + process.TrackFindingTrackletAnalyzerKF + process.TrackFindingTrackletAnalyzerKFout)
0185     from L1Trigger.TrackFindingTracklet.Customize_cff import *
0186     if (L1TRKALGO == 'HYBRID_NEWKF'):
0187         fwConfig( process )
0188     if (L1TRKALGO == 'HYBRID_REDUCED'):
0189         reducedConfig( process )
0190     # Needed by L1TrackNtupleMaker
0191     process.HitPatternHelperSetup.useNewKF = True
0192 
0193 # LEGACY ALGORITHM (EXPERTS ONLY): TRACKLET
0194 elif (L1TRKALGO == 'TRACKLET'):
0195     print("\n WARNING: This is not the baseline algorithm! Prefer HYBRID or HYBRID_DISPLACED!")
0196     print("\n To run the Tracklet-only algorithm, ensure you have commented out 'CXXFLAGS=-DUSEHYBRID' in BuildFile.xml & recompiled! \n")
0197     process.TTTracksEmulation = cms.Path(process.L1THybridTracks)
0198     process.TTTracksEmulationWithTruth = cms.Path(process.L1THybridTracksWithAssociators)
0199     NHELIXPAR = 4
0200     L1TRK_NAME  = "l1tTTTracksFromTrackletEmulation"
0201     L1TRK_LABEL = "Level1TTTracks"
0202     L1TRUTH_NAME = "TTTrackAssociatorFromPixelDigis"
0203 
0204 # LEGACY ALGORITHM (EXPERTS ONLY): TMTT
0205 elif (L1TRKALGO == 'TMTT'):
0206     print("\n WARNING: This is not the baseline algorithm! Prefer HYBRID or HYBRID_DISPLACED! \n")
0207     process.load("L1Trigger.TrackFindingTMTT.TMTrackProducer_Ultimate_cff")
0208     L1TRK_PROC  =  process.TMTrackProducer
0209     L1TRK_NAME  = "TMTrackProducer"
0210     L1TRK_LABEL = "TML1TracksKF4ParamsComb"
0211     L1TRUTH_NAME = "TTTrackAssociatorFromPixelDigis"
0212     NHELIXPAR = 4
0213     L1TRK_PROC.EnableMCtruth = cms.bool(False) # Reduce CPU use by disabling internal histos.
0214     L1TRK_PROC.EnableHistos  = cms.bool(False)
0215     process.load("RecoVertex.BeamSpotProducer.BeamSpot_cfi")
0216     process.load("SimTracker.TrackTriggerAssociation.TrackTriggerAssociator_cff")
0217     process.TTTrackAssociatorFromPixelDigis.TTTracks = cms.VInputTag( cms.InputTag(L1TRK_NAME, L1TRK_LABEL) )
0218     process.TTTracksEmulation = cms.Path(process.offlineBeamSpot*L1TRK_PROC)
0219     process.TTTracksEmulationWithTruth = cms.Path(process.offlineBeamSpot*L1TRK_PROC*process.TrackTriggerAssociatorTracks)
0220 
0221 else:
0222     print("ERROR: Unknown L1TRKALGO option")
0223     exit(1)
0224 
0225 
0226 # Define L1 track ntuple maker
0227 from L1Trigger.TrackFindingTracklet.L1TrackNtupleMaker_cfi import *
0228 process.L1TrackNtuple = L1TrackNtupleMaker.clone(
0229    L1Tk_nPar = NHELIXPAR, # use 4 or 5-parameter L1 tracking?
0230    L1TrackInputTag = (L1TRK_NAME, L1TRK_LABEL),         # TTTrack input
0231    MCTruthTrackInputTag = (L1TRUTH_NAME, L1TRK_LABEL),  # MCTruth input
0232 )
0233 
0234 process.ana = cms.Path(process.L1TrackNtuple)
0235 
0236 
0237 ############################################################
0238 # final schedule of what is to be run
0239 ############################################################
0240 
0241 # use this if you want to re-run the stub making
0242 #process.schedule = cms.Schedule(process.TTClusterStub,process.TTClusterStubTruth,process.dtc,process.TTTracksEmulationWithTruth,process.ana)
0243 
0244 # use this if cluster/stub associators not available
0245 # process.schedule = cms.Schedule(process.TTClusterStubTruth,process.dtc,process.TTTracksEmulationWithTruth,process.ana)
0246 
0247 # use this to only run tracking + track associator
0248 process.schedule = cms.Schedule(process.dtc,process.TTTracksEmulationWithTruth,process.ana)
0249 
0250 
0251 ############################################################
0252 # write output dataset?
0253 ############################################################
0254 
0255 if (WRITE_DATA):
0256   process.writeDataset = cms.OutputModule("PoolOutputModule",
0257       splitLevel = cms.untracked.int32(0),
0258       eventAutoFlushCompressedSize = cms.untracked.int32(5242880),
0259       outputCommands = process.RAWSIMEventContent.outputCommands,
0260       fileName = cms.untracked.string('output_dataset.root'), ## ADAPT IT ##
0261       dataset = cms.untracked.PSet(
0262           filterName = cms.untracked.string(''),
0263           dataTier = cms.untracked.string('GEN-SIM')
0264       )
0265   )
0266   process.writeDataset.outputCommands.append('keep  *TTTrack*_*_*_*')
0267   process.writeDataset.outputCommands.append('keep  *TTStub*_*_*_*')
0268 
0269   process.pd = cms.EndPath(process.writeDataset)
0270   process.schedule.append(process.pd)
0271 
0272 
0273