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