289 previousActsExtension = None) -> ComponentAccumulator:
290 acc = ComponentAccumulator()
291
292 processPixels = flags.Detector.EnableITkPixel
293 processStrips = flags.Detector.EnableITkStrip
294
295
296
297 from InDetConfig.ITkActsHelpers import isPrimaryPass
298 if flags.Tracking.ActiveConfig.extension in ["ActsConversion", "ActsLargeRadius", "ActsValidateLargeRadiusStandalone"]:
299 processPixels = False
300 elif isPrimaryPass(flags) and flags.Tracking.doITkFastTracking:
301 processStrips = reconstructStripSpacePointsInPrimaryPass(flags)
302 elif flags.Tracking.ActiveConfig.extension == "ActsValidateF100" and flags.Tracking.doITkFastTracking:
303 processStrips = False
304 kwargs = dict()
305 kwargs.setdefault('processPixels', processPixels)
306 kwargs.setdefault('processStrips', processStrips)
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324 from InDetConfig.ITkActsHelpers import isValidationPass
325 if isPrimaryPass(flags) or isValidationPass(flags):
326
327
328 kwargs.setdefault('runCacheCreation', flags.Acts.useCache)
329 kwargs.setdefault('runReconstruction', True)
330 kwargs.setdefault('runPreparation', flags.Acts.useCache)
331 else:
332
333 kwargs.setdefault('runCacheCreation', False)
334 kwargs.setdefault('runReconstruction', flags.Acts.useCache)
335 kwargs.setdefault('runPreparation', True)
336
337
338 processOverlapSpacePoints = processStrips
339 if flags.Tracking.ActiveConfig.extension in ['ActsConversion']:
340 processOverlapSpacePoints = False
341 kwargs.setdefault('processOverlapSpacePoints', processOverlapSpacePoints)
342
343
344 roisName = f'{flags.Tracking.ActiveConfig.extension}RegionOfInterest'
345
346 if flags.Tracking.ActiveConfig.extension == 'ActsLargeRadius':
347 from InDetConfig.ITkActsHelpers import primaryPassExtension
348 roisName = f'{primaryPassExtension(flags)}RegionOfInterest'
349
350
351
352 pixelClustersName = 'ITkPixelClusters'
353 stripClustersName = 'ITkStripClusters'
354 pixelSpacePointsName = 'ITkPixelSpacePoints'
355 stripSpacePointsName = 'ITkStripSpacePoints'
356 stripOverlapSpacePointsName = 'ITkStripOverlapSpacePoints'
357
358 if flags.Tracking.ActiveConfig.isSecondaryPass:
359 pixelClustersName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}PixelClusters'
360 stripClustersName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}StripClusters'
361 pixelSpacePointsName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}PixelSpacePoints'
362 stripSpacePointsName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}StripSpacePoints'
363 stripOverlapSpacePointsName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}StripOverlapSpacePoints'
364
365 if flags.Acts.useCache:
366 pixelClustersName += "_Cached"
367 stripClustersName += "_Cached"
368
369
370 primaryPixelSpacePointsName = 'ITkPixelSpacePoints'
371 primaryStripSpacePointsName = 'ITkStripSpacePoints'
372 primaryStripOverlapSpacePointsName = 'ITkStripOverlapSpacePoints'
373
374
375 if kwargs['runCacheCreation']:
376 kwargs.setdefault('SpacePointCacheCreatorAlg.name', f'{flags.Tracking.ActiveConfig.extension}SpacePointCacheCreatorAlg')
377
378
379 if kwargs['runReconstruction']:
380 if kwargs['processPixels']:
381 kwargs.setdefault('PixelSpacePointFormationAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointFormationAlg')
382 kwargs.setdefault('PixelSpacePointFormationAlg.useCache', flags.Acts.useCache)
383 kwargs.setdefault('PixelSpacePointFormationAlg.SPCache', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointCache')
384 kwargs.setdefault('PixelSpacePointFormationAlg.PixelClusters', pixelClustersName)
385 kwargs.setdefault('PixelSpacePointFormationAlg.PixelSpacePoints', pixelSpacePointsName)
386
387 if kwargs['processStrips']:
388 kwargs.setdefault('StripSpacePointFormationAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointFormationAlg')
389 kwargs.setdefault('StripSpacePointFormationAlg.useCache', flags.Acts.useCache)
390 kwargs.setdefault('StripSpacePointFormationAlg.SPCache', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointCache')
391 kwargs.setdefault('StripSpacePointFormationAlg.StripClusters', stripClustersName)
392 kwargs.setdefault('StripSpacePointFormationAlg.StripSpacePoints', stripSpacePointsName)
393
394
395 kwargs.setdefault('StripSpacePointFormationAlg.ProcessOverlapForStrip', kwargs['processOverlapSpacePoints'])
396 kwargs.setdefault('StripSpacePointFormationAlg.OSPCache', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointCache')
397 if kwargs['processOverlapSpacePoints']:
398 kwargs.setdefault('StripSpacePointFormationAlg.StripOverlapSpacePoints', stripOverlapSpacePointsName)
399 else:
400
401 kwargs.setdefault('StripSpacePointFormationAlg.StripOverlapSpacePoints', '')
402
403
404 if kwargs['runPreparation']:
405 if kwargs['processPixels']:
406 kwargs.setdefault('PixelSpacePointPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointPreparationAlg')
407 kwargs.setdefault('PixelSpacePointPreparationAlg.useCache', flags.Acts.useCache)
408 kwargs.setdefault('PixelSpacePointPreparationAlg.OutputCollection', f'{pixelSpacePointsName}_Cached' if kwargs['runReconstruction'] else pixelSpacePointsName)
409
410 if not flags.Acts.useCache:
411
412 kwargs.setdefault('PixelSpacePointPreparationAlg.InputCollection', pixelSpacePointsName if kwargs['runReconstruction'] else primaryPixelSpacePointsName)
413 kwargs.setdefault('PixelSpacePointPreparationAlg.InputIDC', '')
414 else:
415 kwargs.setdefault('PixelSpacePointPreparationAlg.InputCollection', '')
416 kwargs.setdefault('PixelSpacePointPreparationAlg.InputIDC', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointCache')
417
418 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
419 kwargs.setdefault('PixelSpacePointPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
420
421
422 if kwargs['processStrips']:
423 kwargs.setdefault('StripSpacePointPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointPreparationAlg')
424 kwargs.setdefault('StripSpacePointPreparationAlg.useCache', flags.Acts.useCache)
425 kwargs.setdefault('StripSpacePointPreparationAlg.OutputCollection', f'{stripSpacePointsName}_Cached' if kwargs['runReconstruction'] else stripSpacePointsName)
426
427 if not flags.Acts.useCache:
428
429 kwargs.setdefault('StripSpacePointPreparationAlg.InputCollection', stripSpacePointsName if kwargs['runReconstruction'] else primaryStripSpacePointsName)
430 kwargs.setdefault('StripSpacePointPreparationAlg.InputIDC', '')
431 else:
432 kwargs.setdefault('StripSpacePointPreparationAlg.InputCollection', '')
433 kwargs.setdefault('StripSpacePointPreparationAlg.InputIDC', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointCache')
434
435 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
436 kwargs.setdefault('StripSpacePointPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
437
438 if kwargs['processOverlapSpacePoints']:
439 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointPreparationAlg')
440 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.useCache', flags.Acts.useCache)
441 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.OutputCollection', f'{stripOverlapSpacePointsName}_Cached' if kwargs['runReconstruction'] else stripOverlapSpacePointsName)
442
443 if not flags.Acts.useCache:
444
445 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputCollection', stripOverlapSpacePointsName if kwargs['runReconstruction'] else primaryStripOverlapSpacePointsName)
446 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputIDC', '')
447 else:
448 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputCollection', '')
449 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputIDC', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointCache')
450
451 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
452 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
453
454
455 if flags.Acts.SpacePoints.doAnalysis:
456
457
458 if kwargs['processPixels']:
459 kwargs.setdefault('PixelSpacePointAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointAnalysisAlg')
460 kwargs.setdefault('PixelSpacePointAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
461 kwargs.setdefault('PixelSpacePointAnalysisAlg.SpacePointContainerKey', kwargs['PixelSpacePointPreparationAlg.OutputCollection'] if kwargs['runPreparation'] else kwargs['PixelSpacePointFormationAlg.PixelSpacePoints'])
462
463 if kwargs['processStrips']:
464 kwargs.setdefault('StripSpacePointAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointAnalysisAlg')
465 kwargs.setdefault('StripSpacePointAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
466 kwargs.setdefault('StripSpacePointAnalysisAlg.SpacePointContainerKey', kwargs['StripSpacePointPreparationAlg.OutputCollection'] if kwargs['runPreparation'] else kwargs['StripSpacePointFormationAlg.StripSpacePoints'])
467
468 if kwargs['processOverlapSpacePoints']:
469 kwargs.setdefault('StripOverlapSpacePointAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointAnalysisAlg')
470 kwargs.setdefault('StripOverlapSpacePointAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
471 kwargs.setdefault('StripOverlapSpacePointAnalysisAlg.SpacePointContainerKey', kwargs['StripOverlapSpacePointPreparationAlg.OutputCollection'] if kwargs['runPreparation'] else kwargs['StripSpacePointFormationAlg.StripOverlapSpacePoints'])
472
473 acc.merge(ActsMainSpacePointFormationCfg(flags, RoIs=roisName, **kwargs))
474
475
476
477 if flags.Acts.EDM.PersistifySpacePoints and kwargs['runReconstruction']:
478 toAOD = []
479 pixel_spacepoint_shortlist = ['-measurements']
480 strip_spacepoint_shortlist = ['topHalfStripLength',
481 'bottomHalfStripLength',
482 'topStripDirection',
483 'bottomStripDirection',
484 'stripCenterDistance',
485 'topStripCenter',
486 'measurementLink']
487
488 pixel_spacepoint_variables = '.'.join(pixel_spacepoint_shortlist)
489 strip_spacepoint_variables = '.'.join(strip_spacepoint_shortlist)
490
491 if kwargs['processPixels']:
492 pixelSpacePointCollection = kwargs['PixelSpacePointFormationAlg.PixelSpacePoints']
493 toAOD += [f'xAOD::SpacePointContainer#{pixelSpacePointCollection}',
494 f"xAOD::SpacePointAuxContainer#{pixelSpacePointCollection}Aux.{pixel_spacepoint_variables}"]
495
496 if kwargs['processStrips']:
497 stripSpacePointCollection = kwargs['StripSpacePointFormationAlg.StripSpacePoints']
498 toAOD += [f'xAOD::SpacePointContainer#{stripSpacePointCollection}',
499 f"xAOD::SpacePointAuxContainer#{stripSpacePointCollection}Aux.{strip_spacepoint_variables}"]
500
501 if kwargs['processOverlapSpacePoints']:
502 stripSpacePointCollection = kwargs['StripSpacePointFormationAlg.StripOverlapSpacePoints']
503 toAOD += [f'xAOD::SpacePointContainer#{stripSpacePointCollection}',
504 f"xAOD::SpacePointAuxContainer#{stripSpacePointCollection}Aux.{strip_spacepoint_variables}"]
505
506 from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
507 acc.merge(addToAOD(flags, toAOD))
508
509 return acc
510