77 StripDefectProb: float=1e-2,
78 ModuleDefectProb: float=1e-2,
80 MaxRandomPositionAttempts: int=10,
81 RngPerDefectType=
False,
83 DefectsOutputFile=
None,
84 coldNoiseDefectProb: float=0.,
85 coldNoiseNDefectFractions=
None,
86 coldNoiseDefectsEvenOnly: bool=
False,
87 FillHistogramsPerPattern: bool=
True,
88 FillEtaPhiHistogramsPerPattern: bool=
True,
89 HistogramGroupName: str=
"ITkStripDefects",
90 HistogramFileName: str=
None,
91 PropagateDefectsToStatus=
True) :
93 Schedule algorithms to create ITk strip defect conditions data and to emulate
94 defects by dropping ITk strip RDOs overlapping with such defects. ModuleDefectProb controls the number of
95 defect strip modules and DefectProb the number of defect strips. If a strip group is overlapping with
96 a single strip defect, the strip group will be split.
99 from InDetDefectsEmulation.StripDefectsEmulatorConfig
import (
100 ITkStripDefectsEmulatorCondAlgCfg,
101 ITkStripDefectsEmulatorAlgCfg,
102 ITkStripDefectsEmulatorToDetectorElementStatusCondAlgCfg,
105 combineModuleDefects,
111 if HistogramFileName
is None or len(HistogramFileName) ==0 :
112 HistogramGroupName =
None
113 if HistogramGroupName
is not None :
114 cfg.merge(
DefectsHistSvcCfg(flags, HistogramGroup=HistogramGroupName, FileName=HistogramFileName))
117 fractions=
mergeFractions(StripDefectProb,[1.],coldNoiseDefectProb,coldNoiseNDefectFractions)
122 coldNoiseDefectProb/=expectation_value
124 cold_noise_phi_range=EVEN_INDEX
if coldNoiseDefectsEvenOnly
else [-99,99]
129 module_pattern, module_defect_prob, fractions, ignore_NoiseProbability,ignore_NoiseShape, cornerDefectParam, cornerDefectFractions =
combineModuleDefects([
132 moduleDefect(bec=[-2,-2],layer=[0,99], phi_range=cold_noise_phi_range,eta_range=[14,17],
133 side_range=[0,0,1,1],
135 probability=[ModuleDefectProb,
136 StripDefectProb+coldNoiseDefectProb,
138 fractionsOfNDefects=[fractions]),
139 moduleDefect(bec=[2,2],layer=[0,99], phi_range=cold_noise_phi_range,eta_range=[14,17],
140 side_range=[0,0,1,1],
142 probability=[ModuleDefectProb,
143 StripDefectProb+coldNoiseDefectProb
145 fractionsOfNDefects=[fractions]),
146 moduleDefect(bec=[-2,-2],layer=[0,99], phi_range=[-99,99],eta_range=[14,17],
147 side_range=[0,0,1,1],
149 probability=[ModuleDefectProb,
152 moduleDefect(bec=[2,2],layer=[0,99], phi_range=[-99,99],eta_range=[14,17],
153 side_range=[0,0,1,1],
155 probability=[ModuleDefectProb,
158 moduleDefect(bec=[-2,-2],layer=[0,99], phi_range=[-99,99],eta_range=[-99,99],
159 side_range=[0,0,1,1],
161 probability=[ModuleDefectProb,
164 moduleDefect(bec=[-1,1],layer=[0,1], phi_range=[-99,99],eta_range=[-99,99],
165 side_range=[0,0,1,1],
167 probability=[ModuleDefectProb,
170 moduleDefect(bec=[-1,1],layer=[2,99], phi_range=[-99,99],eta_range=[-99,99],
171 side_range=[0,0,1,1],
173 probability=[ModuleDefectProb,
176 moduleDefect(bec=[2,2],layer=[0,99], phi_range=[-99,99],eta_range=[-99,99],
177 side_range=[0,0,1,1],
179 probability=[ModuleDefectProb,
182 NDefectFractionsPerPattern = fractions
189 return [elm/scale
if scale > 0.
else 0.
for elm
in dist]
190 def gaussDist(mean, width, n) :
191 scale = -1./(2*width)
192 return norm([ math.exp( scale *math.pow(i - mean,2.) )
for i
in range(0,n) ])
194 time_bin_dist = gaussDist(1.51,0.03,3)
198 for length
in [15093,18093,18981,23981,24092,24180,26223,27093,28980,30807,30808,31981,32223,40161,48360,54580,54581,60162] :
200 defects += [
moduleDefect(column_or_strip_length=[length-1,length+1],
202 noiseProbability=NoiseProb * 0.5*( 1 + length / 37627.5 ),
203 noiseShape=time_bin_dist)]
204 module_pattern_noise, ignore_module_defect_prob, ignore_fractions, NoiseProbability,NoiseShape,cornerDefectParam,cornerDefectFractions =
combineModuleDefects(defects)
206 module_pattern_noise=[]
213 HistogramGroupName=f
"/{HistogramGroupName}/StripEmulatedDefects/" if HistogramGroupName
is not None else "",
214 MaxRandomPositionAttempts=MaxRandomPositionAttempts,
215 ModulePatterns=module_pattern,
216 DefectProbabilities=module_defect_prob,
217 NDefectFractionsPerPattern = NDefectFractionsPerPattern,
218 CornerDefectParamsPerPattern=[],
219 NCornerDefectFractionsPerPattern=[],
220 RngPerDefectType=RngPerDefectType,
221 DefectsInputFiles=DefectsInputFiles,
222 DefectsOutputFile=DefectsOutputFile,
223 FillHistogramsPerPattern=FillHistogramsPerPattern,
224 FillEtaPhiHistogramsPerPattern=FillEtaPhiHistogramsPerPattern,
225 WriteKey=
"ITkStripEmulatedDefects",
231 EmulatedDefectsKey=
"ITkStripEmulatedDefects",
232 ModulePatterns=module_pattern_noise,
233 NoiseProbability = NoiseProbability,
234 NoiseShape = NoiseShape,
236 HistogramGroupName=f
"/{HistogramGroupName}/StripRejectedRDOs/" if HistogramGroupName
is not None else "",
239 if PropagateDefectsToStatus :
242 name=
"ITkStripDefectsEmulatorToDetectorElementStatusCondAlg",
243 EmulatedDefectsKey=
"ITkStripEmulatedDefects",
244 WriteKey=
"ITkStripDetectorElementStatusFromEmulatedDefects"))
245 strip_det_el_status_cond_alg=cfg.getCondAlgo(
"ITkStripDetectorElementStatusCondAlgNoByteStreamErrors")
246 strip_det_el_status_cond_alg.ConditionsSummaryTool.SCTDetElStatusCondDataBaseKey=
"ITkStripDetectorElementStatusFromEmulatedDefects"