33 from InDetDefectsEmulation.StripDefectsEmulatorConfig
import (moduleDefect,
40 ModulePatterns=[[-2,2,0,99,-99,99,-99,99,0,9999,0,1,0]],
41 DefectProbabilities=[[0.,1e-2,1e-1,0.]],
42 NDefectFractionsPerPattern=[[1.,-1, 1.]],
45 CornerDefectParamsPerPattern=[],
46 NCornerDefectFractionsPerPattern=[],
47 RngPerDefectType=False,
49 DefectsOutputFile=None,
50 FillHistogramsPerPattern=False,
51 FillEtaPhiHistogramsPerPattern=False,
52 MaxRandomPositionAttempts: int=10,
53 HistogramGroupName: str=
"ITkPixelDefects",
54 HistogramFileName: str=
"itk_pixel_defects_opt1.root",
55 PropagateDefectsToStatus=
True) :
57 Schedule conditions algorithm for emulated ITk pixel defects, and algorithms to drop RDOs overlapping with the emulated defects.
58 ModulePattern: criteria to match modules, which are lists of n-tuples where every two numbers of each n-tuple define a range
59 to match parts of module identifiers (barrel/ec, layer/disk, eta., phi, columns, side) plus a flag (last
60 element of each n-tuple), which is unused for pixel.
61 DefectProbabilities: list of n-tuples per criterion containing 4 probabilities: module, pixel to be defect, a module
62 to have at least one core column defect, circuit defect.
63 NDefectFractionsPerPattern: Fractions of exactly n-group defects (core-column, circuit) under condition that there is at least one
64 such group defect. There must be one n-tuple with fractions per criterion, and each fraction
65 n-tuple must contain for each group defect probability a non empty set of fractions of exactly 1, ... n defects.
66 Fractions for different group defects are separated by -1. There should be two sequences of
67 positive fractions separated by -1.
68 NoiseProbability: Empty or probabilities of a pixel to produce a spurious hit.
69 NoiseShape: binned PDF (i.e. list of fractions) to create tot values for spurious hits.
70 CornerDefectParamsPerPattern: parameters for corner defects per pattern can be created with e.g. makeCornerDefectParam
71 NCornerDefectFractionsPerPattern: fractions of 1,..4 corner defects
72 FillHistogramsPerPattern: if True histograms are filled per module pattern
73 FillEtaPhiHistogramsPerPattern: if True also fill xy, and rz histograms of defects per module.
74 HistogramGroupName: None (disables histogramming) or the histogram group name must be unique
75 HistogramFileName: None (disables histogramming) or a file name for writing the histograms.
78 from InDetDefectsEmulation.PixelDefectsEmulatorConfig
import (
79 ITkPixelDefectsEmulatorCondAlgCfg,
80 ITkPixelDefectsEmulatorAlgCfg,
81 ITkPixelDefectsEmulatorToDetectorElementStatusCondAlgCfg,
86 if HistogramFileName
is None or len(HistogramFileName) ==0 :
87 HistogramGroupName =
None
88 if HistogramGroupName
is not None :
89 cfg.merge(
DefectsHistSvcCfg(flags, HistogramGroup=HistogramGroupName, FileName=HistogramFileName))
94 HistogramGroupName=f
"/{HistogramGroupName}/EmulatedDefects/" if HistogramGroupName
is not None else "",
95 ModulePatterns = ModulePatterns,
96 DefectProbabilities = DefectProbabilities,
97 NDefectFractionsPerPattern = NDefectFractionsPerPattern,
98 MaxRandomPositionAttempts=MaxRandomPositionAttempts,
99 CornerDefectParamsPerPattern=CornerDefectParamsPerPattern,
100 NCornerDefectFractionsPerPattern=NCornerDefectFractionsPerPattern,
101 RngPerDefectType=RngPerDefectType,
102 DefectsInputFiles=DefectsInputFiles,
103 DefectsOutputFile=DefectsOutputFile,
104 FillHistogramsPerPattern=FillHistogramsPerPattern,
105 FillEtaPhiHistogramsPerPattern=FillEtaPhiHistogramsPerPattern,
106 CheckerBoardDefects=
False,
109 WriteKey=
"ITkPixelEmulatedDefects",
115 EmulatedDefectsKey=
"ITkPixelEmulatedDefects",
116 ModulePatterns = ModulePatterns,
117 NoiseProbability = NoiseProbability,
118 NoiseShape = NoiseShape,
120 HistogramGroupName=f
"/{HistogramGroupName}/RejectedRDOs/" if HistogramGroupName
is not None else "",
123 if PropagateDefectsToStatus :
126 name=
"ITkPixelDefectsEmulatorToDetectorElementStatusCondAlg",
127 EmulatedDefectsKey=
"ITkPixelEmulatedDefects",
128 WriteKey=
"ITkPixelDetectorElementStatusFromEmulatedDefects"))
129 pixel_det_el_status_cond_alg=cfg.getCondAlgo(
"ITkPixelDetectorElementStatusCondAlgNoByteStreamErrors")
130 pixel_det_el_status_cond_alg.ConditionsSummaryTool.PixelDetElStatusCondDataBaseKey=
"ITkPixelDetectorElementStatusFromEmulatedDefects"
135 DefectProbabilities=None,
136 NDefectFractionsPerPattern=None,
137 RngPerDefectType=False,
138 DefectsInputFiles=[],
139 DefectsOutputFile=None,
140 FillHistogramsPerPattern=False,
141 FillEtaPhiHistogramsPerPattern=False,
142 HistogramGroupName: str=
"PixelDefects",
143 HistogramFileName: str=
"pixel_defects.root") :
145 Schedule algorithms to emulate run3 pixel defects, and algorithm to drop RDOs which overlap with these defects
147 from InDetDefectsEmulation.PixelDefectsEmulatorConfig
import (
148 PixelDefectsEmulatorCondAlgCfg,
149 PixelDefectsEmulatorAlgCfg,
154 if HistogramFileName
is None or len(HistogramFileName) ==0 :
155 HistogramGroupName =
None
156 if HistogramGroupName
is not None :
157 cfg.merge(
DefectsHistSvcCfg(flags, HistogramGroup=HistogramGroupName, FileName=HistogramFileName))
159 if ModulePatterns
is None and DefectProbabilities
is None and NDefectFractionsPerPattern
is None:
160 a_module_pattern_list, a_prob_list,fractions,ignore_NoiseProbability,ignore_NoiseShape, cornerDefectParam, cornerDefectFractions =
combineModuleDefects([
161 moduleDefect(bec=[-2,-2],layer=[0,99], phi_range=[-99,99],eta_range=[-99,99],
162 columns_or_strips=[0,9999],
171 ModulePatterns = a_module_pattern_list
172 DefectProbabilities = a_prob_list
173 NDefectFractionsPerPattern = fractions
177 ModulePatterns = ModulePatterns,
178 DefectProbabilities = DefectProbabilities,
179 NDefectFractionsPerPattern = NDefectFractionsPerPattern,
180 CornerDefectParamsPerPattern=cornerDefectParam,
181 NCornerDefectFractionsPerPattern=cornerDefectFractions,
182 RngPerDefectType=RngPerDefectType,
183 DefectsInputFiles=DefectsInputFiles,
184 DefectsOutputFile=DefectsOutputFile,
185 FillHistogramsPerPattern=FillHistogramsPerPattern,
186 FillEtaPhiHistogramsPerPattern=FillEtaPhiHistogramsPerPattern,
188 HistogramGroupName=f
"/{HistogramGroupName}/EmulatedDefects/" if HistogramGroupName
is not None else "",
189 WriteKey=
"PixelEmulatedDefects",
195 EmulatedDefectsKey=
"PixelEmulatedDefects",
197 HistogramGroupName=f
"/{HistogramGroupName}/RejectedRDOs/" if HistogramGroupName
is not None else "",
204 Create fractions for exactly 1..max_n defects, under the condition that
205 the probability for at least one such defects is cc_defect_prob, and
206 assuming that the fractions are Poisson distributed.
208 if cc_defect_prob > 0. :
209 def PoissonProb(expected, n) :
210 return math.pow(expected,n)*math.exp(-expected)/math.gamma(n+1)
211 def norm(fractions) :
212 Norm = 1./sum (fractions)
213 return [Norm*elm
for elm
in fractions ]
214 expectation=-math.log(1-cc_defect_prob)
215 return norm([ PoissonProb(expectation,i)
for i
in range(1,max_n+1) ])
221 Compute the defect probability for a quad module from the probabilities
222 of a single chip module, assuming that the defect is a "feature" of the
225 return 1-math.pow(1-circuit_prob,4)
229 Create fraction n-tuple, containing zero except for the element corresponding
230 to exactly n defects, which is set to 1.
232 return [ 0.
if idx != ExactlyNCoreColumnDefects
else 1.
for idx
in range(1,ExactlyNCoreColumnDefects+1) ]
236 circuit_cc_defect_prob,
238 pixel_defect_prob=1e-2,
239 module_defect_prob=0.,
241 noiseProbability=None,
244 Create different defects for quads and single chip modules, where the corresponding modules are selected by
245 the number of offline columns
254 min_ry=0.5,max_ry=1.5,
255 min_sagitta=0.2,max_sagitta=0.5)
260 corner_defect_n_defect_corners=
poissonFractions(cc_defect_prob=15e-2, max_n=4)
263 moduleDefect(bec=[-2,2],layer=[0,99], phi_range=[-99,99],eta_range=[-99,99],
264 columns_or_strips=[800,800],
267 probability=[module_defect_prob,
272 fractionsOfNDefects=[[1.], quad_fractions,[1.]],
273 noiseProbability=noiseProbability,
274 noiseShape=noiseShape,
275 cornerDefectParam=[],
276 cornerDefectNCornerFractions=[]
278 moduleDefect(bec=[-2,2],layer=[0,1], phi_range=[-99,99],eta_range=[-99,99],
279 columns_or_strips=[384,384],
282 probability=[module_defect_prob,
284 circuit_cc_defect_prob,
287 fractionsOfNDefects=[[1.], circuit_fractions,[1.]],
288 noiseProbability=noiseProbability,
289 noiseShape=noiseShape,
290 cornerDefectParam=corner_defects,
291 cornerDefectNCornerFractions=corner_defect_n_defect_corners,
293 moduleDefect(bec=[-2,2],layer=[0,1], phi_range=[-99,99],eta_range=[-99,99],
294 columns_or_strips=[200,200],
297 probability=[module_defect_prob,
299 circuit_cc_defect_prob,
302 fractionsOfNDefects=[[1.],circuit_fractions,[1.]],
303 noiseProbability=noiseProbability,
304 noiseShape=noiseShape,
305 cornerDefectParam=corner_defects,
306 cornerDefectNCornerFractions=corner_defect_n_defect_corners,
312 For NoiseProb>0. create phantasie noise tot shape, with mean at zero width of 0.7
313 truncated below a tot of 1.
319 return [elm/scale
if scale > 0.
else 0.
for elm
in dist]
320 def gaussDist(mean, width, n) :
321 scale = -1./(2*width)
322 return norm([ math.exp( scale *math.pow(i - mean,2.) )
for i
in range(0,n) ])
325 noiseShape=[ 0. ] + gaussDist(-1,0.7,4)
329 return noiseProb,noiseShape
334 FrontEndCCDefectProb=0.1,
335 PixelDefectProb=1e-2,
340 RngPerDefectType=False,
341 DefectsInputFiles=[],
342 DefectsOutputFile=None,
343 PropagateDefectsToStatus=True,
344 HistogramFileName=None) :
346 Create exactly one core column defect per module where the probability is given
347 by module_prob, and create single pixel defects according to pixel_defect_prob
351 ModulePatterns, DefectProbabilities, NDefectFractionsPerPattern, NoiseProbability, NoiseShape,cornerDefectParam,cornerDefectFractions =
makeITkDefectsParams(
352 quad_cc_defect_prob=
quadProb(FrontEndCCDefectProb),
353 quad_fractions=fractions,
354 circuit_cc_defect_prob=FrontEndCCDefectProb,
355 circuit_fractions=fractions,
356 pixel_defect_prob=PixelDefectProb,
357 module_defect_prob=ModuleDefectProb,
358 cornerDefectProb=CornerDefectProb,
359 noiseProbability=noiseProbabilitySingle,
360 noiseShape=noiseShapeSingle)
364 ModulePatterns=ModulePatterns,
365 DefectProbabilities=DefectProbabilities,
366 NDefectFractionsPerPattern=NDefectFractionsPerPattern,
367 NoiseProbability=NoiseProbability,
368 NoiseShape=NoiseShape,
369 CornerDefectParamsPerPattern=cornerDefectParam,
370 NCornerDefectFractionsPerPattern=cornerDefectFractions,
371 RngPerDefectType=RngPerDefectType,
372 DefectsInputFiles=DefectsInputFiles,
373 DefectsOutputFile=DefectsOutputFile,
374 FillHistogramsPerPattern=
True,
375 FillEtaPhiHistogramsPerPattern=
True,
376 PropagateDefectsToStatus=PropagateDefectsToStatus,
377 HistogramFileName=HistogramFileName)
382 FrontEndCCDefectProb=0.1,
383 PixelDefectProb=1e-2,
387 RngPerDefectType=False,
388 DefectsInputFiles=[],
389 DefectsOutputFile=None,
390 PropagateDefectsToStatus=True,
391 HistogramFileName=None) :
393 Create Poisson distributed core column defects per module where the probability for at least one
394 core column defect is given by front_end_cc_defect_prob for single chip modules and larger for
395 quads, respectively. Single pixel defects are controlled by pixel_defect_prob
398 quad_prob=
quadProb(FrontEndCCDefectProb)
399 ModulePatterns, DefectProbabilities, NDefectFractionsPerPattern, NoiseProbability, NoiseShape,cornerDefectParam,cornerDefectFractions =
makeITkDefectsParams(
400 quad_cc_defect_prob=quad_prob,
402 circuit_cc_defect_prob=FrontEndCCDefectProb,
404 pixel_defect_prob=PixelDefectProb,
405 module_defect_prob=ModuleDefectProb,
406 cornerDefectProb=CornerDefectProb,
407 noiseProbability=noiseProbabilitySingle,
408 noiseShape=noiseShapeSingle)
412 ModulePatterns=ModulePatterns,
413 DefectProbabilities=DefectProbabilities,
414 NDefectFractionsPerPattern=NDefectFractionsPerPattern,
415 NoiseProbability=NoiseProbability,
416 NoiseShape=NoiseShape,
417 CornerDefectParamsPerPattern=cornerDefectParam,
418 NCornerDefectFractionsPerPattern=cornerDefectFractions,
419 RngPerDefectType=RngPerDefectType,
420 DefectsInputFiles=DefectsInputFiles,
421 DefectsOutputFile=DefectsOutputFile,
422 FillHistogramsPerPattern=
True,
423 FillEtaPhiHistogramsPerPattern=
True,
424 PropagateDefectsToStatus=PropagateDefectsToStatus,
425 HistogramFileName=HistogramFileName)
429 FrontEndCCDefectProb=0.1,
430 PixelDefectProb=1e-2,
431 ModuleDefectProb=1e-2,
432 CornerDefectProb=15e-2,
434 RngPerDefectType=False,
435 DefectsInputFiles=[],
436 DefectsOutputFile=None,
437 PropagateDefectsToStatus=True,
438 HistogramFileName=None) :
440 Enables all defects according to the current expectation.
443 FrontEndCCDefectProb,
448 RngPerDefectType=RngPerDefectType,
449 DefectsInputFiles=DefectsInputFiles,
450 DefectsOutputFile=DefectsOutputFile,
451 PropagateDefectsToStatus=PropagateDefectsToStatus,
452 HistogramFileName=HistogramFileName)