267 previousActsExtension = None) -> ComponentAccumulator:
268 acc = ComponentAccumulator()
269
270 processPixels = flags.Detector.EnableITkPixel
271 processStrips = flags.Detector.EnableITkStrip
272
273
274
275 from InDetConfig.ITkActsHelpers import isPrimaryPass
276 if flags.Acts.GNN.Enable and isPrimaryPass(flags):
277 processStrips = True
278 elif flags.Tracking.ActiveConfig.extension == "ActsConversion" or flags.Tracking.ActiveConfig.isLargeD0:
279 processPixels = False
280 elif isPrimaryPass(flags) and flags.Tracking.doITkFastTracking:
281 processStrips = reconstructStripSpacePointsInPrimaryPass(flags)
282 elif flags.Tracking.ActiveConfig.extension == "ActsValidateF100" and flags.Tracking.doITkFastTracking:
283 processStrips = False
284 kwargs = dict()
285 kwargs.setdefault('processPixels', processPixels)
286 kwargs.setdefault('processStrips', processStrips)
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304 from InDetConfig.ITkActsHelpers import isValidationPass
305 if isPrimaryPass(flags) or isValidationPass(flags):
306
307
308 kwargs.setdefault('runCacheCreation', flags.Acts.useCache)
309 kwargs.setdefault('runReconstruction', True)
310 kwargs.setdefault('runPreparation', flags.Acts.useCache)
311 else:
312
313 kwargs.setdefault('runCacheCreation', False)
314 kwargs.setdefault('runReconstruction', flags.Acts.useCache)
315 kwargs.setdefault('runPreparation', True)
316
317
318 processOverlapSpacePoints = processStrips
319 if flags.Tracking.ActiveConfig.extension in ['ActsConversion']:
320 processOverlapSpacePoints = False
321 kwargs.setdefault('processOverlapSpacePoints', processOverlapSpacePoints)
322
323
324 roisName = f'{flags.Tracking.ActiveConfig.extension}RegionOfInterest'
325
326 if flags.Tracking.ActiveConfig.isLargeD0 and flags.Tracking.ActiveConfig.isSecondaryPass:
327 from InDetConfig.ITkActsHelpers import primaryPassExtension
328 roisName = f'{primaryPassExtension(flags)}RegionOfInterest'
329
330
331
332 pixelClustersName = 'ITkPixelClusters'
333 stripClustersName = 'ITkStripClusters'
334 pixelSpacePointsName = 'ITkPixelSpacePoints'
335 stripSpacePointsName = 'ITkStripSpacePoints'
336 stripOverlapSpacePointsName = 'ITkStripOverlapSpacePoints'
337
338 if flags.Tracking.ActiveConfig.isSecondaryPass:
339 pixelClustersName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}PixelClusters'
340 stripClustersName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}StripClusters'
341 pixelSpacePointsName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}PixelSpacePoints'
342 stripSpacePointsName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}StripSpacePoints'
343 stripOverlapSpacePointsName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}StripOverlapSpacePoints'
344
345 if flags.Acts.useCache:
346 pixelClustersName += "_Cached"
347 stripClustersName += "_Cached"
348
349
350 primaryPixelSpacePointsName = 'ITkPixelSpacePoints'
351 primaryStripSpacePointsName = 'ITkStripSpacePoints'
352 primaryStripOverlapSpacePointsName = 'ITkStripOverlapSpacePoints'
353
354
355 if kwargs['runCacheCreation']:
356 kwargs.setdefault('SpacePointCacheCreatorAlg.name', f'{flags.Tracking.ActiveConfig.extension}SpacePointCacheCreatorAlg')
357
358
359 if kwargs['runReconstruction']:
360 if kwargs['processPixels']:
361 kwargs.setdefault('PixelSpacePointFormationAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointFormationAlg')
362 kwargs.setdefault('PixelSpacePointFormationAlg.useCache', flags.Acts.useCache)
363 kwargs.setdefault('PixelSpacePointFormationAlg.SPCache', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointCache')
364 kwargs.setdefault('PixelSpacePointFormationAlg.PixelClusters', pixelClustersName)
365 kwargs.setdefault('PixelSpacePointFormationAlg.PixelSpacePoints', pixelSpacePointsName)
366
367 if kwargs['processStrips']:
368 kwargs.setdefault('StripSpacePointFormationAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointFormationAlg')
369 kwargs.setdefault('StripSpacePointFormationAlg.useCache', flags.Acts.useCache)
370 kwargs.setdefault('StripSpacePointFormationAlg.SPCache', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointCache')
371 kwargs.setdefault('StripSpacePointFormationAlg.StripClusters', stripClustersName)
372 kwargs.setdefault('StripSpacePointFormationAlg.StripSpacePoints', stripSpacePointsName)
373
374
375 kwargs.setdefault('StripSpacePointFormationAlg.ProcessOverlapForStrip', kwargs['processOverlapSpacePoints'])
376 kwargs.setdefault('StripSpacePointFormationAlg.OSPCache', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointCache')
377 if kwargs['processOverlapSpacePoints']:
378 kwargs.setdefault('StripSpacePointFormationAlg.StripOverlapSpacePoints', stripOverlapSpacePointsName)
379 else:
380
381 kwargs.setdefault('StripSpacePointFormationAlg.StripOverlapSpacePoints', '')
382
383
384 if kwargs['runPreparation']:
385 if kwargs['processPixels']:
386 kwargs.setdefault('PixelSpacePointPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointPreparationAlg')
387 kwargs.setdefault('PixelSpacePointPreparationAlg.useCache', flags.Acts.useCache)
388 kwargs.setdefault('PixelSpacePointPreparationAlg.OutputCollection', f'{pixelSpacePointsName}_Cached' if kwargs['runReconstruction'] else pixelSpacePointsName)
389
390 if not flags.Acts.useCache:
391
392 kwargs.setdefault('PixelSpacePointPreparationAlg.InputCollection', pixelSpacePointsName if kwargs['runReconstruction'] else primaryPixelSpacePointsName)
393 kwargs.setdefault('PixelSpacePointPreparationAlg.InputIDC', '')
394 else:
395 kwargs.setdefault('PixelSpacePointPreparationAlg.InputCollection', '')
396 kwargs.setdefault('PixelSpacePointPreparationAlg.InputIDC', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointCache')
397
398 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
399 kwargs.setdefault('PixelSpacePointPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
400
401
402 if kwargs['processStrips']:
403 kwargs.setdefault('StripSpacePointPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointPreparationAlg')
404 kwargs.setdefault('StripSpacePointPreparationAlg.useCache', flags.Acts.useCache)
405 kwargs.setdefault('StripSpacePointPreparationAlg.OutputCollection', f'{stripSpacePointsName}_Cached' if kwargs['runReconstruction'] else stripSpacePointsName)
406
407 if not flags.Acts.useCache:
408
409 kwargs.setdefault('StripSpacePointPreparationAlg.InputCollection', stripSpacePointsName if kwargs['runReconstruction'] else primaryStripSpacePointsName)
410 kwargs.setdefault('StripSpacePointPreparationAlg.InputIDC', '')
411 else:
412 kwargs.setdefault('StripSpacePointPreparationAlg.InputCollection', '')
413 kwargs.setdefault('StripSpacePointPreparationAlg.InputIDC', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointCache')
414
415 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
416 kwargs.setdefault('StripSpacePointPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
417
418 if kwargs['processOverlapSpacePoints']:
419 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointPreparationAlg')
420 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.useCache', flags.Acts.useCache)
421 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.OutputCollection', f'{stripOverlapSpacePointsName}_Cached' if kwargs['runReconstruction'] else stripOverlapSpacePointsName)
422
423 if not flags.Acts.useCache:
424
425 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputCollection', stripOverlapSpacePointsName if kwargs['runReconstruction'] else primaryStripOverlapSpacePointsName)
426 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputIDC', '')
427 else:
428 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputCollection', '')
429 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputIDC', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointCache')
430
431 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
432 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
433
434
435 if flags.Acts.SpacePoints.doAnalysis:
436
437
438 if kwargs['processPixels']:
439 kwargs.setdefault('PixelSpacePointAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointAnalysisAlg')
440 kwargs.setdefault('PixelSpacePointAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
441 kwargs.setdefault('PixelSpacePointAnalysisAlg.SpacePointContainerKey', kwargs['PixelSpacePointPreparationAlg.OutputCollection'] if kwargs['runPreparation'] else kwargs['PixelSpacePointFormationAlg.PixelSpacePoints'])
442
443 if kwargs['processStrips']:
444 kwargs.setdefault('StripSpacePointAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointAnalysisAlg')
445 kwargs.setdefault('StripSpacePointAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
446 kwargs.setdefault('StripSpacePointAnalysisAlg.SpacePointContainerKey', kwargs['StripSpacePointPreparationAlg.OutputCollection'] if kwargs['runPreparation'] else kwargs['StripSpacePointFormationAlg.StripSpacePoints'])
447
448 if kwargs['processOverlapSpacePoints']:
449 kwargs.setdefault('StripOverlapSpacePointAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointAnalysisAlg')
450 kwargs.setdefault('StripOverlapSpacePointAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
451 kwargs.setdefault('StripOverlapSpacePointAnalysisAlg.SpacePointContainerKey', kwargs['StripOverlapSpacePointPreparationAlg.OutputCollection'] if kwargs['runPreparation'] else kwargs['StripSpacePointFormationAlg.StripOverlapSpacePoints'])
452
453 acc.merge(ActsMainSpacePointFormationCfg(flags, RoIs=roisName, **kwargs))
454
455
456
457 if flags.Acts.EDM.PersistifySpacePoints and kwargs['runReconstruction']:
458 from ActsConfig.ActsPersistificationConfig import PersistifySpacePoints
459 pixelSpacePointCollections = None if not kwargs['processPixels'] else [kwargs['PixelSpacePointFormationAlg.PixelSpacePoints']]
460 stripSpacePointCollections = []
461 if kwargs['processStrips']:
462 stripSpacePointCollections.append(kwargs['StripSpacePointFormationAlg.StripSpacePoints'])
463 if kwargs['processOverlapSpacePoints']:
464 stripSpacePointCollections.append(kwargs['StripSpacePointFormationAlg.StripOverlapSpacePoints'])
465 if len(stripSpacePointCollections) == 0:
466 stripSpacePointCollections = None
467
468 acc.merge(PersistifySpacePoints(flags,
469 pixelSpacePointCollections=pixelSpacePointCollections,
470 stripSpacePointCollections=stripSpacePointCollections))
471 return acc
472