78 StripDefectProb: float=1e-2,
79 ModuleDefectProb: float=1e-2,
81 MaxRandomPositionAttempts: int=10,
82 RngPerDefectType=
False,
84 DefectsOutputFile=
None,
85 coldNoiseDefectProb: float=0.,
86 coldNoiseNDefectFractions=
None,
87 coldNoiseDefectsEvenOnly: bool=
False,
88 FillHistogramsPerPattern: bool=
True,
89 FillEtaPhiHistogramsPerPattern: bool=
True,
90 HistogramGroupName: str=
"ITkStripDefects",
91 HistogramFileName: str=
None,
92 PropagateDefectsToStatus=
True) :
94 Schedule algorithms to create ITk strip defect conditions data and to emulate
95 defects by dropping ITk strip RDOs overlapping with such defects. ModuleDefectProb controls the number of
96 defect strip modules and DefectProb the number of defect strips. If a strip group is overlapping with
97 a single strip defect, the strip group will be split.
100 from InDetDefectsEmulation.StripDefectsEmulatorConfig
import (
101 ITkStripDefectsEmulatorCondAlgCfg,
102 ITkStripDefectsEmulatorAlgCfg,
103 ITkStripDefectsEmulatorToDetectorElementStatusCondAlgCfg,
106 combineModuleDefects,
112 if HistogramFileName
is None or len(HistogramFileName) ==0 :
113 HistogramGroupName =
None
114 if HistogramGroupName
is not None :
115 cfg.merge( DefectsHistSvcCfg(flags, HistogramGroup=HistogramGroupName, FileName=HistogramFileName))
118 fractions=
mergeFractions(StripDefectProb,[1.],coldNoiseDefectProb,coldNoiseNDefectFractions)
119 if fractions
is None :
125 coldNoiseDefectProb=coldNoiseDefectProb/expectation_value
if expectation_value>0.
else 0.
127 cold_noise_phi_range=EVEN_INDEX
if coldNoiseDefectsEvenOnly
else [-99,99]
132 module_pattern, module_defect_prob, fractions, ignore_NoiseProbability,ignore_NoiseShape, cornerDefectParam, cornerDefectFractions = combineModuleDefects([
135 moduleDefect(bec=[-2,-2],layer=[0,99], phi_range=cold_noise_phi_range,eta_range=[14,17],
136 side_range=[0,0,1,1],
138 probability=[ModuleDefectProb,
139 StripDefectProb+coldNoiseDefectProb,
141 fractionsOfNDefects=[fractions]),
142 moduleDefect(bec=[2,2],layer=[0,99], phi_range=cold_noise_phi_range,eta_range=[14,17],
143 side_range=[0,0,1,1],
145 probability=[ModuleDefectProb,
146 StripDefectProb+coldNoiseDefectProb
148 fractionsOfNDefects=[fractions]),
149 moduleDefect(bec=[-2,-2],layer=[0,99], phi_range=[-99,99],eta_range=[14,17],
150 side_range=[0,0,1,1],
152 probability=[ModuleDefectProb,
155 moduleDefect(bec=[2,2],layer=[0,99], phi_range=[-99,99],eta_range=[14,17],
156 side_range=[0,0,1,1],
158 probability=[ModuleDefectProb,
161 moduleDefect(bec=[-2,-2],layer=[0,99], phi_range=[-99,99],eta_range=[-99,99],
162 side_range=[0,0,1,1],
164 probability=[ModuleDefectProb,
167 moduleDefect(bec=[-1,1],layer=[0,1], phi_range=[-99,99],eta_range=[-99,99],
168 side_range=[0,0,1,1],
170 probability=[ModuleDefectProb,
173 moduleDefect(bec=[-1,1],layer=[2,99], phi_range=[-99,99],eta_range=[-99,99],
174 side_range=[0,0,1,1],
176 probability=[ModuleDefectProb,
179 moduleDefect(bec=[2,2],layer=[0,99], phi_range=[-99,99],eta_range=[-99,99],
180 side_range=[0,0,1,1],
182 probability=[ModuleDefectProb,
185 NDefectFractionsPerPattern = fractions
192 return [elm/scale
if scale > 0.
else 0.
for elm
in dist]
193 def gaussDist(mean, width, n) :
194 scale = -1./(2*width)
195 return norm([ math.exp( scale *math.pow(i - mean,2.) )
for i
in range(0,n) ])
197 time_bin_dist = gaussDist(1.51,0.03,3)
201 for length
in [15093,18093,18981,23981,24092,24180,26223,27093,28980,30807,30808,31981,32223,40161,48360,54580,54581,60162] :
203 defects += [ moduleDefect(column_or_strip_length=[length-1,length+1],
205 noiseProbability=NoiseProb * 0.5*( 1 + length / 37627.5 ),
206 noiseShape=time_bin_dist)]
207 module_pattern_noise, ignore_module_defect_prob, ignore_fractions, NoiseProbability,NoiseShape,cornerDefectParam,cornerDefectFractions = combineModuleDefects(defects)
209 module_pattern_noise=[]
214 cfg.merge( ITkStripDefectsEmulatorCondAlgCfg(flags,
216 HistogramGroupName=f
"/{HistogramGroupName}/StripEmulatedDefects/" if HistogramGroupName
is not None else "",
217 MaxRandomPositionAttempts=MaxRandomPositionAttempts,
218 ModulePatterns=module_pattern,
219 DefectProbabilities=module_defect_prob,
220 NDefectFractionsPerPattern = NDefectFractionsPerPattern,
221 CornerDefectParamsPerPattern=[],
222 NCornerDefectFractionsPerPattern=[],
223 RngPerDefectType=RngPerDefectType,
224 DefectsInputFiles=DefectsInputFiles,
225 DefectsOutputFile=DefectsOutputFile,
226 FillHistogramsPerPattern=FillHistogramsPerPattern,
227 FillEtaPhiHistogramsPerPattern=FillEtaPhiHistogramsPerPattern,
228 WriteKey=
"ITkStripEmulatedDefects",
232 cfg.merge( ITkStripDefectsEmulatorAlgCfg(flags,
234 EmulatedDefectsKey=
"ITkStripEmulatedDefects",
235 ModulePatterns=module_pattern_noise,
236 NoiseProbability = NoiseProbability,
237 NoiseShape = NoiseShape,
239 HistogramGroupName=f
"/{HistogramGroupName}/StripRejectedRDOs/" if HistogramGroupName
is not None else "",
242 if PropagateDefectsToStatus :
244 cfg.merge(ITkStripDefectsEmulatorToDetectorElementStatusCondAlgCfg(flags,
245 name=
"ITkStripDefectsEmulatorToDetectorElementStatusCondAlg",
246 EmulatedDefectsKey=
"ITkStripEmulatedDefects",
247 WriteKey=
"ITkStripDetectorElementStatusFromEmulatedDefects"))
248 strip_det_el_status_cond_alg=cfg.getCondAlgo(
"ITkStripDetectorElementStatusCondAlgNoByteStreamErrors")
249 strip_det_el_status_cond_alg.ConditionsSummaryTool.SCTDetElStatusCondDataBaseKey=
"ITkStripDetectorElementStatusFromEmulatedDefects"
emulateITkStripDefects(flags, cfg, float StripDefectProb=1e-2, float ModuleDefectProb=1e-2, float NoiseProb=0., int MaxRandomPositionAttempts=10, RngPerDefectType=False, DefectsInputFiles=[], DefectsOutputFile=None, float coldNoiseDefectProb=0., coldNoiseNDefectFractions=None, bool coldNoiseDefectsEvenOnly=False, bool FillHistogramsPerPattern=True, bool FillEtaPhiHistogramsPerPattern=True, str HistogramGroupName="ITkStripDefects", str HistogramFileName=None, PropagateDefectsToStatus=True)
emulateITkStripDefectsDefault(flags, cfg, float StripDefectProb=1e-2, float ModuleDefectProb=1e-2, float NoiseProb=0., RngPerDefectType=False, DefectsInputFiles=[], DefectsOutputFile=None, str HistogramFileName=None, PropagateDefectsToStatus=True)