Skip to content

Commit

Permalink
Merge pull request #38497 from cms-trackeralign/hgPCL_PRnew_12_4_X
Browse files Browse the repository at this point in the history
[12.4.X]  New high granularity pixel alignment for the PCL
  • Loading branch information
cmsbuild authored Jun 27, 2022
2 parents 0e2f378 + a0df15d commit 3423e04
Show file tree
Hide file tree
Showing 35 changed files with 950 additions and 124 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,7 @@ class AlignmentProducerBase {
const bool saveToDB_, saveApeToDB_, saveDeformationsToDB_;
const bool useSurvey_;
const bool enableAlignableUpdates_;
const std::string tkAliRcdName_;

/*** ESTokens ***/
const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> ttopoToken_;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import FWCore.ParameterSet.Config as cms

OutALCARECOPromptCalibProdSiPixelAliHG_noDrop = cms.PSet(
SelectEvents = cms.untracked.PSet(
SelectEvents = cms.vstring('pathALCARECOPromptCalibProdSiPixelAliHG')
),
outputCommands = cms.untracked.vstring(
'keep *_SiPixelAliMillePedeFileConverterHG_*_*')
)

OutALCARECOPromptCalibProdSiPixelAliHG=OutALCARECOPromptCalibProdSiPixelAliHG_noDrop.clone()
OutALCARECOPromptCalibProdSiPixelAliHG.outputCommands.insert(0, "drop *")
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import FWCore.ParameterSet.Config as cms

# ------------------------------------------------------------------------------
# configure a filter to run only on the events selected by TkAlMinBias AlcaReco
from Alignment.CommonAlignmentProducer.ALCARECOPromptCalibProdSiPixelAli_cff import *
ALCARECOTkAlMinBiasFilterForSiPixelAliHG = ALCARECOTkAlMinBiasFilterForSiPixelAli.clone()


from Alignment.CommonAlignmentProducer.LSNumberFilter_cfi import *

# Ingredient: offlineBeamSpot
from RecoVertex.BeamSpotProducer.BeamSpot_cfi import offlineBeamSpot

# Ingredient: AlignmentTrackSelector
# track selector for HighPurity tracks
#-- AlignmentTrackSelector
SiPixelAliHighPuritySelectorHG = SiPixelAliHighPuritySelector.clone()

# track selection for alignment
SiPixelAliTrackSelectorHG = SiPixelAliTrackSelector.clone(
src = 'SiPixelAliTrackFitterHG'
)

# Ingredient: SiPixelAliTrackRefitter0
# refitting
SiPixelAliTrackRefitterHG0 = SiPixelAliTrackRefitter0.clone(
src = 'SiPixelAliHighPuritySelectorHG'
)
SiPixelAliTrackRefitterHG1 = SiPixelAliTrackRefitterHG0.clone(
src = 'SiPixelAliTrackSelectorHG'
)

#-- Alignment producer
SiPixelAliMilleAlignmentProducerHG = SiPixelAliMilleAlignmentProducer.clone(
ParameterBuilder = dict(
Selector = cms.PSet(
alignParams = cms.vstring(
"TrackerP1PXBLadder,111111",
"TrackerP1PXECPanel,111111",
)
)
),
tjTkAssociationMapTag = 'SiPixelAliTrackRefitterHG1',
algoConfig = MillePedeAlignmentAlgorithm.clone(
binaryFile = 'milleBinaryHG_0.dat',
treeFile = 'treeFileHG.root',
monitorFile = 'millePedeMonitorHG.root'
)
)

# Ingredient: SiPixelAliTrackerTrackHitFilter
SiPixelAliTrackerTrackHitFilterHG = SiPixelAliTrackerTrackHitFilter.clone(
src = 'SiPixelAliTrackRefitterHG0'
)

# Ingredient: SiPixelAliSiPixelAliTrackFitter
SiPixelAliTrackFitterHG = SiPixelAliTrackFitter.clone(
src = 'SiPixelAliTrackerTrackHitFilterHG'
)

SiPixelAliMillePedeFileConverterHG = cms.EDProducer("MillePedeFileConverter",
fileDir = cms.string(SiPixelAliMilleAlignmentProducerHG.algoConfig.fileDir.value()),
inputBinaryFile = cms.string(SiPixelAliMilleAlignmentProducerHG.algoConfig.binaryFile.value()),
fileBlobLabel = cms.string(''),
)



seqALCARECOPromptCalibProdSiPixelAliHG = cms.Sequence(ALCARECOTkAlMinBiasFilterForSiPixelAliHG*
lsNumberFilter*
offlineBeamSpot*
SiPixelAliHighPuritySelectorHG*
SiPixelAliTrackRefitterHG0*
SiPixelAliTrackerTrackHitFilterHG*
SiPixelAliTrackFitterHG*
SiPixelAliTrackSelectorHG*
SiPixelAliTrackRefitterHG1*
SiPixelAliMilleAlignmentProducerHG*
SiPixelAliMillePedeFileConverterHG)
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,5 @@
'keep *_SiPixelAliMillePedeFileConverter_*_*')
)

import copy

OutALCARECOPromptCalibProdSiPixelAli=copy.deepcopy(OutALCARECOPromptCalibProdSiPixelAli_noDrop)
OutALCARECOPromptCalibProdSiPixelAli=OutALCARECOPromptCalibProdSiPixelAli_noDrop.clone()
OutALCARECOPromptCalibProdSiPixelAli.outputCommands.insert(0, "drop *")
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import FWCore.ParameterSet.Config as cms

SiPixelAliMilleFileExtractorHG = cms.EDAnalyzer("MillePedeFileExtractor",
fileBlobInputTag = cms.InputTag("SiPixelAliMillePedeFileConverterHG",''),
fileDir = cms.string('HGalignment/'),
# File names the Extractor will use to write the fileblobs in the root
# file as real binary files to disk, so that the pede step can read them.
# This includes the formatting directive "%04d" which will be expanded to
# 0000, 0001, 0002,...
outputBinaryFile = cms.string('pedeBinaryHG%04d.dat'))

from Alignment.MillePedeAlignmentAlgorithm.MillePedeAlignmentAlgorithm_cfi import *
from Alignment.CommonAlignmentProducer.AlignmentProducerAsAnalyzer_cff import AlignmentProducer
from Alignment.MillePedeAlignmentAlgorithm.MillePedeDQMModule_cff import *

SiPixelAliPedeAlignmentProducerHG = AlignmentProducer.clone(
ParameterBuilder = dict(
Selector = cms.PSet(
alignParams = cms.vstring(
"TrackerP1PXBLadder,111111",
"TrackerP1PXECPanel,111111",
)
)
),
doMisalignmentScenario = False,
checkDbAlignmentValidity = False,
applyDbAlignment = True,
tjTkAssociationMapTag = 'TrackRefitter2',
saveToDB = True,
trackerAlignmentRcdName = "TrackerAlignmentHGRcd"
)

SiPixelAliPedeAlignmentProducerHG.algoConfig = MillePedeAlignmentAlgorithm.clone(
mode = 'pede',
runAtPCL = True,
mergeBinaryFiles = [SiPixelAliMilleFileExtractorHG.outputBinaryFile.value()],
binaryFile = '',
TrajectoryFactory = cms.PSet(BrokenLinesTrajectoryFactory),
minNumHits = 10,
fileDir = 'HGalignment/',
pedeSteerer = dict(
pedeCommand = 'pede',
method = 'inversion 5 0.8',
options = [
#'regularisation 1.0 0.05', # non-stated pre-sigma 50 mrad or 500 mum
'entries 500',
'chisqcut 30.0 4.5',
'threads 1 1',
'closeandreopen',
'skipemptycons'
#'outlierdownweighting 3','dwfractioncut 0.1'
#'outlierdownweighting 5','dwfractioncut 0.2'
],
fileDir = 'HGalignment/',
runDir = 'HGalignment/',
steerFile = 'pedeSteerHG',
pedeDump = 'pedeHG.dump'
),
pedeReader = dict(
fileDir = 'HGalignment/'
),
MillePedeFileReader = dict(
fileDir = "HGalignment/",
isHG = True
)
)

SiPixelAliDQMModuleHG = SiPixelAliDQMModule.clone()
SiPixelAliDQMModuleHG.MillePedeFileReader.fileDir = "HGalignment/"
SiPixelAliDQMModuleHG.MillePedeFileReader.isHG = True

from DQMServices.Core.DQMEDHarvester import DQMEDHarvester
dqmEnvSiPixelAliHG = DQMEDHarvester('DQMHarvestingMetadata',
subSystemFolder = cms.untracked.string('AlCaReco'))

ALCAHARVESTSiPixelAliHG = cms.Sequence(SiPixelAliMilleFileExtractorHG*
SiPixelAliPedeAlignmentProducerHG*
SiPixelAliDQMModuleHG*
dqmEnvSiPixelAliHG)
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,9 @@

# update alignables if triggered by corresponding input IOV boundary
enableAlignableUpdates = cms.bool(False),

# Change tracker alignment record name to avoid confusion bettwen HG and LG PCL alignment
trackerAlignmentRcdName = cms.string("TrackerAlignmentRcd")
)
import Geometry.DTGeometryBuilder.dtGeometryDB_cfi
DTGeometryAlignmentProducerAsAnalyzer = Geometry.DTGeometryBuilder.dtGeometryDB_cfi.DTGeometryESModule.clone()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,9 @@

# update alignables if triggered by corresponding input IOV boundary
enableAlignableUpdates = cms.bool(False),

# Change tracker alignment record name to avoid confusion bettwen HG and LG PCL alignment
trackerAlignmentRcdName = cms.string("TrackerAlignmentRcd")
)

import Geometry.DTGeometryBuilder.dtGeometryDB_cfi
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import FWCore.ParameterSet.Config as cms

##
## Do not filter out the first 20 LS when
## running the PCL alignment in the RelVal case
##

def doNotFilterLS(process):
if hasattr(process,'lsNumberFilter'):
process.lsNumberFilter.minLS = 1
return process

##
## Required 10 instead of 500 hits per structure
## when running the HG PCL alignment in the RelVal case
##

def lowerHitsPerStructure(process):
if hasattr(process,'SiPixelAliPedeAlignmentProducerHG'):
process.SiPixelAliPedeAlignmentProducerHG.algoConfig.pedeSteerer.options = cms.vstring(
'entries 10',
'chisqcut 30.0 4.5',
'threads 1 1',
'closeandreopen'
)
return process
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ AlignmentProducerBase::AlignmentProducerBase(const edm::ParameterSet& config, ed
saveDeformationsToDB_{config.getParameter<bool>("saveDeformationsToDB")},
useSurvey_{config.getParameter<bool>("useSurvey")},
enableAlignableUpdates_{config.getParameter<bool>("enableAlignableUpdates")},
tkAliRcdName_{config.getParameter<std::string>("trackerAlignmentRcdName")},
ttopoToken_(iC.esConsumes<edm::Transition::BeginRun>()),
geomDetToken_(iC.esConsumes<edm::Transition::BeginRun>()),
ptpToken_(iC.esConsumes<edm::Transition::BeginRun>()),
Expand Down Expand Up @@ -853,8 +854,7 @@ void AlignmentProducerBase::writeForRunRange(cond::Time_t time) {

auto alignments = alignableTracker_->alignments();
auto alignmentErrors = alignableTracker_->alignmentErrors();
this->writeDB(
alignments, "TrackerAlignmentRcd", alignmentErrors, "TrackerAlignmentErrorExtendedRcd", trackerGlobal, time);
this->writeDB(alignments, tkAliRcdName_, alignmentErrors, "TrackerAlignmentErrorExtendedRcd", trackerGlobal, time);

// Save surface deformations to database
if (saveDeformationsToDB_) {
Expand Down
Loading

0 comments on commit 3423e04

Please sign in to comment.