Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adapt shortened tracks resolution method to work with AlCaReco event content #43729

Merged
merged 3 commits into from
Jan 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
600 changes: 600 additions & 0 deletions Alignment/OfflineValidation/plugins/ShortenedTrackValidation.cc

Large diffs are not rendered by default.

153 changes: 153 additions & 0 deletions Alignment/OfflineValidation/test/testShortenedTrackValidation_cfg.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
import FWCore.ParameterSet.Config as cms
import FWCore.Utilities.FileUtils as FileUtils
from FWCore.ParameterSet.VarParsing import VarParsing

options = VarParsing('analysis')
options.register('scenario',
'0',
VarParsing.multiplicity.singleton,
VarParsing.varType.string,
"Name of input misalignment scenario")
options.parseArguments()

valid_scenarios = ['-10e-6','-8e-6','-6e-6','-4e-6','-2e-6','0','2e-6','4e-6','6e-6','8e-6','10e-6']

if options.scenario not in valid_scenarios:
print("Error: Invalid scenario specified. Please choose from the following list: ")
print(valid_scenarios)
exit(1)

process = cms.Process("TrackingResolution")

#####################################################################
# import of standard configurations
#####################################################################
process.load('Configuration.StandardSequences.Services_cff')
process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi')
process.load('FWCore.MessageService.MessageLogger_cfi')
process.MessageLogger.cerr.FwkReport.reportEvery = 100000
process.load('Configuration.EventContent.EventContent_cff')
process.load('Configuration.StandardSequences.GeometryRecoDB_cff')
process.load('Configuration.StandardSequences.MagneticField_cff')
process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')

#####################################################################
## BeamSpot from database (i.e. GlobalTag), needed for Refitter
#####################################################################
process.load("RecoVertex.BeamSpotProducer.BeamSpot_cfi")

#####################################################################
# Load and Configure Measurement Tracker Event
#####################################################################
process.load("RecoTracker.MeasurementDet.MeasurementTrackerEventProducer_cfi")
process.MeasurementTrackerEvent.pixelClusterProducer = "ALCARECOTkAlDiMuon"
process.MeasurementTrackerEvent.stripClusterProducer = "ALCARECOTkAlDiMuon"
process.MeasurementTrackerEvent.inactivePixelDetectorLabels = cms.VInputTag()
process.MeasurementTrackerEvent.inactiveStripDetectorLabels = cms.VInputTag()

process.maxEvents = cms.untracked.PSet(
input = cms.untracked.int32(1000000)
)

#####################################################################
# Input source
#####################################################################
# filelist = FileUtils.loadListFromFile("listOfFiles_idealMC_TkAlDiMuonAndVertex.txt")
# readFiles = cms.untracked.vstring( *filelist)
# events taken from /DYJetsToMuMu_M-50_TuneCP5_13p6TeV-madgraphMLM-pythia8/Run3Winter23Reco-TkAlDiMuonAndVertex-TRKDesignNoPU_AlcaRecoTRKMu_designGaussSigmaZ4cm_125X_mcRun3_2022_design_v6-v1/ALCARECO
readFiles = cms.untracked.vstring('/store/mc/Run3Winter23Reco/DYJetsToMuMu_M-50_TuneCP5_13p6TeV-madgraphMLM-pythia8/ALCARECO/TkAlDiMuonAndVertex-TRKDesignNoPU_AlcaRecoTRKMu_designGaussSigmaZ4cm_125X_mcRun3_2022_design_v6-v1/60000/d3af17a5-2409-4551-9c3d-00deb2f3f64f.root')
process.source = cms.Source("PoolSource",fileNames = readFiles)

process.options = cms.untracked.PSet()

####################################################################
# Output file
####################################################################
process.TFileService = cms.Service("TFileService",
fileName = cms.string("shortenedTrackResolution_LayerRotation_"+options.scenario+".root"))

#####################################################################
# Other statements
#####################################################################
from Configuration.AlCa.GlobalTag import GlobalTag
process.GlobalTag = GlobalTag(process.GlobalTag, "125X_mcRun3_2022_design_v6", '')
if (options.scenario=='null'):
print("null scenario, do nothing")
pass
else:
process.GlobalTag.toGet = cms.VPSet(cms.PSet(connect = cms.string("frontier://FrontierPrep/CMS_CONDITIONS"),
record = cms.string('TrackerAlignmentRcd'),
tag = cms.string("LayerRotation_"+options.scenario)))

#####################################################################
# The DQM analysis sequence
#####################################################################
process.load("DQM.TrackingMonitorSource.shortTrackResolution_cff")

#####################################################################
# The changes to cope with ALCARECO data format
#####################################################################
process.load("RecoTracker.TrackProducer.TrackRefitters_cff")
import RecoTracker.TrackProducer.TrackRefitters_cff
process.LongTracksRefit = process.TrackRefitter.clone(
src = 'SingleLongTrackProducer',
TrajectoryInEvent = True,
TTRHBuilder = "WithAngleAndTemplate",
NavigationSchool = ''
)

process.ShortTrackCandidates3.src = cms.InputTag("LongTracksRefit")
process.ShortTrackCandidates4.src = cms.InputTag("LongTracksRefit")
process.ShortTrackCandidates5.src = cms.InputTag("LongTracksRefit")
process.ShortTrackCandidates6.src = cms.InputTag("LongTracksRefit")
process.ShortTrackCandidates7.src = cms.InputTag("LongTracksRefit")
process.ShortTrackCandidates8.src = cms.InputTag("LongTracksRefit")

process.SingleLongTrackProducer.requiredDr = cms.double(-9999.) # do not require any matchings
process.SingleLongTrackProducer.matchMuons = cms.InputTag("muons") # for ALCA irrelevant (see above)
process.SingleLongTrackProducer.allTracks = cms.InputTag("ALCARECOTkAlDiMuon")

#####################################################################
# The Analysis module
#####################################################################
from Alignment.OfflineValidation.shortenedTrackValidation_cfi import shortenedTrackValidation as _shortenedTrackValidation
process.ShortenedTrackValidation = _shortenedTrackValidation.clone(folderName = "ShortTrackResolution",
hitsRemainInput = ["3","4","5","6","7","8"],
minTracksEtaInput = 0.0,
maxTracksEtaInput = 2.2,
minTracksPtInput = 15.0,
maxTracksPtInput = 99999.9,
maxDrInput = 0.01,
tracksInputTag = "SingleLongTrackProducer",
tracksRerecoInputTag = ["RefittedShortTracks3",
"RefittedShortTracks4",
"RefittedShortTracks5",
"RefittedShortTracks6",
"RefittedShortTracks7",
"RefittedShortTracks8"])

#####################################################################
# Path
#####################################################################
process.analysis_step = cms.Path(process.offlineBeamSpot *
process.MeasurementTrackerEvent *
process.SingleLongTrackProducer *
process.LongTracksRefit *
process.ShortTrackCandidates3 *
process.ShortTrackCandidates4 *
process.ShortTrackCandidates5 *
process.ShortTrackCandidates6 *
process.ShortTrackCandidates7 *
process.ShortTrackCandidates8 *
process.RefittedShortTracks3 *
process.RefittedShortTracks4 *
process.RefittedShortTracks5 *
process.RefittedShortTracks6 *
process.RefittedShortTracks7 *
process.RefittedShortTracks8 *
process.ShortenedTrackValidation)

###################################################################
# Set the process to run multi-threaded
###################################################################
process.options.numberOfThreads = 8
11 changes: 10 additions & 1 deletion DQM/TrackingMonitorSource/plugins/ShortenedTrackResolution.cc
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
// ROOT includes
#include "TLorentzVector.h"

// standard includes
#include <fmt/printf.h>

class ShortenedTrackResolution : public DQMEDAnalyzer {
public:
ShortenedTrackResolution(const edm::ParameterSet &);
Expand Down Expand Up @@ -67,7 +70,13 @@ void ShortenedTrackResolution::bookHistograms(DQMStore::IBooker &iBook,

for (int i = 0; i < int(hitsRemain_.size()); ++i) {
histsPtAll_.push_back(iBook.book1D(
"trackPt" + hitsRemain_[i] + "lAllPt", "Track p_{T} - " + hitsRemain_[i] + " layers", 41, 0.0, 2.0));
fmt::sprintf("trackPtRatio_%s", hitsRemain_[i]).c_str(),
fmt::sprintf("Short Track p_{T} / Full Track p_{T} - %s layers;p_{T}^{short}/p_{T}^{full};n. tracks",
hitsRemain_[i])
.c_str(),
101,
-0.05,
2.05));
}
}

Expand Down
1 change: 1 addition & 0 deletions DQM/TrackingMonitorSource/test/BuildFile.xml
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
<test name="testTrackingDATAMC" command="testTrackingDATAMC.sh"/>
<test name="testTrackingResolution" command="testTrackingResolution.sh"/>
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
import FWCore.ParameterSet.Config as cms
import FWCore.ParameterSet.VarParsing as VarParsing

options = VarParsing.VarParsing()
options.register('maxEvents',
-1,
VarParsing.VarParsing.multiplicity.singleton,
VarParsing.VarParsing.varType.int,
"maximum events")
options.register('globalTag',
'125X_mcRun3_2022_design_v6',
VarParsing.VarParsing.multiplicity.singleton,
VarParsing.VarParsing.varType.string,
"conditions")
options.register('inputFile',
'step1_DQM_LayerRot_9p43e-6_fromRECO.root',
VarParsing.VarParsing.multiplicity.singleton,
VarParsing.VarParsing.varType.string,
"input file")
options.parseArguments()

from Configuration.Eras.Era_Run3_cff import Run3
process = cms.Process('HARVESTING',Run3)

# import of standard configurations
process.load('Configuration.StandardSequences.Services_cff')
process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi')
process.load('FWCore.MessageService.MessageLogger_cfi')
process.load('Configuration.EventContent.EventContent_cff')
process.load('SimGeneral.MixingModule.mixNoPU_cfi')
process.load('Configuration.StandardSequences.GeometryRecoDB_cff')
process.load('Configuration.StandardSequences.MagneticField_cff')
process.load('Configuration.StandardSequences.DQMSaverAtRunEnd_cff')
process.load('Configuration.StandardSequences.Harvesting_cff')
process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')

process.maxEvents = cms.untracked.PSet(
input = cms.untracked.int32(options.maxEvents),
output = cms.optional.untracked.allowed(cms.int32,cms.PSet)
)

# Input source
process.source = cms.Source("DQMRootSource",
fileNames = cms.untracked.vstring('file:'+options.inputFile)
)

process.options = cms.untracked.PSet(
IgnoreCompletely = cms.untracked.vstring(),
Rethrow = cms.untracked.vstring('ProductNotFound'),
accelerators = cms.untracked.vstring('*'),
allowUnscheduled = cms.obsolete.untracked.bool,
canDeleteEarly = cms.untracked.vstring(),
deleteNonConsumedUnscheduledModules = cms.untracked.bool(True),
dumpOptions = cms.untracked.bool(False),
emptyRunLumiMode = cms.obsolete.untracked.string,
eventSetup = cms.untracked.PSet(
forceNumberOfConcurrentIOVs = cms.untracked.PSet(
allowAnyLabel_=cms.required.untracked.uint32
),
numberOfConcurrentIOVs = cms.untracked.uint32(0)
),
fileMode = cms.untracked.string('FULLMERGE'),
forceEventSetupCacheClearOnNewRun = cms.untracked.bool(False),
makeTriggerResults = cms.obsolete.untracked.bool,
numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(0),
numberOfConcurrentRuns = cms.untracked.uint32(1),
numberOfStreams = cms.untracked.uint32(0),
numberOfThreads = cms.untracked.uint32(1),
printDependencies = cms.untracked.bool(False),
sizeOfStackForThreadsInKB = cms.optional.untracked.uint32,
throwIfIllegalParameter = cms.untracked.bool(True),
wantSummary = cms.untracked.bool(False)
)

# Other statements
from Configuration.AlCa.GlobalTag import GlobalTag
process.GlobalTag = GlobalTag(process.GlobalTag, options.globalTag, '')

process.dqmsave_step = cms.Path(process.DQMSaver)

# Schedule definition
process.schedule = cms.Schedule(process.alcaHarvesting,process.dqmsave_step)
from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask
associatePatAlgosToolsTask(process)

# Customisation from command line

# Add early deletion of temporary data products to reduce peak memory need
from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete
process = customiseEarlyDelete(process)
# End adding early deletion
Loading