1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
# MillePedeAlignmentAlgorithm
# ---------------------------
import FWCore.ParameterSet.Config as cms
from Alignment.ReferenceTrajectories.TrajectoryFactories_cff import *
from Alignment.MillePedeAlignmentAlgorithm.MillePedeFileReader_cfi import *
MillePedeAlignmentAlgorithm = cms.PSet(
algoName = cms.string('MillePedeAlignmentAlgorithm'),
mode = cms.untracked.string('full'), ## possible modes: full, mille, pede, pedeSteer, pedeRun, pedeRead
fileDir = cms.untracked.string(''),
# Where mille writes (and pede reads) derivatives, labels etc.
binaryFile = cms.string('milleBinary.dat'),
# Resulting and initial parameters, absolute (original) positions, result etc.
treeFile = cms.string('treeFile.root'),
# Must be empty if mille runs, otherwise for merging (pede) jobs should be parallel with each
# other. Then 'treeFile' is merged result and 'binaryFile' should be empty.
mergeBinaryFiles = cms.vstring(),
mergeTreeFiles = cms.vstring(),
monitorFile = cms.untracked.string('millePedeMonitor.root'), ## if empty: no monitoring...
runAtPCL = cms.bool(False), # at the PCL the mille binaries are reset at lumi-section boundaries
ignoreFirstIOVCheck = cms.untracked.bool(False), # flag to ignore check if data is prior to first IOV
ignoreHitsWithoutGlobalDerivatives = cms.bool(False), # - if all alignables and calibration for a
# hit are set to '0', the hit is ignored
# - has only an effect with non-GBL
# material-effects description
skipGlobalPositionRcdCheck = cms.bool(False), # since the change of the GlobalPositionRcd is
# mostly driven by changes of the muon system
# it is often safe to ignore this change for
# tracker alignment
# PSet that allows to configure the pede labeler, i.e. select the actual
# labeler plugin to use and parameters for the selected plugin
pedeLabeler = cms.PSet(
#plugin = cms.string('MomentumDependentPedeLabeler')
#parameterInstances = cms.VPSet(
# cms.PSet(momentumRanges = cms.vstring('0.0:50.0','50.0:10000.0'),
# selector = cms.vstring('ExtrasBeamSpot,1111'))
# )
),
pedeSteerer = cms.PSet(
fileDir = cms.untracked.string(''),
runDir = cms.untracked.string(''),
steerFile = cms.string('pedeSteer'), ## beginning of steering file names
steerFileDebug = cms.untracked.bool(False),
# If MillePedeAlignmentAlgorithm.mode causes pede to run (e.g. 'full', 'pede' etc.),
# the pede command line is constructed as:
# 'pedeCommand' 'steerFile'Master.txt
# (and - if pedeDump is not empty - extended by: > 'pedeDump')
# (MillePedeAlignmentAlgorithm.theDir is taken into account...)
pedeCommand = cms.untracked.string('pede'),
parameterSign = cms.untracked.int32(1), ## old pede versions (before May '07) need a sign flip
pedeDump = cms.untracked.string('pede.dump'),
method = cms.string('sparseMINRES 6 0.8'), ## "inversion 6 0.8"
options = cms.vstring('entries 50', # min. number of measurements (parameters with less will be skipped)
# 'regularisation 1.0 0.01', # regularisation with default pre-sigma 0.01
# "chisqcut 20.0 4.5", # simple chi^2 cut for outliers AND/OR ...
# "outlierdownweighting 3", "dwfractioncut 0.1" #, # ... 3x Huber down weighting OR...
'outlierdownweighting 5', 'dwfractioncut 0.2'),
# Special selection of parameters to fix, use as reference coordinate system etc.
# ------------------------------------------------------------------------------
# All this is determined from what is given as
# AlignmentProducer.ParameterBuilder.Selector, cf. Twiki page SWGuideMillepedeIIAlgorithm.
Presigmas = cms.VPSet(),
minHieraConstrCoeff = cms.double(1.e-10), # min abs value of coeff. in hierarchy constr.
minHieraParPerConstr = cms.uint32(1), # ignore hierarchy constraints with less params
constrPrecision = cms.uint32(10), # precision for writing constraints to text file. Default is 6 and can be setup with constrPrecision = cms.uint32(0)
# specify additional steering files
additionalSteerFiles = cms.vstring(), # obsolete - can be given as entries in 'options'
# Parameter vector for the systematic geometry deformations
# Empty vector -> constraints are NOT applied (default)
constraints = cms.VPSet()
),
pedeReader = cms.PSet(
readFile = cms.string('millepede.res'),
# directory of 'readFile', if empty:
# take from pedeSteerer (inheriting from MillePedeAlignmentAlgorithm)
fileDir = cms.untracked.string('')
),
# Array of PSet's like 'pedeReader' above to be applied before running mille,
# i.e. for iterative running of Millepede without going via DB constants
# (note: if 'fileDir' empty, the one from 'pedeSteerer' will be used...):
pedeReaderInputs = cms.VPSet(),
TrajectoryFactory = BrokenLinesTrajectoryFactory, # from TrajectoryFactories
# BrokenLinesBzeroTrajectoryFactory
# TwoBodyDecayReferenceTrajectoryFactory, # for this overwrite MaterialEffects for BL
minNumHits = cms.uint32(7), ## minimum number of hits (with alignable parameters)
max2Dcorrelation = cms.double(0.05), ## if correlation >5% 2D measurements in TID/TEC get diagonalized
doubleBinary = cms.bool(False), ## create binary files with doubles instead of floats (GBL only)
# Parameters for PXB survey steering
surveyPixelBarrel = cms.PSet(
doSurvey = cms.bool(False),
infile = cms.FileInPath("Alignment/SurveyAnalysis/data/BPix_Survey_info_raw.txt"),
doOutputOnStdout = cms.bool(False),
# Settings for toy survey - produces a file with toy survey data according to given parameters
doToySurvey = cms.bool(False),
toySurveyFile = cms.untracked.string('toySurveyInfo.txt'),
toySurveySeed = cms.uint32(12),
toySurveyParameters = cms.VPSet(
# Position of photo in local frame (unit: pixels in photo)
cms.PSet(name = cms.string('a0'), mean = cms.double(1800.), sigma = cms.double(150.)),
cms.PSet(name = cms.string('a1'), mean = cms.double(2600.), sigma = cms.double(200.)),
# Scale of photo (unit: pixels per cm)
cms.PSet(name = cms.string('scale'), mean = cms.double(1150.), sigma = cms.double(50.)),
# Rotation of photo in local frame (unit: rads)
cms.PSet(name = cms.string('phi'), mean = cms.double(0.), sigma = cms.double(0.0025)),
# Smearing of measurements in u and v coordinate (unit: pixels in photo)
cms.PSet(name = cms.string('u'), mean = cms.double(0.), sigma = cms.double(0.175)),
cms.PSet(name = cms.string('v'), mean = cms.double(0.), sigma = cms.double(0.175))
)
),
#parameters used to read the pede files back for DQM and check on parameters
MillePedeFileReader = cms.PSet(MillePedeFileReader),
)
|