530def HIJetRecCfg(flags):
531 """Configures Heavy Ion Jet reconstruction."""
532 acc = ComponentAccumulator()
533
534 if not flags.HeavyIon.isDerivation:
535
536 acc.merge(HIClusterMakerCfg(flags))
537 else:
538
539 acc.merge(HIClusterCopierCfg(flags))
540
541
542
543 eventshapeKey = flags.HeavyIon.HIJetPrefix+"HIEventShapeWeighted"
544 acc.merge(HIEventShapeMakerCfg(flags,
545 name="HIEventShapeMaker_Weighted",
546 doWeighted=True,
547 InputTowerKey=flags.HeavyIon.Jet.Internal.ClusterKey,
548 OutputContainerKey=eventshapeKey))
549
550
551
552 jetDef2 = HICaloJetDef(flags, jetradius=2, prefix=flags.HeavyIon.HIJetPrefix, suffix="_Unsubtracted")
553
554
555 jetDef = []
556 jetRlist = flags.HeavyIon.Jet.RValues
557 for jetR in jetRlist:
558 jetDef.append(HICaloJetDef(flags, jetradius=jetR, prefix=flags.HeavyIon.HIJetPrefix, suffix="_Unsubtracted"))
559 __log.info("HI Jet Collection for Reco: "+jetDef[-1].fullname())
560
561
562 acc.merge(HIPseudoJetAlgCfg(flags))
563
564
565 pseudoTrkJetCont = "HIJetTracks"
566 pseudoGhostTrks = "PseudoJetGhostTracks"
567
568 acc.merge(HITrackSelAlgCfg(flags, OutputContainer=pseudoTrkJetCont))
569 acc.merge(HIPseudoTrackJetAlgCfg(
570 flags, name="GhostTrackPseudoJets", InputContainer=pseudoTrkJetCont, OutputContainer=pseudoGhostTrks, Label="GhostTrack"))
571
572
573
574 pjContNames = ["PseudoJet"+flags.HeavyIon.Jet.Internal.ClusterKey,pseudoGhostTrks]
575
576 mergeAlg = CompFactory.PseudoJetMerger(
577 "PJmerge_HIGhostTrack",
578 InputPJContainers = pjContNames,
579 OutputContainer = "PseudoJet"+flags.HeavyIon.Jet.Internal.ClusterKey+"_GhostTracks"
580 )
581 acc.addEventAlgo(mergeAlg)
582
583
584 acc.merge(HIJetAlgCfg(flags, jetDef=jetDef2))
585 for jd in jetDef:
586 acc.merge(HIJetAlgCfg(flags, jetDef=jd))
587
588
589 jetDef_seed0 = HIJetDefCloner(flags, jetDef_in=jetDef2,
590 prefix=flags.HeavyIon.HIJetPrefix,
591 suffix="_seed0",
592 modifiers=["HIJetAssoc", "HIJetMaxOverMean", "HIJetDiscrim", "Filter:5000"])
593 acc.merge(HIJetCopyAlgCfg(flags, jetDef2, jetDef_seed0))
594
595
596 jm_dict0, acc_iter0 = HIEventShapeJetIterationCfg(flags,
597 suffix="iter0",
598 InputEventShapeKey=eventshapeKey,
599 CaloJetSeedContainerKey=jetDef_seed0.fullname())
600 iter0 = acc.popToolsAndMerge(acc_iter0)
601 acc.addEventAlgo(CompFactory.JetAlgorithm("jetalgHI_iter0", Tools=[iter0]))
602
603
604 updateStdJetModifier(flags, "subtr0", **jm_dict0)
605
606
607 calib_seq = "EtaJES"
608 if not flags.Input.isMC:
609 calib_seq += "_Insitu"
610
611
612 jetDef_seed1 = HIJetDefCloner(flags, jetDef_in=jetDef2,
613 prefix=flags.HeavyIon.HIJetPrefix,
614 suffix="_seed1",
615 modifiers=["HIJetAssoc", "subtr0", "HIJetCalib:{}___{}___{}".format(2, calib_seq, not flags.Input.isMC), "Filter:{}".format(flags.HeavyIon.Jet.SeedPtMin)])
616 acc.merge(HIJetCopyAlgCfg(flags, jetDef2, jetDef_seed1))
617
618
619 if flags.HeavyIon.Jet.doTrackJetSeed:
620 pseudoTrks = "PseudoTracks"
621
622 acc.merge(HIPseudoTrackJetAlgCfg(
623 flags, InputContainer=pseudoTrkJetCont, OutputContainer=pseudoTrks))
624
625 jetDef_trk = HITrackJetDef(flags,
626 jetradius=4,
627 modifiers=["HIJetAssoc", "Filter:{}".format(flags.HeavyIon.Jet.TrackJetPtMin),"Sort"])
628 trkJetSeedCont = jetDef_trk.fullname()
629
630 trkJetClust = acc.popToolsAndMerge(HIJetClustererCfg(flags,
631 jetDef=jetDef_trk,
632 InputPseudoJets=pseudoTrks))
633 acc.merge(HIJetAlgCfg(flags, jetDef_trk, Provider=trkJetClust))
634 else:
635 trkJetSeedCont = ""
636
637
638 jm_dict1, acc_iter1 = HIEventShapeJetIterationCfg(flags,
639 suffix="iter1",
640 InputEventShapeKey=eventshapeKey,
641 CaloJetSeedContainerKey=jetDef_seed1.fullname(),
642 TrackJetSeedContainerKey=trkJetSeedCont)
643 iter1 = acc.popToolsAndMerge(acc_iter1)
644 acc.addEventAlgo(CompFactory.JetAlgorithm("jetalgHI_iter1", Tools=[iter1]))
645
646
647 jm_dict1_eg, acc_iter1_eg = HIEventShapeJetIterationCfg(flags,
648 suffix="iter_egamma",
649 useClusters=False,
650 InputEventShapeKey=flags.HeavyIon.Global.EventShape,
651 OutputEventShapeKey=flags.HeavyIon.Egamma.EventShape,
652 CaloJetSeedContainerKey=jetDef_seed1.fullname())
653 iter1_eg = acc.popToolsAndMerge(acc_iter1_eg)
654 acc.addEventAlgo(CompFactory.JetAlgorithm("jetalgHI_iter1_egamma", Tools=[iter1_eg]))
655
656
657 cluster_key_eGamma_deep = flags.HeavyIon.Jet.Internal.ClusterKey+"_eGamma_deep"
658 if not flags.HeavyIon.isDerivation:
659 subtrToCelltool = acc.popToolsAndMerge(
660 HISubtractionToCellsCfg(flags,
661 name="HIClusterSubtraction_egamma",
662 EventShapeKey=jm_dict1_eg["EventShapeKey"],
663 OutClusterKey=cluster_key_eGamma_deep,
664 Modulator=jm_dict1["Modulator"],
665 EventShapeMapTool=jm_dict1["EventShapeMapTool"],
666 SetMoments=True,
667 ApplyOriginCorrection=False)
668 )
669 acc.addEventAlgo(CompFactory.JetAlgorithm("jetalgHI_subtrToCellTool", Tools=[subtrToCelltool]))
670
671
672 updateStdJetModifier(flags, "subtr1", **jm_dict1)
673
674
675 clusterKey = cluster_key_eGamma_deep
676 if flags.HeavyIon.isDerivation:
677 clusterKey = flags.HeavyIon.Jet.Internal.ClusterKey
678 subtrToClusterTool = acc.popToolsAndMerge(
679 HISubtractionToClustersCfg(flags,
680 name="HIClusterSubtraction_final",
681 EventShapeKey=jm_dict1["EventShapeKey"],
682 ClusterKey=clusterKey,
683 OutClusterKey=flags.HeavyIon.Jet.ClusterKey,
684 Modulator=jm_dict1["Modulator"],
685 EventShapeMapTool=jm_dict1["EventShapeMapTool"],
686 ApplyOriginCorrection=False)
687 )
688 acc.addEventAlgo(CompFactory.JetAlgorithm(
689 "jetalgHI_subtrToClusterTool", Tools=[subtrToClusterTool]))
690
691
692 updateStdJetModifier(flags, "consmod",
693 ClusterKey=flags.HeavyIon.Jet.ClusterKey,
694 Subtractor=jm_dict1["Subtractor"])
695
696
697 if flags.HeavyIon.Jet.WriteHIClusters:
698 output_hicluster = ["xAOD::CaloClusterContainer#"+flags.HeavyIon.Jet.ClusterKey,
699 "xAOD::CaloClusterAuxContainer#"+flags.HeavyIon.Jet.ClusterKey+"Aux."]
700 acc.merge(addToESD(flags, output_hicluster))
701 acc.merge(addToAOD(flags, output_hicluster))
702
703
704 extramods = ["Sort","Width","CaloEnergies","LArHVCorr","CaloQuality","TrackMoments","JVF","JVT"]
705 for jd in jetDef:
706 print(
"Printing flags: isDerivation: ", flags.HeavyIon.isDerivation,
"doHIBTagging: ", flags.HeavyIon.doHIBTagging,
"isMC: ", flags.Input.isMC,
"jet radius: ", jd.radius)
707 if flags.HeavyIon.isDerivation and flags.HeavyIon.doHIBTagging and jd.radius==0.4:
708 extramods += flags.HeavyIon.FTagModifiers
709 if flags.Input.isMC:
710 extramods += flags.HeavyIon.FTagTruthModifiers
711 jetDef_final = HIJetDefCloner(flags,
712 jetDef_in=jd,
713 prefix=flags.HeavyIon.HIJetPrefix,
714 suffix="",
715 modifiers=[
"subtr1",
"consmod",
"HIJetCalib:{}___{}___{}".format(str(float(jd.radius)*10).
replace(
'.0',
''),calib_seq,
not flags.Input.isMC),
"Filter:{}".format(flags.HeavyIon.Jet.RecoOutputPtMin)]+extramods)
716 if flags.HeavyIon.isDerivation and flags.HeavyIon.doHIBTagging and flags.Input.isMC and jd.radius==0.4:
717 jetDef_final.ghostdefs += ["Truth","BHadronsInitial", "BHadronsFinal", "BQuarksFinal","CHadronsInitial", "CHadronsFinal", "CQuarksFinal","TausFinal", "TQuarksFinal","Partons"]
718 jetDef_final = solveDependencies(jetDef_final, flags)
719 pjaList = getPseudoJetAlgs(jetDef_final)
720 pjaList = pjaList[1:]
721 for pjalg in pjaList:
722 if pjalg.Label=='GhostTrack':
723 continue
724 pjalg.name="GhostTrackPseudoJets"
725 pjalg.InputContainer=pseudoTrkJetCont
726 pjalg.OutputContainer=pseudoGhostTrks
727 if pjalg.Label=='merged':
728 inpjcnt = pjalg.InputPJContainers
729 inpjcnt.remove('PseudoJetGhostJetSelectedTracks')
730 inpjcnt.append(pseudoGhostTrks)
731 pjalg.InputPJContainers = inpjcnt
732 acc.addEventAlgo(pjalg)
733 finalpjs = str(pjalg.OutputContainer)
734
735 jetDef_final._internalAtt['finalPJContainer'] = finalpjs
736 jetRecAlg = getHIJetRecAlg(jetDef_final, jetDef_final.fullname())
737 acc.addEventAlgo(jetRecAlg)
738 else:
739 acc.merge(HIJetCopyAlgCfg(flags, jd, jetDef_final))
740
741 output = ["xAOD::JetContainer#"+jetDef_final.fullname(),
742 "xAOD::JetAuxContainer#"+jetDef_final.fullname()+"Aux.-PseudoJet"]
743 acc.merge(addToESD(flags, output))
744 acc.merge(addToAOD(flags, output))
745
746
747 if flags.HeavyIon.Jet.doTrackJetSeed:
748 output = ["xAOD::JetContainer#"+jetDef_trk.fullname(),
749 "xAOD::JetAuxContainer#"+jetDef_trk.fullname()+"Aux.-PseudoJet"]
750 acc.merge(addToESD(flags, output))
751 acc.merge(addToAOD(flags, output))
752
753 return acc
754
void print(char *figname, TCanvas *c1)
std::string replace(std::string s, const std::string &s2, const std::string &s3)