12 StripDefectProb: float=1e-2,
13 ModuleDefectProb: float=1e-2,
15 MaxRandomPositionAttempts: int=10,
16 FillHistogramsPerPattern: bool=
True,
17 FillEtaPhiHistogramsPerPattern: bool=
True,
18 HistogramGroupName: str=
"ITkStripDefects",
19 HistogramFileName: str=
None,
20 PropagateDefectsToStatus=
True) :
22 Schedule algorithms to create ITk strip defect conditions data and to emulate
23 defects by dropping ITk strip RDOs overlapping with such defects. ModuleDefectProb controls the number of
24 defect strip modules and DefectProb the number of defect strips. If a strip group is overlapping with
25 a single strip defect, the strip group will be split.
28 from InDetDefectsEmulation.StripDefectsEmulatorConfig
import (
29 ITkStripDefectsEmulatorCondAlgCfg,
30 ITkStripDefectsEmulatorAlgCfg,
31 ITkStripDefectsEmulatorToDetectorElementStatusCondAlgCfg,
38 if HistogramFileName
is None or len(HistogramFileName) ==0 :
39 HistogramGroupName =
None
40 if HistogramGroupName
is not None :
41 cfg.merge(
DefectsHistSvcCfg(flags, HistogramGroup=HistogramGroupName, FileName=HistogramFileName))
45 module_pattern, module_defect_prob, fractions, ignore_NoiseProbability,ignore_NoiseShape, cornerDefectParam, cornerDefectFractions =
combineModuleDefects([
46 moduleDefect(bec=[-2,-2],layer=[0,99], phi_range=[-99,99],eta_range=[-99,99],
49 probability=[ModuleDefectProb,
52 moduleDefect(bec=[-1,1],layer=[0,1], phi_range=[-99,99],eta_range=[-99,99],
55 probability=[ModuleDefectProb,
58 moduleDefect(bec=[-1,1],layer=[2,99], phi_range=[-99,99],eta_range=[-99,99],
61 probability=[ModuleDefectProb,
64 moduleDefect(bec=[2,2],layer=[0,99], phi_range=[-99,99],eta_range=[-99,99],
67 probability=[ModuleDefectProb,
76 return [elm/scale
if scale > 0.
else 0.
for elm
in dist]
77 def gaussDist(mean, width, n) :
79 return norm([ math.exp( scale *math.pow(i - mean,2.) )
for i
in range(0,n) ])
81 time_bin_dist = gaussDist(1.51,0.03,3)
85 for length
in [15093,18093,18981,23981,24092,24180,26223,27093,28980,30807,30808,31981,32223,40161,48360,54580,54581,60162] :
87 defects += [
moduleDefect(column_or_strip_length=[length-1,length+1],
89 noiseProbability=NoiseProb * 0.5*( 1 + length / 37627.5 ),
90 noiseShape=time_bin_dist)]
91 module_pattern_noise, ignore_module_defect_prob, ignore_fractions, NoiseProbability,NoiseShape,cornerDefectParam,cornerDefectFractions =
combineModuleDefects(defects)
93 module_pattern_noise=[]
100 HistogramGroupName=f
"/{HistogramGroupName}/StripEmulatedDefects/" if HistogramGroupName
is not None else "",
101 MaxRandomPositionAttempts=MaxRandomPositionAttempts,
102 ModulePatterns=module_pattern,
103 DefectProbabilities=module_defect_prob,
104 CornerDefectParamsPerPattern=[],
105 NCornerDefectFractionsPerPattern=[],
106 FillHistogramsPerPattern=FillHistogramsPerPattern,
107 FillEtaPhiHistogramsPerPattern=FillEtaPhiHistogramsPerPattern,
108 WriteKey=
"ITkStripEmulatedDefects",
114 EmulatedDefectsKey=
"ITkStripEmulatedDefects",
115 ModulePatterns=module_pattern_noise,
116 NoiseProbability = NoiseProbability,
117 NoiseShape = NoiseShape,
119 HistogramGroupName=f
"/{HistogramGroupName}/StripRejectedRDOs/" if HistogramGroupName
is not None else "",
122 if PropagateDefectsToStatus :
125 name=
"ITkStripDefectsEmulatorToDetectorElementStatusCondAlg",
126 EmulatedDefectsKey=
"ITkStripEmulatedDefects",
127 WriteKey=
"ITkStripDetectorElementStatusFromEmulatedDefects"))
128 strip_det_el_status_cond_alg=cfg.getCondAlgo(
"ITkStripDetectorElementStatusCondAlgNoByteStreamErrors")
129 strip_det_el_status_cond_alg.ConditionsSummaryTool.SCTDetElStatusCondDataBaseKey=
"ITkStripDetectorElementStatusFromEmulatedDefects"